萌新對C語言實現10 10掃雷的一些心得

2021-09-19 08:44:53 字數 2977 閱讀 5302

#該**由本人親測可以正常使用#

#由於小萌新是第一次編寫掃雷程式,以及小萌新知識水平有限,會有很多不足之處,希望諒解#

#僅作於小萌新學習成長的記錄,可能具有參考價值#

掃雷作為一款經典的windows小遊戲,從它誕生開始至今經久不衰,仍具有一定的娛樂價值,包括小萌新自己平常都有拿它娛樂

其原理在此就不多加贅述了。

先是各個模組的分塊介紹,文章末會有完整的**

#include#include#include#include#define row 12	//為什麼要將陣列大小定義為12?--是為了防止陣列越界 

#define col 12

char show[row][col]=;//初始玩家地圖

char design[row][col]=;//初始開發者地圖

將陣列定義成12*12是為了防止陣列越界,因為在計算(1,1)點周圍的雷數時,如果它僅是10*10的陣列,因為計算(1,1)點周圍的8個格內是否有雷時,僅有3個格可用(即右,下和右下),就會產生陣列越界的問題,並且在10*10陣列操作時,陣列下標是從0開始,會帶來很大不方便(即輸入的直觀性),注意:定義的是兩個字元陣列!!!(小萌新曾經用乙個整型二位陣列來來標記掃雷格內的值,在統計乙個格周圍的雷數時,會導致(假設埋雷點賦值為1,在相加時會影響到其他格的計算))!!!

void creat()//將開發者地圖和玩家地圖 	}	

}

rand()函式請與sand()一同使用,rand()%10+1 能產生1-10的隨機數,傳入的n是雷數,用count來確定迴圈何時結束,即埋雷工作全部完成

int countmine(int x,int y)//計算一點周圍的雷數 

計算一格周圍的雷數,並返回num的值

void open(int x,int y)/*展開函式

預設傳進的x,y點不是雷點 ,通過checkpoint函式來判斷 */

為何要加上乙個字元0,因為在ascii表中,數字與其對應的字元相差48,字元0的ascii的值就是48,將countmine函式傳回的值賦值給展示給玩家的陣列

int checkpoint(int x,int y)//判斷是否為雷點函式 

void flag(int x,int y,int n)//給標記位置更換符號 

傳入的是點座標和主函式中的choice的值,用於進行標記和取消標記

int  score(int count)//記分函式 

return score;

}

記錄分數的函式,每標對乙個雷,得分+1

int checkwin(int count,int count)//勝負函式 

}else return 0;

if(num==count)

return 1;

}

不排除運氣成分的判斷勝負函式

接下來是主函式(包括介面的迴圈與介面重新整理)

int main() 

}if(choice == 2 )

else

}if(choice == 3)

else

}if(choice == 0)

break;

if(checkwin(count,count))

system("cls");//清屏函式

printplayer();

printdesign();

printf("1.掃瞄");printf(" ");printf("2.標記");printf(" ");printf("3.取消標記");

printf(" ");printf("0.exit\n");

printf("剩餘標記次數:%d\n",count);

printf("請輸入操作編號:\n");

scanf("%d",&choice);

}end:

return 0;

}

中間有一部分為了跳出迴圈而使用了goto函式,不推薦大家頻繁使用。

完整**如下:

#include#include#include#include#define row 12	//為什麼要將陣列大小定義為12?--是為了防止陣列越界 

#define col 12

char show[row][col]=;//初始玩家地圖

char design[row][col]=;//初始開發者地圖

void creat()//將開發者地圖和玩家地圖

}if(choice == 2 )

else

}if(choice == 3)

else

}if(choice == 0)

break;

if(checkwin(count,count))

system("cls");//清屏函式

printplayer();

printdesign();

printf("1.掃瞄");printf(" ");printf("2.標記");printf(" ");printf("3.取消標記");

printf(" ");printf("0.exit\n");

printf("剩餘標記次數:%d\n",count);

printf("請輸入操作編號:\n");

scanf("%d",&choice);

}end:

return 0;

}

以下為小萌新的一些心得:掃雷程式的主要陣列操作其實比較簡單,但是用兩個不同的字元陣列來儲存和輸出真的思想很關鍵,想起了自己之前用乙個整型陣列做了一大半最後推翻重來(說多了都是自己蠢),最後,小萌新會勤勉學習的,有緣再見!

C語言實現掃雷

思路,建立兩個二維陣列,乙個作為雷區,乙個作為顯示區,雷區只在程式結束時顯示。每次使用者操作後重新整理顯示區的陣列成員。建立雷區二維陣列12 12,顯示區二維陣列10 10,用 0 代表安全區,1 代表雷區。雷區的陣列長度設定比顯示區的陣列長度多2,方便邊框區域計算周圍地雷數量。標頭檔案宣告 inc...

C語言實現掃雷

首先來講一講掃雷的規則 隨便點乙個格仔,會有一塊,上面的數字就代表數字周圍八個格仔會有幾個雷,是1他周圍就只有1個雷,2就有兩個雷 寫 的時候要注意構思 的框架,每個函式實現的意義在 中都有體現,首先看一下頭檔案game.h define row 9 define col 9 include inc...

c語言實現掃雷

void menu 樸實無華的選單 因為我們這裡要有乙個陣列來存放雷,乙個陣列給玩家看,所以在這裡我們用兩個陣列,給我們設定雷的我們暫且稱為my board,給玩家看的稱為y board,如下 示例 char ret 0 在這裡建立兩個陣列自己看的叫my board,將要放置雷的地方置為1,其他地方...