刚刚讲完WebCast,把代码传上来大家来玩一下.
第一节,已在8月25日完成:Deflexion 游戏开发(一)
第二节,在9月7日下午.Deflexion 游戏开发(二)
原码下载DeflexionV1
设计文档:(不是很长,直接贴在这里吧).
1 目标:
1.1 单机版,两人轮流进行,没有AI
1.2 100%按照规则实现棋子的移动,旋转,死亡,和判断胜负。
2 实现:
2.1 棋子,激光,棋子反射激光等效果全部使用2D图片实现。
2.2 无动画效果。
3 操纵:
3.1 鼠标:选择棋子,选择操作,激光自动发射,点击OK,轮到下一选手。
4 数据结构:
4.1 格:Square
棋盘上的一格,可以是空格,Golden或Silver格,或是有棋子的格。
4.1.1 属性:
4.1.1.1 当前图像(CurrentView)
4.1.1.2 照射状态 ShineStatus
4.1.1.3 颜色 Color(Golden or Silver or Black)
4.1.1.4 棋子 Piece
4.1.1.5 位置 Position
4.1.2 方法:
4.1.2.1 照射进来 ShineIn
4.2 G/S格:ColumnSquare : Square
4.2.1 属性:
4.3 棋子:abstract class Piece :
4.3.1 属性:
4.3.1.1 Rotatable
4.3.1.2 Movable
4.3.1.3 Angle
4.3.1.4 Mirrors
4.3.1.5 Square
4.3.1.6 Color
4.3.1.7 CurrentView
4.3.2 方法:
4.3.2.1 Move:移动一格
4.3.2.2 Rotate:顺时针或逆时针转动90度
4.3.2.3 GetMovableSquares:获得下一步可以移动到的格
4.3.2.4 照射进来 ShineIn
4.4 法老王:Pharaoh : Piece
4.5 祭祀门:Djed : Piece
4.6 金字塔:Pyramid : Piece
4.7 方尖石:Obelisk : Piece
4.8 墙:Wall : Piece
4.9 发射器:LaserGun : Piece
4.10 镜子:Mirror
4.10.1 属性
4.10.1.1Angle
4.10.2 方法
4.10.2.1照射进来 ShineIn
4.11 激光:Beam
4.11.1 属性:
4.11.1.1方向:Direction
4.11.1.2路径:Path
Point的列表
4.12 棋盘 ChessBoard 8 x 10 (10 x 12) (0~9 x 0 ~11)
5 方法说明:
5.1 ShineIn
5.1.1 返回值:Point
5.1.2 输入:方向角度
5.1.3 说明:
当激光以某一角度照射到棋盘上一个时,本方法计算出激光下一步所到的的位置。可能方向不变(空格),也可能方向改变90度(Djed,Pyramid),也可能激光就此中止(Wall or Piece Dead)。
5.1.4 算法:
5.1.4.1 如果格上没有棋子:则返回同激光入射方向的下一个格。
5.1.4.2 如果格上有棋子:
5.1.4.2.1 无反射面:激光停止,棋子死亡。
5.1.4.2.2 有一个或多个反射面:判断每个反射面与光束所成的角度。<180则发生反射。反射面是入射光线和反射光线所成角的角平分线。>180度不发生反射。如果每个反射面都不发生反射,则激光停止,棋子死亡。
6 UI绘制
6.1 绘制方法有外部对象完成。绘图方法与棋子对象分开。