`
Tristan_S
  • 浏览: 366706 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

雷电 射击游戏

阅读更多
重点
1, 处理发射的子弹
当按下空格键时,将激光弹同时加到容器和数组列表中。 创建线程和永久循环后, 通过for循环语句和setBounds方法让太空飞船向上射击激光弹。

代码还不能运行, 仅供参考
package chapter4;

import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.*;

public class SpaceDestroyers extends JFrame implements

MouseMotionListener, KeyListener {
	Container cont;
	// 游戏等级
	int currentLevel = 1;
	// 外星人数量
	int numOfEnemies = 1;
	// 背景图片background
	JLabel backgrounD = new JLabel(new ImageIcon

	("background.PNG"));
	// 封面图片
	JLabel front = new JLabel(new ImageIcon("front.png"));
	// 飞机发射图片
	ImageIcon shipBullet = new ImageIcon("shipBullets.PNG");
	ImageIcon enemyBullet = new ImageIcon("enemyBullets.PNG");
	// 能量包
	JLabel powerup = new JLabel(new ImageIcon("powerup.PNG"));
	// 飞机
	ImageIcon shipImg = new ImageIcon("ship.PNG");
	ImageIcon shipHit = new ImageIcon("shipHit.PNG");
	// 敌人
	ImageIcon enemyImg = new ImageIcon("enemy.PNG");
	ImageIcon enemyImg1 = new ImageIcon("ufoImg.png");
	ImageIcon enemyImg2 = new ImageIcon("bigenemy1.png");
	ImageIcon enemyImg3 = new ImageIcon("bigenemy.png");
	ImageIcon enemyHit = new ImageIcon("enemyHit.PNG");
	// 能量加强包能量释放
	JLabel powerAttack = new JLabel(new ImageIcon

	("powerAttack.PNG"));
	// 医疗包
	JLabel healthPack = new JLabel(new ImageIcon("health.PNG"));
	// 游戏得分
	int score = 0;
	// 显示分数标签
	JLabel scoreDisplay = new JLabel();
	// 健康指数
	int health = 200;
	// 最后得分
	int finalScore = 0;
	// 能量加强包是否释放能量
	boolean useAttack = false;
	JLabel ship = new JLabel(shipImg);
	// 飞机发射的子弹数组
	ArrayList playerBullets = new ArrayList();
	// 敌人发射弹的数组
	ArrayList enemyBullets = new ArrayList();
	// 敌人的数组
	ArrayList enemies = new ArrayList();

	// 背景音乐
	// AudioClip sound = loadSound("beijing.mp3");

	public SpaceDestroyers() {
		super("太空保卫战");
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500, 610);
		cont = getContentPane();
		cont.setLayout(null);
		front.setBounds(-10, -20, 500, 610);
		backgrounD.setBounds(0, 0, 600, 600);
		ship.setBounds(225, 500, 50, 50);
		cont.add(front);
		title();
		cont.remove(front);
		// cont.setBackground(Color.BLACK);
		cont.add(ship);
		scoreDisplay.setBounds(10, 10, 400, 30);
		scoreDisplay.setFont(new Font("Time New Roman",

		Font.BOLD, 15));
		scoreDisplay.setForeground(Color.WHITE);
		cont.add(scoreDisplay);
		cont.add(backgrounD);
		addMouseMotionListener(this);
		addKeyListener(this);
		populateEnemies();
		Play play = new Play();
		play.start();
		// backgrounD.setBounds(0, 0, 600, 600);
		// cont.add(backgrounD);
		setContentPane(cont);

	}

	// public void paint(Graphics g)
	// {
	// try
	// {
	// g.setColor(Color.WHITE);
	// String name = "--太空保卫战背景--";
	// Font f = new Font(name, Font.BOLD, 20);
	// String xinxi=g.setFont(f);
	// JLabel information = new JLabel(xinxi);
	// cont.add(information);
	// information.setBounds(-60, -300, 600, 200);
	// do
	// {
	// information.setBounds(information.getX(),information.getY() + 1, 600,
	// 200);
	// Thread.sleep(5);
	// } while (information.getY() < 700);
	// }
	// catch (Exception e) { }
	// }
	public void title() {
		try {
			JLabel title = new JLabel(new ImageIcon

			("title.PNG"));
			cont.add(title);
			title.setBounds(-60, -300, 600, 200);
			do {
				title.setBounds(title.getX(),

				title.getY() + 1, 600, 200);
				Thread.sleep(10);
			} while (title.getY() < 560);
			// repaint();
		} catch (Exception e) {
		}
	}

	// 程序自动生成敌人
	public void populateEnemies() {
		for (int i = 0; i <= numOfEnemies; i++) {
			if (i % 2 == 0) {
				JLabel tempEnemy = new JLabel

				(enemyImg);
				int randLocation = (int) (Math.random()

				* 500);
				enemies.add(tempEnemy);
				cont.add((JLabel) (enemies.get(i)));
				tempEnemy.setBounds(randLocation, 10,

				30, 30);
				cont.setComponentZOrder(((JLabel)

				(enemies.get(i))), 0);
			} else if (i % 4 == 0) {
				JLabel tempEnemy2 = new JLabel

				(enemyImg2);
				int randLocation2 = (int) (Math.random

				() * 500);
				enemies.add(tempEnemy2);
				cont.add((JLabel) (enemies.get(i)));
				tempEnemy2.setBounds(randLocation2,

				10, 30, 30);
				cont.setComponentZOrder(((JLabel)

				(enemies.get(i))), 0);
			} else if (i % 3 == 0) {
				JLabel tempEnemy3 = new JLabel

				(enemyImg3);
				int randLocation3 = (int) (Math.random

				() * 500);
				enemies.add(tempEnemy3);
				cont.add((JLabel) (enemies.get(i)));
				tempEnemy3.setBounds(randLocation3,

				10, 30, 30);
				cont.setComponentZOrder(((JLabel)

				(enemies.get(i))), 0);
			} else {
				JLabel tempEnemy1 = new JLabel

				(enemyImg1);
				int randLocation1 = (int) (Math.random

				() * 500);
				enemies.add(tempEnemy1);
				cont.add((JLabel) (enemies.get(i)));
				tempEnemy1.setBounds(randLocation1,

				10, 30, 30);
				cont.setComponentZOrder(((JLabel)

				(enemies.get(i))), 0);
			}
		}
	}

	public class Play extends Thread {
		// 游戏结束
		public void stopp() {

		}

		public void run() {
			while (true) {
				try {
					for (int i = 0; i <

					enemies.size(); i++) {
						JLabel tempEnemy =

						(JLabel) (enemies.get(i));
						int distance = (int)

						(Math.random() * 2);
						tempEnemy.setBounds

						(tempEnemy.getX(), tempEnemy.getY() + distance, 30, 30);
						// 能量包是否释放能量
						if (useAttack) {
							// 释放的能量是否击中敌机
							if

							(powerAttack.getBounds().intersects(
									tempEnemy.getBounds())) {

								cont.remove(tempEnemy);
								i--;

								numOfEnemies--;
								score

								+= 15;
							}
						}
						if

						(tempEnemy.getBounds().intersects(ship.getBounds())) {
							health--;
							cont.remove

							(tempEnemy);
						}
						if (tempEnemy.getY() >

						550) {

							tempEnemy.setBounds(tempEnemy.getX(), 10, 30, 30);
						}
						int fire = (int)

						(Math.random() * 2500);
						if (fire <= 1) {
							JLabel

							tempBullet = new JLabel(enemyBullet);

							// tempBullet.setBounds(ship.getX() + 5,
							// ship.getY()+30, 10, 20);

							tempBullet.setBounds(tempEnemy.getX() + 5,
									tempEnemy.getY() + 30, 10,

									20);

							enemyBullets.add(tempBullet);
							cont.add

							((JLabel) (enemyBullets.get(enemyBullets.size() - 1)));

							cont.setComponentZOrder((JLabel) (enemyBullets
									.get(enemyBullets.size()

									- 1)), 0);
						}
					}
					// 是否歼灭了敌人
					boolean breakAll = false;
					for (int

					i = 0; i < playerBullets.size(); i++) {
						JLabel temp =

						((JLabel) (playerBullets.get(i)));
						temp.setBounds

						(temp.getX(), temp.getY() - 8, 10, 20);
						if (temp.getY() < 0) {
							cont.remove

							(temp);

							playerBullets.remove(i);// shipBullet
							i--;
						}
						for (int j = 0; j <

						enemies.size(); j++) {
							JLabel

							tempEnemy = (JLabel) (enemies.get(j));
							if

							(temp.getBounds().intersects(tempEnemy.getBounds())) {
								score

								+= 1000;

								tempEnemy.setIcon(enemyHit);

								Thread.sleep(100);

								enemies.remove(j);

								cont.remove(tempEnemy);

								numOfEnemies--;
								if

								(numOfEnemies <= 0) {

									currentLevel++;// 升级

									if (currentLevel % 3 == 0)

									{

										cont.add(powerup);

										int randLoc = (int) (Math.random() * 450);

										powerup.setBounds(randLoc, 0, 30, 30);

									}

									if (currentLevel % 5 == 0)

									{

										cont.add(healthPack);

										int randLoc = (int) (Math.random() * 450);

										healthPack
												.setBounds(randLoc, 0, 30, 30);

									}

									// numOfEnemies = currentLevel *
									// currentLevel;//敌机数量翻倍

									numOfEnemies = (int) (Math.random() * 5) + 1;// 随机产生敌机数量

									populateEnemies();

									breakAll = true;

									break;
								}
							}
						}
						if (breakAll) {
							break;
						}
					}
					if (useAttack) {
						powerAttack.setBounds

						(0, powerAttack.getY() - 1, 500, 10);
						if (powerAttack.getY()

						< 0) {
							cont.remove(powerAttack);
							useAttack = false;
							currentLevel++;
							// numOfEnemies= currentLevel *
							// currentLevel;//敌机数量翻倍
							numOfEnemies = (int) (Math.random() * 5) + 1;// 随机产生敌机数量

							populateEnemies();
						}
					}
					// 如果游戏级数为3的倍数,就显示能量包为
					if (currentLevel % 3 == 0) {
						powerup.setBounds

						(powerup.getX(), powerup.getY() + 1, 30, 30);
						if (powerup.getBounds

						().intersects(ship.getBounds())) {
							useAttack =

							true;
							cont.add

							(powerAttack);

							powerAttack.setBounds(0, ship.getY(), 500, 10);
							cont.remove

							(powerup);

							powerup.setBounds(-200, -200, 30, 30);
						}
					}
					if (currentLevel % 5 == 0) {
						healthPack.setBounds

						(healthPack.getX(), healthPack.getX() + 1, 30, 30);
						if

						(healthPack.getBounds().intersects(ship.getBounds())) {
							health += 50;
							score += 100;
							cont.remove

							(healthPack);

							healthPack.setBounds(-100, -100, 30, 30);
						}
					}
					// 敌人是否击中飞机
					breakAll = false;
					for (int i = 0; i <

					enemyBullets.size(); i++) {
						JLabel temp =

						((JLabel) (enemyBullets.get(i)));
						temp.setBounds

						(temp.getX(), temp.getY() + 2, 10, 20);
						if (temp.getY() > 550) {
							cont.remove

							(temp);

							enemyBullets.remove(i);
							i--;
						}
						if (ship.getBounds

						().intersects(temp.getBounds())) {
							ship.setIcon

							(shipHit);
							Thread.sleep

							(100);
							ship.setIcon

							(shipImg);
							score -= 100;
							health -= 50;
							cont.remove

							(temp);

							enemyBullets.remove(i);

							numOfEnemies--;

							if (health <=

							0) {
								// 游戏结束了

								// stopp();

								// break;
							}

							if

							(numOfEnemies <= 0) {

								currentLevel++;

								// numOfEnemies = currentLevel * currentLevel;

								numOfEnemies = (int) (Math.random() * 5) + 1;// 随机产生敌机数量

								populateEnemies();

								breakAll = true;
								break;
							}
						}
						if (breakAll) {
							break;
						}
					}
					scoreDisplay.setText("等级: "

					+ currentLevel + "                得分: " + score);
					cont.repaint();
					Thread.sleep(10);
				} catch (Exception e) {
					System.out.println

					(e.getMessage());
				}
			}
		}
	}

	public void mouseMoved(MouseEvent event) {
		// ship.setBounds(event.getX() - 25, event.getY() - 40, 50, 50);
	}

	public void mouseDragged(MouseEvent event) {
		// new SpaceDestroyers();
	}

	// 使用空格键发射弹

	public void keyPressed(KeyEvent event) {
		if (event.getKeyChar() == ' ') {
			JLabel tempBullet = new JLabel(shipBullet);
			tempBullet.setBounds(ship.getX() + 20,

			ship.getY() - 20, 10, 20);
			playerBullets.add(tempBullet);
			cont.add((JLabel) (playerBullets.get

			(playerBullets.size() - 1)), 0);
			score -= 2;
		}
		if (event.getKeyCode() == KeyEvent.VK_UP)// 上
		{
			if (ship.getY() <= 0) {
				ship.setBounds(ship.getX(), 0, 50,

				50);
			} else {
				ship.setBounds(ship.getX(), ship.getY

				() - 20, 50, 50);
			}

		}
		if (event.getKeyCode() == KeyEvent.VK_DOWN)// 下
		{
			if (ship.getY() >= 520) {
				ship.setBounds(ship.getX(), 520, 50,

				50);
			} else {
				ship.setBounds(ship.getX(), ship.getY

				() + 20, 50, 50);
			}

		}
		if (event.getKeyCode() == KeyEvent.VK_LEFT)// 左
		{
			if (ship.getX() <= -5) {
				ship.setBounds(-5, ship.getY(), 50,

				50);
			} else {
				ship.setBounds(ship.getX() - 20,

				ship.getY(), 50, 50);
			}

		}
		if (event.getKeyCode() == KeyEvent.VK_RIGHT)// 右
		{
			if (ship.getX() >= 450)
				ship.setBounds(450, ship.getY(), 50,

				50);
			else
				ship.setBounds(ship.getX() + 20,

				ship.getY(), 50, 50);
		}
	}

	public void keyReleased(KeyEvent event) {
	}

	public void keyTyped(KeyEvent event) {
	}

	public static void main(String[] args) {

		try {
			URL cb;
			File f = new File("D:\\软件\\Java\\eclipse 安装\\phone\\beijing.wav");
			cb = f.toURL();
			AudioClip aau;
			aau = Applet.newAudioClip(cb);
			// aau.play();
			aau.loop();
			new SpaceDestroyers();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}

	}
}




分享到:
评论

相关推荐

    android雷电射击游戏.rar

    android雷电射击游戏源码

    基于java的仿雷电射击游戏

    这是一款基于java语言的小游戏,模仿了雷电游戏,玩家可以通过鼠标移动操控飞机的位置,点击鼠标左键进行射击,击落敌机并取得最后胜利,本游戏设置了几个简单的关卡,难度越大,敌机移动速度越快,数量也有一定的...

    Android雷电射击游戏源代码

    在本资源中,我们主要探讨的是一个基于Android平台的雷电射击游戏的源代码。"Android雷电射击游戏源代码" 提供了开发此类游戏的完整框架,这为开发者提供了深入学习Android游戏开发的机会,同时也方便了那些希望...

    android雷电射击游戏源码

    【Android雷电射击游戏源码】是一套专为学习Android游戏开发设计的教程资源,它包含了一款典型的飞行射击游戏的完整源代码。通过深入学习和理解这套源码,开发者可以掌握基本的游戏逻辑构建、图形渲染、用户交互以及...

    仿雷电射击游戏(基于VC++MFC)

    飞行射击游戏,C++编写,使用VC++ 6.0或者相关编译软件即可运行。相关的说明文档在内部有,每个类的用法以及功能描述都在里面,更多内容见文档。欢迎下载。

    基于Java的飞机雷电射击游戏的设计实现(Eclipse开发).zip

    资源包含文件:lunwen+任务书+答辩PPT+翻译及原文+源码+辅导视频 https://blog.csdn.net/newlw/article/details/127744665

    java程序设计大作业-雷电飞机射击游戏(Java)

    java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大...

    javaPC射击游戏宇宙大战(访雷电)

    自己做的游戏,当作练习SE了,小弟新号,所以给两个积分给我吧

    Java编写的雷电纵轴射击游戏

    《Java编写的雷电纵轴射击游戏》是一款利用Java编程语言开发的横版飞行射击游戏,深受编程爱好者和游戏玩家的喜爱。该游戏以其华丽的特效、刺激的战斗体验以及丰富的功能吸引了众多用户。接下来,我们将深入探讨游戏...

    Java面向对象程序设计之雷电飞机射击游戏

    使用java面向对象方法做的雷电飞机射击游戏。这是我之前在网上找的,把之前的界面动画效果等很多地方进行了优化。

    MFC雷电设计游戏源码

    基于MFC的雷电射击游戏,代码框架已经实现,具体细节内容则没有详细撰写。

    雷电飞机射击游戏.rar_flash_flash 游戏_flash游戏_射击_飞机射击游戏

    FLASH平台雷电飞机射击游戏;flash平台雷电飞机射击游戏;含游戏图片

    android雷电射击小游戏源码

    android雷电射击小游戏源码

    JAVA版射击游戏【雷电】

    【JAVA版射击游戏【雷电】】是一款基于Java编程语言开发的电子游戏,深受玩家喜爱。这款游戏借鉴了经典的街机射击游戏"雷电"的玩法,带给玩家高速、刺激的空战体验。开发者利用Java的强大功能和跨平台特性,使得游戏...

    仿雷电飞行射击游戏源代码

    【标题】"仿雷电飞行射击游戏源代码"所涉及的知识点主要集中在C++编程语言、游戏开发技术和雷电风格的飞行射击游戏设计上。首先,C++是一种强大的、通用的编程语言,以其面向对象的特性、高效性能和丰富的库支持在...

    仿雷电太空射击游戏项目需求分析文档.doc

    **仿雷电太空射击游戏项目需求分析文档** **1. 引言** 本文档旨在对仿雷电太空射击游戏项目的具体需求进行详细分析,为后续的设计、开发与测试提供明确的指导。游戏的设计灵感来源于经典的雷电系列,目标是创建一款...

    AS3实现雷电飞机射击游戏.doc

    可以用as写一个射击游戏,子弹与飞机碰撞的效果,适合新手,2-3小时完成

    仿照雷电DIRECTX纵版射击游戏

    【标题】"仿照雷电DIRECTX纵版射击游戏"所涉及的知识点主要集中在游戏开发领域,特别是使用DirectX技术实现纵版射击游戏的编程。DirectX是由微软开发的一组应用编程接口(API),用于处理多媒体任务,尤其是游戏开发...

    飞行射击游戏雷电源码

    采用java编写,运用多线程,实现飞机射击游戏,游戏一共三个关卡,每个关卡都有boss,最后一个boss有激光效果。游戏可选择难度,可选择声音开关,游戏过程中有gift,吃到后可增加子弹数目,游戏设计了三种不同的敌机...

Global site tag (gtag.js) - Google Analytics