Day08

2018-09-06  本文已影响0人  喝酸奶要舔盖__

二维数组

    /*
     * 二维数组
     *
     * 格式: 数组类型 数组名称[二位数组中一维数组的个数][一维数组中元素的个数]
     *
     * 数组类型: 一维数组中存储数据的类型
     * 注意点: 二维数组也是一个数组,只是二维数组中每个元素是一维数组
     *
     */
    int score[2][2] = {{50, 80},{60, 70}};
    printf("score[0][0] = %i\n", score[0][0]); //50
int main()
{
    //1. 定义同时初始化
    int nums[2][2] = {{1,3},{5,7}};
    //2. 先定义后初始化
    int nums1[2][2];
    nums1[0][0] = 888;
    nums1[0][1] = 22;
    nums1[1][0] = 33;
    nums1[1][1] = 44;


    //3. 特殊方式
    // 如果在定义的同时初始化,那么二维数组的个数可以省略
    int num3[][2] = {{1,3},{5,7}};
    //如果定义的同时初始化,那么初始化中每个一维数组的{}也可以省略,会依次从前面往后面存入
    /*
     * 二维数组的遍历
     *
     */

    int score[2][3] = {{50,60,70},{26,48,37}};
    //遍历数组
    for(int i = 0; i< 2; i++){
        for(int j = 0; j < 3; j++){
            printf("score[%i][%i] = %i\n", i,j,score[i][j]);
        }
    }
 /*
     * 二维数组存储细节
     */

    char chs[2][3] = {{'a','b','c'},{'e','f','g'}};
    //chs[0]和chs[1]都代表的是数据的地址
    printf("%p\n", chs); //0028FBEA
    printf("%p\n", &chs); //0028FBEA
    printf("%p\n", &chs[0]);//0028FBEA
    printf("%p\n", &chs[1]);
    printf("%p\n", &chs[0][0]);//0028FBEA
#include <stdio.h>

char input();
char lowerCase(char ch);
void printMap(char map[6][6], int row, int col);
void move(char map[6][6],char ch);
//定义全部变量
//小人当前位置
int currentRow = 1; //行
int currnetCol = 1; //列

//小人结束的位置
int endRow = 1;
int endCol = 5;
int main()
{
    /*
     * 需求: 要求用户输入w a s d控制小人走出迷宫
     w 向上走
     s 向下走
     a 向左走
     d 向右走

     ######
     #R #
     # ## #
     #  # #
     ##   #
     ######


     补充:
     1.以后翻转函数, 一定要编写说明的注释
     2.封装函数的时候, 一定要遵守单一原则
     什么是单一原则?
     一个函数只做一件事情
     */


    //1. 定义一个二维数组保存地图
    char map[6][6] = {
        {'#','#','#','#','#','#'},
        {'#','R',' ','#',' ',' '},
        {'#',' ','#','#',' ','#'},
        {'#',' ',' ','#',' ','#'},
        {'#','#',' ',' ',' ','#'},
        {'#','#','#','#','#','#'},

    };
    // 计算数组的长度
    int row = sizeof(map)/sizeof(map[1]);

    int col = sizeof(map[1]);
    while(currentRow != endRow || currnetCol != endCol){
        //2. 接收用户的指令,考虑用户输入大写字母的情况
        char ch = input();
        //3. 让小人根据指令运动
        move(map,ch);
        //4. 打印地图
        printMap(map,row,col);
    }
    printf("恭喜您已经通关");


    return 0;
}



/**
   接收用户输入的指令
 * @brief input
 * @param ch
 * @return
 */
char input(){
    printf("请输入w,s,a,d控制小人行走\n");
    char ch;
    scanf("%c", &ch);
    setbuf(stdin,NULL); //清除缓冲区
    lowerCase(ch);
}



/**大写字母转小写字母
 * @brief lowerCase
 * @param ch
 * @return
 */
char lowerCase(char ch){
    if(ch >='a' && ch <='z'){
        return ch;

    }else if(ch >='A' && ch <='Z'){
        return ch + ('a' - 'A');
    }else {
        return printf("输入内容不合法,请重新输入\n");
    }
}
/**
 * @brief move 移动小人
 * @param ch
 */
void move(char map[6][6],char ch){
    switch (ch) {
    //向上走
    case 'w':
        if(map[currentRow - 1][currnetCol] != '#'){
            map[currentRow][currnetCol] = ' ';
            currentRow--;
            map[currentRow][currnetCol] = 'R';
        }
        break;
    //向下走
    case 's':
        if(map[currentRow + 1][currnetCol] != '#'){
            map[currentRow][currnetCol] = ' ';
            currentRow++;
            map[currentRow][currnetCol] = 'R';
        }

        break;
        //向左走
    case 'a':
        if(map[currentRow][currnetCol - 1] != '#'){
            map[currentRow][currnetCol] = ' ';
            currnetCol--;
            map[currentRow][currnetCol] = 'R';
        }
        break;
        //向右走
    case 'd':
        if(map[currentRow][currnetCol + 1] != '#'){
            map[currentRow][currnetCol] = ' ';
            currnetCol++;
            map[currentRow][currnetCol] = 'R';
        }
        break;
    }
}



/**
 * @brief printMap 打印地图函数
 * @param ch
 * @param row
 * @param col
 */
void printMap(char map[6][6], int row, int col){
    // 在Windows中清空上一次输出的内容
    system("cls");
    for(int i = 0; i < row; i++){
        for(int j = 0; j < col; j++){
            printf("%c",map[i][j]);
        }
        printf("\n");
    }
}

上一篇 下一篇

猜你喜欢

热点阅读