面向对象程序综合设计课程设计-大富翁(个人博客)

一、项目简介

  • 功能描述:此次课程设计的题目是大富翁,使用Java语言来设计出现实生活中常见的大富翁游戏,实现了进入系统之后可以自定义第一个玩家的名字,并且每个玩家随机分配一个头像,并作为游戏的人物形象,游戏中有两种模式:人机对战和本地多人对战,由于技术原因,目前尚未实现具体游戏的所有功能,但是点击地点可以显示地点信息,在游戏和游戏房间中均可退回到主界面。本次课设并未参考任何他人代码。
  • 个人负责任务: GUI界面设计以及综合设计游戏运行框架。
  • 团队博客链接:
  • 面向对象程序综合设计课程设计-大富翁源码-gitee仓库地址

二、功能架构图

三、个人任务简述

  1. 完成的任务与功能:
序号 完成功能与任务 描述
1 GUI界面设计 使用了Javafx技术来进行界面设计
2 面向对象设计 使用了面向对象技术设计系统
3 多线程更新ui 使用多线程技术,从处理数据的线程更新Javafx主线程的ui
4 综合设计游戏运行 统筹规划设计类的使用,综合运用各种已学知识来设计游戏逻辑
  1. Git提交记录截图:

四、本人负责功能详解

  1. 面向对象设计
  • 包图

  • 类图

  1. GUI界面设计
    此次GUI界面主要采用了Javafx技术,配合使用scene builder2.0来设计,设计的难点在于游戏地图的设计,每个小方格(GridPane)之中需有地名(Label)、所属(地产需要标识所属玩家,ImageView)或者特殊地点标志(例如马车、随机事件等地点,ImageView)、游戏人物形象(直接用人物的头像,ImageView)。
    游戏界面

    关键代码截图,使用以下代码将界面加载到程序中,并对其进行图形加载和初始化。

  2. 多线程更新ui
    这个模块采用的技术有:多线程,Javafx。这个难点在于如果直接在Javafx主线程更新ui会导致界面卡死,因为游戏逻辑是一个循环的过程,而Javafx主线程则是一个单线程的ui工具包,游戏不结束,ui就无法更新,因而另开了一个线程专门处理游戏数据,并对ui进行更新,而Javafx主线程专门进行图形渲染。
    关键代码截图
    如果无需返回值的话用Platform.runLater更新ui即可

    但是如果需要结果的返回值的话,则需要用以下的办法。

  3. 综合设计游戏运行
    大富翁主要的游戏逻辑就是投骰子后到达某个位置,触发相应的事件,事件处理完成之后判断当前玩家是否破产,进行相应处理,全部玩家都投骰子之后为一个回合,当只剩下一个玩家的时候,该玩家获得本局游戏的胜利。
    关键代码截图

五、课程设计感想

此次课设中首先碰到的困难是游戏逻辑的设计,因为大富翁这个游戏逻辑不会像贪吃蛇、俄罗斯方块等的游戏逻辑一样简单,它会是比较复杂的,所以在设计游戏逻辑的过程难免有所遗漏,需要后期debug去修复;其次是ui无法更新的问题,那时百思不得其解,为什么我明明对ui控件的值进行了修改,却就是一直卡死,之后百般搜索,再去征询老师的建议之后,才最终解决了问题;最后是一开始我认为很神奇的一个问题,debug运行和直接运行出来的结果竟然是不一样的,我内心实在是难以接受,因而我在网上也参考了很多资料,最后还是在老师的帮助下才解决了这个问题,使用了一个volatile关键字,让所有去取变量值的对象都能够看到最新的变量值(这在多线程中很重要,尤其是要在多个线程中访问同个变量的情况下)。总之,这次课设遇到了很多问题,其中也有我当时看来相当奇葩的问题,解决它们之后感觉收获了很多,这次课设也是做了很长时间,以至于到后期已经有点力不从心了。

六、展望

  • 不足之处:本次课设虽然也解决了很多问题,但是游戏逻辑仍然是不完善,有时候还是会出现卡死,重进游戏也是不能够重开一盘游戏,游戏中如果是人投骰子移动会很卡,动画效果不好,电脑移动动画还行。
  • 改进方法:通过debug进一步完善程序的逻辑,完善游戏功能,改进动画表现代码,让动画更自然。
  • 这次课设本来也是想添加多人联网对战的,但是由于技术原因导致进度缓慢,因而也就没有用上网络编程的知识,要知道和朋友一起玩才是最大的乐趣呀,这是此次课设比较遗憾的地方。
posted @ 2021-02-01 11:28  朱振豪  阅读(581)  评论(0编辑  收藏  举报