目錄
一.test.c部分
?二.game.h部分
?三.game.c部分
前言:前面學習了數組和函數等c語言相關知識,這篇文章我們將通過這些知識分為三個文件來完成掃雷游戲;
1.test.c //文件中寫游戲的測試邏輯
2.game.c //文件中寫游戲中函數的實現等
3.game.h. //文件中寫游戲需要的數據類型和函數聲明等
一.test.c部分
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void menu()
{printf("***********************\n");printf("***** 1. play *****\n");printf("***** 2. exit *****\n");printf("***********************\n");
}void game()
{char mine[ROWS][COLS] = { 0 };//用來存放布置好的雷的信息char show[ROWS][COLS] = { 0 };//用來存放排查出的雷的個數信息//棋盤初始化//mine全部初始化為0,表示還沒布置好雷;//show全部初始化為*,表示還沒被排查;initboard(mine, ROWS, COLS, '0');initboard(show, ROWS, COLS, '*');//打印棋盤9*9printboard(show, ROW, COL);//布置雷setmine(mine, ROW, COL);//排查雷findmine(mine, show, ROW, COL);}int main()
{int num = 0;srand((unsigned int)time(NULL));do{menu();printf("請選擇:>");scanf("%d", &num);switch (num){case 1:game();break;case 2:printf("你已退出游戲\n");break;default:printf("選擇錯誤,請重新選擇\n");break;}} while (num != 2);return 0;
}
?二.game.h部分
#pragma once#include<stdio.h>
#include<stdlib.h>
#include<time.h>//定義常量的符號
#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASY_COUNT 10//函數的聲明//棋盤初始化
void initboard(char board[ROWS][COLS], int rows, int cols, int set);//打印棋盤
void printboard(char mine[ROWS][COLS], int row, int col);//布置雷
void setmine(char mine[ROWS][COLS], int row, int col);//獲取周圍雷的個數
int getmine(char mine[ROWS][COLS], int x, int y);//排查雷
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
?三.game.c部分
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void initboard(char board[ROWS][COLS], int rows, int cols, int set)
{int i = 0;for (i = 0;i < rows;i++){int j = 0;for (j = 0;j < cols;j++){board[i][j] = set;}}
}void printboard(char mine[ROWS][COLS], int row, int col)
{int i = 0;printf("-----掃雷游戲-----\n");for (i = 0;i <= row;i++){printf("%d ", i);//打印行號}printf("\n");for (i = 1;i <= row;i++){int j = 0;printf("%d ", i);//打印列號for (j = 1;j <= col;j++){printf("%c ", mine[i][j]);}printf("\n");}
}void setmine(char mine[ROWS][COLS], int row, int col)
{//隨機布置10個雷int count = EASY_COUNT;while (count){int x = rand() % row + 1;//生成隨機的坐標int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}int getmine(char mine[ROWS][COLS],int x,int y)
{return(mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + mine[x][y + 1] +mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0');
}void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int w =0;while (w< row * col - EASY_COUNT){printf("請輸入要排查的坐標:");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col)//判斷輸入的合法性{if (mine[x][y] == '1')//判斷是不是雷{printf("很遺憾,你被炸死了\n");printboard(mine, ROW, COL);break;}else if(show[x][y]=='*'){//統計坐標周圍雷的個數int c = getmine(mine, x, y);show[x][y] = c + '0';//數字+‘0’變為數字字符printboard(show, ROW, COL);w++;}else{printf("該坐標已被查找,請重新輸入\n");}}else{printf("非法輸入,請重新輸入\n");}if (w == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");printboard(mine, ROW, COL);}}}
結語;本篇文章就到此結束了,掃雷游戲的實現三個文件都必不可少,當然這只是最基礎版本的,更多進階功能還需要后續的學習。大家可以通過注釋來理解一下所寫的代碼,感謝大家的支持。