建设企业门户网站,用wordpress做微站,中企动力如何,网站建设属于什么工作在学习了java入门的课程之后#xff0c;自己动手跟着老师写的一个小游戏#xff0c;用的是Frame。总共有七个类。1.飞机游戏的主窗口(MyGameFrame)继承Frame。package com.bjsxt.plane;import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.awt.Gr…在学习了java入门的课程之后自己动手跟着老师写的一个小游戏用的是Frame。总共有七个类。1.飞机游戏的主窗口(MyGameFrame)继承Frame。package com.bjsxt.plane;import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.Writer;import java.util.Date;import javax.swing.JFrame;/*** 飞机游戏的主窗口* author 机械师**/public class MyGameFrame extends Frame{//导入图片Image planeImageGameUtil.getImage(images/plane.png);Image bgGameUtil.getImage(images/bg.jpg);Plane planenew Plane(planeImage,250,250);Shell[] shellsnew Shell[50];Explode bao;Date startTimenew Date();Date endTime;int period;//帮助绘制窗口Overridepublic void paint(Graphics g) {//自动调用g.drawImage(bg, 0, 0, null);plane.drawSelf(g);//画飞机//画出所有的炮弹for(int i0;ishells[i].draw(g);boolean pengshells[i].getRect().intersects(plane.getRect());if (peng) {plane.livefalse;if (baonull) {baonew Explode(plane.x, plane.y);endTimenew Date();period(int)((endTime.getTime()-startTime.getTime())/1000);}}if (!plane.live) {Color cg.getColor();Font fnew Font(楷体, Font.BOLD, 25);g.setFont(f);g.setColor(Color.red);g.drawString(游戏结束!! 您已存活period秒, 110, 250);bao.draw(g);g.setColor(c);}}}class PaintThread extends Thread{//帮助我们反复的重画窗口Overridepublic void run() {while (true) {repaint();try {Thread.sleep(40);//一秒画25次窗口} catch (InterruptedException e) {e.printStackTrace();}}}}//定义键盘监听class KeyMonitor extends KeyAdapter{Overridepublic void keyPressed(KeyEvent e) {plane.addDirection(e);}Overridepublic void keyReleased(KeyEvent e) {plane.minusDirection(e);}}/*** 初始化窗口*/public void launchFrame(){setTitle(bjsxt_yxf--飞机躲避子弹小游戏游戏);setVisible(true);//true表示窗口可见setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);setLocation(300,300);//增加监听事件关闭动作点击窗口的关闭按钮程序便已经结束。this.addWindowListener(new WindowAdapter() {Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});new PaintThread().start();//启动重画窗口的线程addKeyListener(new KeyMonitor());//增加键盘的监听//初始化50个炮弹for (int i 0; i shells.length; i) {shells[i]new Shell();}}public static void main(String[] args) {MyGameFrame fnew MyGameFrame();f.launchFrame();}//解决闪烁问题(双缓冲)private Image offScreenImage null;public void update(Graphics g) {if(offScreenImage null)offScreenImage this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//这是游戏窗口的宽度和高度Graphics gOff offScreenImage.getGraphics();paint(gOff);g.drawImage(offScreenImage, 0, 0, null);}}2.游戏的图片导入工具类(GameUtil)package com.bjsxt.plane;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.IOException;import java.net.URL;import javax.imageio.ImageIO;public class GameUtil {//将工具类私有化private GameUtil(){}/*** 返回指定文件的路径对象* param path* return*/public static Image getImage(String path){BufferedImage binull;try {URL u GameUtil.class.getClassLoader().getResource(path);biImageIO.read(u);} catch (IOException e) {e.printStackTrace();}return bi;}}3.游戏物体的父类游戏里的炮弹飞机的属性都是继承这个类(GameObject)package com.bjsxt.plane;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;/*** 游戏物体的父类* author 机械师**/public class GameObject {Image image;double x,y;int speed;int width,height;public void drawSelf(Graphics g){g.drawImage(image, (int)x, (int)y, null);}public GameObject(Image image, double x, double y, int speed, int width,int height) {super();this.image image;this.x x;this.y y;this.speed speed;this.width width;this.height height;}public GameObject(Image image, double x, double y) {super();this.image image;this.x x;this.y y;}public GameObject() {}/*** 返回物体所在的矩形* return*/public Rectangle getRect(){return new Rectangle((int)x, (int)y, width, height);}}4.爆炸类飞机死亡的一系列动画操作(Explode)package com.bjsxt.plane;import java.awt.Graphics;import java.awt.Image;/*** 爆炸类* author 机械师**/public class Explode {double x,y;static Image[] imgsnew Image[16];static{for (int i 0; i imgs.length; i) {imgs[i]GameUtil.getImage(explode/e(i1).gif);imgs[i].getWidth(null);}}int count;public void draw(Graphics g){if (count15) {g.drawImage(imgs[count], (int)x, (int)y, null);count;}}public Explode(double x,double y){this.xx;this.yy;}}5.飞机类里面有飞机的速度键盘按键设置等属性(Plane)package com.bjsxt.plane;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyEvent;/*** 飞机类* author 机械师**/public class Plane extends GameObject {boolean left,right,down,up;int speed4;boolean livetrue;public void drawSelf(Graphics g){if (live) {g.drawImage(image, (int)x, (int)y, null);if (left) {x-speed;}if (right) {xspeed;}if (up) {y-speed;}if (down) {yspeed;}}}public Plane(Image image,double x,double y){this.imageimage;this.xx;this.yy;this.speedspeed;this.widthimage.getWidth(null);this.heightimage.getHeight(null);}public void addDirection(KeyEvent e){switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:lefttrue;speed;break;case KeyEvent.VK_UP:uptrue;speed;break;case KeyEvent.VK_RIGHT:righttrue;speed;break;case KeyEvent.VK_DOWN:downtrue;speed;break;}}public void minusDirection(KeyEvent e){switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:leftfalse;break;case KeyEvent.VK_UP:upfalse;break;case KeyEvent.VK_RIGHT:rightfalse;break;case KeyEvent.VK_DOWN:downfalse;break;}}}6.炮弹类里面包含了炮弹在固定位向任意方向发出数个炮弹以及碰撞边界弹回。(Shell)package com.bjsxt.plane;import java.awt.Color;import java.awt.Graphics;/*** 炮弹类* author 机械师**/public class Shell extends GameObject{double degree;public Shell(){x200;y200;speed3;width10;height10;degreeMath.random()*Math.PI*2;//o-2π之间的随机数}public void draw(Graphics g){Color cg.getColor();g.setColor(Color.yellow);g.fillOval((int)x, (int)y, width, height);xspeed*Math.cos(degree);yspeed*Math.sin(degree);if (x0||xConstant.GAME_WIDTH-width) {degreeMath.PI-degree;speed;} else if(y30||yConstant.GAME_HEIGHT-height){degree-degree;speed;}g.setColor(c);}}7.常数类。存储游戏边界的大小(Constant)package com.bjsxt.plane;public class Constant {public static final int GAME_WIDTH500;public static final int GAME_HEIGHT500;}此小游戏在一开始我们是继承Jframe的但是由于在写到后面看运行画面的时候还是有很多点闪烁因此我们就改回到Frame并且在主窗口类中使用了双缓冲。private Image offScreenImage null;public void update(Graphics g) {if(offScreenImage null)offScreenImage this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//这是游戏窗口的宽度和高度Graphics gOff offScreenImage.getGraphics();paint(gOff);g.drawImage(offScreenImage, 0, 0, null);}改完之后画面有很大的改善看着非常的舒服。