12.总结
12.1 知识点

学习的主要内容

总结目的-养成良好的学习习惯

流程图

断点学习法

练习

程序员的最终目标

12.2 核心要点速览
项目概述
飞行棋控制台游戏,玩家与电脑轮流扔骰子前进,途中踩到道具格子触发效果,先到终点者胜。
三大场景:开始场景 → 游戏场景 → 结束场景(循环切换)
控制台基础设置
| 功能 | API | 说明 |
|---|---|---|
| 隐藏光标 | Console.CursorVisible = false |
提升用户体验 |
| 设置窗口大小 | Console.SetWindowSize(w, h) |
固定窗口尺寸 |
| 设置缓冲区大小 | Console.SetBufferSize(w, h) |
与窗口一致,禁用滚动条 |
| 设置光标位置 | Console.SetCursorPosition(x, y) |
控制输出位置 |
| 设置前景色 | Console.ForegroundColor = ConsoleColor.Red |
彩色输出 |
| 清屏 | Console.Clear() |
切换场景时调用 |
场景管理
| 要点 | 实现 |
|---|---|
| 场景枚举 | enum E_SceneType { Begin, Game, End } |
| 场景切换 | while(true) + switch(nowSceneType) |
| 开始/结束场景复用 | 同一函数,通过参数区分标题和选项 |
| 退出游戏 | Environment.Exit(0) |
场景切换核心结构:
E_SceneType nowSceneType = E_SceneType.Begin;
while (true)
{
switch (nowSceneType)
{
case E_SceneType.Begin: /* 调用开始场景函数 */ break;
case E_SceneType.Game: /* 调用游戏场景函数 */ break;
case E_SceneType.End: /* 调用结束场景函数 */ break;
}
}
数据结构设计
格子类型枚举
| 类型 | 效果 |
|---|---|
Normal |
普通格子,无效果 |
Boom |
炸弹,倒退 5 格 |
Pause |
暂停,下回合不能行动 |
Tunnel |
时空隧道,随机效果(倒退/暂停/换位置) |
核心结构体
| 结构体 | 字段 | 用途 |
|---|---|---|
Vector2 |
x, y |
位置坐标 |
Grid |
type, pos |
格子类型 + 位置 |
Map |
Grid[] grids |
格子数组,蛇形布局 |
Player |
type, nowIndex, isPause |
玩家类型、位置、暂停状态 |
地图生成
蛇形布局规则:
- 每行 10 格,横向排列
- 行尾转向,步长取反(
stepNum = -stepNum) - 首尾格子必为普通格子,中间随机生成道具
格子概率:普通 85%、炸弹 5%、暂停 5%、时空隧道 5%
玩家系统
| 功能 | 实现要点 |
|---|---|
| 绘制玩家 | 根据类型设置颜色和图标(★玩家 / ▲电脑) |
| 重合处理 | 判断 nowIndex 相等时显示特殊图标(◎) |
| 暂停机制 | isPause 标识,回合开始时检测并重置 |
游戏逻辑
扔骰子流程:
- 检测暂停状态 → 若暂停则跳过本回合
- 随机 1-6 点数,更新位置
- 判断是否到达终点 → 游戏结束
- 判断格子类型 → 触发对应效果
- 重绘地图和玩家
时空隧道效果:
- 30% 倒退 5 格
- 30% 暂停一回合
- 40% 双方交换位置
制作流程建议
- 控制台初始化 → 隐藏光标、固定窗口
- 场景框架 → 枚举 + switch 切换
- 开始/结束场景 → 菜单选择
- 游戏场景 - 静态元素 → 红墙、提示文字
- 数据结构 → 枚举、结构体
- 地图生成 → 蛇形布局、随机道具
- 玩家系统 → 绘制、重合处理
- 游戏逻辑 → 扔骰子、格子效果、胜负判断
12.3 面试题精选
进阶题
1. 数据结构设计思路
题目
这个飞行棋项目用了哪些数据结构?为什么要这样设计?
深入解析
项目用了枚举 + 结构体组合,符合面向对象思想。
枚举设计:
// 格子类型
enum E_Grid_Type { Normal, Boom, Pause, Tunnel }
// 玩家类型
enum E_PlayerType { Player, Computer }
// 场景类型
enum E_SceneType { Begin, Game, End }
结构体设计:
// 位置
struct Vector2 { public int x, y; }
// 格子
struct Grid
{
public E_Grid_Type type;
public Vector2 pos;
public void Draw() { /* 根据类型画不同图标 */ }
}
// 地图
struct Map
{
public Grid[] grids;
public Map(int x, int y, int num) { /* 蛇形布局初始化 */ }
public void Draw() { /* 遍历画所有格子 */ }
}
// 玩家
struct Player
{
public E_PlayerType type;
public int nowIndex; // 当前格子索引
public bool isPause; // 暂停标识
public void Draw(Map map) { /* 画玩家图标 */ }
}
设计思路:
- 枚举替代魔法数,代码可读性强
- 结构体封装数据和行为,职责清晰
- Map 持有 Grid 数组,Player 持有位置索引,便于重合判断
答题示例
用了三个枚举和四个结构体。
枚举用来定义格子类型、玩家类型、场景类型,避免魔法数。
结构体封装数据和画的方法:Vector2 存坐标,Grid 存格子类型和位置,Map 管格子数组,Player 存玩家状态。
这样设计职责清晰,Map 负责画地图,Player 负责画自己,重合判断也方便。
参考文章
- 6.游戏场景-格子类型枚举和格子结构体
- 7.游戏场景-地图结构体
- 8.游戏场景-玩家和电脑结构体
2. 蛇形地图生成算法
题目
如何生成蛇形布局的地图?每行 10 格,行尾转向。
深入解析
核心思路:步长控制方向,计数控制转向
int indexX = 0; // X 方向计数
int indexY = 0; // Y 方向计数
int stepNum = 2; // X 步长,负数表示反向
for (int i = 0; i < num; i++)
{
// 设置格子位置
grids[i].pos = new Vector2(x, y);
if (indexX == 10) // 横向走满 10 格
{
y += 1; // 换行
++indexY; // 竖向计数
if (indexY == 2) // 竖向走满 2 行
{
indexX = 0;
indexY = 0;
stepNum = -stepNum; // 步长取反,实现蛇形
}
}
else
{
x += stepNum; // 横向移动
++indexX;
}
}
算法要点:
- 每行 10 格后换行
- 每 2 行转向一次
- 步长取反实现左右交替
答题示例
用步长控制方向,计数控制转向。
横向走 10 格就换行,竖向走 2 行就把步长取反。
比如第一行向右步长是 2,走完两行后变成 -2,就向左走了。这样就能画出蛇形的地图。
参考文章
- 7.游戏场景-地图结构体
深度题
1. 项目制作思路
题目
如果让你从零开始制作这个飞行棋控制台游戏,你会怎么规划?
深入解析
项目概述:飞行棋控制台游戏,玩家与电脑轮流扔骰子前进,踩道具格子触发效果,先到终点者胜。
模块划分:
- 控制台基础设置
- 场景管理(开始/游戏/结束)
- 数据结构(枚举、结构体)
- 地图系统(蛇形布局、随机道具)
- 玩家系统(绘制、重合、暂停)
- 游戏逻辑(扔骰子、格子效果、胜负判断)
开发顺序:
- 控制台初始化 → 隐藏光标、固定窗口大小
- 场景框架 → 枚举 + switch + 主循环
- 开始/结束场景 → 菜单选择、场景切换
- 游戏场景 - 静态元素 → 画红墙、提示文字
- 数据结构 → 定义枚举和结构体
- 地图生成 → 蛇形布局、随机道具格子
- 玩家系统 → 绘制玩家和电脑、重合处理
- 游戏逻辑 → 扔骰子、格子效果、胜负判断
关键技术点:
- 场景切换:枚举 + switch + ref 参数
- 蛇形地图:步长控制方向,计数控制转向
- 重合判断:比较
nowIndex,相等时画特殊图标 - 暂停机制:
isPause标识,回合开始检测并重置
难点与解决:
- 玩家电脑重合:判断索引相等,画特殊图标
- 场景切换传参:用
ref让函数内修改生效 - 随机道具:首尾必为普通格子,中间按概率生成
答题示例
先做控制台基础设置,隐藏光标固定窗口。
然后搭场景框架,用枚举加 switch 管理三个场景。
游戏场景是核心,先画红墙这些静态元素,再定义数据结构:格子枚举、位置结构体、地图结构体、玩家结构体。
然后生成蛇形地图,用步长控制方向。玩家系统要处理绘制和重合判断。
最后是游戏逻辑,扔骰子、判断格子类型、触发效果。
难点主要是场景切换要用 ref,重合要判断索引相等。
参考文章
- 1.需求分析
- 2.控制台基础设置
- 3.多个场景
- 4.开始场景
- 5.游戏场景-不变的红墙
- 6.游戏场景-格子类型枚举和格子结构体
- 7.游戏场景-地图结构体
- 8.游戏场景-玩家和电脑结构体
- 9.游戏场景-扔骰子
- 10.结束场景
- 11.代码汇总
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com