一.实验代码
//Plane.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
//敌机
public class Plane {
public Plane(int x, int y, int r) {
super();
this.x = x;
this.y = y;
this.r = r;
int num = (int)(Math.random()*15+1);
String str = "";
if(num<10)
str ="0"+num;
else
str=""+num;
img = new ImageIcon("img/ep"+str+".png").getImage();
}
public void change(){
int num = (int)(Math.random()*15+1);
String str = "";
if(num<10)
str ="0"+num;
else
str=""+num;
img = new ImageIcon("img/ep"+str+".png").getImage();
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
private int x;
private int y;
private int r;
private int speed;
private Image img = null;
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
//自定义的paint()方法,名字随意
public void paint(Graphics g) {
// TODO Auto-generated method stub
Color c = g.getColor();
g.setColor(Color.black);//敌机黑色
//g.fillOval(x-r, y-r, r*2,r*2);
g.drawImage(img, x-r, y-r,null);
g.setColor(c);
}
}
//Bullet.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
public class Bullet {
public Bullet(int x, int y, int r) {
super();
this.x = x;
this.y = y;
this.r = r;
img = new ImageIcon("img/fire.png").getImage();
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
private int x;
private int y;
private int r;
private Image img;
//自定义的paint()方法,名字随意
public void paint(Graphics g) {
// TODO Auto-generated method stub
Color c = g.getColor();
g.setColor(Color.white);//子弹白色
//g.fillOval(x-20, y-r, r*2,r*2);
g.drawImage(img, x-r, y-r, null);
g.setColor(c);
}
}
//Plane.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
//敌机
public class Plane {
public Plane(int x, int y, int r) {
super();
this.x = x;
this.y = y;
this.r = r;
int num = (int)(Math.random()*15+1);
String str = "";
if(num<10)
str ="0"+num;
else
str=""+num;
img = new ImageIcon("img/ep"+str+".png").getImage();
}
public void change(){
int num = (int)(Math.random()*15+1);
String str = "";
if(num<10)
str ="0"+num;
else
str=""+num;
img = new ImageIcon("img/ep"+str+".png").getImage();
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
private int x;
private int y;
private int r;
private int speed;
private Image img = null;
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
//自定义的paint()方法,名字随意
public void paint(Graphics g) {
// TODO Auto-generated method stub
Color c = g.getColor();
g.setColor(Color.black);//敌机黑色
//g.fillOval(x-r, y-r, r*2,r*2);
g.drawImage(img, x-r, y-r,null);
g.setColor(c);
}
}
//Bullet.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
public class Bullet {
public Bullet(int x, int y, int r) {
super();
this.x = x;
this.y = y;
this.r = r;
img = new ImageIcon("img/fire.png").getImage();
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
private int x;
private int y;
private int r;
private Image img;
//自定义的paint()方法,名字随意
public void paint(Graphics g) {
// TODO Auto-generated method stub
Color c = g.getColor();
g.setColor(Color.white);//子弹白色
//g.fillOval(x-20, y-r, r*2,r*2);
g.drawImage(img, x-r, y-r, null);
g.setColor(c);
}
}
//Hero.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
//我方飞机
public class Hero {
public Hero(int x, int y, int r) {
super();
this.x = x;
this.y = y;
this.r = r;
//两个反斜杠"\\"或者一个斜杠"/"
img = new ImageIcon("img/hero.png").getImage();//定义一个ImageIcon对象,引进图片,添加图片
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
private int x;
private int y;
private int r;
private int score;
private int blood=100;
private int allBlood=100;
private Image img = null;
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
//自定义的paint()方法,名字随意
public void paint(Graphics g) {
// TODO Auto-generated method stub
Color c = g.getColor();//画笔有一个自带的颜色,我们通过这句话可以保存原始,在做完自己的操作后可以设回初始.
g.setColor(Color.blue);//我机蓝色
//g.fillOval(x-r, y-r, r*2,r*2);
g.drawImage(img, x-r, y-r,null);
//g.drawRect(50, 50,480, 60);//空心的
g.setColor(Color.orange);//满血时
g.fillRect(50, 50, allBlood, 60);
g.setColor(Color.red);//当前血量
g.fillRect(50, 50, blood, 60);
g.setColor(Color.BLUE);//如何分清的颜色?
g.setFont(new Font("楷体", Font.BOLD, 60));//设置了分数的相关信息
g.drawString("分数:"+ this.score,50,50);//分数的位置
g.setColor(c);
}
}
//Hero.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
//我方飞机
public class Hero {
public Hero(int x, int y, int r) {
super();
this.x = x;
this.y = y;
this.r = r;
//两个反斜杠"\\"或者一个斜杠"/"
img = new ImageIcon("img/hero.png").getImage();//定义一个ImageIcon对象,引进图片,添加图片
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
private int x;
private int y;
private int r;
private int score;
private int blood=100;
private int allBlood=100;
private Image img = null;
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
//自定义的paint()方法,名字随意
public void paint(Graphics g) {
// TODO Auto-generated method stub
Color c = g.getColor();//画笔有一个自带的颜色,我们通过这句话可以保存原始,在做完自己的操作后可以设回初始.
g.setColor(Color.blue);//我机蓝色
//g.fillOval(x-r, y-r, r*2,r*2);
g.drawImage(img, x-r, y-r,null);
//g.drawRect(50, 50,480, 60);//空心的
g.setColor(Color.orange);//满血时
g.fillRect(50, 50, allBlood, 60);
g.setColor(Color.red);//当前血量
g.fillRect(50, 50, blood, 60);
g.setColor(Color.BLUE);//如何分清的颜色?
g.setFont(new Font("楷体", Font.BOLD, 60));//设置了分数的相关信息
g.drawString("分数:"+ this.score,50,50);//分数的位置
g.setColor(c);
}
}
//Start.java
package sxau_rjxy;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Start {
public static void main(String[]args){
new Start().launch();
}
public void launch(){
JFrame jf = new JFrame("Welcome you to play game!");
JPanel jp = new JPanel();
jf.setBounds(400, 200,100,100);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Button b1= new Button("开始游戏");
Button b2= new Button("结束游戏");
MyMonitor mm= new MyMonitor();
b1.addActionListener(mm);
jp.add(b1);
jp.add(b2);
jf.add(jp);
jf.setResizable(false);
jf.setVisible(true);
}
class MyMonitor implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Button b= (Button)e.getSource();
if("开始游戏".equals(b.getLabel())){
//刚才由于我的launchGame传进了参数,所以在设置时需要传进null.
new Mygame().launchGame(); }
b.getLabel();
}
}
}
//Mygame.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Mygame {
public void launchGame() {
// TODO Auto-generated method stub
JFrame jf = new JFrame("飞机大战");//创建窗体
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
jf.setBounds(0, 0, dim.width, dim.height);
//jf.setBackground(Color.red);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyJPanel panel= new MyJPanel(dim);//相当于管家
jf.add(panel);
/*
* Thread t = new Thread(panel);
* t.start();
*/
jf.setResizable(false);
jf.setVisible(true);
}
}
//MyJPanel.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class MyJPanel extends JPanel implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
/*while(true){
int y = p.getY();
p.setY(y++);
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
int y;
int count =0;
while(true){
if(hero.getBlood()>0){
//使子弹慢下来产生,改变被除的也可以改变间距
if(count%10==0){
Bullet bullet = new Bullet(hero.getX(),hero.getY()-hero.getR(),5);
bullets.add(bullet);
}
count++;
//让飞机动起来
for(int i= 0;i<planes.size();i++){
Plane p=planes.get(i);
//y=p.getY()+1;
y=p.getY()+p.getSpeed();//把1变成y.getSpeed()使得飞机速度真正改变
p.setY(y);
if(y>bgy){
p.setY(0);//开始循环了,但运行出来是由于横坐标没变,显示一样
p.setX((int)(Math.random()*(bgx-60)+30));//两个一起则图案显示不同,随机
}
if(isHit(p,hero)){
//不移除,改变飞机的位置即可
p.setY(0);
p.setX((int)(Math.random()*(bgx-60)+30));
hero.setBlood(hero.getBlood()-10);
}
}
//让子弹动起来
for(int i= 0;i<bullets.size();i++){
Bullet b=bullets.get(i);
y=b.getY()-10;//速度减慢,间距也可以被改变
//使子弹不越界
if(y<0){
bullets.remove(i);
}
b.setY(y);
for(int j=0;j<planes.size();j++){
Plane p= planes.get(j);
if(isHit(b,p)){
bullets.remove(j);
/*bullets.remove(int index);
* bullets.remove(Object o);
* 方法的最终结果是一样的,传进去的参数类型不同,但是内容是一样的
*/
p.setY(0);
p.setX((int)(Math.random()*(bgx-60)+30));
p.change();
hero.setScore(hero.getScore()+10);//设置分数
}
}
}
//bullet.setY(bullet.getY()-1);//让子弹动起来,即坐标变化
try {
Thread.sleep(20);//如果没sleep,那么它屏幕上没圈了,因为太快
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();//没它之前,运行出的结果是静态的,因为没有重新画它
}
}//这是一个死循环,while(true)
}
//判断飞机和hero是否相撞
private boolean isHit(Plane p, Hero hero) {
// TODO Auto-generated method stub
if((hero.getX()-p.getX())*(hero.getX()-p.getX())+(hero.getY()-p.getY())*(hero.getY()-p.getY())<=(hero.getR()+p.getR())*(hero.getR()+p.getR())){
return true;
}
return false;
}
//判断子弹是否击中飞机
private boolean isHit(Bullet b,Plane p) {
// TODO Auto-generated method stub
if((b.getX()-p.getX())*(b.getX()-p.getX())+(b.getY()-p.getY())*(b.getY()-p.getY())<=(b.getR()+p.getR())*(b.getR()+p.getR())){
return true;
}
return false;
}
//Plane p = new Plane(200,200,50);
//Plane[] planes = new Plane[10];
ArrayList<Plane> planes = new ArrayList<Plane>();//保存飞机的引用,才能画它;定义了容器
ArrayList<Bullet> bullets = new ArrayList<Bullet>();
//Plane hero= new Plane(bgx, bgy, 30);//不对,不能共用敌机的类
Hero hero;
Bullet bullet;
Image bgImg = new ImageIcon("img/bg"+(int)(Math.random()*5+1)+".jpg").getImage();
@Override
//重写的paint()方法,系统调用
public void paint(Graphics g) {
// TODO Auto-generated method stub
//super.paint(g);
//Color c = g.getColor();
//g.setColor(Color.red);
//g.fillOval(p.getX()-p.getR(), p.getY()-p.getR(), p.getR()^2,p.getR());
//g.setColor(c);
super.paint(g);
//p.paint(g);
/*画敌机
* for(int i =0;i<planes.size();i++){
Plane p= planes.get(i);
p.paint(g);
}
*/
g.drawImage(bgImg, 0, 0, bgx, bgy, null);
//画敌机
Iterator<Plane> it = planes.iterator();
while(it.hasNext()){
Plane p = it.next();
p.paint(g);
}
//画子弹
for(int i =0;i<bullets.size();i++){
Bullet b=bullets.get(i);
b.paint(g);
}
//画hero
hero.paint(g);
//bullet.paint(g);
}
private int bgx;
private int bgy;
public MyJPanel (Dimension dim){
bgx =dim.width;
bgy =dim.height;
//this.setBackground(Color.lightGray);
//创建飞机
for(int i = 0;i<=10;i++){
Plane p= new Plane((int)(Math.random()*(bgx-60)+30),(int)(Math.random()*(bgy-60)+30),30);
p.setSpeed((int)(Math.random()*5+1));//使飞机的速度不一样
planes.add(p);
}
hero= new Hero(bgx/2, bgy-60, 30);
/*
* Hero hero = new Hero(bgx/2, bgy-60, 30);
* 因为前面已经定义过Hero hero ;
* 所以运行出错,空白一片;
*/
bullet = new Bullet(hero.getX(),hero.getY()-hero.getR(),5);
this.addMouseMotionListener(new MyMonitor());
this.addKeyListener(new MyMonitor2());
this.setFocusable(true);//必须要这,监听键盘时必须加,不然没反应
new Thread(this).start();//线程启动第二种方法
}
//内部类
private class MyMonitor extends MouseMotionAdapter{
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
//super.mouseDragged(e);
if(hero.getBlood()>0){
hero.setX(e.getX());
hero.setY(e.getY());
}
}
}
private class MyMonitor2 extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
super.keyPressed(e);
//System.out.println("ss");//用来测试键盘事件是否响应了
int code = e.getKeyCode();
if(code==KeyEvent.VK_LEFT){
hero.setX(hero.getX()-10);
}
if(code==KeyEvent.VK_RIGHT){
hero.setX(hero.getX()+10);
}
if(code==KeyEvent.VK_UP){
hero.setY(hero.getY()-10);
}
if(code==KeyEvent.VK_DOWN){
hero.setY(hero.getY()+10);
}
}
}
}
二.实验截图
//Start.java
package sxau_rjxy;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Start {
public static void main(String[]args){
new Start().launch();
}
public void launch(){
JFrame jf = new JFrame("Welcome you to play game!");
JPanel jp = new JPanel();
jf.setBounds(400, 200,100,100);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Button b1= new Button("开始游戏");
Button b2= new Button("结束游戏");
MyMonitor mm= new MyMonitor();
b1.addActionListener(mm);
jp.add(b1);
jp.add(b2);
jf.add(jp);
jf.setResizable(false);
jf.setVisible(true);
}
class MyMonitor implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Button b= (Button)e.getSource();
if("开始游戏".equals(b.getLabel())){
//刚才由于我的launchGame传进了参数,所以在设置时需要传进null.
new Mygame().launchGame(); }
b.getLabel();
}
}
}
//Mygame.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Mygame {
public void launchGame() {
// TODO Auto-generated method stub
JFrame jf = new JFrame("飞机大战");//创建窗体
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
jf.setBounds(0, 0, dim.width, dim.height);
//jf.setBackground(Color.red);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyJPanel panel= new MyJPanel(dim);//相当于管家
jf.add(panel);
/*
* Thread t = new Thread(panel);
* t.start();
*/
jf.setResizable(false);
jf.setVisible(true);
}
}
//MyJPanel.java
package sxau_rjxy;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class MyJPanel extends JPanel implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
/*while(true){
int y = p.getY();
p.setY(y++);
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
int y;
int count =0;
while(true){
if(hero.getBlood()>0){
//使子弹慢下来产生,改变被除的也可以改变间距
if(count%10==0){
Bullet bullet = new Bullet(hero.getX(),hero.getY()-hero.getR(),5);
bullets.add(bullet);
}
count++;
//让飞机动起来
for(int i= 0;i<planes.size();i++){
Plane p=planes.get(i);
//y=p.getY()+1;
y=p.getY()+p.getSpeed();//把1变成y.getSpeed()使得飞机速度真正改变
p.setY(y);
if(y>bgy){
p.setY(0);//开始循环了,但运行出来是由于横坐标没变,显示一样
p.setX((int)(Math.random()*(bgx-60)+30));//两个一起则图案显示不同,随机
}
if(isHit(p,hero)){
//不移除,改变飞机的位置即可
p.setY(0);
p.setX((int)(Math.random()*(bgx-60)+30));
hero.setBlood(hero.getBlood()-10);
}
}
//让子弹动起来
for(int i= 0;i<bullets.size();i++){
Bullet b=bullets.get(i);
y=b.getY()-10;//速度减慢,间距也可以被改变
//使子弹不越界
if(y<0){
bullets.remove(i);
}
b.setY(y);
for(int j=0;j<planes.size();j++){
Plane p= planes.get(j);
if(isHit(b,p)){
bullets.remove(j);
/*bullets.remove(int index);
* bullets.remove(Object o);
* 方法的最终结果是一样的,传进去的参数类型不同,但是内容是一样的
*/
p.setY(0);
p.setX((int)(Math.random()*(bgx-60)+30));
p.change();
hero.setScore(hero.getScore()+10);//设置分数
}
}
}
//bullet.setY(bullet.getY()-1);//让子弹动起来,即坐标变化
try {
Thread.sleep(20);//如果没sleep,那么它屏幕上没圈了,因为太快
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();//没它之前,运行出的结果是静态的,因为没有重新画它
}
}//这是一个死循环,while(true)
}
//判断飞机和hero是否相撞
private boolean isHit(Plane p, Hero hero) {
// TODO Auto-generated method stub
if((hero.getX()-p.getX())*(hero.getX()-p.getX())+(hero.getY()-p.getY())*(hero.getY()-p.getY())<=(hero.getR()+p.getR())*(hero.getR()+p.getR())){
return true;
}
return false;
}
//判断子弹是否击中飞机
private boolean isHit(Bullet b,Plane p) {
// TODO Auto-generated method stub
if((b.getX()-p.getX())*(b.getX()-p.getX())+(b.getY()-p.getY())*(b.getY()-p.getY())<=(b.getR()+p.getR())*(b.getR()+p.getR())){
return true;
}
return false;
}
//Plane p = new Plane(200,200,50);
//Plane[] planes = new Plane[10];
ArrayList<Plane> planes = new ArrayList<Plane>();//保存飞机的引用,才能画它;定义了容器
ArrayList<Bullet> bullets = new ArrayList<Bullet>();
//Plane hero= new Plane(bgx, bgy, 30);//不对,不能共用敌机的类
Hero hero;
Bullet bullet;
Image bgImg = new ImageIcon("img/bg"+(int)(Math.random()*5+1)+".jpg").getImage();
@Override
//重写的paint()方法,系统调用
public void paint(Graphics g) {
// TODO Auto-generated method stub
//super.paint(g);
//Color c = g.getColor();
//g.setColor(Color.red);
//g.fillOval(p.getX()-p.getR(), p.getY()-p.getR(), p.getR()^2,p.getR());
//g.setColor(c);
super.paint(g);
//p.paint(g);
/*画敌机
* for(int i =0;i<planes.size();i++){
Plane p= planes.get(i);
p.paint(g);
}
*/
g.drawImage(bgImg, 0, 0, bgx, bgy, null);
//画敌机
Iterator<Plane> it = planes.iterator();
while(it.hasNext()){
Plane p = it.next();
p.paint(g);
}
//画子弹
for(int i =0;i<bullets.size();i++){
Bullet b=bullets.get(i);
b.paint(g);
}
//画hero
hero.paint(g);
//bullet.paint(g);
}
private int bgx;
private int bgy;
public MyJPanel (Dimension dim){
bgx =dim.width;
bgy =dim.height;
//this.setBackground(Color.lightGray);
//创建飞机
for(int i = 0;i<=10;i++){
Plane p= new Plane((int)(Math.random()*(bgx-60)+30),(int)(Math.random()*(bgy-60)+30),30);
p.setSpeed((int)(Math.random()*5+1));//使飞机的速度不一样
planes.add(p);
}
hero= new Hero(bgx/2, bgy-60, 30);
/*
* Hero hero = new Hero(bgx/2, bgy-60, 30);
* 因为前面已经定义过Hero hero ;
* 所以运行出错,空白一片;
*/
bullet = new Bullet(hero.getX(),hero.getY()-hero.getR(),5);
this.addMouseMotionListener(new MyMonitor());
this.addKeyListener(new MyMonitor2());
this.setFocusable(true);//必须要这,监听键盘时必须加,不然没反应
new Thread(this).start();//线程启动第二种方法
}
//内部类
private class MyMonitor extends MouseMotionAdapter{
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
//super.mouseDragged(e);
if(hero.getBlood()>0){
hero.setX(e.getX());
hero.setY(e.getY());
}
}
}
private class MyMonitor2 extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
super.keyPressed(e);
//System.out.println("ss");//用来测试键盘事件是否响应了
int code = e.getKeyCode();
if(code==KeyEvent.VK_LEFT){
hero.setX(hero.getX()-10);
}
if(code==KeyEvent.VK_RIGHT){
hero.setX(hero.getX()+10);
}
if(code==KeyEvent.VK_UP){
hero.setY(hero.getY()-10);
}
if(code==KeyEvent.VK_DOWN){
hero.setY(hero.getY()+10);
}
}
}
}
三.实验心得
1.设置断点,,双击数字,Debug As运行
2.插入图片的方法:private Imageimg = null;
img = new ImageIcon("img/hero.png").getImage();//定义一个ImageIcon对象,引进图片,添加图片
3.java中的路径:两个反斜杠"\\"或者一个斜杠"/"
4.刚才由于我的launchGame传进了参数,所以在设置时需要传进null.无参数则为new Mygame().launchGame();
5.在插入图片时需要注意顺序问题,不然可能会出现覆盖现象