#該**由本人親測可以正常使用#
#由於小萌新是第一次編寫掃雷程式,以及小萌新知識水平有限,會有很多不足之處,希望諒解#
#僅作於小萌新學習成長的記錄,可能具有參考價值#
掃雷作為一款經典的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,其他地方...