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