Pace 8 (C语言实现扫雷小游戏)
来源:互联网 发布:儿童学唱歌软件 编辑:程序博客网 时间:2024/06/05 21:17
实现功能:
1.若第一次踩到雷,就将雷更换位置。
2若输入坐标周围没有雷,实现向外扩展。
game.h
# ifndef __game_h_# define __game_h_#include <stdio.h>#include <stdlib.h>#include <time.h># define ROW 10 //定义行和列,任意可以更改# define COL 10# define ROWS (ROW + 2)# define COLS (COL + 2)# define M 10 //定义雷的数目void Init_Bor(int bor[ROWS][COLS], char ch); //初始化棋盘void Printf_Bor(char bor[ROWS][COLS]); //打印棋盘void Setmine(char bor[ROWS][COLS],int count); //设置雷void First_Play(char bor[ROWS][COLS],char bor1[ROWS][COLS]);//保证第一次玩家不会踩到雷int Sum_Around(char arr[ROWS][COLS], int i, int j); //计算周围雷的个数int Play_Mine(char bor[ROWS][COLS],char bor1[ROWS][COLS]);//第二次及以后void Expend_Bor(int arr[ROWS][COLS],char arr1[ROWS][COLS],int i,int j);//周围没有雷的时候向外扩展int Is_Win(char bor[ROWS][COLS], int i, int j, int m);//判断输赢# endif //__game_h_
//设置两个二维数组,一个用来计算雷的数目,初始化为全0;一个用来玩家操作,初始化为全‘*’
#include "GAME.h"void menu(){printf("*************************\n");printf("* 1:play 0:exit *\n");printf("*************************\n");}void GAME(){srand((unsigned int)time(NULL));int T = 0;int ret = 0;int ret1 = 0;char mine[ROWS][COLS] = { '0' };char show[ROWS][COLS] = { '0' };Init_Bor(mine, '0');Init_Bor(show, '*');Printf_Bor(show);Setmine(mine,M);while (1){if (T == 0){First_Play(mine, show);T++;}else{ret = Play_Mine(mine, show);if (ret == 1){printf("很遗憾,你踩到雷了!\n");break;}ret1 = Is_Win(show, ROWS, COLS, M);if (ret1 == 1){printf("排雷成功!\n");Printf_Bor(show);break;}}Printf_Bor(show);}}int main(){int input = 0;do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:GAME();break;case 0:printf("游戏结束!");break;default:printf("请重新输入:>\n");break;}} while (input);system("pause");return 0;}
#include "GAME.h"void Init_Bor(int bor[ROWS][COLS], char ch){memset(bor, ch, ROWS*COLS*sizeof(char));}void Printf_Bor(char bor[ROWS][COLS]) //将棋盘规则打印,并附有横纵坐标{int i = 0;int j = 0;printf(" ");for (j = 0; j < COLS - 2; j++){printf("%2d ", j + 1);}printf("\n");for (i = 1; i < ROWS - 1; i++){printf(" %2d ", i);for (j = 1; j < COLS - 1; j++){printf("%c ", bor[i][j]);}printf("\n");}}void Setmine(char bor[ROWS][COLS],int count){int i = 0;int j = 0;int c = count; while (c){i = rand() % ROW + 1;j = rand() % COL + 1;if ((i > 0) && (j > 0) && (bor[i][j] == '0')){bor[i][j] = '1';c--;}}}void First_Play(char bor[ROWS][COLS], char bor1[ROWS][COLS])//玩家走的第一步,若是踩到雷便将雷移位{int i = 0;int j = 0;int I = 0;int J = 0;char sum = 0;printf("请输入坐标:>");scanf("%d%d", &i, &j);if (bor[i][j] == '1'){while (1){I = rand() % ROW + 1;J = rand() % COL + 1;if (bor[I][J] == '0'){bor[I][J] = '1';break;}}I = i;J = j;bor[I][J] == '0';sum = Sum_Around(bor, I, J);bor1[I][J] = sum;Expend_Bor(bor, bor1, I, J);}else{Expend_Bor(bor, bor1, i, j);}}int Sum_Around(char arr[ROWS][COLS], int i, int j){int sum = 0;sum = (arr[i - 1][j - 1] + arr[i][j - 1] + arr[i + 1][j - 1]+ arr[i + 1][j] + arr[i + 1][j + 1] + arr[i][j + 1]+ arr[i - 1][j + 1] + arr[i - 1][j] - 7 * '0');return sum;}int Play_Mine(char bor[ROWS][COLS], char bor1[ROWS][COLS]){int i = 0;int j = 0;int I = 0;int J = 0;printf("请输入坐标:>");scanf("%d%d", &i, &j);while (1){if (bor1[i][j] == ' '){printf("此处已经排过雷,请重新输入!\n");scanf("%d %d", &i, &j);}else{break;}}if (bor[i][j] == '0'){Expend_Bor(bor, bor1, i, j);return 0;}else{return 1;}return 0;}void Expend_Bor(int arr[ROWS][COLS], char arr1[ROWS][COLS], int i, int j){int sum = 0;sum = Sum_Around(arr, i, j);if (sum == '0'){arr1[i][j] = ' ';}else if (sum > '0'){arr1[i][j] = sum;}if ((sum <= '0') && (i > 0) && (i<ROWS - 1) && (j>0) && (j < COLS - 1)){if ((arr1[i - 1][j - 1] == '*'))//左上{Expend_Bor(arr, arr1, i - 1, j - 1);}if ((arr1[i][j - 1] == '*'))//左方{Expend_Bor(arr, arr1, i, j - 1);}if ((arr1[i + 1][j - 1] == '*'))//左下{Expend_Bor(arr, arr1, i + 1, j - 1);}if ((arr1[i + 1][j] == '*'))//下方{Expend_Bor(arr, arr1, i + 1, j);}if ((arr1[i + 1][j + 1] == '*'))//右下{Expend_Bor(arr, arr1, i + 1, j + 1);}if ((arr1[i][j + 1] == '*'))//右方{Expend_Bor(arr, arr1, i, j + 1);}if ((arr1[i - 1][j + 1] == '*'))//右上{Expend_Bor(arr, arr1, i - 1, j + 1);}if ((arr1[i - 1][j] == '*'))//上方{Expend_Bor(arr, arr1, i - 1, j);}}}int Is_Win(char bor[ROWS][COLS], int i, int j, int m){int count = 0;for (i = 1; i < ROWS - 1; i++){for (j = 1; j < COLS - 1; j++){if (bor[i][j] == '*'){count++;}}}if (count == m){for (i = 1; i < ROWS - 1; i++){for (j = 1; j < COLS - 1; j++){if (bor[i][j] == '*'){bor[i][j] = 'M';//若玩家胜出,则将全部有雷的地方显示为M}}}return 1;}return 0;}
阅读全文
0 0
- Pace 8 (C语言实现扫雷小游戏)
- C语言实现小游戏--扫雷
- C语言 — 实现扫雷小游戏
- C语言简单实现扫雷小游戏~~~
- C语言小游戏“扫雷”
- 扫雷小游戏【C语言】
- c语言小游戏---扫雷
- c语言小游戏扫雷
- C语言小游戏---扫雷
- 【扫雷】编写一个小游戏--扫雷的c语言实现
- 小游戏:扫雷 (C语言实现扫雷的基本功能)
- c语言模拟扫雷小游戏
- C语言编写扫雷小游戏
- 简易小游戏扫雷——C语言编程实现
- 扫雷小游戏c语言简单版
- C语言小游戏—扫雷大作战
- C语言实现扫雷
- c语言实现扫雷
- Spring boot @Value的值取不到
- GIT BASH IN INTELLIJ IDEA 13 ON WINDOWS One of the top features of the recent release of IntelliJ ID
- leetcode解题方案--030--Substring with Concatenation of All Words
- 田忌赛马
- ESP8266解析JSON数据
- Pace 8 (C语言实现扫雷小游戏)
- JAVA中的Socket一对一聊天程序
- 根据二叉树的先序遍历建立二叉树
- PHP 构造方法 __construct()
- 171111 Learning Python Chapter 25 OOP-The Big Picture
- SpringAop 9 (面向切面编程,常用于拦截器)
- Android学习之隐藏activity标题栏
- ThinkPHP框架整合phpqrcode生成二维码DEMO
- 欢迎使用CSDN-markdown编辑器