C++扫雷游戏的简单制作

本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下

#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

以上是编写的头文件

#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;
}

更多精彩游戏小代码,请点击《游戏专题》阅读

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++实现简单扫雷游戏

    扫雷是一个经典的电脑小游戏,用C++来编一下,效果自己试一下 #include<stdio.h> #include<Windows.h> #define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY #define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY #define ORANGE FOREGROUND_RED |

  • C++实现扫雷游戏

    本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下 直接上代码 #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<queue> #include<ctype.h> #define A 17 //地图的高 #define B 17 //地图的宽 #de

  • C++实现扫雷经典小游戏

    用C++复现经典扫雷,供大家参考,具体内容如下 主要是dfs实现打开一片的操作,数字带有颜色,很真实. windows扫雷中鼠标左右键同时按也实现了,即试探. 先上图,详见下面代码: 代码中有详细注释,编译无任何错误警告. Ps.有bug请评论指出,谢谢啦~ 另外我觉得代码比较臃肿,有什么可以优化的也请提出~ #include<cstdio> #include<cstring> #include<algorithm> #include<conio.h> #i

  • C++如何实现简易扫雷游戏

    本文实例为大家分享了C++实现简易扫雷游戏的具体代码,供大家参考,具体内容如下 难点: 点击一次清理出一大片区域的功能,我采用的是先把点击的那一块的坐标存到一个队列里,然后取出里面的一个元素,再把这个元素周围的8块放进队列里,重复的不放,就可以对规定的区域做大面积清理了,另外为了右滑界面也加了不少代码比如一些颜色属性时钟移动效果还有光标之类的,实际上要想做一个简单的出来200行绰绰有余了,只要将程序模块化,一个函数解决一个问题,思路还是很清晰的. 此外,在写这个东西的几天里也学到了很多经验,终于

  • C++实现扫雷游戏(控制台版)

    本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下 需要开一个map.txt  写入地图 地图中 *表示空地   ; x表示地雷 ********** ********** **x******* ********** ********** ********** ********** ********** ********** 然后就是扫雷的控制台代码了,只简单的检测了一下 #include <stdio.h> #include <string.h> #def

  • C++实现一个扫雷小游戏

    本文实例为大家分享了C++实现扫雷小游戏的具体代码,供大家参考,具体内容如下 目前的版本是0.98版本,可以提出增加新功能意见哦 代码如下: #include<bits/stdc++.h> #include<windows.h> using namespace std; long long int c,dev,m,k,cnt,d,e,jie=10,z,abc,n,b[1000][1000],a[1000][1000],cc,cd,ce,def; //c是随机行,k是随机列 bool

  • C++实现扫雷小游戏

    本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<queue> #include<ctype.h> #define A 17 //地图的高 #define B 17 //地图的宽 #define C

  • C++实现扫雷游戏(控制台不闪屏版)

    之前写了一个C++ 的控制台扫雷小游戏,但由于过度使用system("cls")刷屏,导致闪屏,因此重写了一个改善的不闪屏版本,并把逻辑重新捋了一遍. map.h #ifndef MAP_H_ #define MAP_H_ #define MAX_WID 18 #define MAX_LEN 32 #define UP_EDGE 1 //上边界 #define LEFT_EDGE 1 //左边界 #define RIGHT_EDGE _len //右边界 #define DOWN_ED

  • C++学习心得之扫雷游戏

    本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下 一.序言 创建一个9*9有10个雷的扫雷游戏 文章的顺序是按照我当时的编程顺序写的,顺便写下我当初的一点思路,总的代码在文章最后,前面的都是分散的函数,有需要的朋友直接复制最后的 二.创建 创建一个头文件,一个放游戏的程序,一个放运行测试的程序 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdlib.h>//生成随机数 #include<stdio.h> #inc

  • C++实现扫雷小游戏(控制台版)

    本文为大家分享了C++实现扫雷小游戏的具体代码,供大家参考,具体内容如下 程序功能: 提供三种模式:初级.中级.高级 操作模式:wsad控制光标移动,空格键打开方块 提供扫雷地图的类 map.h #ifndef MAP_H_ #define MAP_H_ #define MAX_LENGTH 32 //可以提供的地图最大长度 #define MAX_WIDTH 18 //可以提供的地图最大宽度 #define UP_EDGE 1 //上边界 #define DOWN_EDGE _wid //下边

随机推荐