黑马程序员技术交流社区

标题: 走出迷宫代码。 [打印本页]

作者: a_skting    时间: 2016-4-13 01:02
标题: 走出迷宫代码。
学完了老师讲的走出迷宫,自己写了一遍,感觉萌萌哒。。。

#include <stdio.h>
#include <stdlib.h>
//#include <limits.h>
//#include <string.h>

//宏定义地图的行和列
#define ROWS 7
#define COLS 8
/**
*  走出迷宫
   
1  打印地图
2  玩家输入方向
3  小人移动方向


*/
//地图定义为全局变量。
char gameMap[ROWS][COLS] =
{
    {'#','#','#','#','#','#','#','#'},
    {'#','0','#','#',' ',' ',' ','#'},
    {'#',' ','#','#',' ','#',' ','#'},
    {'#',' ','#','#',' ','#',' ','#'},
    {'#',' ',' ','#',' ','#',' ','#'},
    {'#','#',' ',' ',' ','#',' ','#'},
    {'#','#','#','#','#','#',' ','#'}
};

//定义小人的坐标为全局变量。
int row = 1;
int col = 1;


//打印地图函数
void mapPrint()
{
    for(int i = 0 ; i < ROWS ; i++)
    {
        for(int j = 0 ; j < COLS ; j++)
        {
            printf("%c ",gameMap[i][j]);
        }
        printf("\n");
    }
    printf("请使用 w 、 s 、 a 、d 移动小人。q 退出游戏。\n");
}

//接收用户输入的方向
char getDirection()
{
    char direct = 'a';
    scanf("%c",&direct);
    return direct;
}

//向上的移动指令
void directUp()
{
    int nextRow = row - 1;
    int nextCol = col;
    if(gameMap[nextRow][nextCol] != '#')
    {
        gameMap[row][col] = ' ';
        gameMap[nextRow][nextCol] = '0';
        row = nextRow;
        col = nextCol;
    }
}
//向下的移动指令
void directDown()
{
    int nextRow = row + 1;
    int nextCol = col;
    if(gameMap[nextRow][nextCol] != '#')
    {
        gameMap[row][col] = ' ';
        gameMap[nextRow][nextCol] = '0';
        row = nextRow;
        col = nextCol;
    }
}
//向左的移动指令
void directLeft()
{
    int nextRow = row;
    int nextCol = col - 1;
    if(gameMap[nextRow][nextCol] != '#')
    {
        gameMap[row][col] = ' ';
        gameMap[nextRow][nextCol] = '0';
        row = nextRow;
        col = nextCol;
    }
}
//向右的移动指令
void directRight()
{
    int nextRow = row;
    int nextCol = col + 1;
    if(gameMap[nextRow][nextCol] != '#')
    {
        gameMap[row][col] = ' ';
        gameMap[nextRow][nextCol] = '0';
        row = nextRow;
        col = nextCol;
    }
}



int main()
{
    //打印地图
    mapPrint();
      
    while(1)
    {

        //接收用户输入的方向
        rewind(stdin);
        char direct = getDirection();
        
        //小人移动
        switch(direct)
        {
            case 'w':
            case 'W':
                directUp();
                break;
            case 's':
            case 'S':
                directDown();
                break;
            case 'a':
            case 'A':
                directLeft();
                break;
            case 'd':
            case 'D':
                directRight();
                break;
            case 'q':
            case 'Q':
                printf("game over !\n");
                return 0;
        
        }
        system("clear");
        mapPrint();
   
        if(row == 6 && col == 6)
        {
            printf("恭喜您过关。\n");
            printf("game over!\n");
            return 0;
        }
    }
}
作者: Latinno    时间: 2016-4-13 13:06
这个模型可以用OC来实现啊,挺好的一个模型

试着去用OC写一下看看
作者: 缘之有缘    时间: 2016-4-13 21:05
等学完OC后,我去试试楼上说的。           




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