刘邦 发表于 2018-12-12 16:19:15

写的一个推箱子的小游戏,只有一关,可以设计为多关卡,各位让我看看你们能写多少关

#include<stdio.h>
#include <stdlib.h>
#include <conio.h>
void keydown();
void draw();
int yanzheng();
int a={
                {1,1,1,1,1,1,1,1},
                {1,1,0,0,0,0,1,1},
                {1,1,0,1,0,0,1,1},
                {1,0,0,1,1,0,1,1},
                {1,0,4,4,3,3,0,1},
                {1,0,0,0,1,1,0,1},
                {1,1,5,0,1,0,0,1},
                {1,1,1,1,1,1,1,1}
        };
//打印一个8行8列的map
void draw()
{
       
        //0:空的 1:▆ 3:☆ 4:★ 5:※ 7:⊙ 8:※
        int i,j;
        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                        switch(a)
                        {
                        case 1:
                                printf("▆");   //表示墙壁
                                break;
                        case 0:
                                printf("");   //表示空地
                                break;
                        case 3:
                                printf("☆");   //表示目的地
                                break;
                        case 4:
                                printf("★");   //表示箱子
                                break;
                        case 5:
                                printf("※");   //表示人
                                break;
                        case 7:
                                printf("⊙");   //表示箱子在目的地
                                break;
                        case 8:
                                printf("※");      //表示人站在目的地上
                                break;
                        }
                }
                printf("\n");
        }
}
//键盘输入与游戏逻辑
void keydown()
{
        int i,j;
        char c=_getch();    //看不家的字符输入,要加头文件coni0.h
        for(i=0;i<8;i++)      
        {
                for(j=0;j<8;j++)
                {
                        if(a==5||a==8)
                        {
                                break;
                        }
                }
                if(a==5||a==8)
                        {
                                break;
                        }
        }                  //找到人的位置
        switch(c)
        {
        case 'w':
        case 'W':
        case 72:
                {
                        if(a==0||a==3)      //判断前方是不是空地或者目的地
                        {
                                a+=5;                  //把上一个赋值加上5,表示人或者人站在目的地的上
                                a-=5;                     //把原来的赋值减5,表示空地或者目的地
                        }
                        else if(a==4||a==7)    //判断前方是不是箱子或者箱子在目的地上
                        {
                                if(a==0||a==3)   //在原来的判断上判断前方的前方是不是空地或者目的地
                                {
                                        a+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
                                        a+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
                                        a-=5;               //把原来位置的赋值减5,表示空地或者目的地
                                }   
                        }
                }
                break;                           //前进变换
        case 's':
        case 'S':
        case 80:
                {
                                if(a==0||a==3)      //判断前方是不是空地或者目的地
                        {
                                a+=5;                  //把上一个赋值加上5,表示人或者人站在目的地的上
                                a-=5;                     //把原来的赋值减5,表示空地或者目的地
                        }
                        else if(a==4||a==7)    //判断前方是不是箱子或者箱子在目的地上
                        {
                                if(a==0||a==3)   //在原来的判断上判断前方的前方是不是空地或者目的地
                                {
                                        a+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
                                        a+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
                                        a-=5;               //把原来位置的赋值减5,表示空地或者目的地
                                }   
                        }
                }
                break;                           //后退变换
        case 'a':
        case 'A':
        case 75:
                {
                                if(a==0||a==3)      //判断前方是不是空地或者目的地
                        {
                                a+=5;                  //把上一个赋值加上5,表示人或者人站在目的地的上
                                a-=5;                     //把原来的赋值减5,表示空地或者目的地
                        }
                        else if(a==4||a==7)    //判断前方是不是箱子或者箱子在目的地上
                        {
                                if(a==0||a==3)   //在原来的判断上判断前方的前方是不是空地或者目的地
                                {
                                        a+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
                                        a+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
                                        a-=5;               //把原来位置的赋值减5,表示空地或者目的地
                                }   
                        }
                }
                break;                           //向左变换
        case 'd':
        case 'D':
        case 77:
                {
                if(a==0||a==3)      //判断前方是不是空地或者目的地
                        {
                                a+=5;                  //把上一个赋值加上5,表示人或者人站在目的地的上
                                a-=5;                     //把原来的赋值减5,表示空地或者目的地
                        }
                        else if(a==4||a==7)    //判断前方是不是箱子或者箱子在目的地上
                        {
                                if(a==0||a==3)   //在原来的判断上判断前方的前方是不是空地或者目的地
                                {
                                        a+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
                                        a+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
                                        a-=5;               //把原来位置的赋值减5,表示空地或者目的地
                                }   
                        }
                }
                break;                               //向右变换
        }
}
//验证是否已经结束游戏
int yanzheng()
{
        int i,j;
        int count=0;
        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                        if(a==7)
                        {
                                count+=1;
                        }
                }
        }
        return count;
}
int main()
{
        int c;
        while(1)
        {
                draw();
                c=yanzheng();
                if(c==2)
                {
                        printf("game over\n");
                        break;
                }
      keydown();
                system("cls");
        }
        system("pause");
        return 0;
}
页: [1]
查看完整版本: 写的一个推箱子的小游戏,只有一关,可以设计为多关卡,各位让我看看你们能写多少关