定制网站制作报价,免费小程序开发制作,外国食品优秀设计网站,工程建设与设计期刊先开一个test.c文件用来游戏的逻辑测试#xff0c;在分别开一个game.c文件和game.h头文件用来实现游戏的逻辑 主要步骤#xff1a;
游戏规则#xff1a;
输入1#xff08;0#xff09;开始#xff08;结束#xff09;游戏#xff0c;输入一个坐标#xff0c;如果该坐…
先开一个test.c文件用来游戏的逻辑测试在分别开一个game.c文件和game.h头文件用来实现游戏的逻辑 主要步骤
游戏规则
输入10开始结束游戏输入一个坐标如果该坐标不是雷则会显示该坐标周围有几个雷
打印菜单
void menu()
{printf(**************************\n);printf(********* 1.play *********\n);printf(********* 0.exit *********\n);printf(**************************\n);
}
int main()
{int input 0;srand((unsigned int )time(NULL));do{menu();printf(请选择);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(游戏结束,退出游戏\n);break;default :printf(输入错误请重新输入\n);}} while (input);return 0;
}
打印棋盘 写两个数组一个是用来打印给玩家看的棋盘一个是用来放置炸弹的隐藏棋盘等到游戏结束我们才会打印这个棋盘。然后我们给数组初始化用*来初始化我们给玩家看的棋盘用字符‘0’初始化隐藏棋盘。 char mine[ROWS][COLS] { 0 };char show[ROWS][COLS] { 0 };//初始化棋盘InitBoard(show, ROWS, COLS, *);InitBoard(mine, ROWS, COLS, 0);//打印棋盘DisPalyBoard(show, ROW, COL);//DisPalyBoard(mine, ROW, COL);打印行列
因为我们是用坐标来选择排雷的所以我们需要在棋盘的周围打印出行列才可以让玩家更好的去选择。
首先在打印棋盘for循环上方加上一个打印0~9的for循环就可以打印出棋盘的行了然后用打印列的for循环套在打印棋盘的for循环上就可以打印出棋盘的列了。
void DisPalyBoard(char arr[ROWS][COLS], int row, int col)
{printf(------扫雷游戏------\n);int i 0;//打印行的for循环for (i 0; i col; i){printf(%d , i);}printf(\n);//打印列的for循环for ( i 1; i row; i) {printf(%d , i);//打印棋盘的for循环for (int j 1; j col; j){printf(%c , arr[i][j]);}printf(\n);}
}
放置炸弹
要想棋盘上随机分布十个炸弹炸弹我们用字符‘1’定义我们就需要生成随机数使数组的随机十个元素等于字符‘1’而生成随机数就需要调用到前面我写猜数字游戏时讲过的rand函数、srand函数、time函数了。
void SetMine(char arr[ROWS][COLS], int row, int col)
{int count EsayCount;while (count){int x rand() % row 1;int y rand() % col 1;if (arr[x][y] 0)//防止生成相同随机数时使多个炸弹放置在同一位置{arr[x][y] 1;count--;}}
}
排查炸弹
当我们输入一个坐标后如果时炸弹结束游戏如果不是炸弹则需要显示炸弹的数量。
判断是否是炸弹只需写一个if语句判断该坐标中数组所对应的元素是否等于‘1’就行了。
显示周围有几个雷我们就需要将所选坐标的周围的数加起来就可以了这些加起来的数的和替换所选坐标的元素就可以了。
int GetMineCount(char mine[ROWS][COLS],int x,int y)
{return (mine[x - 1][y] mine[x - 1][y - 1] mine[x][y - 1] mine[x 1][y - 1] mine[x 1][y 1] mine[x - 1][y 1] mine[x 1][y] mine[x][y 1] - 8 * 0);
} void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x 0, y 0;int win 0;while (win row*col - EsayCount){printf(请输入要排查的坐标:);scanf(%d %d, x, y);if (x 1 x row y 1 y col){if (mine[x][y] 1){printf(很遗憾你被炸死了\n);DisPalyBoard(mine, ROW, COL);break;}else{//该坐标不是雷就得统计该坐标的周围有几个雷int count GetMineCount(mine, x, y);show[x][y] count 0;DisPalyBoard(show, ROW, COL);win;}}else{printf(坐标非法,请重新输入\n);}}if (win row * col - EsayCount){printf(恭喜你排雷成功\n);DisPalyBoard(mine, ROW, COL);}
}游戏可改性
因为在写这个程序时需要输入很多的数字如果我们想修改这些数时就要一个一个改这样非常的麻烦。为了避免这些麻烦我们只需要在头文件定义某字符等于某个数字就可以了这样我们想改游戏参数的时候在头文件game.h改就行了。
#define ROW 9
#define COL 9#define ROWS ROW2
#define COLS COL2
#define EsayCount 10
比如当我们想改行和列改为16炸弹数量改为40的时候我们只需要在头文件将ROW 与 COL定义为16就可以了。
#define ROW 16
#define COL 16#define ROWS ROW2
#define COLS COL2
#define EsayCount 40 完整代码
game.h头文件
#pragma once#includestdio.h
#includestdlib.h
#includetime.h#define ROW 9
#define COL 9#define ROWS ROW2
#define COLS COL2
#define EsayCount 10
//初始化棋盘
void InitBoard(char arr[ROWS][COLS], int rows, int cols, char test);
//打印棋盘
void DisPalyBoard(char arr[ROW][COL], int row, int col);
//布置雷的信息
void SetMine(char arr[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
test.c
#includegame.hvoid menu()
{printf(**************************\n);printf(********* 1.play *********\n);printf(********* 0.exit *********\n);printf(**************************\n);
}void game()
{//存放布置好雷的信息char mine[ROWS][COLS] { 0 };//存放排查出雷的信息char show[ROWS][COLS] { 0 };//初始化棋盘InitBoard(show, ROWS, COLS, *);InitBoard(mine, ROWS, COLS, 0);//打印棋盘DisPalyBoard(show, ROW, COL);//DisPalyBoard(mine, ROW, COL);//随机布置10个雷SetMine(mine, ROW, COL);//排查雷FindMine(mine,show, ROW, COL);
}int main()
{int input 0;srand((unsigned int )time(NULL));do{menu();printf(请选择);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(游戏结束,退出游戏\n);break;default :printf(输入错误请重新输入\n);}} while (input);return 0;
}
game.c
#includegame.h
void InitBoard(char arr[ROWS][COLS], int rows, int cols, char set)
{int i 0;for (i 0; i rows; i){for (int j 0; j cols; j){arr[i][j] set;}}
}
void DisPalyBoard(char arr[ROWS][COLS], int row, int col)
{printf(------扫雷游戏------\n);int i 0;for (i 0; i col; i){printf(%d , i);}printf(\n);for ( i 1; i row; i){printf(%d , i);for (int j 1; j col; j){printf(%c , arr[i][j]);}printf(\n);}
}void SetMine(char arr[ROWS][COLS], int row, int col)
{int count EsayCount;while (count){int x rand() % row 1;int y rand() % col 1;if (arr[x][y] 0){arr[x][y] 1;count--;}}
}int GetMineCount(char mine[ROWS][COLS],int x,int y)
{return (mine[x - 1][y] mine[x - 1][y - 1] mine[x][y - 1] mine[x 1][y - 1] mine[x 1][y 1] mine[x - 1][y 1] mine[x 1][y] mine[x][y 1] - 8 * 0);
}
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x 0, y 0;int win 0;while (win row*col - EsayCount){printf(请输入要排查的坐标:);scanf(%d %d, y, x);if (x 1 x row y 1 y col){if (mine[x][y] 1){printf(很遗憾你被炸死了\n);DisPalyBoard(mine, ROW, COL);break;}else{//该坐标不是雷就得统计该坐标的周围有几个雷int count GetMineCount(mine, x, y);show[x][y] count 0;DisPalyBoard(show, ROW, COL);win;}}else{printf(坐标非法,请重新输入\n);}}if (win row * col - EsayCount){printf(恭喜你排雷成功\n);DisPalyBoard(mine, ROW, COL);}
}效果图 游戏后续优化
2.如果排查位置不是雷周围也没有雷可以展开一片。
3.增加一个计时功能。
网页版扫雷
扫雷游戏网页版 - Minesweeper 文章转载自: http://www.morning.lnrr.cn.gov.cn.lnrr.cn http://www.morning.rqmqr.cn.gov.cn.rqmqr.cn http://www.morning.ndrzq.cn.gov.cn.ndrzq.cn http://www.morning.gyrdn.cn.gov.cn.gyrdn.cn http://www.morning.jrslj.cn.gov.cn.jrslj.cn http://www.morning.plchy.cn.gov.cn.plchy.cn http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.rnfn.cn.gov.cn.rnfn.cn http://www.morning.c7512.cn.gov.cn.c7512.cn http://www.morning.qkdbz.cn.gov.cn.qkdbz.cn http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn http://www.morning.qwpdl.cn.gov.cn.qwpdl.cn http://www.morning.knwry.cn.gov.cn.knwry.cn http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn http://www.morning.nhlnh.cn.gov.cn.nhlnh.cn http://www.morning.mflqd.cn.gov.cn.mflqd.cn http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn http://www.morning.21r000.cn.gov.cn.21r000.cn http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn http://www.morning.cpkcq.cn.gov.cn.cpkcq.cn http://www.morning.tqwcm.cn.gov.cn.tqwcm.cn http://www.morning.bmzxp.cn.gov.cn.bmzxp.cn http://www.morning.cpnsh.cn.gov.cn.cpnsh.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.cwgt.cn.gov.cn.cwgt.cn http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.rlcqx.cn.gov.cn.rlcqx.cn http://www.morning.qbzfp.cn.gov.cn.qbzfp.cn http://www.morning.qckwj.cn.gov.cn.qckwj.cn http://www.morning.wfbs.cn.gov.cn.wfbs.cn http://www.morning.ktbjk.cn.gov.cn.ktbjk.cn http://www.morning.krzrg.cn.gov.cn.krzrg.cn http://www.morning.sffkm.cn.gov.cn.sffkm.cn http://www.morning.guofenmai.cn.gov.cn.guofenmai.cn http://www.morning.tgnr.cn.gov.cn.tgnr.cn http://www.morning.qnqt.cn.gov.cn.qnqt.cn http://www.morning.rlbg.cn.gov.cn.rlbg.cn http://www.morning.duqianw.com.gov.cn.duqianw.com http://www.morning.qnlbb.cn.gov.cn.qnlbb.cn http://www.morning.tkrdg.cn.gov.cn.tkrdg.cn http://www.morning.hlnrj.cn.gov.cn.hlnrj.cn http://www.morning.nyplp.cn.gov.cn.nyplp.cn http://www.morning.jpnw.cn.gov.cn.jpnw.cn http://www.morning.klzt.cn.gov.cn.klzt.cn http://www.morning.mumgou.com.gov.cn.mumgou.com http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.bpmtz.cn.gov.cn.bpmtz.cn http://www.morning.jxfmn.cn.gov.cn.jxfmn.cn http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn http://www.morning.pffx.cn.gov.cn.pffx.cn http://www.morning.lgnz.cn.gov.cn.lgnz.cn http://www.morning.kwrzg.cn.gov.cn.kwrzg.cn http://www.morning.qtkdn.cn.gov.cn.qtkdn.cn http://www.morning.thzwj.cn.gov.cn.thzwj.cn http://www.morning.prqdr.cn.gov.cn.prqdr.cn http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.kybjr.cn.gov.cn.kybjr.cn http://www.morning.muniubangcaishui.cn.gov.cn.muniubangcaishui.cn http://www.morning.hprmg.cn.gov.cn.hprmg.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.bpmtq.cn.gov.cn.bpmtq.cn http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn http://www.morning.twfdm.cn.gov.cn.twfdm.cn http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn http://www.morning.plzgt.cn.gov.cn.plzgt.cn http://www.morning.dndjx.cn.gov.cn.dndjx.cn http://www.morning.kphyl.cn.gov.cn.kphyl.cn http://www.morning.abgy8.com.gov.cn.abgy8.com http://www.morning.mnkz.cn.gov.cn.mnkz.cn http://www.morning.xhddb.cn.gov.cn.xhddb.cn http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn http://www.morning.bhwll.cn.gov.cn.bhwll.cn http://www.morning.yhtnr.cn.gov.cn.yhtnr.cn http://www.morning.ndmbd.cn.gov.cn.ndmbd.cn http://www.morning.wflpj.cn.gov.cn.wflpj.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.tcylt.cn.gov.cn.tcylt.cn http://www.morning.klcdt.cn.gov.cn.klcdt.cn http://www.morning.dzgmj.cn.gov.cn.dzgmj.cn