最近学习了多线程的相关知识,并基于多线程制作了一个2人对战的小游戏。在做这个的过程中对线程和线程之间的联系有了一个更深刻的认识,而且对键盘监听器和双缓冲也有了一定的认识。
废话不多说,下面是我的游戏(界面略难看,大家请忽略)
人物可以左右移动和跳跃,按向下键则是防御,减少30点伤害。
跳跃和自由落体的代码(使用线程)
public void Activity() {
if (KListener.command2 == KeyEvent.VK_UP) {
if (Jnum > 0) {
// 擦除之前的位置
g.setColor(Color.BLACK);
g.fillRect(x, y, 40, 80);
t = 1;
isJump = true;
isFall = false;
y = y + jump + gravity * t;
if (d == 1) {
g.drawImage(fireh, x, y, 40, 80, null);
} else {
g.drawImage(fireh1, x, y, 40, 80, null);
}
Jnum--;
}
}
public void run() {
while (true) {
Activity();
checkPalce();
// 英雄跳跃的动作
if (isJump) {
t++;
// 擦除之前的位置
g.setColor(Color.BLACK);
g.fillRect(x, y, 40, 80);
y = y + jump + gravity * t;
if (d == 1) {
g.drawImage(fireh, x, y, 40, 80, null);
} else {
g.drawImage(fireh1, x, y, 40, 80, null);
}
}
if (isFall) {
// 擦除之前的位置
g.setColor(Color.BLACK);
g.fillRect(x, y, 40, 80);
y = y + gravity * t;
if (d == 1) {
g.drawImage(fireh, x, y, 40, 80, null);
} else {
g.drawImage(fireh1, x, y, 40, 80, null);
}
t++;
}
try {
Thread.sleep(60);
} catch (Exception e) {
e.printStackTrace();
}
}
即引入了一个gravity变量模拟重力加速度,如果跳跃则给一个向上的速度,然后通过线程完成下落。
左边的人物的技能
第一个技能是冰弹 造成不错的伤害而且减慢移动,降低跳跃一段时间。
第二个技能是波浪形态,造成一般的伤害,并在停止时把他也带到停止位置
第三个技能是链状闪电,它会持续一段时间,在此过程中对方进入到它的范围内会受到伤害,并麻痹直到它结束。
右边人物的技能
第一个技能是放出一个不错伤害但是飞行不快的火鸟,在飞行一段后如果没有遇到敌人则会散出8个小量伤害的火球
第二个技能是放出一个火焰 在移动一段距离后会变大 并提升伤害。
第三个技能是在前方一段距离放出一个火焰守卫,它不能移动,但在持续时间内会对碰到他的敌人造成少量伤害
在游戏中为了持续刷新被人物和技能擦过的屏幕,还是用了双缓冲。双缓冲就是在绘图重绘时,先取得对应位置的图像,然后得到此图像的画布,将你的人物和其他东西画再得到的这个画布上面。代码:
// 重写父类绘制窗体的方法
public void paint(Graphics g) {
if (offScreenImage == null) {
// 截取窗体所在位置的图片
offScreenImage = this.createImage(550, 450);
}
// 获得截取图片的画布
Graphics gImage = offScreenImage.getGraphics();
// 获取画布的底色并且使用这种颜色填充画布
Color c = Color.BLACK;
gImage.setColor(c);
gImage.fillRect(0, 0, 550, 450); // 有清除上一步图像的功能,相当于gImage.clearRect(0,
super.paint(gImage);
gImage.setColor(Color.green);
gImage.fillRect(0, 440, 550, 10);
gImage.fillRect(150, 340, 250, 10);
//显示冰英雄的血量
String str = Integer.toString(IceHero.HP);
gImage.setColor(Color.WHITE);
gImage.drawString(str,0, 90);
//显示火英雄的血量
String str2 = Integer.toString(FireHero.HP);
gImage.setColor(Color.WHITE);
gImage.drawString(str2,0, 100);
if (IceHero.d == 1) {
gImage.drawImage(iceh, IceHero.x, IceHero.y, 40, 80, null);
} else {
gImage.drawImage(iceh1, IceHero.x, IceHero.y, 40, 80, null);
}
if (FireHero.d == 1) {
gImage.drawImage(fireh, FireHero.x, FireHero.y, 40, 80, null);
} else {
gImage.drawImage(fireh1, FireHero.x, FireHero.y, 40, 80, null);
}
// 将接下来的图片加载到窗体画布上去,才能看到每次画的效果
g.drawImage(offScreenImage, 0, 0, null);
}
- 大小: 32.5 KB
- 大小: 5.8 KB
- 大小: 5.4 KB
- 大小: 6.4 KB
- 大小: 3.4 KB
- 大小: 5.5 KB
- 大小: 3.3 KB
- 大小: 4.6 KB
- 大小: 3.7 KB
- 冰与火.rar (989.2 KB)
- 描述: 此游戏的工程
- 下载次数: 5
分享到:
相关推荐
Java制作的2048小游戏源码是一个非常适合初学者学习的项目,它涵盖了Java SE(标准版)的基础知识,特别是Java Swing组件库的使用。Java Swing是Java AWT(抽象窗口工具包)的扩展,提供了丰富的图形用户界面(GUI)...
《基于Java-Applet的小游戏,模仿《大鱼吃小鱼》的网页Flash小游戏制作》是一个使用Java编程语言开发的项目,旨在实现一个类似于经典游戏"大鱼吃小鱼"的网页版本。该项目利用了Java的Applet技术,使得游戏可以直接在...
综上所述,"基于QT的翻金币小游戏"涵盖了QT库的多个重要方面,包括图形界面设计、事件处理、动画制作、游戏逻辑控制以及资源管理等。学习和实践这样的项目能深入理解QT框架,并提升游戏开发能力。
【Android Studio小游戏:弹球小游戏】是基于Android开发平台,使用Android Studio集成开发环境创建的一款简单而有趣的休闲游戏。这个游戏通常包含一个弹球和多个障碍物,玩家通过控制挡板来反射弹球,避免弹球掉落...
在这个项目中,我们将利用OpenCV来制作一个简单的超级马里奥小游戏,实现用户交互和基本的游戏逻辑。 首先,我们要理解OpenCV在游戏开发中的角色。OpenCV主要用于处理图像数据,包括读取、显示、处理和分析图像。在...
网页小游戏源码是一种基于Web技术开发的游戏代码,用户在浏览器环境下无需下载安装即可游玩。"80个网页小游戏源码 解压即可玩"这个压缩包集合了80款不同的网页小游戏,提供了完整的源代码,对于学习游戏开发或者想要...
本篇将详细解析一款基于C#编写的打飞机小游戏的源代码,帮助读者深入理解游戏开发的基本流程、核心技术和设计模式。 1. **游戏框架** 打飞机小游戏的开发通常会采用游戏框架,如Unity或MonoGame等。由于题目中未...
在本压缩包中,我们收集了一系列使用C++编程语言开发的经典小游戏,包括吃豆人、愤怒的小鸟和贪吃蛇等。这些游戏都是C++编程技术的实践应用,展现了C++在游戏开发中的强大功能和灵活性。下面我们将深入探讨这些知识...
Java语言在游戏开发领域虽然不如C++或Unity等工具常见,但它在教育场景和小型游戏制作中依然有其独特优势,尤其是在教学和学习多线程编程时。这个名为“坦克大战”的游戏项目就是基于Java实现的一个实例,适合用于...
这些安卓小游戏源码是极好的学习资源,对于想要深入了解Android游戏开发的程序员来说,它们提供了丰富的实践案例。每个源码都是一个独立的游戏项目,涵盖了不同的游戏类型和编程技术,可以帮助开发者提升技能,理解...
本项目“DrifBall”是Android游戏开发的一个实例,它揭示了如何利用Android SDK和传感器API来创建一个基于3D环境的小游戏。 1. **Android游戏开发基础**: Android游戏开发主要基于Java或Kotlin语言,利用Android ...
9. **多线程**:如果实现在线对战功能,可能需要利用多线程技术,让游戏逻辑与网络通信异步进行,保证游戏的流畅性。 10. **保存与加载游戏**:为了方便玩家继续未完成的游戏,我们需要提供保存和加载游戏进度的...
总的来说,基于 ARM 开发板的飞机大战小游戏是一个综合性的学习项目,涵盖了嵌入式系统开发的多个方面,包括硬件理解、软件设计、多线程编程、团队协作和性能优化。这样的实践经历对于提升学生的工程能力和未来职业...
【VB 炸飞机小游戏】是一款基于Visual Basic(VB)编程语言开发的简易版局域网内多人对战游戏,旨在重温我们儿时的经典乐趣。这款游戏虽然在功能上可能不够完备,但作为学习和交流的平台,它为编程爱好者提供了一个...
总的来说,“菜园捉虫小游戏”是一个综合展示了Java J2SE开发能力的项目,涵盖了GUI编程、事件处理、多线程、音频处理、动画制作和文件操作等多个方面。通过这款游戏,我们可以学习到如何用Java开发一款完整的桌面...
【标题】:“java制作斗地主小游戏斗地主.zip”是一个使用Java编程语言开发的斗地主小游戏项目,它基于Eclipse IDE构建。这个项目旨在教授如何利用JavaSE(Java Standard Edition)的基础知识来实现一个桌面版的游戏...
【Java小游戏之数字彩虹雨】是一款基于Java编程语言开发的小型互动程序,灵感来源于电影《黑客帝国》中的经典视觉效果——“数字雨”。这个小游戏旨在为初学者提供一个实践Java编程、图形用户界面(GUI)设计以及动画...
首先,Android小游戏的开发基于Java或Kotlin语言,利用Android SDK中的Android Studio集成开发环境进行编写。Android Studio提供了丰富的工具和库,使得游戏开发变得更加便捷。例如,它可以使用Gradle构建系统来管理...
【自制贪吃蛇小游戏(Java线程GUI实现)】是一个基于Java编程语言开发的简易版经典游戏项目。在这个项目中,开发者使用了Java的图形用户界面(GUI)库Swing或JavaFX来创建游戏界面,并通过线程技术来实现游戏的实时...