• 推箱子


    // 作者:火浇青春

    // 日期:20151125

    #include <stdio.h>

    #define N 10 //宏定义,确定地图的宽度

    #define M 10 //宏定义,确定地图的长度

    void scene(char put[N][M]);//游戏背景输出函数的声明

    int caozuo(char put[N][M]);//游戏操作函数的声明

    int sit(char put[N][M]);

    int main(int argc, char const *argv[])

    {

        //1.游戏初始背景,'#'代表墙,'O'代表人,'X'代表箱子

        char put[N][M];//2.数组put的定义

        caozuo(put);//3.输入字母对小人进行操作

        return 0;

    }

    void scene(char put[N][M])//游戏背景刷新函数

    {

        int i,j;

        for ( i = 0; i < N; ++i)

        {

            for (j = 0; j < M; ++j)

                printf("%c",put[i][j] );

            printf(" ");

        }

    }

    int sit(char put[N][M])//此函数用来寻找人的初始坐标

    {

        int i, j;

        for ( i = 0; i <= N; ++i)

            for ( j = 0; j <= M; ++j)

                if (put[i][j]=='O')

                    return j;

    }

    int caozuo(char put[N][M])//对小人进行操作,控制小人行走

    {

        int guan=1;//用来显示关数

        fu:

        switch(guan)//开关语句,用来选关 ~(≧▽≦)/~

        {

            case 1:beijing1(put);break;//游戏第一关背景

            case 2:beijing2(put);break;//游戏第二关背景

            case 3:beijing3(put);break;//游戏第三关背景

        }

        int i;//i为横坐标

        int j = sit(put);//寻找人的初始坐标

        for ( i = 0; i < M; ++i)

            if ('O'==put[i][j])

                break;

        printf(" 第%d关 ",guan);

        scene(put);//2.输出游戏背景

        char play;//变量,用来存放输入的字母,用来控制方向

        while(1)//while循环语句,里面放'1'表示以下永远成立,可以执行,遇到break则推出

        {

            printf("请输入w,s,a,d来控制小人行动: ");

            scanf(" %c",&play);//输入操作字符

            switch(play)//多分支选择语句

            {

                case 'w'://向上

                    if(put[i-1][j]!='#')//判断人的上面是否有墙

                    {

                        if(put[i-1][j]!='X')//判断人的上面是否有箱子,如果没有则执行下面语句

                        {

                            put[--i][j]='O';

                            put[i+1][j]=' ';

                        }

                        else if(put[i-2][j]!='#')//如果有箱子且箱子前面不是墙,则执行下面语句

                        {

                            put[--i][j]='O';//改变并记录小人 'O' 的位置

                            put[i+1][j]=' ';//改变小人原来的位置,达成移动的视觉错觉

                            put[i-1][j]='X';//改变箱子的位置

                        }

                    }

                    break;

                case 's'://向下

                    if(put[i+1][j]!='#')

                    {

                        if(put[i+1][j]!='X')

                        {

                            put[++i][j]='O';

                            put[i-1][j]=' ';

                        }

                        else if(put[i+2][j]!='#')

                        {

                            put[++i][j]='O';

                            put[i-1][j]=' ';

                            put[i+1][j]='X';

                        }

                    }

                    break;

                case 'a'://向左

                    if(put[i][j-1]!='#')

                    {

                        if(put[i][j-1]!='X')

                        {

                            put[i][--j]='O';

                            put[i][j+1]=' ';

                        }

                        else if(put[i][j-2]!='#')

                        {

                            put[i][--j]='O';

                            put[i][j+1]=' ';

                            put[i][j-1]='X';

                        }

                    }

                    break;

                case 'd'://向右

                    if(put[i][j+1]!='#')

                    {

                        if(put[i][j+1]!='X')

                        {

                            put[i][++j]='O';

                            put[i][j-1]=' ';

                        }

                        else if(put[i][j+2]!='#')

                        {

                            put[i][++j]='O';

                            put[i][j-1]=' ';

                            put[i][j+1]='X';

                        }

                    }

                    break;

                case 'p':

                    {

                    printf("请输入你想玩的关数: ");

                    scanf("%d",&guan);

                    goto fu;

                    }

            }

            //如果箱子到了临界点(地图的边缘),则显示过关

            if('X'==put[i][M-1]||'X'==put[i][0]||'X'==put[N-1][j]||'X'==put[0][j])

            {

                if (3!=guan)//限制只有三关

                {

                    scene(put);//2.输出游戏背景

                    printf("过关:");

                    printf(" 第%d关 ",guan);

                    guan++;//过关后进入下一关

                }

                else

                {

                    printf(" 恭喜通关!!! ");

                    return 0;

                }

                goto fu;

            }

            printf(" 第%d关 ",guan);

            scene(put);//2.输出游戏背景

        }

    }

    int beijing1(char put[N][M])//第一关地图背景

    {

        int i,j;

        char pu[N][M]={

         {'#','#','#','#','#','#','#','#','#','#'},

         {'#',' ','O',' ',' ',' ',' ',' ',' ','#'},

         {'#',' ','X','#','#','#','#',' ',' ','#'},

         {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},

         {'#',' ',' ',' ','#','#',' ',' ',' ','#'},

         {'#',' ',' ','#','#','#','#',' ',' ','#'},

         {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},

         {'#',' ',' ',' ','#','#','#',' ',' ','#'},

         {'#',' ',' ',' ',' ',' ',' ',' ',' ','|'},

         {'#','#','#','#','#','#','#','#','#','#'}};

        for(i=0;i<N;i++)

            for(j=0;j<M;j++)

                put[i][j]=pu[i][j];

        return 0;

    }

    int beijing2(char put[N][M])//第二关地图背景

    {

        int i,j;

        char pu[N][M]={

         {'#','#','#','#','#','#','#','#','#','#'},

         {'#',' ',' ','#','#','#','#',' ',' ','#'},

         {'#','O','X','#','#','#','#',' ',' ','#'},

         {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},

         {'#',' ',' ',' ','#','#',' ',' ',' ','#'},

         {'#',' ',' ','#','#','#','#',' ',' ','#'},

         {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},

         {'#',' ',' ',' ','#','#','#',' ','#','#'},

         {'#','#',' ',' ',' ',' ',' ',' ',' ','|'},

         {'#','#','#','#','#','#','#','#','#','#'}};

        for(i=0;i<N;i++)

            for(j=0;j<M;j++)

                put[i][j]=pu[i][j];

        return 0;

    }

    int beijing3(char put[N][M])//第三关地图背景

    {

        int i,j;

        char pu[N][M]={

         {'#','#','#','#','#','#','#','#','#','#'},

         {'#',' ',' ','#',' ',' ','#',' ',' ','#'},

         {'#','O','X','#',' ',' ',' ',' ',' ','#'},

         {'#','#',' ','#',' ',' ','#','#',' ','#'},

         {'#',' ',' ',' ',' ',' ',' ',' ',' ','|'},

         {'#',' ',' ',' ',' ','#','#',' ','#','#'},

         {'#',' ','#',' ','#',' ',' ',' ',' ','#'},

         {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},

         {'#',' ','#',' ','#',' ',' ',' ',' ','#'},

         {'#','#','#','#','#','#','#','#','#','#'}};

        for(i=0;i<N;i++)

            for(j=0;j<M;j++)

                put[i][j]=pu[i][j];

        return 0;

    }

  • 相关阅读:
    软件架构实现
    UVa644
    如何理解Hibernate中的HibernateSessionFactory类
    在pcDuino上使用蓝牙耳机玩转音乐
    Java Web----Java Web的数据库操作(三)
    Pylons Controller里面Session.commit()总是出现rollback
    ORACLE的SQL JOIN方式小结
    关于数据库学习进阶的一点体悟
    IO is frozen on database xxx, No user action is required
    ORACLE等待事件:enq: TX
  • 原文地址:https://www.cnblogs.com/huojiaoqingchun0123/p/5028738.html
Copyright © 2020-2023  润新知