【黑马程序员】C语言—推箱子游戏实现

原创 2015年11月17日 16:55:37

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


C语言推箱子游戏代码实现:

<span style="font-size:14px;">//
//  main.c
//  推箱子游戏
//
//  Created by Brisinga on 15/9/28.
//  Copyright © 2015年 yan. All rights reserved.
//

#include <stdio.h>
#define H 10
#define L 11

//打印地图
void printMap(char map[H][L]){
    
    for (int i=0; i<H; i++) {
        printf("%s\n",map[i]);
    }

}

//交换小人和路的位置
void swap(char map[H][L],int oldX,int oldY, int newX,int newY){
    
    char temp = map[oldX][oldY];
    map[oldX][oldY] = map[newX][newY];
    map[newX][newY] = temp;

}
//判断小人下一个是不是箱子
int flag(char map[H][L],char X,int x,int y){
    if (map[x][y]==X) {
        return 1;
    }
    
    return 0;
}
int main(int argc, const char * argv[]) {
    char map[H][L] ={"##########",
                     "#O     # #",
                     "#  X     #",
                     "#  #  #  #",
                     "#  #     #",
                     "#     #  #",
                     "#  #  #  #",
                     "#  #  #  #",
                     "#     #   ",
                     "##########"};
    //定义小人的当前位置
    int currentX = 1;
    int currentY = 1;
    //定义小人下一个位置
    int nextX = currentX;
    int nextY = currentY;
    //定义输入的方向
    char drect;
    //定义路
    char street = ' ';
    //定义箱子的当前位置
    int bX = 2;
    int bY = 3;
    //定义箱子的下一个位置
    int bnX = bX;
    int bnY = bY;
    //定义箱子
    char box = 'X';
    printf("请输入小人的位置:\n");
    
    //控制小人移动
    while (1) {
        //接收输入的方向
        printMap(map);
        scanf("%c",&drect);
        getchar();
        //判断方向
        switch (drect) {
            case 'w':
            case 'W':
                nextX--;
                if (flag(map,box,nextX,nextY)) {
                    bnX--;
                }
                break;
            case 's':
            case 'S':
                nextX++;
                if (flag(map,box,nextX,nextY)) {
                    bnX++;
                }
                break;
            case 'a':
            case 'A':
                nextY--;
                if (flag(map,box,nextX,nextY)) {
                    bnY--;
                }
                break;
            case 'd':
            case 'D':
                nextY++;
                if (flag(map,box,nextX,nextY)) {
                    bnY++;
                }
                break;
            case 'q':
            case 'Q':
                printf("程序正在退出...\n");
                return 0;
            default:
                break;
        }
        
        //控制小人的移动
        if (map[nextX][nextY]==street) {
            swap(map, currentX, currentY, nextX, nextY);
            currentX = nextX;
            currentY = nextY;
        }else if(map[nextX][nextY]==box&&map[bnX][bnY]==street){
            
            swap(map, bX, bY, bnX, bnY);
            bX = bnX;
            bY = bnY;
            swap(map, currentX, currentY, nextX, nextY);
            currentX = nextX;
            currentY = nextY;
            
        }else{
            nextX = currentX;
            nextY = currentY;
            bnY = bY;
            bnX = bX;
        }
        
        if (bnY == 9) {
            printf("出来啦!\n");
            return 0;
        }
        
    }
    
    return 0;
}
</span>


版权声明:本文为博主原创文章,未经博主允许不得转载。

【面试笔试算法】Program 5 : 推箱子 (网易游戏笔试题)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 推箱子是一款经典游戏。如图所示,灰色格子代表不能通过区域,蓝色方格是箱子,黑色圆形代表玩家,含有圆点的格子代表目...
  • terence1212
  • terence1212
  • 2016年03月23日 21:08
  • 1948

【Java】Java实现推箱子的小游戏

实现上面的箱子游戏其实并不难,唯一难的地方就是推箱子过程中各种状态的检测。 首先将地图想象成一个二维数组,0代表空地,1代表障碍,4代表箱子,8代表笼子,12代表箱子在笼子中。 程序入口类: impo...
  • qq_32353771
  • qq_32353771
  • 2016年12月18日 22:07
  • 5382

Qt实现推箱子小游戏

学习Qt有一个月了,想要实现一个推箱子的游戏来检验一下自己。今天先设计一下将要完成的具体表现,因为是第一次做,所以设计的稍微简单点,以后逐渐修改。首先要创建菜单栏,分为三个主菜单,第一个主菜单为开始游...
  • q5512049
  • q5512049
  • 2015年08月05日 16:52
  • 2956

Unity3D开发的2D游戏---《趣味推箱子》

趁着工作的空闲时候,用Unity3D的自带的2D系统和NGUI做了个推箱子的游戏,目前共30个关卡。   里面加入了类似与愤怒的小鸟的关卡选择系统,时间和炸弹两个道具等内容。对于Window/W...
  • ml3947
  • ml3947
  • 2014年12月11日 17:06
  • 3128

C语言-推箱子游戏代码

推箱子游戏的运行规则:在街道上上小人推动箱子移动,直到把箱子移动到目的地。 思路分析: 小人及箱子的移动就是小人或者箱子和路的交换; 1 定义二维字符数组,存储地图 2 显示地图,提示游戏玩法...
  • zhudong10
  • zhudong10
  • 2015年10月24日 23:50
  • 3103

致佳音: 推箱子游戏自动求解算法设计(二)

这一个小节我们说一说传说中的A×算法,其实之前也上传过类似的小件件,这里我们就去剖析一下它 毕竟在游戏程序,我们要从一点移动到另一点,并得到最短路程的轨迹,类似这种算法还有好几种,执行效率都差不多,...
  • prsniper
  • prsniper
  • 2015年03月14日 22:51
  • 1139

android 自定义view实现推箱子小游戏。

android 自定义view重写onDraw 方法实现推箱子小游戏。
  • ink_s
  • ink_s
  • 2017年04月11日 17:56
  • 1387

JAVA开发的一个推箱子游戏原型

自从打通了JAVA的任督二脉之后,想法不断出现,想停下来都不行,逼的只能编程实现。下面是开发一个简单的推箱子游戏。       推箱子游戏很简单,用C大一的学生都做出来,关键要解决的问题有:地图, 元...
  • andywxf01
  • andywxf01
  • 2016年12月07日 22:37
  • 1010

c++之简单的推箱子游戏

linux 可运行推箱子游戏,只有一个箱子,地图固定,人可以到达目标地点并且离开后,目标地点不会被刷掉。...
  • zhoutian_19950630
  • zhoutian_19950630
  • 2017年01月16日 16:46
  • 1808

Android开发入门——推箱子游戏开发实战(二)

本文是推箱子游戏开发实战系列文章的第二篇,讲述使用Android Studio开发Hello World应用程序。...
  • yedouble
  • yedouble
  • 2016年11月23日 11:03
  • 2304
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【黑马程序员】C语言—推箱子游戏实现
举报原因:
原因补充:

(最多只允许输入30个字)