黑马程序员--迷宫小游戏

------- android培训java培训、期待与您交流! ----------

在黑马ios的基础课视频上,有个迷宫小游戏,感觉挺有趣,然后我就在此基础上,稍稍改了点,记下,留着可以和别人共同探讨。

首先,在老师讲说要做迷宫的时候,我觉得很难啊,自己空想,也不知道解决办法,感觉会很复杂,于是我迅速的点开视频。再听完老师讲过以后,就不得不感慨,原来游戏可以这么简单啊。

首先老师是以#做墙的,以o为小人的,地图如此

    char map[kRow][kCol]={
    '#','#','#','#','#','#',
    '#','o','#','#',' ',' ',
    '#',' ','#','#',' ','#',
    '#',' ','#','#',' ','#',
    '#',' ',' ',' ',' ','#',
    '#','#','#','#','#','#',
    
    };
通过不断打印地图,实现小人动的感觉。在老师的视频里,一开始我一直不理解,为什么要重复打印地图,(主要是我思维定势了,因为平时玩的游戏,都是地图不动,小人动。),直到,在看推箱子游戏,老师说了刷屏,我恍然大悟,就是应该不断的打印地图,在我们玩游戏的时候,即便我们只感觉地图没动,是里面的小人动了,但是,地图和人都被快速的刷新了一遍。

呃,废话有点多,上段代码,感觉实在些。


//
//  main.c
//  maze
//
//  Created by cqycomputer on 15/6/21.
//  Copyright (c) 2015年 cqycomputer. All rights reserved.
//

#include <stdio.h>

#define kRow 6
#define kCol 6
#define STREET ' '
#define PERSON '@'

void printMap(char map[kRow][kCol]){
    
    for(int i=0;i<kRow;i++){
        for(int j=0;j<kCol;j++){
            printf("%c",map[i][j]);
        }
        printf("\n");
    }

}

int moveByCharAndXY(char dir,int *curX,int *curY,char map[kRow][kCol]){
    //
    int newX = *curX;
    int newY = *curY;
    switch(dir){
        case 'A':
        case 'a':
            newY--;
            break;
        case 'D':
        case 'd':
            newY++;
            break;
        case 'W':
        case 'w':
            newX--;
            break;
        case 'S':
        case 's':
            newX++;
            break;
        case 'Q':
        case 'q':
            printf("强制退出吗?y/n\n");
            char ch = getchar();
            if (ch == 'y') {
                return -1;
            } else {
                break;
                
            }
        default:
            printf("输入有误,请输入A a,D d,W w,S s,Q q\n");
            break;
    }
    //printf("%c",map[newX][newY]);
    if(map[newX][newY] == ' '){
        map[newX][newY] = '@';
        map[*curX][*curY] = ' ';
        *curX = newX;
        *curY = newY;
        
        
    }
    
    printMap(map);
    return 0;
    
}

int main(int argc, const char * argv[]) {
    // insert code here...
    char map[kRow][kCol]={
    '#','#','#','#','#','#',
    '#','@','#','#',' ',' ',
    '#',' ','#','#',' ','#',
    '#',' ','#','#',' ','#',
    '#',' ',' ',' ',' ','#',
    '#','#','#','#','#','#',
    
    };
   // printf("Hello, World!\n");
    int curX=1;
    int curY=1;
    printMap(map);
    int flag = 0;
   
    while(curY!=5 && flag == 0){
        printf("请输入方向,A左,D右,W上,S下\n");
        char dir = getchar();
        getchar();
       flag = moveByCharAndXY(dir,&curX,&curY,map);
        //printf("curX=%d,curY=%d",curX,curY);
    }

    
    
    return 0;
}

感觉虽然程序看起来简单,但是自己编写的时候,还是错误一大堆。然后花了好一会儿调代码,能运行,但是还是有点差强人意。希望飞过的大侠们能给点意见。

------- android培训java培训、期待与您交流! ----------

详情请查看:http://edu.csdn.net/heima


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值