搜索
查看: 693|回复: 1
打印 上一主题 下一主题

为什么按一下下或上,会移动2次!谢谢帮助!

[复制链接]
跳转到指定楼层
楼主
发表于 2017-2-2 08:56:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
int main()
{
                char map[50][50] = {
                        "##########",
                        "##     ###",
                        "##O###   #",
                        "# S O  O #",
                        "# &&# O ##",
                        "##&&#   ##",
                        "##########"                 
                        };
    int i, x=3, y=2;
    for(i=0;i<7;i++)
    {
    puts(map[i]);
    };
    char character;

    while(1)
    {
    character=getch();
               
                if(character=='s')
                {
        //人物S向下移动。
                        if(map[x+1][y]!='#' && map[x+1][y]!='O' && map[x+1][y]!='@')
            {
            map[x][y]=' ';
            x++;
            map[x][y]='S';
            }   
        //人物S向下推箱子   
            if(map[x+1][y]!='#' && map[x+1][y]=='O' && map[x+2][y]!='#' && map[x+2][y]!='O' && map[x+2][y]!='@')
            {
                if(map[x+2][y]=='&')
                {
                map[x][y]=' ';
                x++;
                map[x][y]='S';
                map[x+1][y]='@';
                }
                else
                {
                map[x][y]=' ';
                x++;
                map[x][y]='S';
                map[x+1][y]='O';
                }
            }
        //人物S向下再推到位的箱子   
            if(map[x+1][y]!='#' && map[x+1][y]=='@' && map[x+2][y]!='#' && map[x+2][y]!='O' && map[x+2][y]=='&')
            {
            map[x][y]=' ';
            x++;
            map[x][y]='S';
            map[x+1][y]='@';
            }   
            system("cls");
                for(i=0;i<7;i++)
                {
                puts(map[i]);
                }            
        }

/*********************************************************************/         
                if(character=='w')
                {
        //人物s向上移动
            if(map[x-1][y]!='#' && map[x-1][y]!='O' && map[x-1][y]!='@')
            {
            map[x][y]=' ';
            x--;
            map[x][y]='S';   
                        }

                //人物S向上推箱子
            if(map[x-1][y]!='#' && map[x-1][y]=='O' && map[x-2][y]!='#' && map[x-2][y]!='O' && map[x-2][y]!='@')
            {
                if(map[x-2][y]=='&')
                {
                map[x][y]=' ';
                x--;
                map[x][y]='S';
                map[x-1][y]='@';  
                }
                else
                {
                map[x][y]=' ';
                x--;
                map[x][y]='S';
                map[x-1][y]='O';
                }      
            }

        //人物S向上再推到位的箱子
                        if(map[x-1][y]!='#' && map[x-1][y]=='@' && map[x-2][y]!='#' && map[x-2][y]!='O' && map[x-2][y]=='&')
            {
            map[x][y]=' ';
            x--;
            map[x][y]='S';
            map[x-1][y]='@';
            }
            system("cls");
                for(i=0;i<7;i++)
                {
                puts(map[i]);
                }   

        }

  /*********************************************************************/        
                if(character=='a')
                {
         //人物s向左移动
                        if(map[x][y-1]!='#' && map[x][y-1]!='O' && map[x][y-1]!='@')
            {
            map[x][y]=' ';
            y--;
            map[x][y]='S';
            }

          //人物S向左推箱子
            if(map[x][y-1]!='#' && map[x][y-1]=='O' && map[x][y-2]!='#' && map[x][y-2]!='O' && map[x][y-2]!='@')
            {
                if(map[x][y-2]=='&')
                {
                map[x][y]=' ';
                y--;
                map[x][y]='S';
                map[x][y-1]='@';

                }
                else
                {
                map[x][y]=' ';
                y--;
                map[x][y]='S';
                map[x][y-1]='O';
                }
            }

          //人物S向左推到位的箱子
                if(map[x][y-1]!='#' && map[x][y-1]=='@' && map[x][y-2]!='#' && map[x][y-2]!='O' && map[x][y-2]=='&')
            {
            map[x][y]=' ';
            y--;
            map[x][y]='S';
            map[x][y-1]='@';
            }
            system("cls");
                for(i=0;i<7;i++)
                {
                puts(map[i]);
                }   
        }
  /*********************************************************************/         

                if(character=='d')
                {
        //人物s向右移动
                if(map[x][y+1]!='#' && map[x][y+1]!='O' && map[x][y+1]!='@')
            {
            map[x][y]=' ';
            y++;
            map[x][y]='S';
                        }

        //人物S向右推箱子
                if(map[x][y+1]!='#' && map[x][y+1]=='O' && map[x][y+2]!='#' && map[x][y+2]!='O' && map[x][y+2]!='@')
            {
                if(map[x][y+2]=='&')
                {
                map[x][y]=' ';
                y++;
                map[x][y]='S';
                map[x][y+1]='@';
                }
                else
                {
                map[x][y]=' ';
                y++;
                map[x][y]='S';
                map[x][y+1]='O';
                }
            }

        //人物S向右再推到位的箱子
                if(map[x][y+1]!='#' && map[x][y+1]=='@' && map[x][y+2]!='#' && map[x][y+2]!='O' && map[x][y+2]=='&')
            {
            map[x][y]=' ';
            y++;
            map[x][y]='S';
            map[x][y+1]='@';
            }

            system("cls");
                for(i=0;i<7;i++)
                {
                puts(map[i]);
                }   

        }




  /*********************************************************************/   

    }

        system("pause");
        return 0;
}


沙发
发表于 2017-2-3 09:51:08 | 只看该作者
那个,你应该把移动之后的判断语句加上else if或者把移动之后的判断语句加到移动语句中后面一部分,不然会重复移动。
下面是我的修改代码,你可以参照一下
#include <stdio.h>
#include <stdlib.h>
int main()
{
                char map[50][50] = {
                        "##########",
                        "##     ###",
                        "##O###   #",
                        "# S O  O #",
                        "# &&# O ##",
                        "##&&#   ##",
                        "##########"                 
                        };
    int i, x=3, y=2;
    for(i=0;i<7;i++)
    {
    puts(map[i]);
    };
    char character;

    while(1)
    {
    character=getchar();
               
                if(character=='s')
                {
        //人物S向下移动。
                        if(map[x+1][y]!='#' && map[x+1][y]!='O' && map[x+1][y]!='@')
            {
            map[x][y]=' ';
            x++;
            map[x][y]='S';
            }   
        //人物S向下推箱子   
            else if(map[x+1][y]!='#' && map[x+1][y]=='O' && map[x+2][y]!='#' && map[x+2][y]!='O' && map[x+2][y]!='@')
            {
                if(map[x+2][y]=='&')
                {
                map[x][y]=' ';
                x++;
                map[x][y]='S';
                map[x+1][y]='@';
                }
                else
                {
                map[x][y]=' ';
                x++;
                map[x][y]='S';
                map[x+1][y]='O';
                }
            }
        //人物S向下再推到位的箱子   
            else if(map[x+1][y]!='#' && map[x+1][y]=='@' && map[x+2][y]!='#' && map[x+2][y]!='O' && map[x+2][y]=='&')
            {
            map[x][y]=' ';
            x++;
            map[x][y]='S';
            map[x+1][y]='@';
            }   
            system("cls");
                for(i=0;i<7;i++)
                {
                puts(map[i]);
                }            
        }

/*********************************************************************/         
                if(character=='w')
                {
        //人物s向上移动
              if(map[x-1][y]!='#' && map[x-1][y]!='O' && map[x-1][y]!='@')
            {
            map[x][y]=' ';
            x--;
            map[x][y]='S';   
                        }

                //人物S向上推箱子
            else if(map[x-1][y]!='#' && map[x-1][y]=='O' && map[x-2][y]!='#' && map[x-2][y]!='O' && map[x-2][y]!='@')
            {
                if(map[x-2][y]=='&')
                {
                map[x][y]=' ';
                x--;
                map[x][y]='S';
                map[x-1][y]='@';  
                }
                else
                {
                map[x][y]=' ';
                x--;
                map[x][y]='S';
                map[x-1][y]='O';
                }      
            }

        //人物S向上再推到位的箱子
                        else if(map[x-1][y]!='#' && map[x-1][y]=='@' && map[x-2][y]!='#' && map[x-2][y]!='O' && map[x-2][y]=='&')
            {
            map[x][y]=' ';
            x--;
            map[x][y]='S';
            map[x-1][y]='@';
            }
            system("cls");
                for(i=0;i<7;i++)
                {
                puts(map[i]);
                }   

        }

  /*********************************************************************/        
                if(character=='a')
                {
         //人物s向左移动
                        if(map[x][y-1]!='#' && map[x][y-1]!='O' && map[x][y-1]!='@')
            {
            map[x][y]=' ';
            y--;
            map[x][y]='S';
            }

          //人物S向左推箱子
            else if(map[x][y-1]!='#' && map[x][y-1]=='O' && map[x][y-2]!='#' && map[x][y-2]!='O' && map[x][y-2]!='@')
            {
                if(map[x][y-2]=='&')
                {
                map[x][y]=' ';
                y--;
                map[x][y]='S';
                map[x][y-1]='@';

                }
                else
                {
                map[x][y]=' ';
                y--;
                map[x][y]='S';
                map[x][y-1]='O';
                }
            }

          //人物S向左推到位的箱子
                else if(map[x][y-1]!='#' && map[x][y-1]=='@' && map[x][y-2]!='#' && map[x][y-2]!='O' && map[x][y-2]=='&')
            {
            map[x][y]=' ';
            y--;
            map[x][y]='S';
            map[x][y-1]='@';
            }
            system("cls");
                for(i=0;i<7;i++)
                {
                puts(map[i]);
                }   
        }
  /*********************************************************************/         

                if(character=='d')
                {
        //人物s向右移动
                if(map[x][y+1]!='#' && map[x][y+1]!='O' && map[x][y+1]!='@')
            {
            map[x][y]=' ';
            y++;
            map[x][y]='S';
                        }

        //人物S向右推箱子
                else if(map[x][y+1]!='#' && map[x][y+1]=='O' && map[x][y+2]!='#' && map[x][y+2]!='O' && map[x][y+2]!='@')
            {
                if(map[x][y+2]=='&')
                {
                map[x][y]=' ';
                y++;
                map[x][y]='S';
                map[x][y+1]='@';
                }
                else
                {
                map[x][y]=' ';
                y++;
                map[x][y]='S';
                map[x][y+1]='O';
                }
            }

        //人物S向右再推到位的箱子
                else if(map[x][y+1]!='#' && map[x][y+1]=='@' && map[x][y+2]!='#' && map[x][y+2]!='O' && map[x][y+2]=='&')
            {
            map[x][y]=' ';
            y++;
            map[x][y]='S';
            map[x][y+1]='@';
            }

            system("cls");
                for(i=0;i<7;i++)
                {
                puts(map[i]);
                }   

        }




  /*********************************************************************/   

    }

        system("pause");
        return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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