作业四

二轴桌面冰球游戏的软件设计

一、游戏简介

《桌面冰球》是一场在桌面上展开角逐的游戏。在游戏中玩家操纵球棍把球打进对方的球门即可,虽然游戏的玩法非常简单,但是想要在游戏中获胜,还是非常考验击打球和控制球的方向的。在游戏中玩家可以选择一个球进行比赛,也可以选择两个球。两个球的比赛相对于一个球的比赛在控制上更难一些。我们只讨论一个球的情况。

二、功能分析及任务分配

软件模块包括:

  1. 冰球桌面仿真环境
    练习模式下:由仿真环境随机发球给击球器,因此仿真环境要能随机发球,然后根据冰球和击球器的当前状态实时生成画面。
    对战模式下:有两个击球器,因此两个击球器都要有运动模拟,根据冰球和两个击球器的当前状态实时生成画面。
    此模块可基于QT和ODE完成。
    由物理引擎组和图形化组完成。
    QT生成冰球桌面环境(包括球和击打器)的图形界面,物理引擎模拟冰球与击球器和挡板的碰撞产生的实际运动。通信时,仿真环境返回冰球和击球器的实时位置和速度。

  2. 两轴平面直角机械手的控制
    有个比较奇怪的问题——这游戏是软件自己玩还是有玩家的啊?如果是玩家玩,那么就根据玩家的指令击打就行了;如果是自己玩,那么就要制定运动策略,使球能够进洞。看题目应该是后者。
    输入:冰球当前运动状态;
    输出:击球点和击球速度;
    实现:机械手的轨迹插补和加减速控制。
    此模块由用户接口和轨迹插补组共同完成。
    由C++实现,软件用QT。

三、关键算法##

  1. 确定击球点;
  2. 已知击球点,以及对方球门位置,经挡板反射后,冰球速度大小不变,入射角等于出射角,由此可知冰球要进洞所需的速度(大小和方向);
  3. 已知冰球所需速度以及当前速度,根据动量定理和能量守恒,可计算出击球器的击球速度;
  4. 已知击球点和击球速度,还有击球器当前状态,进行合适的轨迹插补和加减速控制。
原文地址:https://www.cnblogs.com/lihanyan/p/6206051.html