生活随笔
收集整理的這篇文章主要介紹了
用C语言实现扫雷游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用C語言實現掃雷游戲
—掃雷游戲的基本思路
1.打印游戲的菜單
2.為了便于后面排查周圍雷的個數,初始化兩個二維數組,一個作為向玩家顯示的面板,一個作為布雷的面板。兩個數組嵌套在一起。如下圖所示:
3. 將初始化的兩個數組打印出來
4. 在布雷的數組里面隨機放入雷
5. 玩家掃雷
.輸入要排查的區域的坐標
.如果第一次遇到雷,將雷移走,繼續游戲
.如果再次遇到雷,炸死,游戲結束,并且顯示布雷的面板
.如果不是雷,統計周圍類的個數,并且顯示在輸 入的坐標所對應的區域里
.如果周圍沒有雷的話,所要排查的區域四周展開
.顯示玩家面板
.統計沒有布雷的區域的個數,用來判斷游戲是否結束
—
現在按照設計的思路寫程序來實現我們的想法
新建一個項目:掃雷.h
#ifndef _SAOLEI__H__
#define _SAOLEI__H__
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 10
#define COL 10
#define COUNT 20
void init(
char mine_board[ROW][COL],
char player_board[ROW +
2][COL +
2],
int row,
int col);
void display_mine(
char mine_board[ROW][COL],
int row,
int col);
void display_player(
char player_board[ROW+
2][COL+
2],
int row,
int col);
void put_mine(
char mine_board[ROW][COL],
int row,
int col);
void find_mine(
char mine_board[ROW][COL],
char player_board[ROW +
2][COL +
2],
int row,
int col);
void safe_mine(
char mine_board[ROW][COL],
int x,
int y,
int row,
int col);
int count_board(
char mine_board[ROW][COL],
int row,
int col);
#endif
---掃雷.c
#include"掃雷.h"
void init(
char mine_board[ROW][COL],
char player_board[ROW+
2][COL+
2],
int row,
int col)
{
int i =
0;
int j =
0;
for (i =
0; i < row; i++){
for (j =
0; j < col; j++){mine_board[i][j] =
'0';}}
for (i =
0; i < row+
2; i++){
for (j =
0; j < col+
2; j++){player_board[i][j] =
'*';}}
}
void display_mine(
char mine_board[ROW][COL],
int row,
int col)
{
int i =
0;
int j =
0;
for (i =
0; i < row; i++){
for (j =
0; j < col; j++){
printf(
"%3c", mine_board[i][j]);}
printf(
"\n");}
}
void display_player(
char player_board[ROW+
2][COL+
2],
int row,
int col)
{
int i =
0;
int j =
0;
printf(
" ");
for (i =
1; i <col+
1; i++){
printf(
" %d", i);}
printf(
"\n");
printf(
" ------------------------------\n");
for (i =
1; i <row+
1; i++){
printf(
"%3d", i);
printf(
"|");
for (j =
1; j <col+
1; j++){
printf(
"%3c",player_board[i][j]);}
printf(
" \n");}
}
void put_mine(
char mine_board[ROW][COL],
int row,
int col)
{srand((
unsigned int)time(NULL));
int count =COUNT;
while (count){
int i = rand() % row+
1;
int j = rand() % col+
1;
if (mine_board[i][j] ==
'0'){mine_board[i][j] =
'1';count--;}}
}
int count_mine(
char mine_board[ROW][COL],
int x,
int y)
{
int count =
0;
if (mine_board[x -
1][y -
1] ==
'1'){count++;}
if (mine_board[x -
1][y ] ==
'1'){count++;}
if (mine_board[x -
1][y +
1] ==
'1'){count++;}
if (mine_board[x][y +
1] ==
'1'){count++;}
if (mine_board[x+
1][y+
1] ==
'1'){count++;}
if (mine_board[x +
1][y] ==
'1'){count++;}
if (mine_board[x+
1][y -
1] ==
'1'){count++;}
if (mine_board[x][y -
1] ==
'1'){count++;}
return count;
}
void safe_mine(
char mine_board[ROW][COL],
int x,
int y,
int row,
int col)
{
int i =
0;
int j =
0;mine_board[x][y] =
'0';i = x;j = y;
while (
1){x = rand() % row +
1;y = rand() % col +
1;
if (x != i&&y != j&&mine_board[x][y] ==
'1'){;}
if (x != i&&y != j&&mine_board[x][y] !=
'1'){mine_board[x][y] =
'1';
break;}}
}
void find_mine(
char mine_board[ROW][COL],
char player_board[ROW +
2][COL +
2],
int row,
int col)
{
int x =
0;
int y =
0;
int choice =
0;
int count =
0;
printf(
"請輸入要排查的區域的坐標:\n");
scanf(
"%d%d", &x, &y);
if ((
1 <= x&&x <= row) && (
1 <= y&&y <= col)){
while (
1){
if (mine_board[x][y] ==
'1'){safe_mine(mine_board, x, y, ROW, COL);
goto flag;}
else{
break;}}}
flag:
while (
1)
{
printf(
"請輸入要排查的區域的坐標:\n");
scanf(
"%d%d", &x, &y);
if ((
1 <= x&&x <= row) && (
1 <= y&&y <= col)){
if (mine_board[x][y] ==
'1'){
printf(
"你踩到雷了!游戲結束!\n");display_mine(mine_board, ROW, COL);}
else{
int ret = count_mine(mine_board, x, y);player_board[x][y] = ret +
'0';
if (ret ==
0){player_board[x -
1][y -
1] = player_board[x -
1][y] = player_board[x -
1][y +
1] = player_board[x][y +
1] = player_board[x +
1][y +
1] = player_board[x +
1][y] = player_board[x +
1][y -
1] = player_board[x][y -
1] =
' ';}display_player(player_board, ROW, COL);count++;}
if (count == ROW*COL - COUNT){
printf(
"恭喜你,掃雷成功!\n");display_player(player_board, ROW, COL);
break;}}
elseprintf(
"輸入錯誤請重新輸入!\n"); }
}
---test.c
#include"掃雷.h"
void menu()
{
printf(
"######################\n");
printf(
"####### 1.play #######\n");
printf(
"####### 0.exit #######\n");
printf(
"######################\n");
}
void game()
{
int ret =
0;
char mine_board[ROW][COL] = {
0 };
char player_board[ROW +
2][COL +
2] = {
0 };init(mine_board, player_board, ROW, COL);display_player(player_board, ROW, COL);put_mine(mine_board, ROW, COL);find_mine(mine_board, player_board, ROW, COL);
}
int main()
{menu();
printf(
"請選擇:>\n");
int choose =
0;
scanf(
"%d", &choose);
switch (choose){
case 1:game();
break;
case 0:
printf(
"退出游戲\n");
break;
default:
printf(
"選擇錯誤請重新輸入!\n");
break;}
while (choose);system(
"pause");
return 0;
}
—簡單的掃雷游戲就實現了!
總結
以上是生活随笔為你收集整理的用C语言实现扫雷游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。