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

回到顶部