c++-C语言迷宫小游戏改为C++语言的,应该改哪些地方?(代码见正文)

问题描述

C语言迷宫小游戏改为C++语言的,应该改哪些地方?(代码见正文)
 #include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define Height 25 //迷宫的高度,必须为奇数
#define Width 25 //迷宫的宽度,必须为奇数
#define Wall 1
#define Road 0
#define Start 2
#define End 3
#define Esc 5
#define Up 1
#define Down 2
#define Left 3
#define Right 4
int map[Height+2][Width+2];
void gotoxy(int x,int y) //移动坐标
{
    COORD coord;
    coord.X=x;
    coord.Y=y;
    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
void hidden()//隐藏光标
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO cci;
    GetConsoleCursorInfo(hOut,&cci);
    cci.bVisible=0;//赋1为显示,赋0为隐藏
    SetConsoleCursorInfo(hOut,&cci);
}
void create(int x,int y) //随机生成迷宫
{
    int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向
    int i,j,t;
        //将方向打乱
    for(i=0;i<4;i++)
    {
        j=rand()%4;
        t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;
        t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;
    }
    map[x][y]=Road;
    for(i=0;i<4;i++)
    if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall)
    {
        map[x+c[i][0]][y+c[i][1]]=Road;
        create(x+2*c[i][0],y+2*c[i][1]);
    }
}
int get_key() //接收按键
{
    char c;
    while(c=getch())
    {
        if(c==27) return Esc; //Esc
        if(c!=-32)continue;
        c=getch();
        if(c==72) return Up; //上
        if(c==80) return Down; //下
        if(c==75) return Left; //左
        if(c==77) return Right; //右
    }
    return 0;
}
void paint(int x,int y) //画迷宫
{
    gotoxy(2*y-2,x-1);
    switch(map[x][y])
    {
        case Start:
        printf("入");break; //画入口
        case End:
        printf("出");break; //画出口
        case Wall:
        printf("▇");break; //画墙
        case Road:
        printf(" ");break; //画路
    }
}
void game()
{
    int x=2,y=1; //玩家当前位置,刚开始在入口处
    int c; //用来接收按键
    while(1)
    {
        gotoxy(2*y-2,x-1);
        printf("●"); //画出玩家当前位置
        if(map[x][y]==End) //判断是否到达出口
        {
            gotoxy(30,24);
            printf("到达终点,按任意键结束");
            getch();
            break;
        }
        c=get_key();
        if(c==Esc)
        {
            gotoxy(0,24);
            break;
        }
        switch(c)
        {
                case Up: //向上走
                if(map[x-1][y]!=Wall)
                {
                    paint(x,y);
                    x--;
                }
            break;
            case Down: //向下走
            if(map[x+1][y]!=Wall)
            {
                paint(x,y);
                x++;
            }
            break;
            case Left: //向左走
            if(map[x][y-1]!=Wall)
            {
                paint(x,y);
                y--;
            }
            break;
            case Right: //向右走
            if(map[x][y+1]!=Wall)
            {
                paint(x,y);
                y++;
            }
            break;
        }
    }
}
int main()
{
    int i,j;
    srand((unsigned)time(NULL)); //初始化随即种子
    hidden(); //隐藏光标
    for(i=0;i<=Height+1;i++)
    for(j=0;j<=Width+1;j++)
    if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫
    map[i][j]=Road;
    else map[i][j]=Wall;

    create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数
    for(i=0;i<=Height+1;i++) //边界处理
    {
        map[i][0]=Wall;
        map[i][Width+1]=Wall;
    }

    for(j=0;j<=Width+1;j++) //边界处理
    {
        map[0][j]=Wall;
        map[Height+1][j]=Wall;
    }
    map[2][1]=Start; //给定入口
    map[Height-1][Width]=End; //给定出口
    for(i=1;i<=Height;i++)
    for(j=1;j<=Width;j++) //画出迷宫
    paint(i,j);
    game(); //开始游戏
    getch();
    return 0;
}

解决方案

不用改,就你的程序也可以用C++编译器编译。
当然你可以加上一些C++支持,C不支持的特性,比如说,输出用cout代替printf,甚至修改为面向对象的。

解决方案二:

同楼上,不用改,我用Dev-C++ 编译跑出来了,快到终点 了。

解决方案三:

参考某文,给你添加一个自动寻路径的函数,还挺有意思的。

#define True   1
#define False  0
#define You "* "
#define Way  10

 int success = False;

// 递归自动寻找路径
int visit(int i , int j)
{
    Sleep(100);
    map[i][j] = Way ;
    paint(i,j);
    gotoxy(2*j-2,i-1);
    printf(You); //画出玩家当前位置
    if(map[i][j+1]==End)
    {
        success = True;
    }

    if(success != True && map[i][j + 1] == Road)
    {
        paint(i,j);
        visit(i , j + 1);
    }
    if(success != True && map[i + 1][j] == Road)
    {
        paint(i,j);
        visit(i + 1 , j);
    }
    if(success != True && map[i - 1][j] == Road)
    {
        paint(i,j);
        visit(i - 1 , j);
    }
    if(success != True && map[i][j - 1] == Road)
    {
        paint(i,j);
        visit(i , j - 1);
    }

    if(success != True)
        map[i][j] == Road;

    return success ;
}
void auto_game(void)
{
    if(visit(2, 1)) // 到达出口
    {
        gotoxy(Width / 2, Height + 1);
        printf("Success. Press anykey to continue");
        getch();
    }
}

使用跟 game() 一样

时间: 2024-12-31 22:38:28

c++-C语言迷宫小游戏改为C++语言的,应该改哪些地方?(代码见正文)的相关文章

原创的C语言控制台小游戏_C 语言

最开始左上色块被感染,通过切换颜色,不断感染同色色块.亮点是可以切换图案,设置方块个数和最大限制次数.整体还是比较满意,希望大神指教. #include <stdio.h> #include <windows.h> #include <conio.h> #include <time.h> #include <stdlib.h> int DIFFICULT=44; int count=0 ; int TYPE_SHAPE=2 ; int flag=

利用C语言实现2048小游戏的方法_C 语言

准备工作 首先上一张图,因为这里只是在用C语言验证算法,所以没有对界面做很好的优化,丑是理所应当的. 了解了游戏的工作原理,实际上可以将游戏描述为四个带有方向的同一操作:     1.将所有数字向一个方向移动至中间没有空位     2.将相邻的两个相同的数字加和然后放在更靠近移动方向前部的一个位置上 另外需要判断一下玩家当前输入的内容是否可以执行,如果不可以执行等待用户下一条记录. 同时需要对游戏的进程进行控制,如果可以继续游戏,那么运行玩家继续输入下一条指令,而如果不可以进行,那么提示无法继续

用VC++6.0的控制台实现2048小游戏的程序_C 语言

首先感谢这位大侠的无私分享,仔细学习这个程序以后收获很多,试着添加一些注释 源程序是从开源中国看到的,原作者是 刘地(sir?) 地址为http://www.oschina.net/code/snippet_593413_46040 geek_monkey于2015年3月5日为拜读该程序,受益匪浅 为了方便自己,以及更多初学者阅读,我试着写了写了注释供参考 我是C语言初学者,如有错误希望指正.轻喷 复制代码 代码如下: #include <stdlib.h> #include <stdi

C语言开发简易版扫雷小游戏_C 语言

前言: 想起来做这个是因为那时候某天知道了原来黑框框里面的光标是可以控制的,而且又经常听人说起这个,就锻炼一下好了. 之前就完成了那1.0的版本,现在想放上来分享却发现有蛮多问题的,而且最重要的是没什么注释[果然那时候太年轻]!现在看了也是被那时候的自己逗笑了,就修改了一些小bug,增加了算是详尽而清楚的注释,嗯,MSDN上面对各种函数的解释很详细的[又锻炼一下英语],顺便让开头和结尾的展示"动"了起来,就当作1.5的版本好了. 这个只是给出了一个实现的思路,其中肯定也有很多不合理的地

C语言实现五子棋小游戏_C 语言

首先我们先来看一个稍微简单些的实现方式: #include <stdio.h> #include <stdlib.h> #define N 15 int chessboard[N + 1][N + 1] = { 0 }; int whoseTurn = 0; void initGame(void); void printChessboard(void); void playChess(void); int judge(int, int); int main(void) { init

C++基于控制台实现的贪吃蛇小游戏_C 语言

本文实例讲述了C++基于控制台实现的贪吃蛇小游戏.分享给大家供大家参考.具体实现方法如下: #include <windows.h> #include <time.h> #include <stdio.h> #define MAX 100 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 #define MOVING 5 #define STOP 0 HANDLE hMain_Out = NULL; H

简单的C语言猜数字小游戏

猜数字小游戏可谓是C语言最为基础的一个知识点了,我们可以在此基础上进行延伸,实现随机数的猜测,然后是加入再来一局的模式,等等.这里是抛砖引玉,希望你能做出你的经典之作. #include <stdio.h> #include <stdlib.h> int main() { int Password=0,Number=0,price=58,i=0; while( Password != 1234 ) { if( i >= 3 ) return; i++; puts("

C语言借助EasyX实现的生命游戏源码_C 语言

本文讲述C语言借助EasyX实现的生命游戏,具体操作流程如下: 1.生命游戏内容: 该游戏包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的细胞的数量.如果一个细胞周围的活细胞数量多于 3 个,这个细胞会因为资源匮乏而在下一个时刻死去:如果一个位置周围有 3 个活细胞,则该位置在下一个时刻将诞生一个新的细胞:如果一个位置周围有 2 个活细胞,则该位置的细胞生死状态保持不变:如果一个细胞周围的活细胞少于 2 个,那么这个细胞会

c-C语言编写黑白棋小游戏= =BUG咋回事

问题描述 C语言编写黑白棋小游戏= =BUG咋回事 #includevoid black(char a[][10]);void white(char a[][10]);void victory(char a[][10]);//int play(char a[][10]);void table(char a[][10]);void turnblack(char a[][10]int rowint lineint iint mode);void turnwhite(char a[][10]int r