C语言代码实现扫雷小游戏

所属分类: 软件编程 / C 语言 阅读数: 55
收藏 0 赞 0 分享

本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下

主页面:

游戏页面:

虽然页面比较low,但我已经尽力了

具体代码实现:

#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int n;//记录已经探索的区域数
int x,y;//光标的横纵坐标
int T;//判断游戏是否失败,T=1为失败
int b[9][9];//区分每个位置的状态,0为未探索,1为已探索,2为插旗状态
int a[9][9];//随机生成的扫雷地图,-1为雷
void setColor(unsigned short ForeColor=7,unsigned short BackGroundColor=0) {//控制局部区域的字体颜色和背景颜色
 HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
 SetConsoleTextAttribute(handle,ForeColor+BackGroundColor*0x10);
}
void gotoxy(int x, int y) {
 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
 COORD pos;
 pos.X = x;
 pos.Y = y;
 SetConsoleCursorPosition(handle, pos);
}
void add(int p,int q) {//雷的一周数值+1
 for(int i=-1; i<2; i++)
 for(int j=-1; j<2; j++)
  if(p+i>=0&&p+i<9&&q+j>=0&&q+j<9&&a[p+i][q+j]>=0)
  a[p+i][q+j]++;
}
void start() {//初始化函数
 srand(time(0));
 for(int i=0; i<9; i++)
 for(int j=0; j<9; j++) {
  a[i][j]=0;
  b[i][j]=0;
 }
 x=0;
 y=0;
 T=0;
 n=10;
 while(n) {//由p和q随机数产生10个坐标,生成10个雷
 int p,q;
 p=rand()%9;
 q=rand()%9;
 if(!a[p][q]) {
  n--;
  a[p][q]=-1;
  add(p,q);
 }
 }
}
void show() {//显示图
 gotoxy(0,0);
 for(int i=0; i<9; i++) {
 if(i==0)
  printf("┌───┬───┬───┬───┬───┬───┬───┬───┬───┐\n");
 else
  printf("├───┼───┼───┼───┼───┼───┼───┼───┼───┤\n");
 printf("│");
 for(int j=0; j<9; j++) {
  printf(" ");
  if(!b[i][j]) {
  setColor(0,7);
  if(i==x&&j==y)
   setColor(0,12);
  printf(" ");
  } else {
  if(i==x&&j==y)
   setColor(7,4);
  if(b[i][j]==-1)
   printf("│>");
  else if(a[i][j]>=0) {

   if(a[i][j])
   printf("%2d",a[i][j]);
   else
   printf(" ");
  } else
   printf("**");
  }
  setColor(7,0);
  printf("│");
 }
 printf("\n");
 if(i==8)
  printf("└───┴───┴───┴───┴───┴───┴───┴───┴───┘\n");
 }
 printf("1.探索 2.插旗\n");
}
void ss(int x1,int y1) {//探索函数
 if(b[x1][y1])
 return ;
 b[x1][y1]=1;
 n++;
 if(a[x1][y1]>0)
 return;
 if(a[x1][y1]<0) {
 T=1;
 return;
 }
 for(int i=-1; i<2; i++)
 for(int j=-1; j<2; j++)
  if(x1+i>=0&&x1+i<9&&y1+j>=0&&y1+j<9)
  ss(x1+i,y1+j);
}
void doing() {//游戏进行流程函数
 start();
 while(n<71) {
 show();
 int t;
 t=_getch();
 switch(t) {
  case 72: {
  if(x)
   x--;
  break;
  }
  case 75: {
  if(y)
   y--;
  break;
  }
  case 77: {
  if(y<8)
   y++;
  break;
  }
  case 80: {
  if(x<8)
   x++;
  break;
  }
  case '1': {
  if(!b[x][y])
   ss(x,y);
  break;
  }
  case '2': {
  if(!b[x][y])
   b[x][y]=-1;
  else if(b[x][y]==-1)
   b[x][y]=0;
  break;
  }
 }
 if(T) {
  for(int i=0; i<9; i++)
  for(int j=0; j<9; j++)
   b[i][j]=1;
  break;
 }
 }
 show();
 if(T)
 printf("游戏失败!\n");
 if(!T)
 printf("挑战成功!\n");
 printf("请按'0'键返回主页!\n");
 int o=1;
 while(o!='0'){
 o=_getch();
 } 
}
int main() {
 int m=1;
 while(m) {
 system("cls");
 printf("┌───────────┐\n");
 printf("│  扫雷  │\n");
 printf("├───────────┤\n");
 printf("│ 1.开始游戏│\n");
 printf("├───────────┤\n");
 printf("│ 2.退出游戏│\n");
 printf("└───────────┘\n");
 int t;
 t=_getch();
 if(t=='1')
  doing();
 if(t=='2')
  break;
 }
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

C语言数组入门之数组的声明与二维数组的模拟

这篇文章主要介绍了C语言数组入门之数组的声明与二维数组的模拟,数组学习的同时也要相应理解C语言指针的作用,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中变量与其内存地址对应的入门知识简单讲解

这篇文章主要介绍了C语言中变量与其内存地址对应的入门知识简单讲解,同时这也是掌握指针部分知识的基础,需要的朋友可以参考下
收藏 0 赞 0 分享

讲解C语言编程中指针赋值的入门实例

这篇文章主要介绍了讲解C语言编程中指针赋值的入门实例,通过const int i与int *const pi这样两个例子来分析指针的赋值和地址指向,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中的结构体的入门学习教程

这篇文章主要介绍了C语言中的结构体的入门学习教程,以struct语句定义的结构体是C语言编程中的重要基础,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言编程入门之程序头文件的简要解析

这篇文章主要介绍了C语言编程入门之程序头文件的简要解析,包括头文件重复包含问题等方面的说明,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言编程中的联合体union入门学习教程

这篇文章主要介绍了C语言编程中的联合体union入门学习教程,也是C语言入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中数组作为函数的参数以及返回值的使用简单入门

这篇文章主要介绍了C语言中数组作为函数的参数以及返回值的使用简单入门,这里以一维数组作为基本条件进行例子讲解,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL的内存表的基础学习教程

这篇文章主要介绍了MySQL的内存表的基础学习教程,包括内存表的创建以及使用限制等等,需要的朋友可以参考下
收藏 0 赞 0 分享

C++中头文件的概念与基本编写方法

这篇文章主要介绍了C++中头文件的概念与基本编写方法,是C++入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

jQuery移动页面开发中主题按钮的设计示例

这篇文章主要介绍了jQuery移动页面开发中主题按钮的设计示例,jQuery是当今最具人气的JavaScript开发类库,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多