博客
关于我
HDU-游戏程序设计-C++贪吃蛇-墙体绘制
阅读量:777 次
发布时间:2019-03-24

本文共 2238 字,大约阅读时间需要 7 分钟。

贪吃蛇的画面是需要墙体的,组成长方形绘制为贪吃蛇活动的区域。舞台绘制思路:长方形舞台大小为width和height。width:横向的墙面比较容易绘制,可以通过for循环,在i从0到width-1的条件下,使i数值不断增加。在for循环条件满足时,每次输出一个墙壁图案,便简单地打印出width个墙体图案。

height:这部分需要更巧妙的处理。对于初学者来说,这部分可能需要一些思考来理解。

在墙体绘制中,可以采用如下的设计:

#include 
#include
#include
using namespace std;int i, j;int width = 40;int height = 40;void Draw() { for (i = 0; i < width; i++) { cout << "1"; cout << endl; } for (int row = 0; row < height; row++) { for (int column = 0; column < width; column++) { if (column == 0) { cout << "2"; } else if (column == width - 1) { cout << "3"; } else { cout << " "; } } cout << endl; } for (i = 0; i < width; i++) { cout << "4"; cout << endl; }}int main() { Draw(); return 0;}

在这段代码中:

  • 前width行全部为"1",为顶部墙壁。
  • 中间height行根据列来判断输出墙壁或空格:
    • 左端(column=0)输出"2"。
    • 右端(column=width-1)输出"3"。
    • 中间部分输出空格" "。
  • 底部墙壁(width行)全部为"4"。
  • 在实际开发中,可能会遇到一些问题:

  • 问题1:新添加的若干条件引发3个墙体少了两个的现象。
    • 初查看代码,发现其他地方是正确的。向源代码中寻找新条件,发现某段新增的代码条件过于严格,导致符合条件的范围变小。
  • 解决办法:将width改为width + 2。这样门限条件变松,墙壁闭合。但注意增加的size可能影响整体布局和逻辑。

    1. 问题2:布局上可能会出现以下情况:
      • 果子不显示或超出舞台范围。
      • 水果的显示位置导致墙壁向右突出一格。
      • 左右墙壁闭合时产生多余空格。
    2. 解决办法

      • 确保果子坐标在合理范围内。
      • 引入中间的墙壁区域,确保墙壁闭合且不影响正常显示。例如,添加一个THICKNESS变量,用于将坐标转换为相应的相对位置。

      此外,还需要注意以下几点:

      • 确保游戏舞台的实际显示范围与编程逻辑完全一致。
      • 中央墙壁的处理需要非常谨慎,否则会导致蛇移动时逻辑错误。

      代码优化示例

      重构后的代码如下:

      // 窗口初始化及设置坐标函数void setPos(int x, int y) {    COORD pos;    pos.X = CORNER_X + x + THICKNESS;    pos.Y = CORNER_Y + y + THICKNESS;    SetConsoleCursorPosition(h, pos);}// 绘制墙壁和背景void DrawWalls() {    for (int i = 0; i < height; i++) {        setPos(-THICKNESS, i);        for (int j = 0; j < width + THICKNESS * 2; j++) {            if (j == 0 || j == width + THICKNESS) {                cout << "#";            } else {                cout << " ";            }        }        cout << endl;    }}

      这种方式不仅将问题解决,还实现了更灵活的布局控制:

      • 通过setPos函数,将游戏内的坐标与屏幕坐标对齐。
      • 增加了THICKNESS变量,用于处理边框的厚度。
      • 在水平线和竖直线上分别设置墙壁。

      关键点总结

      在编写类似的代码时,可以考虑以下优化策略:

    3. 代码简化:减少不必要的cout语句,提高画面绘制效率。
    4. 抽象处理:引入一些中间变量(如THICKNESS),减少逻辑固化。
    5. 错误追踪:遇到问题时,首先检查所有新增条件。
    6. 代码注释:注释化关键代码,即使小//------------------------------------------------ Falkiro

    7. 通过上述优化策略,可以很好地解决上述问题并优化代码。在实际开发中,可以根据实际需求对颜色和布局进行进一步调整。

    转载地址:http://lnrkk.baihongyu.com/

    你可能感兴趣的文章
    MySQL 的 varchar 水真的太深了!
    查看>>
    mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
    查看>>
    MySQL 的instr函数
    查看>>
    MySQL 的mysql_secure_installation安全脚本执行过程介绍
    查看>>
    MySQL 的Rename Table语句
    查看>>
    MySQL 的全局锁、表锁和行锁
    查看>>
    mysql 的存储引擎介绍
    查看>>
    MySQL 的存储引擎有哪些?为什么常用InnoDB?
    查看>>
    Mysql 知识回顾总结-索引
    查看>>
    Mysql 笔记
    查看>>
    MySQL 精选 60 道面试题(含答案)
    查看>>
    mysql 索引
    查看>>
    MySQL 索引失效的 15 种场景!
    查看>>
    MySQL 索引深入解析及优化策略
    查看>>
    MySQL 索引的面试题总结
    查看>>
    mysql 索引类型以及创建
    查看>>
    MySQL 索引连环问题,你能答对几个?
    查看>>
    Mysql 索引问题集锦
    查看>>
    Mysql 纵表转换为横表
    查看>>
    mysql 编译安装 window篇
    查看>>