小项目 : C语言实现扫雷小游戏
2017-11-11 14:31
736 查看
实现功能:
1.若第一次踩到雷,就将雷更换位置。
2若输入坐标周围没有雷,实现向外扩展。
game.h
test.c
//设置两个二维数组,一个用来计算雷的数目,初始化为全0;一个用来玩家操作,初始化为全‘*’
game.c
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_
test.c
//设置两个二维数组,一个用来计算雷的数目,初始化为全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; }
game.c
#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; }
相关文章推荐
- 小项目 : C语言实现三子棋小游戏[拓展为多子棋]
- c语言实现小游戏-扫雷
- C语言实现小游戏--扫雷
- [置顶] 小游戏:扫雷 (C语言实现扫雷的基本功能)
- 【扫雷】编写一个小游戏--扫雷的c语言实现
- c语言实现扫雷(非图形化界面)
- 基于C语言实现扫雷
- C语言实现猜数字小游戏
- C语言实现扫雷
- C语言实现的2048小游戏
- 一个在终端实现类Linux shell(cd ls命令)UI界面的项目(C语言实现)
- C语言开发简易版扫雷小游戏
- c语言实现打字小游戏
- 第一周《C语言及程序设计》实践项目23 用if语句实现分支结构
- 简单c语言小游戏实现原理
- Python练手项目(2)——200行实现2048小游戏
- !--扫雷之C语言实现--!
- C语言实现扫雷。可以标记。
- 扫雷程序(C语言并优化): 1>第一次下子,不炸死。 2>坐标周围没雷,可以实现展开。
- C语言实现经典游戏——扫雷!