溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用C語言開發(fā)一個掃雷小游戲

發(fā)布時間:2020-11-16 16:00:21 來源:億速云 閱讀:148 作者:Leah 欄目:開發(fā)技術

這篇文章將為大家詳細講解有關利用C語言開發(fā)一個掃雷小游戲,文章內(nèi)容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

具體內(nèi)容如下

簡單描述:

輸入要要掃的位置.
如果是雷,則游戲失敗.
如果將所有不是雷的位置都掃了一遍,則游戲勝利.

主要細節(jié)

1、初始化(玩家掃雷圖,地雷布局圖)

展示出來的地圖(玩家能看到的地圖)showMap

for (int row = 0; row < ROW; row++){

 for (int col = 0; col < COL; col++){
 showMap[row][col] = '*';
 }
}

地雷的布局地圖(玩家看不到的地圖)mineMap

for (int row = 0; row < ROW; row++){

 for (int col = 0; col < COL; col++){
 mineMap[row][col] = '*';
 }
 }
 int count = 0;
 while (count<MINECOUNT){
 int row = rand() % 9;
 int col = rand() % 9;
 mineMap[row][col] = 'L';
 count++;
 }
}

3、打印地圖

void print(char Map[ROW][COL]){
 printf(" |0|1|2|3|4|5|6|7|8|\n");
 for (int row = 0; row < ROW; row++){
 printf("%d |", row);
 for (int col = 0; col < COL; col++){
 printf("%c ", Map[row][col]);
 }
 printf("\n");
 }
}

5、玩家輸入要掃的位置信息(9*9格子中某一特定位置)

void Input(char showMap[ROW][COL], char mineMap[ROW][COL], int* row, int* col){
 while (1){
 printf("請輸入您要點的位置坐標:");
 scanf("%d %d", row, col);
 if (((*row) < 0) || ((*row) >= ROW)
 || ((*col) < 0) || ((*col) >= COL)){
 printf("輸入有誤 ");
 continue;
 }
 if (showMap[*row][*col] == '*'){
 showMap[*row][*col] = ' ';
 break;
 }
 }
}

7、判斷某一位置是不是地雷

//返回1表示雷;返回0表示不是雷
int isMine(char mineMap[ROW][COL], int row, int col){
 if (mineMap[row][col] == 'L'){
 return 1;
 }
 return 0;
}

9、某一位置附近地雷的個數(shù)

int MineNerborhood(char mineMap[ROW][COL], int row, int col){
 if (row < 0 || row >= ROW
 || col < 0 || col >= COL){
 return '0';
 }
 int count = 0;
 for (int r = row - 1; r <= row + 1; r++){
 for (int c = col - 1; c <= col + 1; c++){
 if (mineMap[r][c] == 'L'){
 count++;
 }
 }
 }
 return count + '0';
}

源代碼:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define ROW 9
#define COL 9
#define MINECOUNT 10

void Input(char showMap[ROW][COL], char mineMap[ROW][COL], int* row, int* col){
 while (1){
 printf("請輸入您要點的位置坐標:");
 scanf("%d %d", row, col);
 if (((*row) < 0) || ((*row) >= ROW)
 || ((*col) < 0) || ((*col) >= COL)){
 printf("輸入有誤 ");
 continue;
 }
 if (showMap[*row][*col] == '*'){
 showMap[*row][*col] = ' ';
 break;
 }
 }
}

//返回1表示雷;返回0表示不是雷
int isMine(char mineMap[ROW][COL], int row, int col){
 if (mineMap[row][col] == 'L'){
 return 1;
 }
 return 0;
}
//
void init(char showMap[ROW][COL], char mineMap[ROW][COL]){

 for (int row = 0; row < ROW; row++){

 for (int col = 0; col < COL; col++){
 showMap[row][col] = '*';
 }
 }
 for (int row = 0; row < ROW; row++){

 for (int col = 0; col < COL; col++){
 mineMap[row][col] = '*';
 }
 }
 int count = 0;
 while (count<MINECOUNT){
 int row = rand() % 9;
 int col = rand() % 9;
 mineMap[row][col] = 'L';
 count++;
 }
}
void print(char Map[ROW][COL]){
 printf(" |0|1|2|3|4|5|6|7|8|\n");
 for (int row = 0; row < ROW; row++){
 printf("%d |", row);
 for (int col = 0; col < COL; col++){
 printf("%c ", Map[row][col]);
 }
 printf("\n");
 }
}
//(row,col)附近格子地雷的個數(shù)
int MineNerborhood(char mineMap[ROW][COL], int row, int col){
 if (row < 0 || row >= ROW
 || col < 0 || col >= COL){
 return '0';
 }
 int count = 0;
 for (int r = row - 1; r <= row + 1; r++){
 for (int c = col - 1; c <= col + 1; c++){
 if (mineMap[r][c] == 'L'){
 count++;
 }
 }
 }
 return count + '0';
}
//一局游戲
void game(){
 srand(time(0));
 //展示給玩家的地圖
 char showMap[ROW][COL];
 //雷的布局圖
 char mineMap[ROW][COL];
 //對兩個地圖進行初始化
 init(showMap, mineMap);
 //print(mineMap);
 //玩家已經(jīng)掃到的不是雷的格子的數(shù)目
 int notMineCount = 0;
 printf("掃雷游戲開始啦!\n");
 while (1){
 //打印地圖
 print(showMap);
 //輸入地點
 int row, col;
 Input(showMap, mineMap, &row, &col);
 //判斷是否是雷區(qū)
 if (isMine(mineMap, row, col) == 1){
 printf(" 大兄弟,踩雷咧!\n給您看看雷的布局\n");
 print(mineMap);
 break;
 }
 //判斷附近雷的情況
 showMap[row][col]=MineNerborhood(mineMap, row, col);

 notMineCount++;
 //判斷是否贏了
 if (notMineCount == ROW*COL - MINECOUNT){
 print(mineMap);
 printf("恭喜您贏啦!\n");
 break;
 }
 }
 
}
int menu(){
 printf("===================\n");
 printf("1.開始游戲\n");
 printf("0.結束游戲\n");
 printf("===================\n");
 printf("請輸入您的選擇:");
 int choice;
 scanf("%d", &choice);
 return choice;
}
int main(){
 while (1){
 int choice = menu();
 if (choice == 1){
 game();
 }else if (choice==0){
 break;
 }else{
 printf("輸入有誤,請重新輸入\n");
 }
 }
 system("pause");
 return 0;
}

運行結果:

利用C語言開發(fā)一個掃雷小游戲
利用C語言開發(fā)一個掃雷小游戲
利用C語言開發(fā)一個掃雷小游戲

關于利用C語言開發(fā)一個掃雷小游戲就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI