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;
}

猜你喜欢

转载自blog.csdn.net/m0_69824302/article/details/133280623