溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用C語言編寫一個(gè)簡(jiǎn)單對(duì)掃雷小游戲

發(fā)布時(shí)間:2020-11-11 15:13:01 來源:億速云 閱讀:169 作者:Leah 欄目:開發(fā)技術(shù)

使用C語言編寫一個(gè)簡(jiǎn)單對(duì)掃雷小游戲?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

掃雷的思路

使用C語言編寫一個(gè)簡(jiǎn)單對(duì)掃雷小游戲

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ì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(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)容。

AI