【C】扫雷游戏

来源:互联网 发布:format java 编辑:程序博客网 时间:2024/05/18 11:16

首先我们先创建三个文件,分别为 MineClearance.c , MineClearance.h ,test.c,然后在相应文件下编写代码,实现游戏。

MineClearance.c

#define _CRT_SECURE_NO_WARNINGS 1  #include "game.h"//产生随机数int get_random_num(int m, int n){return rand() % (n - m + 1) + m;}//设置雷阵void set_mine(char mine[ROWS + 2][COLS + 2], int row, int col){int count = DEFAULT_COUNT;while (count)//雷的个数{int x = get_random_num(1, 10);int y = get_random_num(1, 10);if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}}//打印雷阵(排雷结果)信息void display(char board[ROWS + 2][COLS + 2], int row, int col){int i = 0;int j = 0;printf("    ");for (i = 1; i <= 10; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= 10; i++){printf("---");}printf("\n");for (i = 1; i<row - 1; i++){printf("%2d| ", i);for (j = 1; j<col - 1; j++){printf("%c ", board[i][j]);}printf("\n");}}//统计非雷区周围的雷的个数int  get_mine_count(char board[ROWS + 2][COLS + 2], int x, int y){return (board[x - 1][y - 1] - '0') +(board[x][y - 1] - '0') +(board[x + 1][y - 1] - '0') +(board[x + 1][y] - '0') +(board[x + 1][y + 1] - '0') +(board[x][y + 1] - '0') +(board[x - 1][y + 1] - '0') +(board[x - 1][y - 1] - '0');}//游戏的主逻辑void play_game(char mine[ROWS + 2][COLS + 2], char show[ROWS + 2][COLS + 2]){while (1){int x = 0;int y = 0;int win = 0;printf("请输入坐标>:");scanf("%d%d", &x, &y);if (((x >= 1) && (x <= 10)) && ((y >= 1) && (y <= 10))){if (mine[x][y] == '1'){printf("被炸死\n");display(mine, ROWS + 2, COLS + 2);break;}else{int ret = 0;win++;ret = get_mine_count(mine, x, y);show[x][y] = ret + '0';display(show, ROWS + 2, COLS + 2);if (win == COLS*ROWS - DEFAULT_COUNT){printf("雷排完了\n");display(mine, ROWS + 2, COLS + 2);break;}}}else{printf("坐标输入有误\n");}}}

MineClearance.h 

#ifndef __GAME_H__#define __GAME_H__#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>//定义雷阵的大小#define ROWS 10#define COLS 10//默认雷的个数#define DEFAULT_COUNT 20//设置雷阵void set_mine(char mine[ROWS + 2][COLS + 2], int row, int col);//打印雷阵(排雷结果)信息void display(char board[ROWS + 2][COLS + 2], int row, int col);//统计非雷区周围的雷的个数int  get_mine_count(char board[ROWS + 2][COLS + 2], int row, int col);//游戏的主逻辑void play_game(char mine[ROWS + 2][COLS + 2], char show[ROWS + 2][COLS + 2]);#endif //__GAME_H__

test.c

#define _CRT_SECURE_NO_WARNINGS 1  #include "game.h"//测试代码//TDDvoid game(){char mine[ROWS + 2][COLS + 2];char show[ROWS + 2][COLS + 2];srand((unsigned int)time(NULL));memset(mine, '0', (ROWS + 2)*(COLS + 2)*sizeof(char));memset(show, '*', (ROWS + 2)*(COLS + 2)*sizeof(char));set_mine(mine, ROWS + 2, COLS + 2);display(show, ROWS + 2, COLS + 2);play_game(mine, show);}void menu(){printf("***************************************\n");printf("************    1.play     ************\n");printf("************    0.exit     ************\n");printf("***************************************\n");}int main(){int input = 0;do{menu();printf("请选择>:");scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("选择错误\n");break;}} while (input);return 0;}





0 0