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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huanglinwang 中级黑马   /  2016-5-26 20:43  /  522 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 huanglinwang 于 2016-5-26 20:45 编辑


//  main.c
//  迷宫游戏
#include <stdio.h>
#define HANG 8
#define LIE  7
/**
*  将小人的位置进行交换
*
*  @param oldPersonX 交换之前行的值
*  @param oldPersonY 交换之前列的值
*  @param newPersonX 交换后行的值
*  @param newPersonY 交换后列的值
*  @param map        无返回
*/
int personMove(int oldPersonX ,int oldPersonY,int newPersonX,int newPersonY,char map[HANG][LIE]);
/**
*  打印地图
*/
void putMap(char map[HANG][LIE]);

int main(int argc, const char * argv[]) {

    char map[HANG][LIE] = {
        {'*','*','*','*','*','*','*'},
        {'*','0','*',' ',' ',' ','*'},
        {'*',' ','*',' ','*',' ','*'},
        {'*',' ','*',' ','*',' ','*'},
        {'*',' ','*',' ','*',' ','*'},
        {'*',' ','*',' ','*',' ','*'},
        {'*',' ',' ',' ','*',' ',' '},
        {'*','*','*','*','*','*','*'}
    };


    //定义小人的位置
    int personX = 1 ,personY = 1 ;

    //告诉规则
    printf("请输入: w代表上  s.代表下   d.代表右   a.代表左   q.代表退出\n");

    char ch = ' ';
    while (1) {

        //定义地图-打印地图
        putMap(map);
         //接收数据
        rewind(stdin);
        scanf("%c",&ch);

        //判断
        //  w   ---就让personX-1   personY
        //  s   ---就让personX+1   personY
        //  a   ---就让personX   personY-1
        //  d   ---就让personX   personY+1
        //  q   ---就return ;

        switch (ch) {
            case 'w' :
               
            {
                int  a  =personMove(personX, personY, personX-1, personY, map);
                    if (a) {
                        personX--;
                    }
            }
                break;

            case 's' :
              
            {
                int  a  =personMove(personX, personY, personX+1, personY, map);
                    if (a) {
                        personX++;
                    }
            }
                break;

            case 'a' :
              
            {
                int  a  =personMove(personX, personY, personX, personY-1, map);
                    if (a) {
                        personY--;
                    }
            }
                break;

            case 'd' :
               
            {
                int  a  =personMove(personX, personY, personX, personY+1, map);
                    if (a) {
                        personY++;
                    }
            }
                break;

            case 'q' :
            {
                printf("退出游戏……");
                return 0;
            }
        }

        if (personY == LIE-1) {
            printf("GOOD GAME!!\n");
            break;
        }

    }
    //打印地图
    putMap(map);
    return 0;
}
/**
*  将小人的位置进行交换
*
*  @param oldPersonX 交换之前行的值
*  @param oldPersonY 交换之前列的值
*  @param newPersonX 交换后行的值
*  @param newPersonY 交换后列的值
*  @param map        无返回
*/
int personMove(int oldPersonX ,int oldPersonY,int newPersonX,int newPersonY,char map[HANG][LIE]){


    if (map[newPersonX][newPersonY] == ' '){
    char temp = ' ';
    temp = map[oldPersonX][oldPersonY];
    map[oldPersonX][oldPersonY]=map[newPersonX][newPersonY];
    map[newPersonX][newPersonY]=temp;
        return 1;
    }
    return 0;
}





/**
*  打印地图
*/
void putMap(char map[HANG][LIE]){

    for (int i = 0;i < HANG ; i ++) {
        for (int j = 0; j < LIE ; j++) {
            printf("%c",map[j]);
        }
        printf("\n");
    }
}






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马