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_EDGE _wid //下边界

struct Position { //用于表示位置

short x;

short y;

};

struct MapInfo { //表示扫雷图的信息

int n; //-1表示地雷,0表示空格,1~8表示雷数

bool flag; //是否已经被打开

};

void gotoxy(short, short); //光标移动函数

class Map {

private:

int _len, _wid; //图的长宽

int _mines, _blanks; //雷数和空格数

Position pos; //光标位置

MapInfo data[MAX_WID][MAX_LEN]; //地图

public:

void ChooseMode(); //选择游戏模式,初级,中级,高级

void Draw(); //画出地图

void InitMap(); //初始化地图信息

void SetMine(); //设置地雷

void SetNum(); //根据周围地雷数计算数字

void Move(); //负责移动

void OpenBlock(); //打开方块

void OpenAll(); //如果触雷则全部打开

void Play(); //提供游戏操作接口

bool IfWin(); //判断输赢

bool IfLose();

// void show();

};

#endif

map类的实现

map.cpp

#include "map.h"

#include

#include

#include //提供随机函数,rand(), srand()

#include //提供time()函数

#include //提供不回显的输入函数getch()

#include //提供system()内命令

#define GOTOXY( pos ) gotoxy( 2 * (pos).x - 1, (pos).y - 1 )

#define POSITION_POS _wid+1 //游戏信息的位置,这里是位置信息

#define POSITION_BLANKS _wid+2 //空格数位置

#define POSITION_TIMES _wid+3 //时间显示位置

#define POSITION_SITUATION _wid+4 //输赢状态位置

using std::cin;

using std::cout;

void gotoxy(short x, short y) { //自行百度

COORD pos = { x, y };

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hOut, pos);

}

void Map::ChooseMode() {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值