黑马程序员技术交流社区

标题: 老鼠迷宫之《爱我别走》【内附代码和游戏下载地址】 [打印本页]

作者: ZHYU    时间: 2015-7-27 11:44
标题: 老鼠迷宫之《爱我别走》【内附代码和游戏下载地址】
就是觉得好玩,所以自己只做了地图,重新写了代码,完成以后拿来共享一下,请各位多多指教。

先附上游戏.out文件和代码main.c的网盘地址:http://pan.baidu.com/s/1dD2Mn1f

思路分析:
/1/ 画(更新)迷宫地图;
/2/ 判断老鼠是否成功逃离迷宫:逃离成功,game over,否则,继续游戏;
/3/ 给出上下左右键的提示,让用户输入;
/4/ 如果输入错误, 重新输入,直到输入正确后,老鼠开始移动;
/5/ 让老鼠按照用户指令移动,老鼠移动过后要更新地图,即重复第一步;

本人习惯将重复利用的代码块写成函数,所以对于上述分析,重复进行的代码部分应该有两处:
一是更新地图部分;
二是用户输入部分。
所以对这两部分做了封装,写成函数,便于重复调用。
              下面分享了本人写的老鼠迷宫之《爱我别走》Game,欢迎讨论。
============================华丽分割线=======================
#include
#include

#define ROW 10
#define COL 15

void printMap(char map[ROW][COL], int rows, int cols);
char inputCharactor(char *range, int length);

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

char inputCharactor(char *range, int length) {
    char ch;
    int index = -1;
   
    while(1) {
      
        printf(">>>>> ");
        ch = getchar();
      
        if(ch != '\n') {
            while (getchar() != '\n');
        }

        for (int i = 0; i < length; i++) {
            if(range[i] == ch) {
                index = i;
                break;
            }
        }
            if (index != -1) break;
    }
    return ch;
}


int main(int argc, const char * argv[]) {
    int x = 1,y = 1,temp;
    char input;
    char range[] = {
        'a','d','s','w',
        'W','S','A','D',
        'I','K','J','L',
        'j','k','l','i'
    };
    char map[ROW][COL]={
        {'#','#','#','#','#','#','#','#','#','#','#','#','#',' ','#'},
        {'#','O',' ',' ','#',' ',' ',' ','#','#','#','#','#',' ','#'},
        {'#','#','#',' ','#','#','#',' ',' ','#',' ',' ',' ',' ','#'},
        {'#',' ',' ',' ','#',' ',' ',' ','#','#','#',' ','#','#','#'},
        {'#',' ','#','#','#',' ','#','#',' ',' ',' ',' ','#',' ','#'},
        {'#',' ',' ',' ','#',' ',' ','#',' ','#','#',' ','#',' ',' '},
        {'#','#','#',' ','#','#',' ',' ',' ','#','#',' ','#',' ','#'},
        {'#',' ',' ',' ',' ','#','#','#',' ','#',' ',' ',' ',' ','#'},
        {'#',' ','#','#',' ',' ',' ',' ',' ','#',' ',' ',' ',' ','#'},
        {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
      
    };
   
    while (1) {

        printMap(map,ROW,COL);
      
        if (x == 0 || y == 0 || x == ROW-1 || y == COL-1) {
            printf("爱我,别走!\n");
        }
      
        printf("请输入 w、i(上) s、k(下) a、j(左) d、l(右)\n");
        input = inputCharactor(range,16);
   
        switch (input) {
            case 'w':
            case 'W':
            case 'I':
            case 'i':
                if (map[x-1][y] == ' ') {
                    temp = map[x][y];
                    map[x][y] = map[x-1][y];
                    map[x-1][y] = temp;
                    x--;
                } break;
            case 'a':
            case 'A':
            case 'J':
            case 'j':
                if (map[x][y-1] == ' ') {
                    temp = map[x][y];
                    map[x][y] = map[x][y-1];
                    map[x][y-1] = temp;
                    y--;
                } break;
            case 's':
            case 'S':
            case 'k':
            case 'K':
                if (map[x+1][y] == ' ') {
                    temp = map[x][y];
                    map[x][y] = map[x+1][y];
                    map[x+1][y] = temp;
                    x++;
                } break;
            case 'd':
            case 'D':
            case 'l':
            case 'L':
            case 26:
                if (map[x][y+1] == ' ') {
                    temp = map[x][y];
                    map[x][y] = map[x][y+1];
                    map[x][y+1] = temp;
                    y++;
                } break;
               
        }
            system("clear");
    }
    return 0;
}

作者: wy911011    时间: 2015-7-27 11:53
好厉害的样子
作者: 我丶就这样    时间: 2015-7-27 15:34
不错不错!
作者: 313500313    时间: 2015-7-27 17:36
现在我个人最大的难题是  看别人的代码 花大量时间  能看懂    能慢慢的改动  但是让我自己写
别说代码 伪代码都够呛   郁闷
作者: Eil.tea    时间: 2015-7-27 18:09
多写就会了,代码量可以提高水平。
作者: 天堂月夜    时间: 2015-7-27 20:25
学习了,拿走代码试试
作者: Foreversidy夏末    时间: 2015-7-27 21:35
可以学习一下
作者: ylxkab    时间: 2015-7-27 23:02
好家伙,调理清晰




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2