实例介绍
【实例简介】Java小游戏的代码,图片都有啦,shoot game
【实例截图】
【核心代码】
package shoot;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
/*
*
* 游戏面板类
*/
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.sun.media.jfxmedia.AudioClip;
import com.sun.org.apache.xerces.internal.impl.xpath.XPath.Step;
import com.sun.org.apache.xml.internal.security.utils.IgnoreAllErrorHandler;
import shoot.Bee;
import shoot.FlyingObject;
import javafx.beans.binding.When;
import javazoom.jl.player.Player;
public class Gamepanel extends JPanel implements Runnable,MouseMotionListener,MouseListener{
public static final int PANEL_WIDTH=GameFrame.FRAME_WIDTH-7;
public static final int PANEL_HEIGHT=GameFrame.FRAME_HEIGHT-30;
public static final int MAX_EPLANE_NUMBER=6;
private Background background;//天空背景对象
private HeroPlane heroPlane;//英雄机对象
private ArrayList<EnemyPlane> ePlanes;//敌机对象
private ArrayList<Enemybullet>enemybullets;//敌机子弹类对象
private ArrayList<HeroBullet> heroBullets;//英雄机子弹对象
private ArrayList<Boom> booms;//爆破对象
private Bee bee;//小蜜蜂对象
private int total_score=0;//游戏总得分
//AudioClip对象提供 play loop(循环) stop
java.applet.AudioClip all_bomb,enemy_bomb,bg,hero_bomb,hero_bullet;
public Gamepanel() {
// Image img=Toolkit.getDefaultToolkit().getImage("fish08_01.png");
//初始化音乐
try {
all_bomb=Applet.newAudioClip(new File("music/all_bomb.wav").toURI().toURL());
enemy_bomb=Applet.newAudioClip(new File("music/enemy_bomb.wav").toURI().toURL());
bg=Applet.newAudioClip(new File("music/bg.wav").toURI().toURL());
hero_bomb=Applet.newAudioClip(new File("music/hero_bomb.wav").toURI().toURL());
hero_bullet=Applet.newAudioClip(new File("music/hero_bullet.wav").toURI().toURL());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//初始化背景
background=new Background();
//初始化敌机
ePlanes=new ArrayList<EnemyPlane>();
for(int i=0;i<MAX_EPLANE_NUMBER;i ) {
ePlanes.add(new EnemyPlane());
}
//初始化英雄机
heroPlane=new HeroPlane();
//初始化敌机 子弹
enemybullets=new ArrayList<Enemybullet>();
//初始化英雄机子弹
heroBullets=new ArrayList<HeroBullet>();
//初始化爆破效果
booms=new ArrayList<Boom>();
//初始化小蜜蜂
bee=new Bee();
//添加鼠标监听器
this.addMouseMotionListener(this);
this.addMouseListener(this);
}
@Override//重写有两种重写,一个是全部重写,一个是追加式的重写,就像super。
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
//画天空
background.draw(g);
//画敌机
for (int i = 0; i <ePlanes.size(); i ) {
EnemyPlane enemyPlane=ePlanes.get(i);
enemyPlane.draw(g);
}
//画英雄机
heroPlane.draw(g);
//画敌机子弹
for (int i=0;i<enemybullets.size();i ) {
Enemybullet enemybullet=enemybullets.get(i);
enemybullet.draw(g);
}
//画英雄机子弹
for (int i = 0; i < heroBullets.size(); i ) {
HeroBullet heroBullet=heroBullets.get(i);
heroBullet.draw(g);
}
//画爆破效果
for(int i=0;i<booms.size();i ) {
Boom boom=booms.get(i);
boom.draw(g);
}
//画小蜜蜂
bee.draw(g);
//画分和命
g.setColor(Color.blue);
g.setFont(new Font("微软雅黑",Font.BOLD,30));
g.drawString("命数:" heroPlane.getLife(), 10, 30);
g.drawString("得分:" total_score, 10, 80);
if (heroPlane.getLife()==0) {
g.setColor(Color.red);
g.setFont(new Font("微软雅黑",Font.BOLD,50));
g.drawString("Game over!", PANEL_WIDTH/3-40, PANEL_HEIGHT/2);
}
}
@Override
public void run() {
bg.play();
// while (true) {
//
// for(int i=1;i<=10;i ) {
// x =3;
// img=Toolkit.getDefaultToolkit().getImage("fish08_0" i ".png");
// repaint();//重画,自动调用paint
// while(x==350) {
//
// x=-100;
// y=(int)(Math.random()*250);
// }
// try {
// Thread.sleep(50);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }}
while(true) {
//1背景图移动
background.move();
//2对敌机的处理
for (int i = 0; i < ePlanes.size(); i ) {
EnemyPlane enemyPlane=ePlanes.get(i);
//2.1敌机移动
enemyPlane.move(heroPlane);
//2.2敌机发射子弹
Enemybullet enemybullet=enemyPlane.shoot();
if (enemybullet!=null) {
enemybullets.add(enemybullet);
}
}
//3对敌机子弹的处理
for (int i=0;i<enemybullets.size();i ) {
Enemybullet enemybullet=enemybullets.get(i);
//3.1移动
enemybullet.move();
//3.2是否出界
if (enemybullet.outOfBounds()) {
enemybullets.remove(i);
i--;
}
}
//对蜜蜂处理
bee.move();
if (bee.outofBounds()) {
bee.y=-4000;
Random rand = new Random();
bee.x=rand.nextInt(PANEL_WIDTH - this.WIDTH);
}
//4对英雄机子弹的处理
//4.1移动
for (int i = 0; i < heroBullets.size(); i ) {
HeroBullet heroBullet=heroBullets.get(i);
heroBullet.move();
//4.2是否越界
if (heroBullet.outOfBounds()) {
heroBullets.remove(i);
i--;
}
}
//5.碰撞检测
//5.1 检测敌机与英雄机,英雄机子弹的碰撞情况
boolean heroPlane_ishitted=false;//记录英雄机被撞
for (int i = 0; i < ePlanes.size(); i ) {
EnemyPlane enemyPlane=ePlanes.get(i);
boolean ePlane_isHitted=false;//记录敌机被撞
//5.1.1跟英雄机撞
if (enemyPlane.isHitted(heroPlane)) {
ePlane_isHitted=true;
Boom boom1=new Boom(heroPlane.x,heroPlane.y,heroPlane.width,heroPlane.height,heroPlane.xStep,heroPlane.yStep);
booms.add(boom1);
heroPlane.setLife(heroPlane.getLife()-1);//生命数-1
//加上heroplane的高,为了防止出界后的敌机与英雄机相撞
heroPlane.move(0,Gamepanel.PANEL_HEIGHT heroPlane.height);
//移除鼠标监听器,暂时无法移动
this.removeMouseListener(this);
this.removeMouseMotionListener(this);
heroPlane.setRestatrt_delay_count(40);//设置英雄机重启,需要延迟40个50ms(参见thread.sleep)
heroPlane.setCurrent_live(false);
}
//5.1.2跟英雄机子弹是否相撞
for(int j=0;j<heroBullets.size();j ) {
HeroBullet heroBullet=heroBullets.get(j);
if (enemyPlane.isHitted(heroBullet)) {
ePlane_isHitted=true;
heroBullets.remove(j);//移除英雄机子弹
j--;
}
//蜜蜂撞上了
if (bee.isHitted(heroBullet)) {
Random random=new Random();
bee.y=-2000;
bee.x=random.nextInt(PANEL_WIDTH)-80;
heroBullets.remove(j);
i--;
heroPlane.setLife(heroPlane.getLife() 1);
}
}
if (ePlane_isHitted) {//若敌机被撞
total_score =enemyPlane.getScore();
hero_bullet.play();
ePlanes.remove(i);//移除该敌机
i--;
Boom boom=new Boom(enemyPlane.x,enemyPlane.y,enemyPlane.width,enemyPlane.height,enemyPlane.xStep,enemyPlane.yStep);
booms.add(boom);
}
}
//5.2检测英雄机和敌机子弹的碰撞情况
//关于英雄机和敌机碰撞,见5.1
for( int i=0; i<enemybullets.size();i ) {
Enemybullet enemybullet=enemybullets.get(i);
if (heroPlane.isHitted(enemybullet)) {
heroPlane_ishitted=true;
enemybullets.remove(i);//移除该子弹
i--;
}
}
if (heroPlane_ishitted) {//如果英雄机被撞了
hero_bomb.play();
Boom boom=new Boom(heroPlane.x,heroPlane.y, heroPlane.width,heroPlane.height,heroPlane.xStep,heroPlane.yStep);
booms.add(boom);
heroPlane.setLife(heroPlane.getLife()-1);//生命数-1
//加上heroplane的高,为了防止出界后的敌机与英雄机相撞
heroPlane.move(0,Gamepanel.PANEL_HEIGHT heroPlane.height);
//移除鼠标监听器,暂时无法移动
this.removeMouseListener(this);
this.removeMouseMotionListener(this);
heroPlane.setRestatrt_delay_count(40);//设置英雄机重启,需要延迟40个50ms(参见thread.sleep)
heroPlane.setCurrent_live(false);
}
//6对爆破对象进行处理
for (int i = 0; i < booms.size(); i ) {
Boom boom=booms.get(i);
boom.move();
if (boom.booms_end()) {//该爆破结束
booms.remove(i);
}
}
//7对英雄机状态处理
if (heroPlane.getLife()>0) {
if (heroPlane.getRestatrt_delay_count()>0) {
heroPlane.setRestatrt_delay_count(heroPlane.getRestatrt_delay_count()-1);
}
//如果英雄机当前死亡,且重启延时已经为0
if ( heroPlane.isCurrent_live()==false && heroPlane.getRestatrt_delay_count()==0) {
heroPlane.move(Gamepanel.PANEL_WIDTH/2-35, Gamepanel.PANEL_HEIGHT-70);
heroPlane.setCurrent_live(true);
addMouseListener(this);
addMouseMotionListener(this);
//添加一个全屏爆炸
all_bomb.play();
Boom boom=new Boom(0, 0, PANEL_WIDTH, PANEL_HEIGHT, 0, 0);
booms.add(boom);
for(int i =0;i<ePlanes.size();i ) {//清除屏幕得分
EnemyPlane ePlane=ePlanes.get(i);
total_score =ePlane.getScore();
}
ePlanes.clear();//清空所有敌机
enemybullets.clear();//清空所有子弹
}
}
//逐渐补充敌机数到MAX_EPLAN_NUMBER
if (ePlanes.size()<MAX_EPLANE_NUMBER) {
ePlanes.add(new EnemyPlane());
}
if (heroPlane.getLife()==0) {
bg.stop();
}
repaint();
try {
Thread.sleep(30);//30ms
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void mouseDragged(MouseEvent e) {
heroPlane.move(e.getX(),e.getY());
}
@Override
public void mouseMoved(MouseEvent e) {
//System.out.println(e.getX() "," e.getY());
heroPlane.move(e.getX(),e.getY());
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
hero_bullet.play();
HeroBullet heroBullet=heroPlane.shoot();
heroBullets.add(heroBullet);
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论