#include<stdio.h>
#define Row 9
#define Col 9
#define Rows Row+2
#define Cols Col+2
#define easy_count 10
#include<time.h>
#include<stdlib.h>
void menu()
{
printf("****************\n");
printf("****************\n");
printf("*****1 play*****\n");
printf("*****0 exit*****\n");
printf("****************\n");
printf("****************\n");
}
void initboard(char mine[Rows][Cols],int rows,int cols,char set)
{
int i=0;
int j=0;
for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
{
mine[i][j]=set;
}
}
}
void Displayboard(char mine[Rows][Cols],int row,int col)
{
int i=0;
int j=0;
printf("---------------扫雷游戏---------------\n");
for(i=0;i<=col;i++)
{
printf("%d ",i);
}
printf("\n");
for(i=1;i<=row;i++)
{
printf("%d ",i);
for(j=1;j<=col;j++)
{
printf("%c ",mine[i][j]);
}
printf("\n");
}
printf("---------------扫雷游戏---------------\n");
}
void setmine(char board[Rows][Cols],int row,int col)
{
int count=easy_count;
while(count)
{
int x=rand()%row+1;
int y=rand()%col+1;
if(board[x][y]=='0')
{
board[x][y]='1';
count--;
}
}
}
int get_mine(char board[Rows][Cols],int x,int y)
{
return (board[x-1][y-1]+board[x-1][y]+board[x-1][y+1]+
board[x][y-1]+board[x][y+1]+
board[x+1][y-1]+board[x+1][y]+board[x+1][y+1]-8*'0');
}
void Findmine(char mine[Rows][Cols],char show[Rows][Cols],int row,int col)
{
int x=0;
int y=0;
int n=0;
while(n<row*col-easy_count)
{
printf("请输入坐标->\n");
scanf("%d%d",&x,&y);
if(show[x][y]!='*')
{
printf("该位置已经被占用了\n");}
else
{
if(x>=1&&x<=9&&y>=1&&y<=9)
{
if(mine[x][y]=='1')
{
printf("游戏结束\n");
Displayboard(mine,Row,Col);
break;
}
else
{
n++;
int count=get_mine(mine,x,y);
show[x][y]=count+'0';//转换成数字字符
Displayboard(show,Row,Col);
}
}
else
{
printf("输入非法\n");
}
if(Row*Col-easy_count==n)
{
printf("恭喜你取得了胜利\n");
}
}
}
}
void game()
{
char mine[Rows][Cols]={0};//存放布置好的雷
char show[Rows][Cols]={0};//存放查出雷的信息
initboard(mine,Rows,Cols,'0');
initboard(show,Rows,Cols,'*');
//Displayboard(mine,Row,Col);
setmine(mine,Row,Col);
Displayboard(show,Row,Col);
//Displayboard(mine,Row,Col);
Findmine(mine,show,Row,Col);
}
int main()
{
srand((unsigned int)time(NULL));
int input=0;
do{
menu();
printf("请选择->\n");
scanf("%d",&input);
switch (input) {
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误请重新输入:\n");
break;
}
}while(input);
return 0;
}
//只有基本操作
此游戏主要分为:
建立菜单
初始化棋盘:要分成两个,一个是已经生成全是'0'的棋盘用来自己看,另一个用全是'*'来进行游戏
展示棋盘
建立随机雷的棋盘:已经在棋盘中随机生成了雷为
获取如果点了周围会有几个雷:因为赋值了雷为字符1所以直接相加减去8*'0'
进行游戏的内容:下棋信息并进行打印
#include<stdio.h>
#define Row 9
#define Col 9
#define Rows Row+2
#define Cols Col+2
#define easy_count 2
#include<time.h>
#include<stdlib.h>
void menu()
{
printf("****************\n");
printf("****************\n");
printf("*****1 play*****\n");
printf("*****0 exit*****\n");
printf("****************\n");
printf("****************\n");
}
void initboard(char mine[Rows][Cols],int rows,int cols,char set)
{
int i=0;
int j=0;
for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
{
mine[i][j]=set;
}
}
}
void Displayboard(char mine[Rows][Cols],int row,int col)
{
int i=0;
int j=0;
printf("---------------扫雷游戏---------------\n");
for(i=0;i<=col;i++)
{
printf("%d ",i);
}
printf("\n");
for(i=1;i<=row;i++)
{
printf("%d ",i);
for(j=1;j<=col;j++)
{
printf("%c ",mine[i][j]);
}
printf("\n");
}
printf("---------------扫雷游戏---------------\n");
}
void setmine(char board[Rows][Cols],int row,int col)
{
int count=easy_count;
while(count)
{
int x=rand()%row+1;
int y=rand()%col+1;
if(board[x][y]=='0')
{
board[x][y]='1';
count--;
}
}
}
int get_mine(char board[Rows][Cols],int x,int y)
{
return (board[x-1][y-1]+board[x-1][y]+board[x-1][y+1]+
board[x][y-1]+board[x][y+1]+
board[x+1][y-1]+board[x+1][y]+board[x+1][y+1]-8*'0');
}
void Findmine(char mine[Rows][Cols],char show[Rows][Cols],int row,int col)
{
int x=0;
int y=0;
int n=0;
int input=0;
do{
printf("请输入你的选择\n");
printf("1标记 0点开\n");
scanf("%d",&input);
switch (input)
{
case 1:
while(n<easy_count)
{
printf("请输入你标记的坐标->\n");
scanf("%d%d",&x,&y);
if(mine[x][y]=='1')
{
show[x][y]='#';
n++;
Displayboard(show,Row,Col);
if(n==easy_count)
{
printf("你赢了\n");
Displayboard(mine,Row,Col);
}
}
}
break;
case 0:
while(n<row*col-easy_count)
{
printf("请输入坐标->\n");
scanf("%d%d",&x,&y);
if(show[x][y]!='*')
{
printf("该位置已经被占用了\n");}
else
{
if(x>=1&&x<=9&&y>=1&&y<=9)
{
if(mine[x][y]=='1')
{
printf("游戏结束\n");
Displayboard(mine,Row,Col);
break;
}
else
{
n++;
int count=get_mine(mine,x,y);
show[x][y]=count+'0';//转换成数字字符
Displayboard(show,Row,Col);
}
}
else
{
printf("输入非法\n");
}
if(Row*Col-easy_count==n)
{
printf("恭喜你取得了胜利\n");
}
}
}
break;
default:
printf("输入有问题,请重新输入\n");
break;
}
}while(input);
}
void game()
{
char mine[Rows][Cols]={0};//存放布置好的雷
char show[Rows][Cols]={0};//存放查出雷的信息
initboard(mine,Rows,Cols,'0');
initboard(show,Rows,Cols,'*');
//Displayboard(mine,Row,Col);
setmine(mine,Row,Col);
Displayboard(show,Row,Col);
Displayboard(mine,Row,Col);
Findmine(mine,show,Row,Col);
}
int main()
{
srand((unsigned int)time(NULL));
int input=0;
do{
menu();
printf("请选择->\n");
scanf("%d",&input);
switch (input) {
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误请重新输入:\n");
break;
}
}while(input);
return 0;
}
可以进行标记