C语言编程实现扫雷游戏

来源:互联网 发布:mac虚拟机win7镜像 编辑:程序博客网 时间:2024/05/22 13:54

源码:

1.函数头:

#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 10//默认雷数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__
2.函数体
#include "game.h"void 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(mine, ROWS + 2, COLS + 2);display(show, ROWS + 2, COLS + 2);play_game(mine, show);}void menu(){printf("***************************************\n");printf("***********1.PLAY    0.EXIT************\n");printf("***************************************\n");}enum option{EXIT,PLAY};int main(){int input = 0;do{menu();printf("请选择:");scanf("%d", &input);switch (input){case PLAY:game();break;case EXIT:break;default:printf("输入错误!请重新输入:\n");break;}} while (input);return 0;}
3.游戏函数主体:

#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");}}}




原创粉丝点击