c语言实现经典小游戏-----简易版扫雷
扫雷游戏对我们来说并不陌生
设计思路:
1)初始化雷阵;
2)打印雷阵;
3)设置雷的位置(有系统调用rand()函数产生)
4)统计点击处雷的个数
5)排雷;
具体步骤:
1.初始化雷阵的时候需要初始化两个矩阵,如下:
//初始化雷盘 //mine 为进行扫雷的矩阵 //show 为显示某点周围雷个数的矩阵 void Init_Mine(char mine[ROWS][COLS], char show[ROWS][COLS], int rows) { int i = 0; int j = 0; for (i = 0; i < ROWS - 1; i++){ for (j = 0; j < COLS - 1; j++){ mine[i][j] = 0; show[i][j] = *; } } }
2.打印雷阵:
void Display_Show(char show[ROWS][COLS]) { int i = 0; int j = 0; printf(" "); for (int i = 1; i < COLS - 1; i++){ printf(" %d", i); } printf(" "); printf("_____________________________"); printf(" "); for (i = 1; i < ROWS - 1; i++){ printf("%d", i); for (j = 1; j < COLS - 1; j++){ printf(" |%C", show[i][j]); } printf(" |"); printf(" "); for (j = 0; j < COLS-1; j++){ if (i < (ROWS - 1)){ printf("--|"); } } printf(" "); } }
界面如图:
之后就是游戏部分;
完整代码:
game.h
#ifndef __GAME_H__ #define __GAME_H__ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define ROWS 11 #define COLS 11 #define Count 12 //雷的个数 void Init_Mine(char mine[ROWS][COLS],char show[ROWS][COLS]); void Display_Show(char show[ROWS][COLS]); void Set_Mine(char mine[ROWS][COLS]); int Get_Num(char mine[ROWS][COLS], int x, int y); int Sweep(char mine[ROWS][COLS], char show[ROWS][COLS]); int Game(char mine[ROWS][COLS], char show[ROWS][COLS]); #endif
game.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" //初始化雷盘 //mine 为进行扫雷的矩阵 //show 为显示某点周围雷个数的矩阵 void Init_Mine(char mine[ROWS][COLS], char show[ROWS][COLS], int rows) { int i = 0; int j = 0; for (i = 0; i < ROWS - 1; i++){ for (j = 0; j < COLS - 1; j++){ mine[i][j] = 0; show[i][j] = *; } } } //打印下完了棋的界面 void Display_Show(char show[ROWS][COLS]) { int i = 0; int j = 0; printf(" "); for (int i = 1; i < COLS - 1; i++){ printf(" %d", i); } printf(" "); printf("_____________________________"); printf(" "); for (i = 1; i < ROWS - 1; i++){ printf("%d", i); for (j = 1; j < COLS - 1; j++){ printf(" |%C", show[i][j]); } printf(" |"); printf(" "); for (j = 0; j < COLS-1; j++){ if (i < (ROWS - 1)){ printf("--|"); } } printf(" "); } } //设置雷的位置 void Set_Mine(char mine[ROWS][COLS]) { int x = 0; int y = 0; int count = Count; srand((unsigned)time(NULL)); while (count){ x = rand() % 9 + 1; y = rand() % 3 + 1; if (mine[x][y] == 0){ mine[x][y] = 1; count--; } } } //计算雷的个数 int Get_Num(char mine[ROWS][COLS], int x, int y) { int count = 0; //左上方 if (mine[x - 1][y - 1] == 1){ count++; } //左边 if (mine[x][y - 1] == 1){ count++; } //左下方 if (mine[x + 1][y - 1] == 1){ count++; } //正下方 if (mine[x + 1][y] == 1){ count++; } //右下方 if (mine[x + 1][y + 1] == 1){ count++; } //右边 if (mine[x][y + 1] == 1){ count++; } //右上方 if (mine[x - 1][y + 1] == 1){ count++; } return count; } //扫雷 int Sweep(char mine[ROWS][COLS], char show[ROWS][COLS]) { int x = 0; int y = 0; int count = 0; while ((count != (ROWS - 2)*(COLS - 2) - Count)){ printf("请输入坐标:> "); scanf("%d%d", &x, &y); if (mine[x][y] == 1){ printf("你踩到雷了!!! "); return 0; } else{ int sum = Get_Num(mine, x, y); show[x][y] = sum + 0; Display_Show(show); count++; } } printf("恭喜你,获得胜利!!!"); Display_Show(mine); return 0; } //游戏 int Game(char mine[ROWS][COLS], char show[ROWS][COLS]) { Init_Mine(mine, show,ROWS,COLS); Set_Mine(mine); Display_Show(show); Sweep(mine, show); return 0; }
测试:test.c
玩一把:
上一篇:
IDEA上Java项目控制台中文乱码