huojiaoqingchun0123

推箱子

// 作者:火浇青春

// 日期: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("\n");

    }

}

 

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("\n\n\n\n\n\n\n\n\n\n\n第%d关\n",guan);

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

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

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

    {

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

        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("请输入你想玩的关数:\n");

                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("\n\n\n\n\n\n\n\n\n\n\n第%d关\n",guan);

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

            }

            else

            {

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

                return 0;

            }

            goto fu;

        }

        printf("\n\n\n\n\n\n\n\n\n\n\n第%d关\n",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;

}

发表于 2015-12-08 12:49  晚起的蚂蚁  阅读(229)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章:

  • 2021-12-05
  • 2021-12-05
  • 2021-06-02
  • 2021-12-05
  • 2021-12-07
  • 2021-07-24
  • 2021-05-11
  • 2021-05-20
猜你喜欢
  • 2022-02-11
  • 2021-09-28
  • 2021-07-23
  • 2021-12-05
  • 2021-08-27
  • 2021-09-20
相关资源
相似解决方案