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

 更新时间:2020年02月07日 09:22:05   作者:格戮  
这篇文章主要为大家详细介绍了C语言代码实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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;
}

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

相关文章

  • 深入单链表的快速排序详解

    深入单链表的快速排序详解

    本篇文章是对单链表的快速排序进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言数据结构系列篇二叉树的概念及满二叉树与完全二叉树

    C语言数据结构系列篇二叉树的概念及满二叉树与完全二叉树

    在上一章中我们正式开启了对数据结构中树的讲解,介绍了树的基础。本章我们将学习二叉树的概念,介绍满二叉树和完全二叉树的定义,并对二叉树的基本性质进行一个简单的介绍。本章附带课后练习
    2022-02-02
  • C语言中互斥锁与自旋锁及原子操作使用浅析

    C语言中互斥锁与自旋锁及原子操作使用浅析

    今天不整GO语言,我们来分享一下以前写的C语言代码,来看看互斥锁、自旋锁和原子操作的demo,示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2023-01-01
  • C++利用MySQL API连接和操作数据库实例详解

    C++利用MySQL API连接和操作数据库实例详解

    这篇文章主要介绍了C++利用MySQL API连接和操作数据库实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • C++ pimpl机制详细讲解

    C++ pimpl机制详细讲解

    PIMPL 是 C++ 中的一个编程技巧,意思为指向实现的指针。具体操作是把类的实现细节放到一个单独的类中,并用一个指针进行访问
    2022-08-08
  • C语言数据结构之迷宫求解问题

    C语言数据结构之迷宫求解问题

    这篇文章主要为大家详细介绍了C语言数据结构之迷宫求解问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C++中声明、定义、初始化、赋值区别介绍

    C++中声明、定义、初始化、赋值区别介绍

    在 C++ 中,声明、定义、初始化、赋值是变量的四个基本操作,很多朋友不清楚他们之间有什么区别,今天通过本文给大家介绍下C++中声明、定义、初始化、赋值区别,感兴趣的朋友一起看看吧
    2023-05-05
  • c语言switch反汇编的实现

    c语言switch反汇编的实现

    本文主要介绍了c语言switch反汇编,在分支较多的时候,switch的效率比if高,在反汇编中我们即可看到效率高的原因,感兴趣的可以了解一下
    2021-06-06
  • 使用C++实现监控文件是否被修改

    使用C++实现监控文件是否被修改

    软件开发过程中经常会用到配置文件,某些应用场景要求在软件运行时动态修改配置文件,此时就需要监控配置文件是否被修改,下面我们就来看看如何使用C++实现这一功能吧
    2024-02-02
  • C语言学好递归看这一篇就够了

    C语言学好递归看这一篇就够了

    递归指的是在函数的定义中使用函数自身的方法,举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,循环下去
    2021-10-10

最新评论