C语言实现扫雷游戏

xiaoxiao2021-02-28  39

头文件:

#pragma once #ifndef __LEI_H__ #define __LEI_H__ #define ROW 10 #define COL 10 #define MINE_COUNT 10 //设置雷 void set_mine(char mine[ROW + 2][COL + 2],int row,int col); //显示 void display(char board[ROW + 2][COL + 2], int row, int col); //统计雷的个数 int get_mine_count(char mine[ROW + 2][COL + 2], int row, int col); //游戏 void play_game(char mine[ROW + 2][COL + 2],char board[ROW+2][COL+2]); #endif // !1

lei.c:

#define _CRT_SECURE_NO_WARNINGS 1 #include "lei.h" void set_mine(char mine[ROW + 2][COL + 2], int row, int col) { int count = MINE_COUNT; int i = 0; for (i = 0; i < count; i++) { int x = rand()+1;//x和y都是从1到10 int y = rand()+1; if(mine[x][y]== '0') mine[x][y] = '1'; else { i--; } } } void display(char board[ROW + 2][COL + 2], int row, int col) { int i = 0; printf("\n 1 2 3 4 5 6 7 8 9 10"); printf("\n ------------------------------\n"); for (i = 1; i < row - 1; i++) { { printf("-|", i); int j = 0; for (j = 1; j < col - 1; j++) printf(", ", board[i][j]); } printf("\n"); } } int get_mine_count(char mine[ROW + 2][COL + 2], int row, int col) { return (mine[row - 1][col - 1] - '0' + mine[row - 1][col] - '0' + mine[row - 1][col + 1] - '0' + mine[row][col - 1] - '0' + mine[row][col + 1] - '0' + mine[row + 1][col - 1] - '0' + mine[row + 1][col] - '0' + mine[row + 1][col + 1] - '0'); } void play_game(char mine[ROW + 2][COL + 2], char board[ROW + 2][COL + 2]) { while (1) { //输入坐标 printf("输入坐标(x,y):"); int x; int y; int count = 0; scanf("%d%d", &x, &y); //检查坐标合法性 if ((1 <= x && x <= ROW) && (1 <= y && y <= COL)) { //判断该位置有没有雷 if (mine[x][y] == '1') { printf("你死了\n"); display(mine, ROW + 2, COL + 2); break; } else { int ret = get_mine_count(mine, x, y); board[x][y] = ret + '0'; if (ret == 0) { board[x][y] = board[x - 1][y - 1] = board[x - 1][y] = board[x - 1][y + 1] = board[x][y - 1] = board[x][y + 1] = board[x + 1][y - 1] = board[x + 1][y] = board[x + 1][y + 1] = ' '; } count++; display(board, ROW + 2, COL + 2); if (count == MINE_COUNT) { printf("你,赢了\n"); display(mine, ROW + 2, COL + 2); break; } } } else printf("出界了\n"); } }

主函数:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #include "lei.h" int menu() { printf("+----------------------+\n"); printf("| 1 play |\n"); printf("| 0 exit |\n"); printf("+----------------------+\n"); printf("choose>>\n"); int choose = 0; scanf("%d",&choose); return choose; } void game() { //显示数组 char mine[ROW+2][COL+2]; char board[ROW+2][COL+2]; //数组初始化 int i; int j; for (i = 0; i < ROW + 2; i++) { for (j = 0; j < COL + 2; j++) { mine[i][j] = '0'; board[i][j] = '*'; } } //设置雷 set_mine(mine, ROW + 2, COL + 2); //显示雷 //显示游戏 display(mine, ROW + 2, COL + 2); display(board, ROW + 2, COL + 2); //玩游戏 play_game(mine,board); } int main(void) { int choose = 0; srand((unsigned int)time(NULL)); do { choose = menu(); switch (choose) { case 1: game(); break; case 0: break; default: { printf("选错了\n"); break; } } } while (choose); system("pause"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-2630978.html

最新回复(0)