c++迷宫小游戏

一、总结

一句话总结:

显示:根据map数组输出图像
走动:修改map数组的值,每走一步重新刷新一下图像就好

 

1、如果走函数用z(),出现输入s会向下走多步的情况,原因是什么?

 向下走两层循环ij增加,而向下走i也是增加的,所以break跳出j后,照样找到i不误,所以会一直走到不能走为止
//走动函数 
void z(){
    char c=getch();
    //
    if(c=='s')
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                //找到人物所在的位置 
                if(map[i][j]==3&&map[i+1][j]!=1)
                {
                    map[i+1][j]=3;//下面的位置变成人物所在的位置 
                    map[i][j]=0;//走过的地方变成0 
                    break;
                }
            
            }
        }
    }
    //
    if(c=='w')
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                if(map[i][j]==3&&map[i-1][j]!=1)
                {
                    map[i-1][j]=3;
                    map[i][j]=0;
                    break;
                }
            
            }
        }
    }
    //
    if(c=='a')
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                if(map[i][j]==3&&map[i][j-1]!=1)
                {
                    map[i][j-1]=3;
                    map[i][j]=0;
                    break;
                }
            
            }
        }
    }
    //
    if(c=='d')
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                if(map[i][j]==3&&map[i][j+1]!=1)
                {
                    map[i][j+1]=3;
                    map[i][j]=0;
                    break;
                }
            
            }
        }
    }
}

 

 

 

 

 

二、内容在总结中

截图:

wsad分别对应上下左右

 

代码:

#include<cstdio>
#include<windows.h>
#include<conio.h>
int map[10][10]={{1,1,1,1,3,1,1,1,1,1},
                {1,0,0,0,0,0,0,1,1,1},
                {1,0,0,1,0,1,0,0,1,1},
                {1,1,0,1,1,0,0,1,1,1},
                {1,0,0,0,1,0,0,0,0,1},
                {1,1,0,0,1,1,0,1,0,1},
                {1,1,0,1,0,1,1,0,0,1},
                {1,0,0,0,1,1,1,1,0,1},
                {1,1,1,1,1,1,1,1,2,1}};
int pos_y=0;//人物的y坐标 
int pos_x=4;//人物的x坐标
 
//打印地图 
void jzmap()
{
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(map[i][j]==0) 
                printf("  ");//可走的地方 
            if(map[i][j]==1) 
                printf("");//障碍 
            if(map[i][j]==2)
                printf("!!");//出口 
            if(map[i][j]==3)
                printf("* ");//人物所在的位置 
        }
        printf("\n");
    }
}
//走动函数2 
void z2(){
    char c=getch();
        //
    if(c=='s')
    {
        //找到人物所在的位置 
        if(map[pos_y][pos_x]==3&&map[pos_y+1][pos_x]!=1)
        {
            map[pos_y+1][pos_x]=3;//下面的位置变成人物所在的位置 
            map[pos_y][pos_x]=0;//走过的地方变成0 
            pos_y++; 
        }
    }
    //
    if(c=='w')
    {
        if(map[pos_y][pos_x]==3&&map[pos_y-1][pos_x]!=1)
        {
            map[pos_y-1][pos_x]=3;
            map[pos_y][pos_x]=0;
            pos_y--;
        }
    }
    //
    if(c=='a')
    {
        if(map[pos_y][pos_x]==3&&map[pos_y][pos_x-1]!=1)
        {
            map[pos_y][pos_x-1]=3;
            map[pos_y][pos_x]=0;
            pos_x--;
        }
    }
    //
    if(c=='d')
    {
        if(map[pos_y][pos_x]==3&&map[pos_y][pos_x+1]!=1)
        {
            map[pos_y][pos_x+1]=3;
            map[pos_y][pos_x]=0;
            pos_x++;
        }
    }
} 
//走动函数 
void z(){
    char c=getch();
    int has_zou=0;
    //
    if(c=='s')
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                //找到人物所在的位置 
                if(map[i][j]==3&&map[i+1][j]!=1&&!has_zou)
                {
                    has_zou=1;
                    map[i+1][j]=3;//下面的位置变成人物所在的位置 
                    map[i][j]=0;//走过的地方变成0 
                    break;
                }
            
            }
        }
    }
    //
    if(c=='w')
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                if(map[i][j]==3&&map[i-1][j]!=1&&!has_zou)
                {
                    has_zou=1;
                    map[i-1][j]=3;
                    map[i][j]=0;
                    break;
                }
            
            }
        }
    }
    //
    if(c=='a')
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                if(map[i][j]==3&&map[i][j-1]!=1&&!has_zou)
                {
                    has_zou=1;
                    map[i][j-1]=3;
                    map[i][j]=0;
                    break;
                }
            
            }
        }
    }
    //
    if(c=='d')
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                if(map[i][j]==3&&map[i][j+1]!=1&&!has_zou)
                {
                    has_zou=1;
                    map[i][j+1]=3;
                    map[i][j]=0;
                    break;
                }
            
            }
        }
    }
}
void yx()
{
    jzmap();//重绘地图 
    //z();
    z2();//走操作 
}
//结束 
bool js()
{
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(map[i][j]==map[9][8])
            {
                return 1;
            }
            else{
                return 0;
            }
        }
    }
}
int main()
{
    for(int i=0;i<100;i++)
    {
        system("cls");
        yx();
        if(js())
        {
            system("cls");
            printf("game over!");
            return 0;
        }
    }    
        return 0;
}

 

 

 
我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
博主25岁,前端后端算法大数据人工智能都有兴趣。
大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
聊技术,交朋友,修心境,qq404006308,微信fan404006308
26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
人工智能群:939687837

作者相关推荐