`
hwfantasy
  • 浏览: 20909 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

基于多线程的简单小游戏的制作

阅读更多
  最近学习了多线程的相关知识,并基于多线程制作了一个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的俄罗斯方块游戏设计与实现【开题报告】.pdf

    这款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的, 它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄 罗斯方块时代。究其历史,俄罗斯方块最早还是出现在 PC 机上...

    开题报告-基于JAVA的俄罗斯方块游戏设计与实现.doc

    这款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶 不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在 PC 机上,...

    c语言小程序-雷霆战机

    C语言雷霆战机小游戏是一款基于C语言编程语言制作的简单游戏。游戏中,玩家需要控制一架飞机在屏幕上移动并躲避敌人的子弹。游戏的目标是尽可能长时间地存活下去。 游戏的主要元素包括: 玩家控制的飞机:玩家可以...

    java课程设计报告贪吃蛇游戏设计.doc

    Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高 性能、多线程和动态的语言。 正文 1.1课程设计目的 《JAVA程序设计》是计算机相关专业的...

    vc++ 应用源码包_1

    独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下...vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 VC然输入框出现气球提示 调用系统自带...

    vc++ 应用源码包_2

    独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种...vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 VC然输入框出现气球提示 调用系统...

    vc++ 应用源码包_6

    独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏...vc基于HTTP协议断点续传和多线程下载源代码 VC...

    vc++ 开发实例源码包

    实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用方法 CCAMS系统是一种用于局域网下的CS模式的软件...

    vc++ 应用源码包_5

    独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏...vc基于HTTP协议断点续传和多线程下载源代码 VC...

    vc++ 应用源码包_3

    独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏...vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 VC然输入框...

    通用网络游戏通讯平台

    BS.Play 的核心服务器部分 Comoro ,运行于*NIX 平台上,使用 C 语言开发,采用单进程静态多线程的事件 驱动模型,可以作为普通应用程序和守护进程执行。 Comoro 可以分别部署为 Coin Server、Login Server、Base ...

    java源码包---java 源码 大量 实例

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。...

    java开源包1

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包11

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包2

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包3

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包6

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

Global site tag (gtag.js) - Google Analytics