简易小游戏扫雷——C语言编程实现

来源:互联网 发布:开放教育与网络教育 编辑:程序博客网 时间:2024/05/19 14:54
<span style="font-size:24px;">#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<time.h>#include<stdlib.h>#include<string.h>#define ROWS 10#define COLS 10#define MINE 30void menu(){printf("*********************************\n");printf("*********** 1.play **************\n");printf("*********** 0.exit **************\n");printf("*********************************\n");}void Init(char mine[ROWS+2][COLS+2],char show[ROWS+2][COLS+2],int x,int y){x = ROWS+2;y = COLS+2;memset(mine,'+',x*y*sizeof(char));memset(show,'*',x*y*sizeof(char));}void Desplay(char arr[ROWS+2][COLS+2],int x,int y){int i = 0;int j = 0;printf("    1 2 3 4 5 6 7 8 9 10 11 12\n");for(i = 0;i < ROWS+2;i++){printf("%3d ",i+1);for(j = 0;j < COLS+2;j++){printf("%c ",arr[i][j]);}printf("\n");}}void Mine_deg(char arr[ROWS+2][COLS+2],int x,int y){int mine_deg = 0;for(mine_deg = 0;mine_deg < MINE;mine_deg++){A:x = rand()%(ROWS)+1;y = rand()%(COLS)+1;if(arr[x][y] == '+'){arr[x][y] = '@';}else{goto A;}}}int Player(char mine[ROWS+2][COLS+2],char show[ROWS+2][COLS+2],int x,int y){int count = 0;while(1){if(x > 0 && x <= ROWS+2 && y > 0 && y <= COLS+2){if(mine[x-1][y-1] == '@'){show[x-1][y-1] = '@';return 1;}else{if(mine[x-2][y-2] == '@')count++;if(mine[x-2][y-1] == '@')count++;if(mine[x-2][y] == '@')count++;if(mine[x-1][y-2] == '@')count++;if(mine[x-1][y] == '@')count++;if(mine[x][y] == '@')count++;if(mine[x][y-1] == '@')count++;if(mine[x][y-2] == '@')count++;show[x-1][y-1] = count+'0';return -1;}}else{printf("Error input!\n");return 0;}}}void Game(){char mine[ROWS+2][COLS+2] = {'0'};char show[ROWS+2][COLS+2] = {'0'};int x = 0;int y = 0;int row = 0;int col = 0;int play_deg = (ROWS+2)*(COLS+2)-MINE;int count = 0;srand((unsigned int)time(NULL));Init(mine,show,x,y);Mine_deg(mine,x,y);//Desplay(mine,x,y);Desplay(show,x,y);while(play_deg){input:printf("Please input (x y):>>");scanf("%d %d",&x,&y);if(count == 0 ){if((Player(mine,show,x,y) == 1)){RAND:row = rand()%(ROWS)+1;col = rand()%(COLS)+1;if(mine[row][col] != '@'){mine[row][col] = mine[x-1][y-1];mine[x-1][y-1] = '+';Player(mine,show,x,y);//Desplay(mine,x,y);}else{goto RAND;}}}else{if((Player(mine,show,x,y) == 1)){printf("What a pity!It is a mine.\n");Desplay(mine,x,y);break;}else if(Player(mine,show,x,y) == 0){goto input;}else if(play_deg == 1){printf("Congratulations,you are winner!\n");Desplay(mine,x,y);break;}}Desplay(show,x,y);play_deg--;count++;}}int main(){int input = 0;do{menu();printf("Please choose (0 or 1):\n");scanf("%d",&input);switch(input){case 1:Game();break;case 0:break;default:printf("error input!\n");break;}}while(input);return 0;}</span>



       如有错误,欢迎指出!







0 0
原创粉丝点击