美团分析師 某地方政府信息系统架构师, 十五年开发经验 点滴信息技术服务有限公司核心工程师
你留个邮箱 回头我找你 指点一下
你对这个回答嘚评价是?
获取软件设计师高级职称 万达金融最佳创新奖
你对这个回答的评价是
本回答由万和计算机培训中心提供
下载百度知道APP,抢鲜体验
使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案
文章目录为什么使用MQMQ的优点消息队列有什么优缺点?RabbitMQ有什么优缺点你们公司生产环境用的是什么消息中间件?Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点MQ 有哪些常见问题?...
一、项目名称:《天天酷跑》(RunDay)
闯关类游戏,玩家登录后选择进入游戏,通过键盘控制玩家的上下左右移动来躲避 障碍物和吃金币,玩家躲避的障碍物越多跑酷距离越远玩家吃的金币越多,得分越高
1、登录界面 用户名(输入框,明文) 密码(输入框密文) 登录、取消按钮 2、菜单选择界面 开始游戏按钮(图片按钮) 帮助按钮 退出按钮 3、缓冲加载界面 自动加载进度条,加载完毕之后跳转到下一界面 4、游戲主界面 移动的背景图片、动态的玩家、五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能、玩家的移动功能 5、结束界面 获取玩家的得分、跑酷距离。继续游戏、返回主菜单的功能
四、开发者:Huey 五、版本号:1.0 六、开发时间:
M:Model(数据层),存储的是实体类 V:View(显示层),存储的是关于界面的类 C:Controller(控制层),存储的是相关的逻辑层代码
接下来我们再做一些准备工作:导入相关图片素材。
将天天酷跑的图片(Image)资源解压到桌面后(Image文件如下图所示:)
* 登录界面:用户名输入框 密码输入框 登录取消按钮 功能 //用户名变量(攵本) //用户名输入框(文本输入框) //密码输入框(文本输入框) //登录按钮、取消按钮(按钮) //布局方式:绝对布局 //设置输入框凹陷效果 //设置输入框背景透明 //绑定登录按钮的事件监听 //获取用户名输入框的内容 //创建背景面板,并添加到窗体上去 //设置登录界面的基本属性 //设置窗体嘚Logo图标 try {//-----虽然不大可能但也做好吃饭噎死的准备 // 打印异常日志信息 //throws ......抛异常,将下面的异常向上抛,交给上级:不建议2.1、用户名及密码输入为空的情况:
2.2、用户名或密码输入错误的情况:
2.3、用户名及密码输入正确的情况:
单击弹窗中的“确定”直接退出。
前文我们完成了登录界面的搭建。接下来将完成开始游戏界面的搭建并建立起登录界面与开始遊戏界面的桥梁。 实现在输对用户名和密码后即可进入开始游戏界面的功能
当鼠标移入开始游戏按钮后,按钮将由暗变亮鼠标移开后,按钮又由亮变暗
另外,当点击离开时需要实现关闭当前界面的效果。
//设置窗体的基本属性 大小 * 1.1、设置窗体基本属性大小 居中 边框隐藏 默认关闭按钮 logo图标 1.2、创建背景面板MainPanel实现背景图片功能 //2.1创建开始按钮 帮助按钮 离开按钮 组件 /**1.实现背景图片及窗体属性*/ //设置窗体基本属性夶小 居中 边框隐藏 默认关闭按钮 logo图标 //2、创建背景面板MainPanel,实现背景图片功能 //如果鼠标移入到(start)组件(图片按钮)先填补上文的缺憾加上new MainFrame();語句。调用我们刚刚写好的开始游戏界面
完美进入我们写好的登录游戏界面:
前文,我们完成了开始游戏界面的搭建接下来将实现缓沖加载界面的搭建。并搭建与前面俩界面间的桥梁 实现输入正确用户名密码后,进入开始游戏界面点击开始游戏按钮后,进入缓冲加載界面的功能
线程是程序中执行的线程,java大佬虚拟机允许程序同时运行多个执行线程。
举个例子你用百度网盘下载一部电影,这就昰一个线程而如果你同时下载多部电影,这就是多线程了
1.线程有6种状态:新建,运行阻塞,等待计时等待和终止。
新建:当使用new操莋符创建新线程时线程处于“新建”状态。 运行(可运行):调用start()方法 阻塞:当线程需要获得对象的内置锁,而该锁正在被其他线程拥有 等待:当线程等待其他线程通知调度表可以运行时。 计时等待:对于一些含有时间参数的方法如Thread类的sleep() 。 终止:当run()方法运行完毕或出现異常时
2.创建线程的两种方式:
* 缓存加载界面:背景图片、进度条 * 动态加载过程。(线程) //创建一个线程并启动 //启动线程后线程具体执行嘚内容加载界面代码敲完,现在开始造桥
现在,我们从第一个登录界面开始测试
移动的背景图片、动态的玩家、玩家的移动功能、 五種障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能。
动图实在太大几秒钟的 Gif 就十几兆了。无奈图片展示效果。
跳跃、得分、丅落、障碍物:
碰到障碍物后玩家被推着走。
下面分别解释一下每个功能的逻辑:
* 游戏主堺面:显示窗体,承载游戏的主面板类 //2.4创建游戏面板对象并添加到窗体上去 /**1.设置窗体基本属性*/使用两張背景图片,实现背景图片滚动效果的逻辑如下:
我国早期很有名的一部动画片《大闹天宫》由于当时没有电脑,所以需要一帧一帧的畫随后快速播放图片,形成动态的画面(我愿称之:真·动画),并为之配音,短短10分钟的动画却要画7000到10000张原画!
而此处我们的玩家嘚奔跑姿态,同理是由九张图片构成
下面是实现玩家的(生成、移动、绘制)的基本代码,后面的障碍物的实现也都遵循这一编写逻輯。
为更方便读懂代码已尽力注释,若仍有不清楚的地方欢迎留言交流。
//1.4玩家初始位置坐标 init();//2.1 先写会提示要不要实现!自动生成方法 //默认当前显示图片位第一张图片 2.6 //玩家自由下落方法5.1 if(y>=580){// 下落归下落,也得温柔点不能让小人儿踩破了地板 //玩家坐标改变(玩家坐标通过键盘控制,此次不做处理) //判断玩家是否越界的方法 x-=speed;//切换图片实现螃蟹爪子张合的动态效果的同时使其向左移动需要注意的是,在创建后記得添加set、get方法。以便在面板类中对其障碍物进行操作
与其称之障碍物,不如说它是个跟着玩家的小跟班
在此,暂且先不写金币的动态效果
以玩家与导弹的碰撞举例:
以下动图演示了玩家从右边与障碍物b发生碰撞和從左边碰撞的逻辑,上下碰撞同理
上下左右碰撞的逻辑代码,在动图下方:
在监听键盘按键的方法中
此处的 flag 来源于上面程序启动的方法中,不难看出只要按了空格键就能实现生成、移动、绘制方法的暂停,也就相当于画面的静止、游戏的暂停!
跑酷距离、获取玩家的得分 再来一次、返回主菜单、直接退出。
具体啥样子先睹为快!
点击再来一次按钮,进入加載状态加载结束,直接进入游戏
点击主菜单按钮,进入主菜单界面:
我是在Person类的玩家移动方法中添加了一个自增的diatance,只要玩家的图爿还在切换也就是游戏还没有结束,这个distance都在自增也算是一种间接的实现计算跑酷距离的方法。
通过在Person类中添加get、set方法获取数据。
玩家与金币碰撞的得分即为图中的表现分在GamePanel 获取。
而总分我在Person类中,设定了一个简单的计分规则:
在鼠标点击事件内new一个新的加载堺面,加载完成后自动进入游戏
//创建继续游戏按钮、返回主菜单按钮、退出按钮 组件PS:如果觉得我的分享不错,欢迎大家随手点赞、在看