文章目录
- 飞机大战
-
- 建立游戏窗口和坐标,颜色控制
- 图像文件的加载
- 线程内部实现动画
- 双缓冲解决屏幕闪烁问题
- 游戏物体根类的实现
飞机大战
建立游戏窗口和坐标,颜色控制
package feiji;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.lang.*;
import java.awt.event.*;
public class MyGanme extends Frame {
@Override
public void paint(Graphics g) {
g.setColor(new Color(255,0,255));
g.drawLine(100, 100, 400, 200);
g.drawRect(100, 200, 300, 2);
g.drawOval(100, 100, 300, 200);
g.drawString("wwwwwww",300,200);
}
public void launchFrame() {
this.setTitle("飞机大战");
setVisible(true);
setSize(500,500);
setLocation(100,100);
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
MyGanme game=new MyGanme();
game.launchFrame();
}
}
图像文件的加载
package feiji;
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
public class MyGame extends Frame {
Image plane=Gameu.getImage("images/feiji.png");
Image bg=Gameu.getImage("images/bj.png");
@Override
public void paint(Graphics g) {
g.drawImage(bg,0,0,500,500,null);
g.drawImage(plane,100,100,50,50,null);
}
public void launchFrame() {
this.setTitle("飞机大战");
setVisible(true);
setSize(500,500);
setLocation(100,100);
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
MyGame game=new MyGame();
game.launchFrame();
}
}
实现效果图:
线程内部实现动画
package feiji;
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
public class MyGame extends Frame {
Image plane=Gameu.getImage("images/feiji.png");
Image bg=Gameu.getImage("images/bj.png");
static int count=0;
int planeX=100;
@Override
public void paint(Graphics g) {
System.out.println("绘制窗口次数:"+count);
count++;
g.drawImage(bg,0,0,500,500,null);
g.drawImage(plane,planeX,100,50,50,null);
planeX+=1;
}
public void launchFrame() {
this.setTitle("飞机大战");
setVisible(true);
setSize(500,500);
setLocation(100,100);
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
new PaintThread().start();
}
class PaintThread extends Thread{
@Override
public void run(){
while (true){
repaint();
try{
Thread.sleep(50);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
MyGame game=new MyGame();
game.launchFrame();
}
}
双缓冲解决屏幕闪烁问题
package feiji;
public class Constant {
public static final int GAME_WIDTH=500;
public static final int GAME_HEIGH=500;
}
package feiji;
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
public class MyGame extends Frame {
Image plane=Gameu.getImage("images/feiji.png");
Image bg=Gameu.getImage("images/bj.png");
static int count=0;
int planeX=100;
@Override
public void paint(Graphics g) {
System.out.println("绘制窗口次数:"+count);
count++;
g.drawImage(bg,0,0,500,500,null);
g.drawImage(plane,planeX,100,50,50,null);
planeX+=1;
}
public void launchFrame() {
this.setTitle("飞机大战");
setVisible(true);
setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGH);
setLocation(100,100);
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
new PaintThread().start();
}
class PaintThread extends Thread{
@Override
public void run(){
while (true){
repaint();
try{
Thread.sleep(50);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
MyGame game=new MyGame();
game.launchFrame();
}
private Image offScreanImage=null;
public void update(Graphics g){
if(offScreanImage==null)
offScreanImage=this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGH);
Graphics goff=offScreanImage.getGraphics();
paint(goff);
g.drawImage(offScreanImage,0,0,null);
}
}
游戏物体根类的实现
package feiji;
import java.awt.*;
public class GameObject {
Image img;
double x,y;
int speed;
int width,height;
public GameObject(Image img,double x,double y,int speed,int width,int height) {
this.img = img;
this.x=x;
this.y=y;
this.speed=speed;
this.width=width;
this.height=height;
}
public void drawMyself(Graphics g){
g.drawImage(img,(int)x,(int)y,width,height,null);
}
public Rectangle getRec(){
return new Rectangle((int)x,(int)y,width,height);
}
}
package feiji;
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
public class MyGame extends Frame {
Image planeImg=Gameu.getImage("images/feiji.png");
Image bg=Gameu.getImage("images/bj.png");
static int count=0;
GameObject plane2=new GameObject(planeImg,100,100,3,50,50);
GameObject plane3=new GameObject(planeImg,200,100,3,50,50);
@Override
public void paint(Graphics g) {
System.out.println("绘制窗口次数:"+count);
count++;
g.drawImage(bg,0,0,500,500,null);
plane2.drawMyself(g);
plane3.drawMyself(g);
}
public void launchFrame() {
this.setTitle("飞机大战");
setVisible(true);
setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGH);
setLocation(100,100);
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
new PaintThread().start();
}
class PaintThread extends Thread{
@Override
public void run(){
while (true){
repaint();
try{
Thread.sleep(50);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
MyGame game=new MyGame();
game.launchFrame();
}
private Image offScreanImage=null;
public void update(Graphics g){
if(offScreanImage==null)
offScreanImage=this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGH);
Graphics goff=offScreanImage.getGraphics();
paint(goff);
g.drawImage(offScreanImage,0,0,null);
}
}