写在前面

      Java编译器下载教程(真的良心):https://blog.csdn.net/Haidaiya/article/details/81230636

本项目为本人独自制作,请各位尊重我的努力成果谢谢。同时,这个项目中也存在一些问题,请见谅。

本项目需要启动服务器,在类Server中启动主函数,随后启动类Main中的main方法即可开始运行,服务器的地址默认为本地,如需修改,请在类Client中进行修改,谢谢。

本项目中的图片音乐均来自网络,请不要用于商用(说起来我也不知道是否可以),仅用于学习和自己本地玩就好,否则,后果自负。

文件源码和图片在博客最后面

项目要求

项目制作思路

(1)为了实现图形界面,我们需要学习一波JFrame(画框),JPanel(画布 ), JButton(按钮)等等.....具体请参考我的另一篇博客

(2)自定义按键,嗯,学习一波KeyListener,为了能够使用JButton(按钮)进行各种操作,学习一波ActionListener;同时,为了能够让用户更好的自定义按键,采用JComboBox(多选框)进行选择,学习一波嗯。

(3)计时器,嗯,多线程

(4)联系移动,嗯,这个设置为,每次点击移动键后,将坦克位置移动相同距离就好了

(5)障碍物,嗯,为了更好的游戏体验,我用了7天试用期的PS CC 完成了所有图片制作,不得不说,PS是个好东西。图片都是网上找,然后用PS进行修改。同时,为了可以判断坦克和坦克之间、坦克和墙之间、子弹和墙、坦克之间的碰撞,专门用了一个Jduge类来判断各种碰撞,同时也进行坦克移动的判断。

(6)AI坦克,嗯,偷了个懒,我用的是随机数,让坦克往一个方向一段一段距离,期间每隔一段时间,射出炮弹,同时遇到墙或者坦克就换一个方向继续行走。

(7)服务器,嗯,学习一波socket

扩展内容

(1)作为一个游戏,怎么能没有好的background和background music呢,为此使用了PS CC进行背景处理,又学习了一个剪辑音乐的软件,说起来,我这个剪辑音乐的软件真心不错,还可以剪辑视频呢,微软商城找的,名字是剪影,轻度广告,而且你一般看不到(只在导出文件的时候弹出,而且不会挡住屏幕,比某剪辑良心不少)

(2)然后,障碍物、子弹、坦克的图片也很重要,为此,借助了PS CC 和百度的强大,完成了这方面的制作。

(3)由于一般的游戏不止有一个地图,为了制作多个地图,我利用excel进行构建地图(说起来,这个还真是好用)

(4)对于音乐,我们需要学习一波URI , URL ,AudioClip等等,具体内容请百度或者看我的另一篇博客。我的音乐可能不让各位满意,如需更改,请在类Music进行修改。

(5)之后,在项目完成的前几天,我觉得gif是个好东西,为此又下了一个软件进行gif制作.....说到gif,我有觉得,如果可以实现点击图片,然后.....(不剧透,因为也就那么回事)

(6)为了增加游戏体验,我为部分墙壁增加了奖励物品,包括加速,伤害增加,加血等等,其中在第三关,我增加了随机生成岩浆的功能,就是因为这个功能,我自己都很少过关(微笑)。本来最开始的时候想过进行坦克升级的,后来做完了后忘记了,现在因为没有PS了,所以就放弃了,哎,PS是个好东西呀!

(7)然后呢,似乎没得写了耶,最后的扩展就是........(永远不可能停止更新的游戏,“只要你肯加”)。

游戏截图

写在最后

这个项目我也是写了比较久的,这篇文章是个综述,游戏的源码也放在这里,之后会写几篇博客,分开讲解整个程序。算是作为Java学习的总结了。

文件源码(包括图片)

下载链接:https://pan.baidu.com/s/1j-FDcvwuLST6hr8my2F3QA

提取码:qwdz

二维码:

坦克大战--Java类型的更多相关文章

  1. 坦克大战--Java类型 ---- (2)按键设置和用户名的输入

    一.实现思路(emmmm,这个地方我很大程度参照了别人的写法)   由于键盘按键众多,因此使用选择框JComboBox 进行按键选择,点击一个JButton 按钮后,读取所有选择框中的内容,然后存到一 ...

  2. 坦克大战--Java类型 ---- (3)实现socket通信

    一.实现思路 使用socket通信的一些方法来实现socket通信,客户端和服务端两边需要约定好通信的接口Port(尽量选高的),客户端需要服务端的IP地址,以实现数据交流. 同时,客户端和服务端需要 ...

  3. 坦克大战--Java类型 ---- (1)音乐播放

    实现原理 我用接口java.applet.AudioClip实现音乐播放,那么我们需要了解这个接口的情况. 我们主要使用其中的三个方法: (1)void loop(); //循环播放(2)void p ...

  4. 坦克大战java版

    吃了可以加血的血块类 import java.awt.*; public class Blood { //血块移动的路径 int[][] pos = { {450,250},{450,252},{45 ...

  5. java制作简单的坦克大战

    坦克大战是我们小时候玩红白机时代的经典游戏,看到有不少小伙伴都使用各种语言实现了一下,手痒痒,也使用java做的一个比较简单的坦克大战,主要面向于学过Java的人群,与学了一段时间的人,有利于面向对象 ...

  6. Java小项目--坦克大战(version1.0)

    Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...

  7. Java坦克大战(四)

    这是我的坦克游戏大战的最后一版,里面添加很多新的功能.这个坦克大战的有很多不足之处,但是对于初学者来说依然是一个很好的练习项目,从中我们可以学习Java基础知识,将知识与项目结合,学习面向对象编程思想 ...

  8. Java坦克大战(三)

    关于这个坦克大战的项目是在学习Java基础的时候,拿来练习的最近看到这些代码,感觉很亲切,就把他们都复制下来,编辑成博客.回首看去,Java基础的学习确实应该建立在找项目练习上,这样才能将学到的基础知 ...

  9. Java坦克大战(二)

    本文紧接上一篇讲解坦克大战这个项目,因为当初在学习的时候,是以这个案例逐步学习Java基础的,过程是先讲知识点,再将知识点逐步的融入到项目中,即给坦克添加新的功能.之前的Demo练习,想都记录下来.这 ...

随机推荐

  1. 从 s 点到 t 点的最短路(简单模板)(迪杰斯特拉)

    迪杰斯特拉简单版 #include <bits/stdc++.h> using namespace std; int m,n; const int inf = 0x3f3f3f3f; in ...

  2. Reids入门介绍

    一.入门概述 1.是什么? Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式 ...

  3. 求N个集合的并集

    做容器放置实验时,需要计算下载N个Images的总size(Image之间可能会有可以共享的size). 一开始想到的是Images两两之间求交集,然后慢慢推到了容斥原理...时间复杂度大概就是O(N ...

  4. Flume-自定义 Sink

    Sink 不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统.或者被发送到另一个 Flume Agent. Sink 是完全事务性的. 在从 Channel 批 ...

  5. Flask实现跨域请求的处理方法

    https://blog.csdn.net/wangshu_liang/article/details/86490137 https://blog.csdn.net/a1241314660/artic ...

  6. OpenStack 虚拟机热迁移流程图

    目录 文章目录 目录 源计算节点与目的计算节点之间的交互流程 Nova 和 Neutron 之间的交互流程 源计算节点与目的计算节点之间的交互流程 热迁移主要包括三个阶段: pre_live_migr ...

  7. mongo 4.2版本注意事项

    参考文章: 4.0的安装 https://blog.csdn.net/qq_26896281/article/details/81203687 MongoDB4.0.0 远程连接及用户名密码认证登陆配 ...

  8. 用VLC读取摄像头产生RTSP流,DSS侦听并转发(二)

    用VLC读取摄像头产生RTSP流,DSS侦听并转发(二) 之前介绍过<用VLC读取摄像头产生RTSP流,DSS主动取流转发(一)>本文介绍另一种方法. 摄像机地址是192.1.101.51 ...

  9. Shell脚本执行的四种方法

    (1).bash(或sh) [脚本的相对路径或绝对路径] [xf@xuexi ~]$ cat a.sh #!/bin/bash echo "hello world!" [xf@xu ...

  10. cv2.bitwise_and的应用,

    import cv2 import numpy as np Load two images img1 = cv2.imread('messi.png') img2 = cv2.imread('logo ...