<20>【掌握】《走出迷宫》游戏代码实现+【理解】《走出迷宫》游戏优化

#include <stdio.h>
#define COL 6
#define ROW 6

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

    //****** 定义变量     **********

    //1、定义变量,地图、存储用户输入的方向、小人的位置
        char map[ROW][COL]={
                {‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘},
                {‘#‘,‘O‘,‘#‘,‘#‘,‘ ‘,‘ ‘},
                {‘#‘,‘ ‘,‘#‘,‘#‘,‘ ‘,‘#‘},
                {‘#‘,‘ ‘,‘ ‘,‘#‘,‘ ‘,‘#‘},
                {‘#‘,‘#‘,‘ ‘,‘ ‘,‘ ‘,‘#‘},
                {‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘}
            };

        //保存用户输入的方向
    char direction;

    //定义变量保存小人的当前的位置
    int currentX=1;
    int currentY=1;

    //定义变量保存路
    char street = ‘ ‘;

    //2、先打印一遍地图
    for (int i=0; i<ROW; i++) {
        for (int j=0; j<COL; j++) {
            printf("%c",map[i][j]);
        }
        printf("\n");
    }

    //3、提示用户游戏玩法
    printf("请控制小人移动: w.上  s.下  a.左   d.右   q.退出\n");

    char ch;
    //****** 要进行循环控制 *********
    while (1) {

    //4、接收用户输入的方向
        scanf("%c",&direction);
        scanf("%c",&ch);  //吸收多余的 \n
    //5、判断用户输入了什么方向
        switch (direction) {
            case ‘w‘:
            case ‘W‘:

                //****** 判断小人能否移动 ********

                //6、判断小人是否能够移动
                if (map[currentX-1][currentY]==street) {
                //         核心要知道小人的下一个位置是否是路
                //         是路
                //            让小人开始移动,移动的核心:小人和路交换
                    char temp;
                    // map[currentX][currentY]; 小人当前位置
                    // map[currentX-1][currentY];小人的下一个位置
                    temp = map[currentX][currentY];
                    map[currentX][currentY] = map[currentX-1][currentY];
                    map[currentX-1][currentY] = temp;
                    //重新记录小人的当前位置
                    currentX--;

                }
                //         不是路 ,什么也不干
                break;

            case ‘s‘:
            case ‘S‘:
                if (map[currentX+1][currentY]==street) {
                    //         核心要知道小人的下一个位置是否是路
                    //         是路
                    //            让小人开始移动,移动的核心:小人和路交换
                    char temp;
                    temp = map[currentX][currentY];
                    map[currentX][currentY] = map[currentX+1][currentY];
                    map[currentX+1][currentY] = temp;
                    //重新记录小人的当前位置
                    currentX++;

                }
                break;

            case ‘a‘:
            case ‘A‘:
                if (map[currentX][currentY-1]==street) {
                    //         核心要知道小人的下一个位置是否是路
                    //         是路
                    //            让小人开始移动,移动的核心:小人和路交换
                    char temp;
                    temp = map[currentX][currentY];
                    map[currentX][currentY] = map[currentX][currentY-1];
                    map[currentX][currentY-1] = temp;
                    //重新记录小人的当前位置
                    currentY--;

                }
                break;

            case ‘d‘:
            case ‘D‘:
                if (map[currentX][currentY+1]==street) {
                    //         核心要知道小人的下一个位置是否是路
                    //         是路
                    //            让小人开始移动,移动的核心:小人和路交换
                    char temp;
                    temp = map[currentX][currentY];
                    map[currentX][currentY] = map[currentX][currentY+1];
                    map[currentX][currentY+1] = temp;
                    //重新记录小人的当前位置
                    currentY++;

                }
                break;

            case ‘q‘:
            case ‘Q‘:
                return 0;
                break;

            default:
                break;
        }

    //7、重绘地图
        for (int i=0; i<ROW; i++) {
            for (int j=0; j<COL; j++) {
                printf("%c",map[i][j]);
            }
            printf("\n");
        }

    //****** 判断是否走出来   ********
    //判断 y 的值是否 == 5
        if (currentY==5) {
            printf("哇哦,你出来了!\n");
            break;
        }
    //      提示走出迷宫了
    //      break;游戏要结束
    }

    return 0;
}
######
#O##
# ## #
#  # #
##   #
######
请控制小人移动: w.上  s.下  a.左   d.右   q.退出
w
######
#O##
# ## #
#  # #
##   #
######

【理解】《走出迷宫》游戏优化

#include <stdio.h>
#define COL 12
#define ROW 6
/**
 *  打印地图
 *
 *  @param map 地图的数组
 */
void printMap(char map[ROW][COL]){

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

}

/**
 *  实现了小人的移动
 *
 *  @param map  地图的数组
 *  @param oldX 小人的原来位置X坐标
 *  @param oldY 小人的原来位置Y坐标
 *  @param newX 小人的将要移动到位置X坐标
 *  @param newY 小人的将要移动到位置Y坐标
 */
void personMove(char map[ROW][COL],int oldX,int oldY,int newX,int newY){

    char temp;
    temp = map[oldX][oldY];
    map[oldX][oldY] = map[newX][newY];
    map[newX][newY] = temp;

}

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

    //****** 定义变量     **********

    //1、定义变量,地图、存储用户输入的方向、小人的位置
        char map[ROW][COL]={
                {‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘},
                {‘#‘,‘O‘,‘#‘,‘#‘,‘ ‘,‘ ‘,‘ ‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘},
                {‘#‘,‘ ‘,‘#‘,‘#‘,‘ ‘,‘#‘,‘ ‘,‘#‘,‘ ‘,‘ ‘,‘ ‘,‘#‘},
                {‘#‘,‘ ‘,‘ ‘,‘#‘,‘ ‘,‘#‘,‘ ‘,‘#‘,‘ ‘,‘#‘,‘ ‘,‘#‘},
                {‘#‘,‘#‘,‘ ‘,‘ ‘,‘ ‘,‘#‘,‘ ‘,‘ ‘,‘ ‘,‘#‘,‘ ‘,‘ ‘},
                {‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘}
            };

    //保存用户输入的方向
    char direction;

    //定义变量保存小人的当前的位置
    int currentX=1;
    int currentY=1;

    //定义变量保存路
    char street = ‘ ‘;

    //2、先打印一遍地图
    printMap(map);

    //3、提示用户游戏玩法
    printf("请控制小人移动: w.上  s.下  a.左   d.右   q.退出\n");

    //****** 要进行循环控制 *********
    while (1) {

        //4、接收用户输入的方向
        scanf("%c",&direction);
        getchar();  //吸收多余的 \n
        //5、判断用户输入了什么方向
        switch (direction) {
            case ‘w‘:
            case ‘W‘:

                //****** 判断小人能否移动 ********

                //6、判断小人是否能够移动
                if (map[currentX-1][currentY]==street) {
                    //         核心要知道小人的下一个位置是否是路
                    //         是路
                    //            让小人开始移动,移动的核心:小人和路交换

                    // map[currentX][currentY]; 小人当前位置
                    // map[currentX-1][currentY];小人的下一个位置
                    personMove(map,currentX,currentY,currentX-1,currentY);
                    //重新记录小人的当前位置
                    currentX--;

                }
                //         不是路 ,什么也不干
                break;

            case ‘s‘:
            case ‘S‘:
                if (map[currentX+1][currentY]==street) {
                    //         核心要知道小人的下一个位置是否是路
                    //         是路
                    //            让小人开始移动,移动的核心:小人和路交换
                    personMove(map,currentX,currentY,currentX+1,currentY);
                    //重新记录小人的当前位置
                    currentX++;

                }
                break;

            case ‘a‘:
            case ‘A‘:
                if (map[currentX][currentY-1]==street) {
                    //         核心要知道小人的下一个位置是否是路
                    //         是路
                    //            让小人开始移动,移动的核心:小人和路交换

                    personMove(map,currentX,currentY,currentX,currentY-1);
                    //重新记录小人的当前位置
                    currentY--;

                }
                break;

            case ‘d‘:
            case ‘D‘:
                if (map[currentX][currentY+1]==street) {
                    //         核心要知道小人的下一个位置是否是路
                    //         是路
                    //            让小人开始移动,移动的核心:小人和路交换
                    personMove(map,currentX,currentY,currentX,currentY+1);
                    //重新记录小人的当前位置
                    currentY++;

                }
                break;

            case ‘q‘:
            case ‘Q‘:
                return 0;
                break;

            default:
                break;
        }

        //7、重绘地图
        printMap(map);

        //****** 判断是否走出来   ********
        //判断 y 的值是否 == 5
        if (currentY==COL-1) {
            printf("哇哦,你出来了!\n");
            break;
        }
        //      提示走出迷宫了
        //      break;游戏要结束
    }

    return 0;
}
时间: 2024-10-07 05:58:20

<20>【掌握】《走出迷宫》游戏代码实现+【理解】《走出迷宫》游戏优化的相关文章

热更新有多重要?游戏代码热更新杂谈

热更新的内容可以是美术资源,可以是代码,但相对来说,美术资源的更新不会受到约束,代码实际上是重灾区,本文介绍的主要是代码热更新. 热更新对于开发者来说是一件麻烦事,特别对于看重效率,便捷性和结构的程序员来说,热更新就是运营人员的不懂技术的表现. 然而,对于上线才是刚刚开始的网络游戏,特别是手游来说,热更新是极为重要的基础功能. 为什么要热更新 客户端 1.适应上线需求 对于手游客户端来说,受到苹果审核的约束, 一次审核提交需要10~20天不等的等待时间.而这段时间,开发进度依然会推进很多. 一旦

java小游戏代码

一. 需求分析 曾几何时,游戏是海洛因的代名词,让人与玩物丧志联系在一起,一度遭到社会反感和家长抵制.但是,随着互联网的发展,和游戏潜在好处被发现,游戏的价值开始逐渐被社会认可,人们开始接受.认识和了解游戏带来的诸多好处. 现在学生的课业负担重,娱乐时间少,人际交往少,烦恼和压力也因此相应增加.其实玩游戏不仅帮助学生调节情绪,还可以锻炼与提高他们的反应能力和手脑的快速配合能力,同时帮助他们了解电脑和网络知识等,可谓是一举多得.据调查显示,经常玩游戏的学生思维活跃.善于表达.情绪乐观,解决问题时会

怎样写出无法维护的代码

每次写代码的时候,我都尽量写出一个尽可能方便其他人看得懂的代码,没办法,很多时候维护也是我自己,活着小的看不懂,还是我自己出手.但今天我想反其道而行之,怎样才能写出一份无法维护的代码. 原文在这里,原文翻译了一点,再加上自己的理解. 这个无法维护的代码是什么? 如果你的代码根本是别人看不懂,那不好意思,如果是我,我会尽可能另外写一份,或者一边看代码,一边注释,还有重命名,总之最后还是让我改了一遍就完事了.如果仅仅是这样,我觉得,还不是无法维护吧.应该看起来还算正常,而且有详细的注释,让人充满希望

通过游戏学python 3.6 第一季 第三章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释 可复制直接使用 娱乐 可封装 函数

1 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释 2 3 import random 4 number = random.randint(1,99)#设定答案(可以假设成年龄吧) 5 amount = random.randint(3,8) #设定猜测次数 6 print('本次游戏次数为',amount,'次') 7 8 count = 0 #设定初始次数 9 while count <= amount: #条件成立无限循环 10 try: 11 guess

python学习笔记05:贪吃蛇游戏代码

贪吃蛇游戏截图: 首先安装pygame,可以使用pip安装pygame: pip install pygame 运行以下代码即可: #!/usr/bin/env python import pygame,sys,time,random from pygame.locals import * # 定义颜色变量 redColour = pygame.Color(255,0,0) blackColour = pygame.Color(0,0,0) whiteColour = pygame.Color(

HTML页面弹出窗口调整代码总结

弹出跟你当前的窗口有没有菜单工具栏没有关系,你只要在页面中写一个脚本它就弹出了.比如<a href=# onclick="window.open('xxx.aspx','窗口名称','参数');">xxxxx</a> 以下列出一些弹出窗口的参数,你可自行设定,参数之间用逗号分隔 可选.字符串--列出对象表并用逗号分开.每一项都有自己的值,他们将被分开(如:"fullscreen=yes, toolbar=yes").下面是被支持的各种特性.

如何写出无法维护的代码

如何写出无法维护的代码 酷壳里有很多我觉得很不错的文章,但是访问量最大的却是那篇<6个变态的Hello World>,和它能在本站右边栏“全站热门”中出现的还有“如何加密源代码”,以及编程真难啊等这样的文章.可见本站的读者们的偏好,我也相信你们都是“身怀绝技”的程序员.所以,今天给大家推荐这篇文章,相信一定能触动大家的兴奋点. 这篇文章的原文在这里(http://mindprod.com/jgloss/unmain.html),我看完后我想说—— 什么叫“创造力”,创造力就是——就算是要干一件

【分享】60行代码:Javascript 写的俄罗斯方块游戏

效果如下,可测试: javascript实现源码: <!doctype html> <html><head><title>俄罗斯方块</title> <meta name="Description" content="俄罗斯方块Javascript实现"> <meta name="Keywords" content="俄罗斯方块,Javascript,实现,短

从“假如有以下几种价格10,20,50,请你代码实现将他们排序输出”看着设计模式中的策略模式

今天重温了一下策略模式,将自己的一些感悟与大家分享...本人只是技术渣渣,所理解的东西的难免会有很大的局限性甚至是错误,还请各位带着批判的眼光去看待....不喜请勿吐槽 定义:策略模式属于设计模式中的对象行为型模式,它将用到的算法单独抽象成一个单独的类.通常,我们在多个类完成同一件事情,仅仅完成的方式不同时,我们可以考虑使用这种设计模式. 举例:相信,很多人在看到"假如有以下几种价格10,20,50,请你代码实现将他们排序输出"这种题目的时候,很快就写出了以下代码,写之前还不忘了问一下

软工作业: (2)硬币游戏—— 代码分析与改进

软工作业: (2)硬币游戏-- 代码分析与改进 一.作业要求 1.Python 程序阅读理解 2.学习Python 编码风格指南中译版(Google SOC)(http://blog.csdn.net/damotiansheng/article/details/43867175),改进Python程序 3.设计游戏规则,使得慈善事业可持续. 地铁口放置硬币箱(初始值500硬币),顾客可取.可放.请设计一组规则,使得该钱箱永远有钱取(尽量符合实际) 注:参考http://www.cnblogs.c