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;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
以上是 C语言代码实现扫雷小游戏 的全部内容, 来源链接: utcz.com/p/244792.html