欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++简单人机交互——走迷宫

程序员文章站 2022-03-12 16:33:20
...

一个简单的小方块走迷宫程序

#include <iostream>
#include <windows.h>
#include <conio.h>
#include <ctime>
#include <string>
using namespace std;

class basic
{
public:
    //不显示光标
    void hide_cursor()
    {
        HANDLE  h_GAME = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_CURSOR_INFO cursor_info;
        GetConsoleCursorInfo(h_GAME,&cursor_info);
        cursor_info.bVisible=false;                         
        SetConsoleCursorInfo(h_GAME,&cursor_info);
    }
    //显示光标
    void show_cursor()
    {
        HANDLE  h_GAME = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_CURSOR_INFO cursor_info;
        GetConsoleCursorInfo(h_GAME,&cursor_info);
        cursor_info.bVisible=true;                          
        SetConsoleCursorInfo(h_GAME,&cursor_info);
    }
    //光标移动到指定坐标处
    void gotoxy(int x,int y)
    {
        HANDLE h;//句柄,对象的索引
        COORD c;//结构体,坐标值
        c.X=x;
        c.Y=y;
        h=GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorPosition(h,c);
    }
    //在指定坐标处输出字符串
    void outxy(int x,int y,string s)
    {
        HANDLE h;//句柄,对象的索引 
        COORD c;//结构体,坐标值
        c.X=x; 
        c.Y=y; 
        h=GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleCursorPosition(h,c);
        cout<<s<<endl;
    }   
    //颜色
    void color(int a)
    {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
    }
};

class game:public basic
{
private:
    int x,y,tt;
    clock_t t,t2,t1,t3;
    bool flag,flag2;
    string b[25];
public:
    game(int x0,int y0,int tt0)
    {
        x=x0;y=y0;
        tt=tt0;
        t=clock();
        t2=clock();
        flag=true;//两个初始化标志,防频闪
        flag2=true;
    }
    void watch()
    {
        if(clock()-t3>60)
        {
                if(flag2==true)
                {
                    gotoxy(66,0);
                    t2=clock()/1000;
//                  color(12);
                    cout<<"时间:"<<t2;
                    flag2=false;
                }
                if(clock()-t1>100)
                {
                    flag2=true;
                    t1=clock();
                }               
            t3=clock();
        }
    }
    void bianjie()//打印出迷宫边界和初始界面
    {
        b[0]=  "*********************************************";
        b[1]=  "■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■";
        b[2]=  "■  ■          ■                          ■      ■                        ■";
        b[3]=  "■  ■  ■■■  ■  ■■■  ■  ■■■■■  ■  ■  ■  ■■■  ■■■■■■  ■";
        b[4]=  "■  ■      ■  ■      ■  ■          ■  ■  ■      ■  ■  ■        ■  ■";
        b[5]=  "■  ■■■■■  ■  ■  ■  ■  ■■■  ■  ■  ■  ■■■  ■  ■  ■■  ■  ■";
        b[6]=  "■  ■          ■  ■  ■  ■  ■      ■  ■  ■          ■      ■    ■  ■";
        b[7]=  "■  ■  ■■■  ■■■  ■  ■■■  ■■■  ■  ■■■  ■  ■■■■■  ■■  ■";
        b[8]=  "■  ■  ■      ■      ■      ■  ■  ■  ■  ■      ■  ■          ■    ■";
        b[9]=  "■  ■  ■  ■■■  ■■■■■  ■  ■  ■  ■  ■  ■■■  ■  ■  ■■■■  ■";
        b[10]= "■  ■  ■  ■      ■      ■  ■  ■  ■      ■  ■  ■  ■  ■    ■      ■";
        b[11]= "■  ■  ■  ■  ■■■■■  ■  ■  ■  ■  ■■■■■  ■  ■  ■    ■  ■■■";
        b[12]= "■      ■  ■  ■      ■          ■  ■              ■      ■    ■      ■";
        b[13]= "■  ■■■  ■  ■  ■  ■■■  ■■■  ■  ■■■■■■■■■■■■  ■  ■  ■";
        b[14]= "■          ■      ■      ■      ■  ■              ■            ■  ■  ■";
        b[15]= "■  ■  ■■■■■■■■■  ■■■  ■  ■  ■■■■■  ■  ■  ■■■■  ■  ■";
        b[16]= "■  ■                  ■      ■      ■  ■          ■  ■            ■  ■";
        b[17]= "■  ■■■■■■■■■  ■■■  ■■■■■  ■  ■■■■■  ■■■■■■■■  ■";
        b[18]= "■          ■          ■      ■          ■      ■                    ■  ■";
        b[19]= "■■■■■  ■  ■■■■■  ■  ■  ■■■■■■■  ■  ■■■■■■■■■■  ■";
        b[20]= "■                          ■  ■                  ■                    ■■■";
        b[21]= "■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■      * ";
        b[22]= "*********************************************************************************";
        b[23]= "放弃游戏:Esc                                                         ";    //78 
        for(int i=0;i<25;i++)
        {
            gotoxy(0,i);
//          color(10);
            cout<<b[i];
        }
    }
    void draw()//画小方块
    {
        gotoxy(x,y);
//      color(13);
        cout<<"◆";
    }
    void erase()//擦除
    {
        gotoxy(x,y);
        cout<<"  ";
    }
    void move()//小方块移动(擦画结合)
    {
        if(flag==true)
        {
            draw();
            flag=false;
        }
        if(clock()-t>tt)//接收键盘信号不要太过于频繁
        {
            if(GetAsyncKeyState(VK_ESCAPE)) //退出
                exit(0);
            if(GetAsyncKeyState(VK_LEFT))//左
            {
                erase();
                if(b[y][x-1]==' ')
                    --x;
                else
                    x=x;
                draw();
            }
            if(GetAsyncKeyState(VK_RIGHT))//右
            {
                erase();
                if(b[y][x+2]==' ')
                    ++x;
                else if(b[y][x+2]=='*')
                {
                    system("cls");
                    color(12);
                    gotoxy(28,12);
                    cout<<"你赢了"<<endl;
                    exit(0);
                }
                else
                    x=x;
                draw();
            }
            if(GetAsyncKeyState(VK_UP))//上
            {
                erase();
                if(b[y-1][x]==' '&&b[y-1][x+1]==' ')
                    --y;
                else
                    y=y;
                draw();
            }
            if(GetAsyncKeyState(VK_DOWN))//下
            {
                erase();
                if(b[y+1][x]==' '&&b[y+1][x+1]==' ')
                    ++y;
                else
                    y=y;
                draw();
            }       
            flag=true;
            t=clock();
        }
    }
};

void main()
{
    game g(2,2,60);
    g.bianjie();    
    while(true)
    {       
        g.move();
        g.watch();
    }
//  system("pause");
}

在控制台上运行应该是这样的 :

C++简单人机交互——走迷宫

上面的颜色可以自行修改,直接使用color()函数就可以,不过还是把控制台调成黑色的再上颜色看着比较舒服些。