基于多线程的简单小游戏的制作
最近学习了多线程的相关知识,并基于多线程制作了一个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();}}







// 重写父类绘制窗体的方法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);}