搜索
查看: 1448|回复: 0
打印 上一主题 下一主题

高级推箱子(2)

[复制链接]
跳转到指定楼层
楼主
发表于 2016-9-25 16:40:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
case 'd':  
                book++;
            //如果人前面是空地。  
            if(map[j+1]==0)  
            {  
                map[j+1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。  
                if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。  
                    map[j]=3; //将人往前走一步后原地的ID修改为空地ID()。  
                else  
                    map[j]=0;    //否则原地ID修改为空地ID 。        
            }  
            //如果人前面是目的地。  
            else if(map[j+1]==3)  
            {  
                map[j+1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。  
                if(map[j]==9) //如果原地也是目的地(ID为)。  
                    map[j]=3; //人走后把原地ID修改回目的地ID。  
                else  
                    map[j]=0; //否则原地ID修改为为空地ID  
            }  
            //如果人前面是箱子。  
            else if(map[j+1]==4)  
            {  
                //如果人前面是箱子,而箱子前面是空地。  
                if (map[j+2]==0)  
                {   
                    map[j+2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()  
                    //下面是对箱子原地进行判断  
                    if(map[j+1]==7) //如果箱子原地为目的地。  
                        map[j+1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。  
                    else  
                        map[j+1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。  
                    //下面是对人原地进行判断  
                    if(map[j]==9) //如果之前是目的地。  
                        map[j]=3; //人走了之后修改回目的地ID。  
                    else  
                        map[j]=0; //否则就是空地。  
                }  
                //如果人的前面是箱子,而箱子前面是目的地。  
                else if (map[j+2]==3)  
                {   
                    count++;  
                    map[j+2]=7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。  
                    //下面是对箱子原先位置的判断,同上。  
                    if(map[j+1]==7)  
                        map[j+1]=9;  
                    else  
                        map[j+1]=6;  
                    //下面是对人原先位置进行判断,同上。  
                    if(map[j]==9)  
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            //如果人前面是已经进入某目的地的箱子(ID=7)。  
            else if(map[j+1]==7)  
            {  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。  
                if(map[j+2]==0)  
                {  
                    count--;  
                    map[j+2]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。  
                    map[j+1]=9;   //人自然而然的就站在了原先的目的地上了。  
                    //下面是对人原先地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。  
                if(map[j+2]==3)  
                {  
                    map[j+2]=7;   //把箱子推入了另一目的地,自然,ID也应是。  
                    map[j+1]=9;   //人站在了目的地上。  
                    //下面是对人原先站立地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            break;  
        }  
        if(count==target)   //如果分数达到分  
        {  
            system("CLS"); //清屏  
            draw_map(map);   
            break;    //退出死循环  
        }  
    }  
    Sleep (2000);
    printf("\nYOU WIN!!!\n"); //过关提示
printf("\nYou took %d steps to compelete the game!\n",book);  
Sleep (3000);
}
void Hrun()
{
char input;     
    int i,j,target,count,a,book=0;   //定义记分变量
   
FILE *fin=fopen("map2.txt","r");
if(fin==NULL){
        printf("read file error");
}
fscanf(fin,"%d%d%d%d",&row,&col,&target,&count);
for(i=1;i<=row;i++)
        for(j=1;j<=col;j++)
                fscanf(fin,"%d",&map[j]);
    while (1)   //死循环,等待用户命令  
    {  
        system("CLS");  
        draw_map(map);  
        printf("step:%d\n",book);
        printf("score%d/%d\n",count,target);  
        //找初始位置  
        for(i=1;i<=row;i++){  
            for(j=1;j<=col;j++){  
                if (map[j]==6||map[j]==9)  
                    break;  
            }  
            if (map[j]==6||map[j]==9)  
                break;  
        }  
        printf("coordinate%d%d)\n",i,j);   
              
        input = getch();   //getch()函数无需回车确认地获取用户输入,用于控制行走方向。  
        switch (input)  
        {  
        case 'w':
                book++;  
            //如果人前面是空地。  //0代表空地  6代表人  3代表目的地  
            if(map[i-1][j]==0)  
            {  
                map[i-1][j]=6+0; //人往前走一步,ID为人的ID加上空地的ID。  
                if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID加上目的地ID)。  
                    map[j]=3; //将人往前走一步后原地的ID修改为目的地ID。  
                else  
                    map[j]=0;    //否则原地ID修改为空地ID。        
            }  
            //如果人前面是目的地。  
            else if((map[i-1][j]==3)||(map[i-1][j]==9))  
            {  
                map[i-1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。  
                if(map[j]==9) //如果原地也是目的地(ID9)。  
                    map[j]=3; //人走后把原地ID修改回目的地ID。  
                else  
                    map[j]=0; //否则原地ID修改为为空地ID  
            }  
            //如果人前面是箱子。//4代表箱子  7箱子进入目的地  
            else if(map[i-1][j]==4)  
            {  
                //如果人前面是箱子,而箱子前面是空地。  
                if (map[i-2][j]==0)  
                {   
                    map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID  
                    //下面是对箱子原地进行判断  
                    if(map[i-1][j]==7) //如果箱子原地为目的地。  
                        map[i-1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。  
                    else  
                        map[i-1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。  
                    //下面是对人原地进行判断  
                    if(map[j]==9) //如果之前是目的地。  
                        map[j]=3; //人走了之后修改回目的地ID。  
                    else  
                        map[j]=0; //否则就是空地。  
                }  
                //如果人的前面是箱子,而箱子前面是目的地。  
                else if (map[i-2][j]==3)  
                {   
                    map[i-2][j]=7;   //ID为(目的地ID+箱子ID=7),表示已经把箱子推入了目的地。  
                    count++;  
                    //下面是对箱子原先位置的判断,同上。  
                    if(map[i-1][j]==7)  
                        map[i-1][j]=9;  
                    else  
                        map[i-1][j]=6;  
                    //下面是对人原先位置进行判断,同上。  
                    if(map[j]==9)  
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            //如果人前面是已经进入某目的地的箱子(ID=7)。  
            else if(map[i-1][j]==7)  
            {  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。  
                if(map[i-2][j]==0)  
                {  
                    count--;  
                    map[i-2][j]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。  
                    map[i-1][j]=9;   //人自然而然的就站在了原先的目的地上了。  
                    //下面是对人原先地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。  
                if(map[i-2][j]==3)  
                {  
                    map[i-2][j]=7;   //把箱子推入了另一目的地,自然,ID也应是。  
                    map[i-1][j]=9;   //人站在了目的地上。  
                    //下面是对人原先站立地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            break;  
        case 's':  
                book++;
            //如果人前面是空地。  
            if(map[i+1][j]==0)  
            {  
                map[i+1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。  
                if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。  
                    map[j]=3; //将人往前走一步后原地的ID修改为空地ID()。  
                else  
                    map[j]=0;    //否则原地ID修改为空地ID 。        
            }  
            //如果人前面是目的地。  
            else if(map[i+1][j]==3)  
            {  
                map[i+1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。  
                if(map[j]==9) //如果原地也是目的地(ID为)。  
                    map[j]=3; //人走后把原地ID修改回目的地ID。  
                else  
                    map[j]=0; //否则原地ID修改为为空地ID  
            }  
            //如果人前面是箱子。  
            else if(map[i+1][j]==4)  
            {  
                //如果人前面是箱子,而箱子前面是空地。  
                if (map[i+2][j]==0)  
                {   
                    map[i+2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()  
                    //下面是对箱子原地进行判断  
                    if(map[i+1][j]==7) //如果箱子原地为目的地。  
                        map[i+1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。  
                    else  
                        map[i+1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。  
                    //下面是对人原地进行判断  
                    if(map[j]==9) //如果之前是目的地。  
                        map[j]=3; //人走了之后修改回目的地ID。  
                    else  
                        map[j]=0; //否则就是空地。  
                }  
                //如果人的前面是箱子,而箱子前面是目的地。  
                else if (map[i+2][j]==3)  
                {   
                    map[i+2][j]=7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。  
                    count++;  
                    //下面是对箱子原先位置的判断,同上。  
                    if(map[i+1][j]==7)  
                        map[i+1][j]=9;  
                    else  
                        map[i+1][j]=6;  
                    //下面是对人原先位置进行判断,同上。  
                    if(map[j]==9)  
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            //如果人前面是已经进入某目的地的箱子(ID=7)。  
            else if(map[i+1][j]==7)  
            {  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。  
                if(map[i+2][j]==0)  
                {  
                    count--;  
                    map[i+2][j]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。  
                    map[i+1][j]=9;   //人自然而然的就站在了原先的目的地上了。  
                    //下面是对人原先地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。  
                if(map[i+2][j]==3)  
                {  
                    map[i+2][j]=7;   //把箱子推入了另一目的地,自然,ID也应是。  
                    map[i+1][j]=9;   //人站在了目的地上。  
                    //下面是对人原先站立地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            break;  
        case 'a':  
                book++;
            //如果人前面是空地。  
            if(map[j-1]==0)  
            {  
                map[j-1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。  
                if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。  
                    map[j]=3; //将人往前走一步后原地的ID修改为空地ID()。  
                else  
                    map[j]=0;    //否则原地ID修改为空地ID 。        
            }  
            //如果人前面是目的地。  
            else if(map[j-1]==3)  
            {  
                map[j-1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。  
                if(map[j]==9) //如果原地也是目的地(ID为)。  
                    map[j]=3; //人走后把原地ID修改回目的地ID。  
                else  
                    map[j]=0; //否则原地ID修改为为空地ID  
            }  
            //如果人前面是箱子。  
            else if(map[j-1]==4)  
            {  
                //如果人前面是箱子,而箱子前面是空地。  
                if (map[j-2]==0)  
                {   
                    map[j-2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()  
                    //下面是对箱子原地进行判断  
                    if(map[j-1]==7) //如果箱子原地为目的地。  
                        map[j-1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。  
                    else  
                        map[j-1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。  
                    //下面是对人原地进行判断  
                    if(map[j]==9) //如果之前是目的地。  
                        map[j]=3; //人走了之后修改回目的地ID。  
                    else  
                        map[j]=0; //否则就是空地。  
                }  
                //如果人的前面是箱子,而箱子前面是目的地。  
                else if (map[j-2]==3)  
                {   
                    count++;  
                    map[j-2]=7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。  
                    //下面是对箱子原先位置的判断,同上。  
                    if(map[j-1]==7)  
                        map[j-1]=9;  
                    else  
                        map[j-1]=6;  
                    //下面是对人原先位置进行判断,同上。  
                    if(map[j]==9)  
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            //如果人前面是已经进入某目的地的箱子(ID=7)。  
            else if(map[j-1]==7)  
            {  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。  
                if(map[j-2]==0)  
                {  
                    count--;  
                    map[j-2]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。  
                    map[j-1]=9;   //人自然而然的就站在了原先的目的地上了。  
                    //下面是对人原先地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。  
                if(map[j-2]==3)  
                {  
                    map[j-2]=7;   //把箱子推入了另一目的地,自然,ID也应是。  
                    map[j-1]=9;   //人站在了目的地上。  
                    //下面是对人原先站立地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            break;  
        case 'd':  
                book++;
            //如果人前面是空地。  
            if(map[j+1]==0)  
            {  
                map[j+1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。  
                if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。  
                    map[j]=3; //将人往前走一步后原地的ID修改为空地ID()。  
                else  
                    map[j]=0;    //否则原地ID修改为空地ID 。        
            }  
            //如果人前面是目的地。  
            else if(map[j+1]==3)  
            {  
                map[j+1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。  
                if(map[j]==9) //如果原地也是目的地(ID为)。  
                    map[j]=3; //人走后把原地ID修改回目的地ID。  
                else  
                    map[j]=0; //否则原地ID修改为为空地ID  
            }  
            //如果人前面是箱子。  
            else if(map[j+1]==4)  
            {  
                //如果人前面是箱子,而箱子前面是空地。  
                if (map[j+2]==0)  
                {   
                    map[j+2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()  
                    //下面是对箱子原地进行判断  
                    if(map[j+1]==7) //如果箱子原地为目的地。  
                        map[j+1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。  
                    else  
                        map[j+1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。  
                    //下面是对人原地进行判断  
                    if(map[j]==9) //如果之前是目的地。  
                        map[j]=3; //人走了之后修改回目的地ID。  
                    else  
                        map[j]=0; //否则就是空地。  
                }  
                //如果人的前面是箱子,而箱子前面是目的地。  
                else if (map[j+2]==3)  
                {   
                    count++;  
                    map[j+2]=7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。  
                    //下面是对箱子原先位置的判断,同上。  
                    if(map[j+1]==7)  
                        map[j+1]=9;  
                    else  
                        map[j+1]=6;  
                    //下面是对人原先位置进行判断,同上。  
                    if(map[j]==9)  
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            //如果人前面是已经进入某目的地的箱子(ID=7)。  
            else if(map[j+1]==7)  
            {  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。  
                if(map[j+2]==0)  
                {  
                    count--;  
                    map[j+2]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。  
                    map[j+1]=9;   //人自然而然的就站在了原先的目的地上了。  
                    //下面是对人原先地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
                //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。  
                if(map[j+2]==3)  
                {  
                    map[j+2]=7;   //把箱子推入了另一目的地,自然,ID也应是。  
                    map[j+1]=9;   //人站在了目的地上。  
                    //下面是对人原先站立地进行判断,方法同上。  
                    if(map[j]==9)   
                        map[j]=3;  
                    else  
                        map[j]=0;  
                }  
            }  
            break;  
        }  
        if(count==target)   //如果分数达到分  
        {  
            system("CLS"); //清屏  
            draw_map(map);   
            break;    //退出死循环  
        }  
    }  
    Sleep (2000);
    printf("\nYOU WIN!!!\n"); //过关提示
printf("\nYou took %d steps to compelete the game!\n",book);  
Sleep (3000);
}           

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表