A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

就是觉得好玩,所以自己只做了地图,重新写了代码,完成以后拿来共享一下,请各位多多指教。

先附上游戏.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;
}

7 个回复

正序浏览
ylxkab 中级黑马 2015-7-27 23:02:19
8#
好家伙,调理清晰
回复 使用道具 举报
可以学习一下
回复 使用道具 举报
学习了,拿走代码试试
回复 使用道具 举报
多写就会了,代码量可以提高水平。
回复 使用道具 举报
现在我个人最大的难题是  看别人的代码 花大量时间  能看懂    能慢慢的改动  但是让我自己写
别说代码 伪代码都够呛   郁闷
回复 使用道具 举报
不错不错!
回复 使用道具 举报
好厉害的样子
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马