鱼C论坛

 找回密码
 立即注册
查看: 1059|回复: 0

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

[复制链接]
发表于 2018-12-12 16:19:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include <stdlib.h>
#include <conio.h>
void keydown();
void draw();
int yanzheng();
int a[8][8]={
                {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[i][j])
                        {
                        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[i][j]==5||a[i][j]==8)
                        {
                                break;
                        }
                }
                if(a[i][j]==5||a[i][j]==8)
                        {
                                break;
                        }
        }                    //找到人的位置
        switch(c)
        {
        case 'w':
        case 'W':
        case 72:
                {
                        if(a[i-1][j]==0||a[i-1][j]==3)      //判断前方是不是空地或者目的地
                        {
                                a[i-1][j]+=5;                    //把上一个赋值加上5,表示人或者人站在目的地的上
                                a[i][j]-=5;                     //把原来的赋值减5,表示空地或者目的地
                        }
                        else if(a[i-1][j]==4||a[i-1][j]==7)    //判断前方是不是箱子或者箱子在目的地上
                        {
                                if(a[i-2][j]==0||a[i-2][j]==3)     //在原来的判断上判断前方的前方是不是空地或者目的地
                                {
                                        a[i-2][j]+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
                                        a[i-1][j]+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
                                        a[i][j]-=5;                 //把原来位置的赋值减5,表示空地或者目的地
                                }   
                        }
                }
                break;                             //前进变换
        case 's':
        case 'S':
        case 80:
                {
                                if(a[i+1][j]==0||a[i+1][j]==3)      //判断前方是不是空地或者目的地
                        {
                                a[i+1][j]+=5;                    //把上一个赋值加上5,表示人或者人站在目的地的上
                                a[i][j]-=5;                     //把原来的赋值减5,表示空地或者目的地
                        }
                        else if(a[i+1][j]==4||a[i+1][j]==7)    //判断前方是不是箱子或者箱子在目的地上
                        {
                                if(a[i+2][j]==0||a[i+2][j]==3)     //在原来的判断上判断前方的前方是不是空地或者目的地
                                {
                                        a[i+2][j]+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
                                        a[i+1][j]+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
                                        a[i][j]-=5;                 //把原来位置的赋值减5,表示空地或者目的地
                                }   
                        }
                }
                break;                             //后退变换
        case 'a':
        case 'A':
        case 75:
                {
                                if(a[i][j-1]==0||a[i][j-1]==3)      //判断前方是不是空地或者目的地
                        {
                                a[i][j-1]+=5;                    //把上一个赋值加上5,表示人或者人站在目的地的上
                                a[i][j]-=5;                     //把原来的赋值减5,表示空地或者目的地
                        }
                        else if(a[i][j-1]==4||a[i][j-1]==7)    //判断前方是不是箱子或者箱子在目的地上
                        {
                                if(a[i][j-2]==0||a[i][j-2]==3)     //在原来的判断上判断前方的前方是不是空地或者目的地
                                {
                                        a[i][j-2]+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
                                        a[i][j-1]+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
                                        a[i][j]-=5;                 //把原来位置的赋值减5,表示空地或者目的地
                                }   
                        }
                }
                break;                             //向左变换
        case 'd':
        case 'D':
        case 77:
                {
                if(a[i][j+1]==0||a[i][j+1]==3)      //判断前方是不是空地或者目的地
                        {
                                a[i][j+1]+=5;                    //把上一个赋值加上5,表示人或者人站在目的地的上
                                a[i][j]-=5;                     //把原来的赋值减5,表示空地或者目的地
                        }
                        else if(a[i][j+1]==4||a[i][j+1]==7)    //判断前方是不是箱子或者箱子在目的地上
                        {
                                if(a[i][j+2]==0||a[i][j+2]==3)     //在原来的判断上判断前方的前方是不是空地或者目的地
                                {
                                        a[i][j+2]+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
                                        a[i][j+1]+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
                                        a[i][j]-=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[i][j]==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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 23:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表