扫雷源程序如下;分为3部分,game.h文件里放着所用的头文件,自己定义的头文件,以及实现函数的声明部分;game.c文件里放的是具体函数的实现,tset.c文件里放的是扫雷程序的主逻辑,框架,具体看下面:
game2.h 文件#ifndef __GAME_H__#define __GAME_H__#define DEFAULT_COUNT 30// 设置30颗雷#define ROWS 10#define COLS 10void display(char arr[ROWS+2][COLS+2],int rows,int cols);void set_mine(char arr[ROWS+2][COLS+2],int rows,int cols);int get_mine_count(char arr[ROWS+2][COLS+2],int x,int y); //函数的声明#endif //__GAME__H__game2.c文件#include<stdio.h>#include<stdlib.h>#include<time.h>#include "game2.h"void display(char arr[ROWS+2][COLS+2],int rows,int cols){ int i = 0; int j = 0; PRintf(" "); for(i=1; i<=rows; i++) { printf("%d ",i); } printf("/n"); for(i=1; i<=rows; i++) { printf("%2d",i); for(j=1; j<=cols; j++) { printf(" %c",arr[i][j]); } printf("/n"); }}int get_rand_num(){ return rand()%10+1;}void set_mine(char arr[ROWS+2][COLS+2],int rows,int cols){ int count=DEFAULT_COUNT; while(count) { int x = get_rand_num(); int y = get_rand_num(); if(arr[x][y] == '0') { arr[x][y] = '1'; count--; } }}int get_mine_count(char arr[ROWS+2][COLS+2],int x,int y){ return(arr[x-1][y-1]-'0'+ arr[x][y-1]-'0' + arr[x+1][y-1]-'0'+ arr[x+1][y]-'0' + arr[x+1][y+1]-'0'+ arr[x][y+1]-'0' + arr[x-1][y+1]-'0'+ arr[x-1][y]-'0');}test.c文件#include<stdio.h>#include<string.h>#include<time.h>#include "game2.h"#include<stdlib.h>void menu(){ printf("****************************/n"); printf("******** 1.play ********/n"); printf("******** 0.exit ********/n"); printf("****************************/n");}enum Option{ EXIT, PLAY};void game(){ int win=0; int x = 0; int y = 0; char mine[ROWS+2][COLS+2]={0}; char show[ROWS+2][COLS+2]={0}; srand((unsigned int)time(NULL)); memset(mine,'0',sizeof(char)*(ROWS+2)*(COLS+2)); memset(show,'*',sizeof(char)*(ROWS+2)*(COLS+2)); display(show,ROWS,COLS); set_mine(mine,ROWS,COLS); display(mine,ROWS,COLS); while(win<COLS*ROWS-DEFAULT_COUNT) { printf("请输入坐标:>"); scanf("%d%d",&x,&y); if(mine[x][y] == '1') { printf("很抱歉你被炸死了/n"); break; } else { int count = 0; win++; count = get_mine_count(mine,x,y); show[x][y]=count + '0'; display(show,ROWS,COLS); } } if(win>=COLS*ROWS-DEFAULT_COUNT) { printf("排雷成功/n"); }}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;}新闻热点
疑难解答