关闭

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

标签: c语言函数推箱子分支循环
277人阅读 评论(0) 收藏 举报
分类:

------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>


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5803次
    • 积分:259
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档