摘要:新人小白的第一篇博客,有什么不好之處望多提意見。這個掃雷小游戲主要是基于二維數組,循環與基本的函數知識等。請輸入坐標提示玩家輸入坐標。換行是為了看著好看,要不然打印出來的數組會變形的。用來接收判斷輸贏的函數的返回值。
???????新人小白的第一篇博客,有什么不好之處望多提意見。
? ? ? ? 這個掃雷小游戲主要是基于二維數組,循環與基本的函數知識等。
本人用的vs2017,在開始上代碼之前還是說一下,兩個源文件,test主要是雜七雜八的如何玩掃雷游戲等一些界面代碼,主要的游戲實現是在game.c;至于game.h是裝進行聲明實現游戲功能的函數,以及定義一些常量。
廢話實在不會多說,上代碼吧。
?test.c? :
#define _CRT_SECURE_NO_WARNINGS#include "game.h"http://其他頭文件都放在game.h里,game.c也需要引用,這就比較方便。(往下看main函數)void menu(){ printf("**********************************/n"); printf("********1、enter******************/n"); printf("********0、exit ******************/n"); printf("**********************************/n");}void game()//ROWS,COLS,ROW,COL,LEI,在后面會說到。{ char mine[ROWS][COLS] = { 0 };//創建二維數組進行用來裝雷與排雷,這里用‘1’表示雷,‘0’放在 //無雷的地方,但是為了避免排雷時顯示周圍有一個雷的時候容易混淆,就一數組專門放雷(mine),一個 //數組是給玩家排雷的(player). char player[ROWS][COLS] = { 0 }; restart(mine,ROWS,COLS,"0");//給數組進行初始化的,mine都放0,一會再放雷 restart(player, ROWS,COLS,"*");//player都放上"*",表示未知的坐標,等玩家選擇一個坐標,進 //行排雷時候,將"*"替換成雷數,炸死就兩說了 display(player, ROWS, COLS);//將二維數組打印出來的函數,這里肯定是打印出來player set(mine, ROW, COL,LEI);//布置雷的函數,其實這里函數與display放反了,但影響不大,玩家開 //始排雷時是在下面,布置雷之后,不會出現太大的問題。 //display(mine, ROWS, COLS);(你當然可以在布置雷之后看一下雷的情況,就如開卷考試哦) int w = 1;//這個變量主要是為了后面代碼執行。 while (w)//接下來是玩的過程,如果沒有炸死就肯定要重復排雷,直到所有無雷的地點都找到就break { int x;//創建兩個儲存坐標的變量。 int y; printf("請輸入坐標>:/n");//提示玩家輸入坐標。 scanf("%d%d", &x, &y); if (x <= ROW && y <= COL)//玩家是個神奇的生物,你需要判斷他輸入的坐標是否在數組范圍內 //如果坐標合法往下就執行,非法就else; { if (mine[x][y] == "1")//非常幸運的踩雷了。(因為雷都是放在mine里的,判斷時,找雷時 //得用mine) { printf("很抱歉,你被炸死了。/n"); printf("/n");//換行是為了看著好看,要不然打印出來的數組會變形的。 display(player, ROWS, COLS); printf("/n"); display(mine, ROWS, COLS);//讓他炸死的明白點。 break; } else { int i = find(mine, x, y);//輸入的坐標中無雷,用find函數查看周圍的8個坐標中有 //幾個雷,其返回值就是雷的個數。 player[x][y] = i + "0";//i是一個整形,加上‘0’之后才能變成char,這時再賦予 //player中的同一個坐標,將‘*’變成雷的個數 if (i != 0)//用i判斷周圍雷的個數,如果周圍8個坐標中有雷,那就不需要連爆,將 //player打印出來 { display(player, ROWS, COLS); } else//如果周圍8個坐標中都沒有雷,那就要開始連爆了 { mid(x, y, mine, ROWS, COLS, player);//這是一個中間過渡函數,里面裝的是 //用來連爆的函數,將兩個數組都傳過來是為了直接在函數內部進行賦值,排雷之后將爆開的地方直接 //賦值。 display(player, ROWS, COLS); } } } else { printf("坐標出界,請重新輸入。/n"); } w = is_win(player, "*");//w用來接收判斷輸贏的函數is_win的返回值。 if (!w)//如果將所有雷的位置都找到了,那就返回0,所以用! { printf("排雷成功!!!/n"); printf("/n"); display(mine, ROWS, COLS); printf("/n"); display(player, ROWS, COLS); break; } }}int main(){ srand((unsigned int)time(NULL));//這個為布雷的隨機數函數。 int input = 0; do//游戲常用循環do while。 { menu();//運行這個程序就是要玩游戲,先打印個菜單。 printf("請選擇>:(0/1)/n");//1是玩游戲,0是退出。 scanf("%d", &input);//同時input也是循環的判斷條件,輸入其他東東的時候都不是0,那就再 //來一遍 switch (input) { case 1: printf("游戲開始。/n"); game();//游戲主要的實現函數都在里面 break; case 0: printf("退出游戲。/n"); break; default: printf("選擇錯誤,請重新選擇。/n"); break; } } while (input); return 0;}
game.h? ? :
#pragma once#include #include #include #define ROW 9 //創建數組使用的全局變量,放在這里是為了以后如果想要改變數組大小,可以方便一些,因 //為傳參時基本都用的他們,一改全改。#define COL 9#define ROWS ROW + 2//排雷時在邊界上的坐標是很容易越界的,這是不如擴大一圈范圍,防止越界,并且 //這一圈只是為了防止越界,只放零就好,不要進行其他操作,并且為了兩個數組坐標 //完全相同,便于賦值等操作,所以也應將player擴大一圈,并周圍放上‘*’#define COLS COL + 2#define LEI 10//這是放雷的個數void restart(char arr[ROWS][COLS],int rows,int cols, char n);void display(char arr[ROWS][COLS],int rows,int cols);void set(char arr[ROWS][COLS], int row, int col,int lei);int find(char arr[ROWS][COLS], int x, int y);void mid(int x, int y, char arr[ROWS][COLS],int rows,int cols,char pp[ROWS][COLS]);void a_enlarge(int x, int y,char arr[ROWS][COLS],char pp[ROWS][COLS]);void b_enlarge(int x, int y, char arr[ROWS][COLS], char pp[ROWS][COLS]);void c_enlarge(int x, int y, char arr[ROWS][COLS], char pp[ROWS][COLS]);void d_enlarge(int x, int y, char arr[ROWS][COLS], char pp[ROWS][COLS]);void e_enlarge(int x, int y, char arr[ROWS][COLS], char pp[ROWS][COLS]);void f_enlarge(int x, int y, char arr[ROWS][COLS], char pp[ROWS][COLS]);void g_enlarge(int x, int y, char arr[ROWS][COLS], char pp[ROWS][COLS]);void h_enlarge(int x, int y, char arr[ROWS][COLS], char pp[ROWS][COLS]);int is_win(char arr[ROWS][COLS], char n);
game.c代碼太長了,就放在另一篇了?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119398.html
摘要:上一期咱們用語言實現了三子棋的小游戲語言實現三子棋今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實現了三子棋的小游戲? C語言實現三子棋? ? ? ?今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
目錄 ?前言:●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教! ???????? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——By 作者:新曉·故知 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
摘要:展示雷盤和初始化雷盤不一樣,展示雷盤只需要用即可,并不需要將都展示出來,只是為了我們更好的計算掃雷的位置周圍的雷的數量。 目錄 1、需求分析 2、程序架構 3、代碼實現(分函數呈現) (1)主函數代碼實現 分析: 異常處理: (2)游戲主函數實現 分析: (3)初始化函數的實現 分析: (4...
摘要:設計實現掃雷游戲大致思路創建文件想法實現設計一個函數,實現建議菜單循環和分支選擇游戲選項創造一個掃雷版面版面的大小最后是要可控的如何存放雷和版面的信息呢考慮排查雷時候的思路,我們要判斷該位置周圍個格子里面是否有雷初始化 ...
摘要:作者時間網站地址摘要語言實現我們小時候玩過的掃雷游戲,最近看到了一些掃雷游戲的簡單實現,但是總有功能上的缺失,玩起來不那么的原汁原味,因此我增加了一些新功能確保玩家首次排雷一定不會炸死。 ...
閱讀 1788·2023-04-26 01:41
閱讀 3088·2021-11-23 09:51
閱讀 2749·2021-10-09 09:43
閱讀 9067·2021-09-22 15:13
閱讀 2465·2021-09-07 09:59
閱讀 2636·2019-08-30 15:44
閱讀 1141·2019-08-30 12:45
閱讀 2628·2019-08-30 12:43