【实训项目】大一学习基于Java的小游戏:坦克大战

初南电脑学习 2024-06-26 09:25:00
项目搭建

1.导入坦克的客户端项目

2.设置项目结构,添加项目模块。

3.添加运行配置,将ClientView设置为主类。

4.设置项目的编码为UTF-8

5.导入server代码

6.配置server的项目结构,添加导入该项目的模块。

7.配置运行启动主类

8.运行server端服务。

9.运行客户端服务。

10.输入IP地址,加入服务器游戏。

11连接成功,开始游戏。

功能操作

1.联机功能,server启动后,可开启一个主机服务,客户端可根据主机的ip加入到主机游戏中。客户端输入服务端IP地址并连接,服务端监听端口等待客户端连接。客户端连接后,服务端发送指令,客户端加载游戏资源,例如地图、坦克图像等。

2.暂停继续,客户端和服务端都可以对游戏进行一个暂停和开始按钮,点击后游戏将会暂停。

3.坦克控制,上 (↑)、下 (↓)、左 (←)、右 (→) 用于控制坦克移动。空格键或S用于发射子,Tab键用于在控制界面和对话界面之间切换。Enter键用于发送对话内容。Y键在游戏结束后,按Y键表示同意重新开始游戏。N键在游戏结束后,按N键表示不同意重新开始游戏。

4.游戏结束,当中间核心被击中或两个玩家坦克生命值为0时,游戏失败将会结束。此时提示用户是否需要再玩一次,按y键后可重新开始游戏。

5.聊天控制,在游戏中,可以按tab接切换到输入框内,在输入框内可以进行通信。

6.信息统计,在游戏面板右下方,将会统计不同玩家之间获得的分数以及玩家的生命值。

代码分析

1.画图代码逻辑实现,墙壁和坦克的绘制逻辑都封装在各自的 draw 方法中。wall 和 Steelwall 类都实现了 draw 方法,用于绘制墙壁。墙壁的绘制逻辑依赖于其形状和状态,例如 walldestoried 和 bulletdestoried 标志表示墙壁是否被摧毁或被子弹击中。player 和 enemy 类都实现了 draw 方法,用于绘制坦克。坦克的绘制逻辑依赖于其状态和纹理,例如 status 表示坦克的等级,textures 数组存储不同状态下的坦克图像。墙壁和坦克的绘制逻辑都封装在各自的 draw 方法中,并根据对象的形状、状态和纹理进行绘制。代码中使用了一些图形库函数,实现了简单的图形绘制功能。

2.子弹的发射和碰撞逻辑主要发生在 bullet 类中,在 player 类的 move 方法中,当玩家按下射击键且满足条件时,会创建一个新的子弹对象在 bullet 类的 move 方法中,子弹会根据方向和速度进行移动,并检查是否与地图边界或其他对象发生碰撞。如果子弹与地图边界相交,则将其移除,并通知子弹的拥有者,同时生成一个炸弹对象。如果子弹与其他对象相交,则根据对象的类型进行处理。检查子弹是否击中了墙壁的某个部分,并根据子弹的能力和墙壁的状态进行相应的处理,例如摧毁墙壁或生成炸弹。如果击中了地方坦克,检查子弹是否击中了玩家或敌人,并根据子弹的拥有者类型进行处理,例如增加玩家分数或减少敌人生命值。如果子弹击中了基地,则摧毁基地并结束游戏。

3.通信代码功能实现,代码中,客户端和服务端都可以发送信息,信息内容可以是玩家之间的对话、游戏状态更新、投票结果等。在 ClientControler 类中,为 sendMessage 按钮添加监听器,当按钮被点击时,获取 messageField 中的文本内容,并添加到信息队列中,然后发送给服务器。发送玩家命令,在 ServerModel 类的 actionPerformed 方法中,根据玩家的按键操作生成玩家操作指令,并将其添加到输出行中。在 ServerModel 类的 actionPerformed 方法中,读取服务器发送的指令,并根据指令类型进行处理。

4.分数计算代码逻辑实现,代码中使用文本协议进行信息的发送和接收,信息类型包括分数更新。在 ServerModel 类的 actionPerformed 方法中,读取服务器发送的指令,并根据指令类型进行处理在 ServerView 类的 draw 方法中,将玩家的分数显示在界面上。

5.坦克控制代码实现,按键控制主要体现在对玩家操作的监听和响应上。在 ClientControler 类中,为 mainPanel 和 messageField 添加键盘监听器,监听玩家的按键操作。在 ClientModel 类的 keyPressed 和 keyReleased 方法中,根据按键事件更新玩家的移动状态。在 ClientModel 类的 tick 方法中,根据玩家的移动状态生成玩家操作指令,并将其添加到输出行中。在 ClientMode通过添加键盘监听器、处理按键操作、发送玩家操作指令和接收服务器响应来实现按键控制。玩家按下键盘上的方向键,客户端会发送相应的操作指令给服务器,服务器根据指令更新游戏状态并返回响应给客户端,客户端根据响应更新游戏界面。在 ClientModel 类的 tick 方法中,接收服务器发送的响应,并根据响应更新游戏状态。

6.游戏结束代码实现,在 player 类中,坦克的生命值 (life) 用于表示坦克的剩余生命。当坦克的生命值减至零或以下时,游戏胜利条件不满足,坦克被摧毁。在 level 类中,基地的生命值 (baseLife) 用于表示基地的剩余生命。当基地的生命值减至零或以下时,游戏胜利条件不满足,基地被摧毁。在 ServerModel 类的 actionPerformed 方法中,检查玩家的坦克和基地的状态,以确定游戏是否结束。在 ServerModel 类的 actionPerformed 方法中,当游戏结束时,更新玩家信息并显示游戏结束消息。

0 阅读:1

初南电脑学习

简介:感谢大家的关注