推箱子游戏

使用C来实现一个简单的推箱子游戏..

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main(){
    char a[50][50]={
    "   ###     ",
    "   #*#     ",
    "   # #     ",
    "####O######",
    "#*  OS O *#",
    "#####O#####",
    "    # #    ",
    "    #*#    ",
    "    ###    ",
    };

    int i,f=0; //控制变量 
    int x=4,y=5; //控制点坐标 

    char ch; //定义控制输入端

    //打印输出地图
    for(i=0;i<12;i++){
        puts(a[i]);
    }
    puts("游戏尚未开始,请按键……");

    //f标记值0.1.2.3共计4次循环 
    while(f<4)//开始循环
    {
        ch=getch();

        if(ch=='s') //按下s键
        { 
            if(a[x+1][y]!='#'&&a[x+1][y]!='@')//未碰墙未达目的地 
            {
                if(a[x+1][y]!='O') //前面没有O的时候 
                {
                    a[x][y]=' ';    //现坐标为空 
                    x++;            //x坐标向下移动一位 
                    a[x][y]='S';    //新坐标标记为S 
                }
                else    //前面有O标记时 
                {
                    if(a[x+2][y]!='#')  //前面两坐标有墙 
                    {
                        if(a[x+2][y]!='*')  //O前面没有目的地时 
                        {
                            a[x][y]=' ';    //现坐标为空     
                            x++;            //x坐标向下移动 
                            a[x][y]='S';    //新坐标标记为S 
                            a[x+1][y]='O';  //前面一个坐标为O 
                        }
                        else    //O前面有目的地坐标时 
                        {
                            a[x][y]=' ';    //现坐标为空 
                            x++;            //x坐标向下移动 
                            a[x][y]='S';    //新坐标标记为S 
                            a[x+1][y]='@';  //目的地坐标改为@ 
                            f=f+1;          //f标记值增加1 
                        }
                    }
                }
            }
        }

        if(ch=='w') //按下w键
        { 
            if(a[x-1][y]!='#'&&a[x-1][y]!='@')
            {
                if(a[x-1][y]!='O') 
                {
                    a[x][y]=' ';
                    x--;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x-2][y]!='#')
                    {
                        if(a[x-2][y]!='*')
                        {
                            a[x][y]=' ';                            
                            x--;
                            a[x][y]='S';
                            a[x-1][y]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            x--;
                            a[x][y]='S';
                            a[x-1][y]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

        if(ch=='d') //按下d键
        { 
            if(a[x][y+1]!='#'&&a[x][y+1]!='@')
            {
                if(a[x][y+1]!='O') 
                {
                    a[x][y]=' ';
                    y++;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x][y+2]!='#')
                    {
                        if(a[x][y+2]!='*')
                        {
                            a[x][y]=' ';                            
                            y++;
                            a[x][y]='S';
                            a[x][y+1]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            y++;
                            a[x][y]='S';
                            a[x][y+1]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

        if(ch=='a') //按下a键
        { 
            if(a[x][y-1]!='#'&&a[x][y-1]!='@')
            {
                if(a[x][y-1]!='O') 
                {
                    a[x][y]=' ';
                    y--;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x][y-2]!='#')
                    {
                        if(a[x][y-2]!='*')
                        {
                            a[x][y]=' ';                            
                            y--;
                            a[x][y]='S';
                            a[x][y-1]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            y--;
                            a[x][y]='S';
                            a[x][y-1]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

    system("cls"); //清屏
    for(i=0;i<12;i++)
        {
        //输出变量变更之后的地图 
        puts(a[i]);
        }
    printf("\n已达成:%d 颗星。",f);
    }


    Sleep(500);  
    system("cls"); //清屏
    puts("恭喜,你赢了!");
    return 0;
}