您好,登錄后才能下訂單哦!
使用C語言編寫一個(gè)簡(jiǎn)單對(duì)掃雷小游戲?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
掃雷的思路
game.h
#ifndef _GAME_H_ #define _GAME_H_ #include<stdio.h> #include <time.h> #include<string.h> #include<windows.h> #pragma warning(disable:4996) #define ROW 12 #define COL 12 //定義20個(gè)雷 #define NUMS 20 void Menu(); void Game(); #endif
main.c
#include "game.h" int main(){ int quit = 0; int select = 0; while (!quit){ Menu(); scanf("%d", &select); switch (select){ case 1: Game(); break; case 2: quit = 1; break; default: printf("請(qǐng)重新輸入"); break; } } system("pause"); return 0; }
game.c
#include "game.h" void Menu() { printf("##########################\n"); printf("## 1. Play 2. Exit ##\n"); printf("##########################\n"); printf("請(qǐng)輸入# "); } //設(shè)置20個(gè)隨機(jī)雷 void SetMines(char mine_board[][COL], int row, int col) { int count = NUMS; while (count){ int x = rand() % 10 + 1; int y = rand() % 10 + 1; if (mine_board[x][y] == '0'){ mine_board[x][y] = '1'; count--; } } } //判斷周圍有幾個(gè)雷 int GetMines(char mine[][COL], int row, int col, 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'; } //設(shè)置界面的下劃線 static void ShowLine(int nums) { printf("---"); for (int i = 0; i < nums; i++){ printf("-"); } printf("\n"); } //一個(gè)顯示界面,傳入界面數(shù)組顯示掃雷界面,傳入布雷數(shù)組顯示雷區(qū)界面 void ShowBoard(char show_board[][COL], int row, int col) { printf(" "); for (int i = 1; i < row - 1; i++){ printf(" %d ", i); } printf("\n"); ShowLine(2 * col + col + 4); for (int i = 1; i < row - 1; i++){ printf("%2d|", i); for (int j = 1; j < col - 1; j++){ printf(" %c |", show_board[i][j]); } printf("\n"); ShowLine(2 * col + col + 4); } } void Game() { char show_board[ROW][COL]; char mine_board[ROW][COL]; memset(show_board, '*', sizeof(show_board)); memset(mine_board, '0', sizeof(mine_board)); srand((unsigned long)time(NULL)); SetMines(mine_board, ROW, COL); int count = (ROW - 2)*(COL - 2) - NUMS; int x = 0; int y = 0; do{ ShowBoard(show_board, ROW, COL); printf("請(qǐng)輸入位置# "); scanf("%d %d", &x, &y); if (x < 1 || x > 10 || y < 1 || y >10){ printf("輸入越界,請(qǐng)重新輸入!\n"); continue; } if (show_board[x][y] != '*'){ printf("該位置已經(jīng)被排除,請(qǐng)重新輸入!\n"); continue; } if (mine_board[x][y] == '1'){ break; } int num = GetMines(mine_board, ROW, COL, x, y); show_board[x][y] = num + '0'; count--; system("cls"); } while (count > 0); //count>0說明坐標(biāo)是雷,break提前退出了 if (count > 0){ printf("你被炸死了!\n"); } else{ printf("你贏了!\n"); } printf("下面是雷區(qū)的排布!\n"); ShowBoard(mine_board, ROW, COL); }
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。