C++掃雷游戲的簡(jiǎn)單制作
更新時(shí)間:2020年03月17日 13:17:30 作者:我有顆小粒的痣
這篇文章主要為大家詳細(xì)介紹了C++掃雷游戲的簡(jiǎn)單制作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C++實(shí)現(xiàn)掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下
#ifndef SAOLEI_H
#define SAOLEI_H
class Block
{
friend class Saoleigame;
public:
Block();
bool isShown();
void setnum(int);
int getnum();
bool isbomb();
protected:
int num;
bool flag_show;
int x;
int y;
};
class Saoleigame
{
public:
Saoleigame();
~Saoleigame();
void _init_();
void gameStart();
void reflash();
void check(int x, int y);
void click(int x, int y);
void gameOver();
private:
Block juzheng[100];
bool flag;
int b[10];
unsigned int score;
};
#endif
以上是編寫(xiě)的頭文件
#include<iostream>
#include<cstdlib>
#include<ctime>
#include"Saolei.h"
using namespace std;
Saoleigame::Saoleigame()
{
_init_();
flag = true;
score = 0;
}
Saoleigame::~Saoleigame()
{
}
void Saoleigame::_init_()
{
srand(time(NULL));
for( int i = 0; i < 10; i++ )
{
b[i] = -1;
}
for(int i = 0; i < 10; i ++ )
{
bool temp_flag = false;
do
{
int temp = (unsigned int)rand()%100;
for( int j = 0; j < i; j ++)
{
if(temp == b[i])
{
temp_flag = true;
}
}
if(!temp_flag)
{
b[i] = temp;
}
}while(temp_flag);
}
for(int i = 0; i < 10; i++ )
{
juzheng[b[i]].setnum(-1);
}
for( int i = 0; i < 10; i ++ )
{
for( int j = 0; j < 10;j++)
{
juzheng[i*10+j].x = i+1;
juzheng[i*10+j].y = j+1;
}
}
for(int m = 0; m < 10; m ++ )
{
for( int n = 0; n < 10 ; n++ )
{
check(m + 1, n + 1);
}
}
}
void Saoleigame::check(int x, int y)
{
if(juzheng[(x - 1)*10 + (y - 1)].num == -1)return;
int trans = (x - 1)*10 + (y - 1);
int number = 0;
for( int i = -1; i < 2; i ++ )
{
for(int j = -1; j < 2; j ++)
{
if(!(x + i<= 0 && x + i >= 10 || j + y <= 0 && y + j >= 10))
{
if(juzheng[(x + i - 1)*10 + (y + j - 1)].num == -1) number ++;
}
}
}
juzheng[(x - 1)*10 + (y - 1)].setnum(number);
}
void Saoleigame::click(int x, int y)
{
if(juzheng[(x- 1)*10 + (y - 1)].num == 0)
{
for( int i = -1; i < 2; i ++ )
{
for(int j = -1; j < 2; j ++)
{
if(!((x + i<= 0 || x + i > 10 )|| (j + y <= 0 || y + j > 10)) && !(i == 0&& j ==0) && !juzheng[(x+i- 1)*10 + (y +j- 1)].flag_show){
juzheng[(x+i- 1)*10 + (y +j- 1)].flag_show = true;
click(x + i, y + j);
}
}
}
}
juzheng[(x- 1)*10 + (y - 1)].flag_show = true;
return;
}
void Saoleigame::gameStart()
{
do
{
reflash();
int x, y;
cout<<"input the position: ";
cin >> x>> y;
if(juzheng[(x-1)*10 + (y-1)].isbomb())
{
gameOver();
return;
}
else
{
click(x , y);
}
}while(flag);
}
void Saoleigame::reflash()
{
system("cls");
score = 0;
cout<<" 掃雷"<<endl;
cout<<" 1 2 3 4 5 6 7 8 9 10"<<endl;
cout<<" -------------------"<<endl;
for(int i = 0; i < 100; i ++ )
{
if(i%10 == 0)
{
if(i /10 + 1 == 10)cout<<10<<"|";
else cout<<i /10 + 1<<" |";
}
if(juzheng[i].isShown())
{
if(juzheng[i].isShown() && (juzheng[i].getnum())!=-1)
{
score ++;
}
if((juzheng[i].getnum())==-1)cout <<"*"<<"|";
else cout <<juzheng[i].getnum()<<"|";
}
else
{
cout<<" |";
}
if((i+1)%10 == 0)cout<<endl;
}
cout<<" -------------------"<<endl;
cout<<"score:"<<(score*100)/95<<endl;
}
void Saoleigame::gameOver()
{
for(int i = 0 ; i < 10 ; i++ )
{
juzheng[b[i]].flag_show = true;
}
reflash();
cout<<"Game Over"<<endl<<endl;
flag = false;
}
Block::Block()
{
flag_show = false;
num = 0;
}
bool Block::isShown()
{
return flag_show;
}
void Block::setnum(int _num)
{
num = _num;
}
int Block::getnum()
{
return num;
}
bool Block::isbomb()
{
return num == -1;
}
更多精彩游戲小代碼,請(qǐng)點(diǎn)擊《游戲?qū)n}》閱讀
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
一步步從底層入手搞定C++引用與內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)是代碼插入到調(diào)用者代碼處的函數(shù),內(nèi)聯(lián)函數(shù)通過(guò)避免被調(diào)用的開(kāi)銷(xiāo)來(lái)提高執(zhí)行效率,下面這篇文章主要給大家介紹了關(guān)于如何從底層入手搞定C++引用與內(nèi)聯(lián)函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-03-03
C語(yǔ)言中操作進(jìn)程信號(hào)的相關(guān)函數(shù)使用詳解
這篇文章主要介紹了C語(yǔ)言中操作進(jìn)程信號(hào)的相關(guān)函數(shù)使用詳解,分別是signal()函數(shù)和kill()函數(shù)的用法,需要的朋友可以參考下2015-09-09
C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
C++設(shè)計(jì)一個(gè)簡(jiǎn)單內(nèi)存池的全過(guò)程
利用C/C++開(kāi)發(fā)大型應(yīng)用程序中,內(nèi)存的管理與分配是一個(gè)需要認(rèn)真考慮的部分,下面這篇文章主要給大家介紹了關(guān)于C++設(shè)計(jì)一個(gè)簡(jiǎn)單內(nèi)存池的全過(guò)程,需要的朋友可以參考下2021-09-09

