簡單說明下設計掃雷時的幾個要求:
*第一下不會被雷炸死;
*顯示該座標點周圍雷的個數;
*該座標周圍沒有雷時,可以實現展開一片沒有雷的區域。
首先我們得建造出棋盤,乙個為設計者看的棋盤顯示所以雷的分布情況(方便設計者測試),還有乙個棋盤就是全部都是由*組成的遊戲棋盤來給玩家掃雷。
首先我們先用巨集定義陣列的大小,rows和cols為陣列的大小,row和col則為需要列印出來的陣列的大小。
#define col 10
#define row 10
#define cols col+2
#define rows row+2
定義雷的個數,雷的個數的多少也是掃雷遊戲難度級別的區別。
enum mine_count
;
開始我們掃雷的設計:
列印設計者棋盤用陣列real_mine,列印玩家棋盤用陣列show_mine,將兩個陣列初始化,在設計者棋盤中字元0代表不是雷,字元1代表雷:
void initboard()
}}
初始化設計者棋盤並在棋盤x軸和y軸方向列印座標方便測試過程中檢視雷的位置:
void printboard()
}}
設計乙個函式來統計當前座標周圍雷的個數並顯示在當前座標上:
int countmine(int x, int y)
設計乙個函式來實現我們前面說的,當第一下就直接踩到雷時不讓玩家第一下就直接結束遊戲,讓玩家感覺到遊戲體驗極差,當第一下踩到雷時,該位置的雷重被新分配到其它沒有雷的位置其它功能照常:
void safemine()
}break;
}if (real_mine[x][y] == '0')
}else
}}
接著就是實現非雷區的展開,設計乙個函式對輸入的座標周圍沒有雷的地方進行展開:
void openmine(int x, int y)
if (real_mine[x - 1][y] == '0')
if (real_mine[x - 1][y + 1] == '0')
if (real_mine[x][y - 1] == '0')
if (real_mine[x][y + 1] == '0')
if (real_mine[x + 1][y - 1] == '0')
if (real_mine[x + 1][y] == '0')
if (real_mine[x + 1][y + 1] == '0')
}
後面就是設計乙個掃雷的函式,判斷玩家輸入的座標,玩家是否踩到雷被雷炸死,玩家是否找到所有的雷獲得遊戲勝利:
int sweepmine()
} else if (real_mine[x][y] == '1')
}else
return 0;
}
為了判斷最後玩家取得勝利,設計乙個函式統計所剩餘區域為雷的個數時玩家取得勝利:
int getminecount()
} }return count;
}
最好就是簡單掃雷遊戲三個組成部分:
第一部分:遊戲的標頭檔案
#ifndef __mines_h__
#define __mines_h__
#include#include#include#includetypedef unsigned int uint;
enum option
;enum mine_count
;#define col 10
#define row 10
#define cols col+2
#define rows row+2
void initboard(char board[rows][cols], char show[rows][cols], int rows, int cols);
void printboard(char board[rows][cols], int row, int col);
void mineboard(char board[rows][cols], int row, int col);
void setmine();
void findmine(char mine[rows][cols], char show[rows][cols], int row, int col);
void safemine();
void openmine(int row, int col);
int getminecount();
int sweepmine();
int countmine(char mine[rows][cols], int x, int y);
#endif//__mines_h__
第二部分:遊戲game()的函式部分
void printboard()
}break;
}if (real_mine[x][y] == '0')
}else
}}int sweepmine()
} else if (real_mine[x][y] == '1')
}else
return 0;
}void openmine(int x, int y)
if (real_mine[x - 1][y] == '0')
if (real_mine[x - 1][y + 1] == '0')
if (real_mine[x][y - 1] == '0')
if (real_mine[x][y + 1] == '0')
if (real_mine[x + 1][y - 1] == '0')
if (real_mine[x + 1][y] == '0')
if (real_mine[x + 1][y + 1] == '0') }
int getminecount()
} }return count;
}
第三部分是:遊戲測試部分
#include"test.h"
void game()
; char real_mine[rows][cols] = ;
int ret = 0;
initboard(show_mine,real_mine, row, col );
setmine();
mineboard(real_mine,row,col);)
printf("\n");
printboard(show_mine,row,col);
safemine();
if (getminecount() == easy_count)
mineboard(real_mine, row, col);
printf("\n");
printboard(show_mine, row, col);
while (1)
if (ret)
printboard(show_mine, row, col); }}
void menu()
int main()
} while (choice);
return 0;
}
醜陋**,還望多多包涵。
希望能得到大家的指點。
用C語言實現簡單的掃雷遊戲
1.通過觀察遊戲,我們可以想到需要用兩個二維陣列來實現掃雷的功能。2.遊戲剛開始,需要需要顯示棋盤,用 遮蓋雷的座標,所以要有乙個填充棋盤的函式。3.通過rand 函式,隨機生成雷的座標,埋雷的函式。4.每次掃過後,都要顯示新的棋盤,顯示棋盤的函式,同時顯示該座標周圍雷的個數,並在該座標上顯示出來。...
用C語言實現(掃雷遊戲)
include include include include pragma warning disable 4996 define rows 8 define cols 8 define mines 62 void menu 列印選單 void init mine char mine cols 2...
用C語言實現掃雷遊戲
本人能力不足,能力有待提公升,在敲 的過程中遇到了很多問題,在此不再一一贅述,現將 以及分析展示如下 include stdio.h include stdlib.h include time.h include string.h pragma warning disable 4996 define...