我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++如何实现鼠标控制的黑框象棋

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++如何实现鼠标控制的黑框象棋

这篇文章将为大家详细讲解有关C++如何实现鼠标控制的黑框象棋,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

本文实例为大家分享了C++实现鼠标控制的黑框象棋的具体代码,

该象棋小游戏的特色

有颜色标注出 红方和绿方
可以用鼠标控制

颜色原理

直接调用用Windows自带的颜色API
用到了 颜色头文件.h

代码.

//consolecolor.hpp这是着色的实现头文件#pragma once#include<Windows.h>//调用win32API函数#include<iostream>//调用flush成员函数,首先刷新缓冲区namespace color//命名空间为color,防止名字冲突{    //颜色常量定义,分为掩码,前景色,背景色    static const WORD bgMask(BACKGROUND_BLUE |        BACKGROUND_GREEN |        BACKGROUND_RED |        BACKGROUND_INTENSITY);    static const WORD fgMask(FOREGROUND_BLUE |        FOREGROUND_GREEN |        FOREGROUND_RED |        FOREGROUND_INTENSITY);    static const WORD fgBlack(0);    static const WORD fgLoRed(FOREGROUND_RED);    static const WORD fgLoGreen(FOREGROUND_GREEN);    static const WORD fgLoBlue(FOREGROUND_BLUE);    static const WORD fgLoCyan(fgLoGreen | fgLoBlue);    static const WORD fgLoMagenta(fgLoRed | fgLoBlue);    static const WORD fgLoYellow(fgLoRed | fgLoGreen);    static const WORD fgLoWhite(fgLoRed | fgLoGreen | fgLoBlue);    static const WORD fgGray(fgBlack | FOREGROUND_INTENSITY);    static const WORD fgHiWhite(fgLoWhite | FOREGROUND_INTENSITY);    static const WORD fgHiBlue(fgLoBlue | FOREGROUND_INTENSITY);    static const WORD fgHiGreen(fgLoGreen | FOREGROUND_INTENSITY);    static const WORD fgHiRed(fgLoRed | FOREGROUND_INTENSITY);    static const WORD fgHiCyan(fgLoCyan | FOREGROUND_INTENSITY);    static const WORD fgHiMagenta(fgLoMagenta | FOREGROUND_INTENSITY);    static const WORD fgHiYellow(fgLoYellow | FOREGROUND_INTENSITY);    static const WORD bgBlack(0);    static const WORD bgLoRed(BACKGROUND_RED);    static const WORD bgLoGreen(BACKGROUND_GREEN);    static const WORD bgLoBlue(BACKGROUND_BLUE);    static const WORD bgLoCyan(bgLoGreen | bgLoBlue);    static const WORD bgLoMagenta(bgLoRed | bgLoBlue);    static const WORD bgLoYellow(bgLoRed | bgLoGreen);    static const WORD bgLoWhite(bgLoRed | bgLoGreen | bgLoBlue);    static const WORD bgGray(bgBlack | BACKGROUND_INTENSITY);    static const WORD bgHiWhite(bgLoWhite | BACKGROUND_INTENSITY);    static const WORD bgHiBlue(bgLoBlue | BACKGROUND_INTENSITY);    static const WORD bgHiGreen(bgLoGreen | BACKGROUND_INTENSITY);    static const WORD bgHiRed(bgLoRed | BACKGROUND_INTENSITY);    static const WORD bgHiCyan(bgLoCyan | BACKGROUND_INTENSITY);    static const WORD bgHiMagenta(bgLoMagenta | BACKGROUND_INTENSITY);    static const WORD bgHiYellow(bgLoYellow | BACKGROUND_INTENSITY);    //设置颜色的实现函数,主要是调用win32的API和一些位运算。    void setConsoleColor(WORD mask, WORD c)    {        static HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);        if(hStdout==NULL)return;        CONSOLE_SCREEN_BUFFER_INFO csbi;        GetConsoleScreenBufferInfo(hStdout, &csbi);        csbi.wAttributes &= ~mask;        csbi.wAttributes |= c;        SetConsoleTextAttribute(hStdout, csbi.wAttributes);    }    //用到模板是为了通用,不仅cout,cerr可以染色,wcout,wcerr等也可以着色,自己定义的流只要满足模板都可以。    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& fg_white(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(fgMask, fgLoWhite);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& fg_blue(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(fgMask, fgHiBlue);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& fg_green(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(fgMask, fgHiGreen);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& fg_red(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(fgMask, fgHiRed);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& fg_cyan(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(fgMask, fgHiCyan);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& fg_magenta(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(fgMask, fgHiMagenta);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& fg_yellow(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(fgMask, fgHiYellow);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& fg_black(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(fgMask, fgBlack);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& bg_white(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgLoWhite);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& bg_blue(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgHiBlue);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& bg_green(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgHiGreen);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& bg_red(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgHiRed);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& bg_cyan(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgHiCyan);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& bg_magenta(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgHiMagenta);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& bg_yellow(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgHiYellow);        return os;    }    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& bg_black(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgBlack);        return os;    }    //清空屏幕,还原本色    template<typename charT, typename traits>    inline std::basic_ostream<charT, traits>& clr(std::basic_ostream<charT, traits>& os)    {        os.flush();        setConsoleColor(bgMask, bgBlack);        setConsoleColor(fgMask, fgLoWhite);        system("cls");        return os;    }}

鼠标控制原理

直接调用windows自带的鼠标控制函数
注意,如果直接使用清屏函数 system(“clr”)会导致鼠标输入阻塞所以要自己重新编译一个清屏函数

鼠标代码.

void MyCls(HANDLE hConsole){COORD coordScreen={0,0};//设置清屏后光标返回的屏幕左上角坐标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)' ',dwConSize,coordScreen,&cCharsWritten);PERR(bSuccess,"FillConsoleOutputCharacter");bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息PERR(bSuccess,"ConsoleScreenBufferInfo");//填充缓冲区属性bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);PERR(bSuccess,"FillConsoleOutputAttribute");//光标返回屏幕左上角坐标bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);PERR(bSuccess,"SetConsoleCursorPosition");return;}

自定义清屏函数.

void clrscr(void){HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);MyCls(hStdOut);return;}

象棋的具体实现细节

定义了一个棋盘chessboard,和一个棋子控制的类chess,对不同的棋子有自己的类,定义有特定的ID和每个棋子特定的走法规则。还有对棋盘控制的move()函数。

总体代码.

#include <iostream>#include <memory.h>#include <math.h>#include<windows.h>#include<winuser.h>#include"颜色头文件.h"#include<conio.h>#include <stdlib.h>#include <stdio.h>#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={0,0};//设置清屏后光标返回的屏幕左上角坐标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)' ',dwConSize,coordScreen,&cCharsWritten);PERR(bSuccess,"FillConsoleOutputCharacter");bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息PERR(bSuccess,"ConsoleScreenBufferInfo");//填充缓冲区属性bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);PERR(bSuccess,"FillConsoleOutputAttribute");//光标返回屏幕左上角坐标bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);PERR(bSuccess,"SetConsoleCursorPosition");return;}using namespace color;using namespace std;//存储结构:chess类是基类,派生类是各种棋子,在chessboard类中用chess的指针调用各个棋子class chessboard;//鼠标控制参数 // bool turn=0; class chess{private:    int id;//等级public:    chess(int i):id(i){}    int get(){return id;}    virtual bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy)=0;    virtual ~chess(){};//虚析构}; class chessboard{private:    chess *c[10][9];//用指针调用各个棋子,实现多态    char chessword[15][4]={"帅","相","炮","士","車","馬","兵","","卒","馬","車","士","炮","象","将"};//名字public:    chessboard(){memset(c, NULL, sizeof(c));};//把指针初始化为零指针    void init();    chess* get(int x,int y){return c[x][y];}    int getid(int x,int y){ if(c[x][y]!=NULL) return c[x][y]->get();return 0;}    void show();    void play();    bool move(int startx,int starty,int aimx,int aimy);    ~chessboard();//析构函数    static bool end;//判断结束    static int player;}; bool chessboard::end=true;int chessboard::player=-1; bool chessboard::move(int startx,int starty,int aimx,int aimy){    if(startx>=0&&startx<10&&starty>=0&&starty<9//初步判断传入的点是否符合规则       &&aimx>=0&&aimx<10&&aimy>=0&&aimy<9       &&getid(startx,starty)&&getid(startx,starty)*player>0       &&c[startx][starty]->judge_move(*this,startx,starty,aimx,aimy)){        if(c[aimx][aimy]!=NULL) delete c[aimx][aimy];//吃子        c[aimx][aimy]=c[startx][starty];        c[startx][starty]=NULL;    player*=-1;    if(turn==0)   turn=1;    else   turn=0;    return true;    }    //cout<<"走法错误,不符合规则"<<endl;    return false;} class horse : public chess{//马的实现public:    horse(int i) : chess((i==0?-2:2)){}    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){        int tempx=aimx-startx,tempy=aimy-starty;        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);        if(sid*aid<=0&&(tempx*tempx+tempy*tempy==5)&&!cb.get(startx+tempx/2,starty+tempy/2))        return true;        return false;    }}; class soldier : public chess{//兵(卒)的实现public:    soldier(int c) : chess((c==0?-1:1)){}    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){        int tempx=aimx-startx,tempy=aimy-starty;        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);        if(sid*aid<=0&&sid*tempx<=0){            if(abs(tempx)==1&&tempy==0) return true;            if(abs(tempy)==1&&tempx==0)                if((startx/5==0&&sid>0)||(startx/5==1&&sid<0)) return true;            return false;        }        return false;    }}; class general : public chess{//帅(将)的实现public:    general(int c) : chess((c==0?-7:7)){}    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){        int tempx=aimx-startx,tempy=aimy-starty;        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);        if(sid*aid<=0&&tempy*tempy+tempx*tempx==1&&aimx%7>=0&&aimx%7<=2&&aimy>=3&&aimy<=5)            return true;        return false;    }    ~general(){chessboard::end=false;}}; class elephant : public chess{//象(相)的实现public:    elephant(int c) : chess((c==0?-6:6)){}    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){        int tempx=aimx-startx,tempy=aimy-starty;        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);        if(sid*aid<=0&&tempy*tempy+tempx*tempx==8&&startx/5==aimx/5&&!cb.get(startx+tempx/2,starty+tempy/2))            return true;        return false;    }}; class cannon : public chess{//炮的实现public:    cannon(int c) : chess((c==0?-5:5)){}    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){        int tempx=aimx-startx,tempy=aimy-starty;        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);        if(sid*aid<=0&&!(tempx&&tempy)&&(tempx+tempy)){            int tot=0;            if(tempx!=0){                int sign=tempx>0?1:-1;                for(int i=1;i<abs(tempx);i++)                    if(cb.get(startx+sign*i,starty)) tot++;            }            else{                int sign=tempy>0?1:-1;                for(int i=1;i<abs(tempy);i++)                    if(cb.get(startx,starty+sign*i)) tot++;            }            if(!aid)            {if(!tot) return true;}            else            {if(tot==1) return true;}        }        return false;    }}; class guard: public chess{//士(仕)的实现public:    guard(int c) : chess((c==0?-4:4)){}    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){        int tempx=aimx-startx,tempy=aimy-starty;        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);        if(sid*aid<=0&&tempy*tempy+tempx*tempx==2&&aimx%7>=0&&aimx%7<=2&&aimy>=3&&aimy<=5)            return true;        return false;    }}; class rook : public chess{//车的实现public:    rook(int c) : chess((c==0?-3:3)){}    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){        int tempx=aimx-startx,tempy=aimy-starty;        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);        if(sid*aid<=0&&!(tempx&&tempy)&&(tempx+tempy)){            if(tempx!=0){                int sign=tempx>0?1:-1;                for(int i=1;i<abs(tempx);i++)                    if(cb.get(startx+sign*i,starty)) return false;            }            else{                int sign=tempy>0?1:-1;                for(int i=1;i<abs(tempy);i++)                    if(cb.get(startx,starty+sign*i)) return false;            }                return true;        }        return false;    }}; chessboard :: ~chessboard(){    for(int i=0;i<10;i++)        for(int j=0;j<9;j++)            if(c[i][j]!=NULL){                delete c[i][j];                c[i][j]=NULL;            }} void chessboard :: init(){//初始化,棋子的生成    c[0][0]=new rook(0);        c[0][8]=new rook(0);    c[0][1]=new horse(0);       c[0][7]=new horse(0);    c[0][2]=new elephant(0);    c[0][6]=new elephant(0);    c[0][3]=new guard(0);       c[0][5]=new guard(0);    c[0][4]=new general(0);     c[9][4]=new general(1);    c[2][1]=new cannon(0);      c[2][7]=new cannon(0);    c[3][0]=new soldier(0);     c[3][2]=new soldier(0);    c[3][4]=new soldier(0);     c[3][6]=new soldier(0);    c[3][8]=new soldier(0);     c[6][8]=new soldier(1);    c[6][0]=new soldier(1);     c[6][2]=new soldier(1);    c[6][4]=new soldier(1);     c[6][6]=new soldier(1);    c[7][1]=new cannon(1);      c[7][7]=new cannon(1);    c[9][0]=new rook(1);        c[9][8]=new rook(1);    c[9][1]=new horse(1);       c[9][7]=new horse(1);    c[9][2]=new elephant(1);    c[9][6]=new elephant(1);    c[9][3]=new guard(1);       c[9][5]=new guard(1);} void chessboard :: show(){    cout<<fg_yellow<<"    零一二三四五六七八"<<endl<<endl;    char num[10][4]={"零","一","二","三","四","五","六","七","八","九"};    for(int i=0;i<6;i++){        if(i==5) cout<<fg_white<<"   ——楚 河 汉 界——"<<endl;        cout<<fg_yellow<<num[i]<<"  ";        for(int j=0;j<9;j++){            if(c[i][j]!=NULL)            {             if(c[i][j]->get()>0)              cout<<fg_red<<chessword[c[i][j]->get()+7];    else      cout<<fg_green<<chessword[c[i][j]->get()+7];            }            else if((i==1&&j==4)||(i==8&&j==4))                cout<<fg_yellow<<"米";            else                cout<<fg_yellow<<"十";        }        cout<<endl;    }        for(int i=6;i<10;i++){        cout<<fg_yellow<<num[i]<<"  ";        for(int j=0;j<9;j++){            if(c[i][j]!=NULL)            {             if(c[i][j]->get()>0)              cout<<fg_red<<chessword[c[i][j]->get()+7];    else      cout<<fg_green<<chessword[c[i][j]->get()+7];            }            else if((i==1&&j==4)||(i==8&&j==4))                cout<<fg_yellow<<"米";            else                cout<<fg_yellow<<"十";        }        cout<<endl;    }        } void chessboard::play(){ HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);  CONSOLE_SCREEN_BUFFER_INFO bInfo; INPUT_RECORD mouseRec; DWORD res;    this->init();    this->show();   do{       int startx,starty,aimx,aimy;        int sid,aid;        do{            sid=aid=0;            if(turn==0)            {             clrscr();          this->show();             cout<<fg_blue<<"请绿方行动" <<endl;             //turn=1;   }   else   {    clrscr();          this->show();    cout<<fg_blue<<"请红方行动"<<endl;    //turn=0;   }              repeat:  while(1){  Sleep(110);  //this->show();  ReadConsoleInput(hIn, &mouseRec, 1, &res);  if(mouseRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED){   //system("cls");   //this->show();   if(mouseRec.Event.MouseEvent.dwMousePosition.X%2==1)    starty=(mouseRec.Event.MouseEvent.dwMousePosition.X-5)/2;   else    starty=(mouseRec.Event.MouseEvent.dwMousePosition.X-4)/2;   if(mouseRec.Event.MouseEvent.dwMousePosition.Y<7)    startx=mouseRec.Event.MouseEvent.dwMousePosition.Y-2;   else    startx=mouseRec.Event.MouseEvent.dwMousePosition.Y-3;   if(c[startx][starty]==NULL)    goto repeat;   //cout<<"startx:"<<startx<<endl;   //cout<<"starty:"<<starty<<endl;   break;  }  }  cout<<"please give me next position"<<endl;  while(1){  Sleep(110);  //this->show();  ReadConsoleInput(hIn, &mouseRec, 1, &res);  if(mouseRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED){   //system("cls");   //this->show();   if(mouseRec.Event.MouseEvent.dwMousePosition.X%2==1)    aimy=(mouseRec.Event.MouseEvent.dwMousePosition.X-5)/2;   else    aimy=(mouseRec.Event.MouseEvent.dwMousePosition.X-4)/2;   if(mouseRec.Event.MouseEvent.dwMousePosition.Y<7)    aimx=mouseRec.Event.MouseEvent.dwMousePosition.Y-2;   else    aimx=mouseRec.Event.MouseEvent.dwMousePosition.Y-3;      //cout<<"aimx:"<<aimx<<endl;   //cout<<"aimy:"<<aimy<<endl;   break;  }  }      //cin>>startx>>starty>>aimx>>aimy;        }while(!this->move(startx,starty,aimx,aimy));        //clrscr();        //this->show();    }while(chessboard::end);    if(chessboard::player==1)     cout<<"结束,赢家是绿方"<<endl;    else  cout<<"结束,赢家是红方" <<endl; } int main(){ HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); DWORD mode; GetConsoleMode(hStdin, &mode);  mode &= ~ENABLE_QUICK_EDIT_MODE; //移除快速编辑模式 //mode &= ~ENABLE_INSERT_MODE; //移除插入模式 //mode &= ~ENABLE_MOUSE_INPUT; SetConsoleMode(hStdin, mode);    chessboard C;    C.play();}

运行图片

居中的图片:

C++如何实现鼠标控制的黑框象棋

本质类似与键盘输入的象棋小游戏和鼠标控制的五子棋小游戏的综合。其中碰到一个小问题,就是黑窗要把快速便捷模式取消了才可以利用鼠标点击,为了解决这个问题,我在主函数插入了自动取消快速编辑的函数。

HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); DWORD mode; GetConsoleMode(hStdin, &mode);  mode &= ~ENABLE_QUICK_EDIT_MODE; //移除快速编辑模式 SetConsoleMode(hStdin, mode);

关于“C++如何实现鼠标控制的黑框象棋”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++如何实现鼠标控制的黑框象棋

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++如何实现鼠标控制的黑框象棋

这篇文章将为大家详细讲解有关C++如何实现鼠标控制的黑框象棋,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本文实例为大家分享了C++实现鼠标控制的黑框象棋的具体代码,该象棋小游戏的特色有颜色标注出 红方和
2023-06-15

C#如何实现控制台飞行棋小游戏

这篇文章将为大家详细讲解有关C#如何实现控制台飞行棋小游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本文实例为大家分享了C#实现控制台飞行棋小游戏的具体代码,供大家参考,具体内容如下using Sys
2023-06-20

Python如何利用PyAutoGUI模块实现控制鼠标键盘

这篇文章主要介绍“Python如何利用PyAutoGUI模块实现控制鼠标键盘”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python如何利用PyAutoGUI模块实现控制鼠标键盘”文章能帮助大家解
2023-07-02

如何使用javascript实现鼠标框的效果

鼠标框是一种常见的交互效果,在网页设计和开发中得到广泛应用。使用 javascript 实现鼠标框不仅可以增强用户体验,还可以为网页添加更多的交互效果。在本文中,我们将介绍如何使用 javascript 实现鼠标框的效果,向大家详细地介绍实现方法和技巧。一、使用原生 javascript 实现鼠标框效果使用原生 javascript 实现鼠标框需要两个关键步骤:鼠标按下时的操作
2023-05-14

如何用C语言实现Python的面向对象的机制

本篇内容主要讲解“如何用C语言实现Python的面向对象的机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用C语言实现Python的面向对象的机制”吧!本文主要介绍的是如何用C语言实现Py
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录