扫雷

来源:互联网 发布:数据覆盖了能恢复吗 编辑:程序博客网 时间:2024/06/05 09:59

用c语言实现一个简单的扫雷游戏,并不是很难,在通过学习二维数组后,就可以写出来。

头文件

game.h#ifndef __GAME_H__#define __GAME_H__#define ROWS 11#define COLS 11#define MAX 79#define ROW (ROWS-2)#define COL (COLS-2)#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>void init_board(char mine[ROWS][COLS], char ret, int row, int col);void set_mine(char mine[ROWS][COLS], int row, int col);void display(char mine[ROWS][COLS], int row, int col);char get_mine_count(char mine[ROWS][COLS], int row, int col);#endif   //__GAME_H__


游戏函数

game.c#include"game.h"void init_board(char mine[ROWS][COLS], char ret, int row, int col){memset(mine, ret, row*col*sizeof(mine[0][0]));}void set_mine(char mine[ROWS][COLS], int row, int col){srand((unsigned int)time(NULL));int count = MAX;while (count){int x = rand() % ROW + 1;int y = rand() % COL + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}}void display(char mine[ROWS][COLS], int row, int col){int i = 0;int j = 0;printf("  ");for (i = 1; i <= COL; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= ROW; i++){printf("%d", i);for (j = 1; j <= COL; j++){printf("%2c", mine[i][j]);}printf("\n");}}char get_mine_count(char mine[ROWS][COLS], int x, int y){return mine[x - 1][y - 1] + mine[x][y - 1] +mine[x + 1][y - 1] + mine[x + 1][y] +mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y - 1]+ mine[x - 1][y] - 8 * '0';}
test.c
test.c#include<stdio.h>#include"game.h"void game(){int x = 0;int y = 0;int count = 0;char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };init_board(mine, '0', ROWS, COLS);init_board(show, '*', ROWS, COLS);set_mine(mine,ROWS,COLS);display(show,ROWS,COLS);//display(mine,ROWS,COLS);while (count < ROW*COL - MAX){printf("请输入你要选择的坐标\n");scanf("%d%d", &x, &y);if ((x >= 1) && (x <= COL) && (y >= 1) && (y <= ROW)){if (mine[x][y] == '1'){printf("很抱歉,您到踩雷了,游戏结束!\n");display(mine, ROWS, COLS);break;}else{int ret = get_mine_count(mine, x, y) ;show[x][y] = ret + '0';display(show, ROWS, COLS);count++;}}else{printf("输入错误,请重新输入!");}}if (count == ROW*COL - MAX){printf("恭喜你,扫雷成功!\n");display(mine, ROWS, COLS);}}void menu(){printf("**********扫雷小游戏**********\n");printf("******************************\n");printf("***** PLAY->1  EXIT->0 *******\n");printf("******************************\n");}int main(){enum option{EXIT,PLAY};int input = 0;do{menu();printf("请选择\n");scanf("%d", &input);switch (input){case PLAY:game();case EXIT:printf("已退出\n");break;default:printf("输入错误,请重新输入\n");}} while (input);return 0;}



1 0
原创粉丝点击