资源简介

c++ 下控制台扫雷游戏。可以鼠标输入。代码有注释。

资源截图

代码片段和文件信息

//cleaner.cpp
//code::blocks 12.11  MinGW4.8   通过


#include
#include
#include
#include
#include 


//下面这两段,复制自MSDN,功能与 system(“cls“)相同,但是使用system(“cls“),会无法读取鼠标输入原因不知
#define PERR(bSuccess api){if(!(bSuccess)) printf(“%s:Error %d from %s on line %d\n“ __FILE__ GetLastError() api __LINE__);}
void MyCls(HANDLE) ;
void clrscr(void)
{
HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
MyCls(hStdOut);
return;
}
void MyCls(HANDLE hConsole)
{
COORD coordScreen={00};//设置清屏后光标返回的屏幕左上角坐标
BOOL bSuccess;
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;//保存缓冲区信息
DWORD dwConSize;//当前缓冲区可容纳的字符数
bSuccess=GetConsoleScreenBufferInfo(hConsole&csbi);//获得缓冲区信息
PERR(bSuccess“GetConsoleScreenBufferInfo“);
dwConSize=csbi.dwSize.X * csbi.dwSize.Y;//缓冲区容纳字符数目
//用空格填充缓冲区
bSuccess=FillConsoleOutputCharacter(hConsole(TCHAR)‘ ‘dwConSizecoordScreen&cCharsWritten);
PERR(bSuccess“FillConsoleOutputCharacter“);
bSuccess=GetConsoleScreenBufferInfo(hConsole&csbi);//获得缓冲区信息
PERR(bSuccess“ConsoleScreenBufferInfo“);
//填充缓冲区属性
bSuccess=FillConsoleOutputAttribute(hConsolecsbi.wAttributesdwConSizecoordScreen&cCharsWritten);
PERR(bSuccess“FillConsoleOutputAttribute“);
//光标返回屏幕左上角坐标
bSuccess=SetConsoleCursorPosition(hConsolecoordScreen);
PERR(bSuccess“SetConsoleCursorPosition“);
return;
}

//


#define Map_size 20 //地图大小,dos界面自行改
#define mine 30 //地雷数目


HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);     //读取鼠标输入的相关
HANDLE Hin=GetStdHandle(STD_INPUT_HANDLE);
COORD pos={00};
INPUT_RECORD mouse;
DWORD res;

int show();  //扫雷函数
int lay_mine();  //放置地雷
int count_mine();//周围地雷计数
int primary_menu();//主菜单
void white(int iint j); //展开白色
int mine_cleaner(); //扫雷主函数
int time();


SYSTEMTIME   st1st2;
int Num_mine[Map_size][Map_size];   //周围地雷计数
bool TorF_mine[Map_size][Map_size]; //是否为雷
bool state[Map_size][Map_size]; //是否显示过,,flase为没。true为显示过
bool gameover=false; //游戏结束
bool mine_mark[Map_size][Map_size];//flase为没有标记

using namespace std;
int temppxtemppytemppi;  //temppxtemppy全局变量存储点击坐标;temppi用于防止屏幕不断刷新
int mouseinput()  //读取鼠标输入
{
    ReadConsoleInput(Hin&mouse1&res);
    pos = mouse.Event.MouseEvent.dwMousePosition;
    if (mouse.EventType==MOUSE_EVENT&&mouse.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
    {
            temppx=pos.Y-1;
            temppy=pos.X/2-9;
            temppi=1;
    }
    if (mouse.EventType==MOUSE_EVENT&&mouse.Event.MouseEvent.dwButtonState==RIGHTMOST_BUTTON_PRESSED&&state[pos.Y-2][pos.X/2-10]==false&&
        mine_mark[pos.Y-2][pos.X/2-10]==false)
        {
             mine_mark[pos.Y-2][pos.X/2-10]=true;
             temppi=1;
        }
 /*  if (mouse.EventType==MOUSE_EVENT&&mouse.Event.MouseEvent.dwButtonState==RIGHTMOST_BUTTON_PRESSED&&state[pos.Y-2][pos.X/2-10]==true&&state[pos.Y-2][pos.X/2-10]==false)
        {
             mine_mark[pos.Y-2][pos.X/2-10]=false;
             

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        9041  2018-06-22 10:12  cleaner.cpp

评论

共有 条评论