1.功能:
键盘上下左右键控制飞机走向以躲避随机飞过来的子弹,存活时间越长得分越高
2.主要界面:
3.页面加载框架类:
package myPackage;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
/**
* 加载出窗口
*
* @author My_2
*
*/
public class gameFrame extends Frame {
/**
* 加载窗口
*/
public void lunch() {
setSize(Constant.Frame_wide, Constant.Frame_high);// 画布大小,windows类下面方法,继承得到的
setLocation(0, 0);// 画布左上角位置
setVisible(true);// 画布可见
// addWindowListener方法作用是调出来的窗口能×掉
// 调用addWindowListener方法,WindowAdapter属于方法addWindowListener的内部类
// new WindowAdapter()为创建对象,这个对象要重写方法
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
new Painthread().start();// 启动线程
}
// window是Frame的父类,paint是Frame的一个方法
class Painthread extends Thread {//加载窗口時候會啟動線程,一啟動就會調用畫窗口,循環調用paint()
public void run() {
while (true) {
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
4.画图类
package myPackage;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Date;
public class mainFunc extends gameFrame{
Date date_start;
Date date_end;
Plane plane=new Plane("Image/mu.png",80,80);
ArrayList braclletList=new ArrayList();
int braclletNum;//子弹数
double speed;
public void paint(Graphics g){
plane.draw(g);
frintinfor(g,"宋体","等级:",20,Color.blue,Constant.Frame_wide-160,80);
frintinfor(g,"宋体","0-10秒:辣鸡",15,Color.blue,Constant.Frame_wide-160,100);
frintinfor(g,"宋体","10-20秒:菜鸡",15,Color.blue,Constant.Frame_wide-160,115);
frintinfor(g,"宋体","20-30秒:菜逼",15,Color.blue,Constant.Frame_wide-160,130);
frintinfor(g,"宋体","30秒以上:优秀",15,Color.blue,Constant.Frame_wide-160,145);
for(int i=0;i<braclletNum;i++)
{
Bracllet bracllet1=(Bracllet)braclletList.get(i);
bracllet1.draw(g);
boolean peng=plane.getRectangle().intersects(bracllet1.getRectangle());
if(peng&&plane.live){
plane.live=false;
date_end=new Date();
}
if(plane.live==false)
{
int time=((int)(date_end.getTime()-date_start.getTime()))/1000;
switch (time/10) {
case 0:
frintinfor(g,"宋体","等级:辣鸡!",50,Color.red,Constant.Frame_high/2-100,Constant.Frame_wide/2-100);
frintinfor(g,"宋体"," 坚持了"+time+"秒",30,Color.red,Constant.Frame_high/2-100,Constant.Frame_wide/2+60-100);
break;
case 1:
frintinfor(g,"宋体","等级:菜鸡",50,Color.red,Constant.Frame_high/2-100,Constant.Frame_wide/2-100);
frintinfor(g,"宋体"," 坚持了"+time,30,Color.red,Constant.Frame_high/2-100,Constant.Frame_wide/2+60-100);
break;
case 2:
frintinfor(g,"宋体","等级:菜逼",50,Color.red,Constant.Frame_high/2-100,Constant.Frame_wide/2-100);
frintinfor(g,"宋体"," 坚持了"+time,30,Color.red,Constant.Frame_high/2-100,Constant.Frame_wide/2+60-100);
break;
default:
frintinfor(g,"宋体","等级:优秀",50,Color.red,Constant.Frame_high/2-100,Constant.Frame_wide/2-100);
frintinfor(g,"宋体"," 坚持了"+time,30,Color.red,Constant.Frame_high/2-100,Constant.Frame_wide/2+60-100);
break;
}
}
}
}
public void frintinfor(Graphics g,String s1,String s2,int fontsize,Color cc,int gameover_locationx,int gameover_locationy){
Font font=new Font(s1,Font.BOLD,fontsize);
Color c=g.getColor();
g.setColor(cc);
g.setFont(font);
g.drawString(s2, gameover_locationx, gameover_locationy);
g.setColor(c);
}
@Override
public void lunch() {
super.lunch();
date_start=new Date();
addKeyListener(new KeyMonitor());
for(int i=0;i<braclletNum;i++)
{
Bracllet bracllet1=new Bracllet(speed);
braclletList.add(bracllet1);
}
}
public mainFunc(int braclletNum,double speed){
this.braclletNum=braclletNum;
this.speed=speed;
}
class KeyMonitor extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
plane.press_dicraytion(e);
}
@Override
public void keyReleased(KeyEvent e) {
plane.release_dicraytion(e);
}
}
public static void main(String[] args) {
new mainFunc(25,10).lunch();//点数,点速度
}
}
5.飞机类:
package myPackage;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
public class Plane {
String imagepath;
double x,y;
Image Img;
boolean up,down,right,left,live=true;
public Plane(String imagepath, double x, double y) {
super();
this.imagepath = imagepath;
this.x = x;
this.y = y;
Img=GameFunc.getImage(imagepath);
}
public void move(){
// 上:38,下:40
// 左:37 右:39
if(left)
this.x-=20;
if(up)
this.y-=20;
if(right)
this.x+=20;
if(down)
this.y+=20;
if(x<=8){
x=8;
}
if(y<=30){
y=30;
}
if(x>=Constant.Frame_wide-Img.getWidth(null)){
x=Constant.Frame_wide-Img.getWidth(null);
}
if(y>=Constant.Frame_high-Img.getWidth(null)){
y=Constant.Frame_high-Img.getWidth(null);
}
}
public void press_dicraytion(KeyEvent e){
switch (e.getKeyCode()) {
// 上:38,下:40
// 左:37 右:39
case 37:
left=true;
break;
case 38:
up=true;
break;
case 39:
right=true;
break;
case 40:
down=true;
break;
default:
break;
}
}
public Rectangle getRectangle()
{
return new Rectangle((int)x, (int)y, 10, 10);
}
public void release_dicraytion(KeyEvent e){
switch (e.getKeyCode()) {
// 上:38,下:40
// 左:37 右:39
case 37:
left=false;
break;
case 38:
up=false;
break;
case 39:
right=false;
break;
case 40:
down=false;
break;
default:
break;
}
}
public void draw(Graphics g){
if(live)
{
move();
}
Color c=g.getColor();
g.setColor(Color.blue);
g.fillOval((int)x, (int)y, 20, 20);
g.setColor(c);
}
}
6.子弹类:
package myPackage;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.Random;
public class Bracllet {
double x=Constant.Frame_wide/2,y=Constant.Frame_high/2,degree,speed;
public Bracllet(double speed){
this.speed=speed;
degree=Math.random()*Math.PI*2;
}
public Rectangle getRectangle()
{
return new Rectangle((int)x, (int)y, 10, 10);
}
public void draw(Graphics g){
x+=this.speed*Math.cos(degree);
y+=this.speed*Math.sin(degree);
//横纵边栏目宽8,30
if(x<8||x>(Constant.Frame_wide)-18)//30表示标题栏,看不见
{
System.out.println((Constant.Frame_wide/2)-10+"x="+x);
this.degree=Math.PI-this.degree;
}
if(y<30||y>(Constant.Frame_high)-30)//30表示标题栏,看不见
{
this.degree=-this.degree;
System.out.println("y="+y);
}
Color c=g.getColor();
g.setColor(Color.magenta);
g.fillOval((int)x, (int)y, 10, 10);
g.setColor(c);
}
}
7.常量类:
package myPackage;
public class Constant {
public static final int Frame_wide=800;
public static final int Frame_high=600;
}
8.图片涉及方法类
package myPackage;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class GameFunc {
public static Image getImage(String path)
{
URL u=GameFunc.class.getClassLoader().getResource(path);
BufferedImage img=null;
try {
img=ImageIO.read(u);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return img;
}
}