目錄
一:游戲設計理念及思路
二:初步規(guī)劃的游戲界面
三:開始掃雷游戲的實現(xiàn)
注:1.創(chuàng)建三個文件,test.c用來測試整個游戲的運行,game.c用來實現(xiàn)掃雷游戲的主體,game.h用來函數(shù)聲明和包含頭文件
2.為方便定位坐標,在展示數(shù)組時添加行號和列號
四:謝謝觀看?
聽說看到日落金山的人,接下來的日子會順順利利,萬事勝意,生活明朗-----------林辭憂
一:游戲設計理念及思路
1.掃雷游戲就是如平常戰(zhàn)爭片里見到的,工兵去布滿雷的地區(qū)去一步步的排除雷,該游戲就簡單模擬該場景。
2.該游戲是在9*9的81個格子中隨機布置10個雷,然后通過排查坐標的形式慢慢排查出雷的位置
3.玩家通過輸入要排查坐標的位置來開始掃雷,如該位置是雷的話,則玩家被炸死,游戲結束,反之該位置將顯示周圍8個坐標位置雷的數(shù)量,便于玩家繼續(xù)思考排查
4.若排查完所有的無雷的71個坐標,則顯示掃雷成功
二:初步規(guī)劃的游戲界面
1.打開游戲便顯示游戲菜單
通過玩家選擇? ? 1:玩游戲? ? ?0:退出游戲? ? ? ? ?其余數(shù)字均顯示選擇錯誤重新選擇
2.開始玩游戲之后,顯示9*9的一個布置好10個雷的棋盤,為了隱藏雷的信息,可以創(chuàng)建兩個數(shù)組,mine數(shù)組用來存放雷的信息,show數(shù)組用來隱藏雷的信息,為方便起見,創(chuàng)建兩個字符數(shù)組,mine數(shù)組用‘1’表示雷,‘0’表示無雷,show數(shù)組全部用‘*’來顯示
3.如果要排查(8,0) 這個坐標的話,假設不是雷,那么就要統(tǒng)計周圍雷的個數(shù),會發(fā)現(xiàn)此時數(shù)組會越界訪問,為防止這種情況的發(fā)生,我們應該創(chuàng)建個11*11的格子,并且全部初始化為‘0’,我們正式掃雷時只使用其中的9*9的格子進行游戲
4.當玩家掃雷被炸死或者掃雷成功之后顯示mine數(shù)組中存放雷的信息
三:開始掃雷游戲的實現(xiàn)
注:1.創(chuàng)建三個文件,test.c用來測試整個游戲的運行,game.c用來實現(xiàn)掃雷游戲的主體,game.h用來函數(shù)聲明和包含頭文件
2.為方便定位坐標,在展示數(shù)組時添加行號和列號
3.? ? ?game.h
#pragma once
#include <stdio.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINECOUNT 10
#include <stdlib.h>
#include <time.h>
//初始化數(shù)組
void InitBoard(char arr[ROWS][COLS], int rows, int cols, char set);
//展示數(shù)組
void DisplayBoard(char arr[ROWS][COLS], int row, int col);
//在mine數(shù)組中隨即設置10個雷的信息
void SetMine(char arr[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
//排查周圍雷的數(shù)量
int GetMineCount(char mine[ROWS][COLS], int x, int y);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?test.c?文章來源:http://www.zghlxwxcb.cn/news/detail-819430.html
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void menu()
{
printf("****************\n");
printf("**** 1.play ****\n");
printf("**** 0.exit ****\n");
printf("****************\n");
}
void game()
{
//創(chuàng)建11*11的兩個字符數(shù)組 mine數(shù)組用來存放雷的信息,show數(shù)組用來展示排查雷的信息
char mine[ROWS][COLS] = {0};
char show[ROWS][COLS] = {0};
//初始化數(shù)組,用'0'來初始化mine數(shù)組,用'*'來初始化show數(shù)組
InitBoard(mine, ROWS, COLS, '0');
InitBoard(show, ROWS, COLS, '*');
//展示數(shù)組
//DisplayBoard(mine, ROW, COL);
//DisplayBoard(show, ROW, COL);
//在mine數(shù)組種隨機設置10個雷
SetMine(mine, ROW, COL);
//DisplayBoard(mine, ROW, COL);
DisplayBoard(show, ROW, COL);
//排查雷
FindMine(mine, show, ROW, COL);
}
void test()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();//上來先打印游戲菜單
printf("請輸入對應游戲選項的數(shù)字\n");
scanf("%d",&input);
switch (input)
{
case 1:game();
break;
case 0:printf("退出游戲\n");
break;
default:printf("選擇錯誤,請重新輸入\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?game.c?文章來源地址http://www.zghlxwxcb.cn/news/detail-819430.html
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
//初始化數(shù)組
void InitBoard(char arr[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
for (i = 0; i < rows; i++)
{
int j = 0;
for (j = 0; j < cols; j++)
{
arr[i][j] = set;
}
}
}
//展示數(shù)組
void DisplayBoard(char arr[ROWS][COLS], int row, int col)
{
int i = 0;
printf("-----開始掃雷-----\n");
for (i = 0; i <= row; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
int j = 0;
printf("%d ",i);
for (j = 1; j <= col; j++)
{
printf("%c ",arr[i][j]);
}
printf("\n");
}
}
//設置雷
void SetMine(char arr[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
int count = MINECOUNT;//雷的數(shù)量
while (count)
{
x = rand() % row + 1;//隨機生成下標
y = rand() % col + 1;
if (arr[x][y] == '0')
{
arr[x][y] = '1';//用'1'來表示雷
}
count--;
}
}
//排查周圍雷的數(shù)量
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
int i = 0;
int ret = 0;
for (i = x - 1; i <= x + 1; i++)
{
int j = 0;
for (j = y - 1; j <= y + 1; j++)
{
ret += (mine[i][j] - '0');
}
}
return ret;
}
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
int count = row * col - MINECOUNT;
int x = 0;
int y = 0;
int ret = 0;
while (ret<count)
{
printf("請輸入要排查坐標的數(shù)字\n");
scanf("%d%*c%d", &x, &y);
if (show[x][y] == '*')
{
if (mine[x][y] == '1')
{
printf("很遺憾,你被炸死了\n");
DisplayBoard(mine, ROW, COL);
break;
}
else
{
int ret=GetMineCount(mine, x, y);
show[x][y] = ret + '0';
DisplayBoard(show, ROW, COL);
}
}
else
{
printf("該坐標已經(jīng)被排查,請重新輸入坐標\n");
}
ret++;
}
if (ret == count)
{
printf("恭喜你,掃雷成功\n");
DisplayBoard(mine, ROW, COL);
}
}
四:謝謝觀看?
到了這里,關于c語言小游戲之掃雷的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!