- 论坛徽章:
- 0
|
本帖最后由 mocow 于 2015-05-21 13:42 编辑
- package GameSubstance;
-
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Toolkit;
- import Tools.GameBox;
- public class EnemyBullet {
- private int x,y;
- private int bulletspeed=15;
- private boolean live=true;
-
- Image enemyplanebullet=GameBox.enemybullet;
-
- public EnemyBullet(int x,int y){
- this.x=x;
- this.y=y;
- }
- public void draw(Graphics g){
- if(!live){
- return;
- }
- y=y+bulletspeed;
- g.drawImage(enemyplanebullet,x,y,GameBox.ENEMYBULLET_WIDTH,GameBox.ENEMYBULLET_HEIGHT,null);
- if(y>GameBox.GAME_HEIGHT+GameBox.ENEMYBULLET_HEIGHT){
- live=false;
- }
- }
- public boolean isLive() {
- return live;
- }
- public void setLive(boolean live) {
- this.live = live;
- }
- public int getX() {
- return x;
- }
- public int getY() {
- return y;
- }
-
- }
复制代码- package GameSubstance;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Toolkit;
- import Tools.GameBox;
- public class Explode {
- private int x,y;
- private boolean live=true;
- private int count;
- Image Explode1=GameBox.Explode1;
- public Explode(int x,int y){
- this.x=x;
- this.y=y;
- }
- public void draw(Graphics g){
- if(!live){
- return;
- }
- g.drawImage(Explode1,x,y,GameBox.EXPLODE1_WIDTH,GameBox.EXPLODE1_HEIGHT,null);
- if(count==8){
- live=false;
- }
- }
- public boolean isLive() {
- return live;
- }
- public void setLive(boolean live) {
- this.live = live;
- }
- public int getCount() {
- return count;
- }
- public void setCount(int count) {
- this.count = count;
- }
- }
复制代码- package GameSubstance;
- import Tools.GameBox;
- import View.StartFrame;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Toolkit;
- import java.awt.event.KeyEvent;
- import javax.swing.ImageIcon;
- public class MyPlane {
- private int x,y;
- private static Image plane;
- private Bullet bullet;
- private boolean dl=false,du=false,dr=false,dd=false;
- public static final int MYPLANE_XSPEED=10;
- public static final int MYPLANE_YSPEED=10;
- private boolean live=true;
- public MyPlane(int x,int y){
- this.x=x;
- this.y=y;
- }
- public void draw(Graphics g){
- if(!live){
- return;
- }
- g.drawImage(GameBox.plane,x,y,GameBox.PLANE_WIDTH,GameBox.PLANE_HEIGHT,null);
- move();
- }
-
- public void keyPressed(KeyEvent e) {
- int key=e.getKeyCode();
- switch(key){
- case KeyEvent.VK_UP:
- du=true;
- break;
- case KeyEvent.VK_DOWN:
- dd=true;
- break;
- case KeyEvent.VK_LEFT:
- dl=true;
- break;
- case KeyEvent.VK_RIGHT:
- dr=true;
- break;
- }
- }
- public void keyReleased(KeyEvent e) {
- int key=e.getKeyCode();
- switch(key){
- case KeyEvent.VK_UP:
- du=false;
- break;
- case KeyEvent.VK_DOWN:
- dd=false;
- break;
- case KeyEvent.VK_LEFT:
- dl=false;
- break;
- case KeyEvent.VK_RIGHT:
- dr=false;
- }
- }
- private void move(){
- if(du&&!dl&&!dd&&!dr){
- y=y-MYPLANE_YSPEED;//上
- }else if(dd&&!du&&!dl&&!dr){
- y=y+MYPLANE_YSPEED;//下
- }else if(!dd&&!du&&dl&&!dr){
- x=x-MYPLANE_XSPEED;//左
- }else if(!dd&&!du&&!dl&&dr){
- x=x+MYPLANE_XSPEED;//右
- }else if(!dd&&du&&dl&&!dr){
- y=y-MYPLANE_YSPEED;//左上
- x=x-MYPLANE_XSPEED;
- }else if(du&&!dl&&!dd&&dr){
- y=y-MYPLANE_YSPEED;//右上
- x=x+MYPLANE_XSPEED;
- }else if(dd&&!du&&dl&&!dr){
- x=x-MYPLANE_XSPEED;//左下
- y=y+MYPLANE_YSPEED;
- }else if(dd&&!du&&!dl&&dr){
- x=x+MYPLANE_XSPEED;//右下
- y=y+MYPLANE_YSPEED;
- }
- if(x+GameBox.PLANE_WIDTH>GameBox.GAME_WIDTH){
- x=GameBox.GAME_WIDTH-GameBox.PLANE_WIDTH;
- }
- if(x<0){
- x=0;
- }
- if(y+GameBox.PLANE_HEIGHT*2>GameBox.GAME_HEIGHT){
- y=GameBox.GAME_HEIGHT-GameBox.PLANE_HEIGHT*2;
- }
- if(y<30){
- y=30;
- }
- }
- public int getX() {
- return x;
- }
- public int getY() {
- return y;
- }
- public boolean isLive() {
- return live;
- }
- public void setLive(boolean live) {
- this.live = live;
- }
- }
复制代码- package Tools;
- import java.awt.Font;
- import java.awt.Image;
- import java.awt.Toolkit;
- import java.util.ArrayList;
- import java.util.List;
-
- import GameSubstance.EnemyBullet;
- import GameSubstance.Explode;
- public class GameBox {
- public static int GAME_WIDTH=800;
- public static int GAME_HEIGHT=600;
- public static Font f1=new Font("oúìå",3,20);
- public static Toolkit tk = Toolkit.getDefaultToolkit();
- public static Image backgroundimage=tk.createImage("images\\±3¾°.jpg");
- public static Image plane=tk.createImage("images\\Îò·½·é»ú.gif");
- public static int PLANE_WIDTH=30;
- public static int PLANE_HEIGHT=30;
- public static Image Explode1=tk.createImage("images/±¬Õ¨.gif");
- public static int EXPLODE1_WIDTH=30;
- public static int EXPLODE1_HEIGHT=30;
- public static Image bullet=tk.createImage("images\\×óμˉ.gif");
- public static int BULLET_WIDTH=18;
- public static int BULLET_HEIGHT=35;
- public static Image enemy1=tk.createImage("images\\μD»ú1.gif");
- public static Image enemy2=tk.createImage("images\\μD»ú2.gif");
- public static int ENEMY_WIDTH=30;
- public static int ENEMY_HEIGHT=30;
- public static Image enemybullet=tk.createImage("images\\·ßÅ-μÄ×óμˉ.gif");
- public static int ENEMYBULLET_WIDTH=15;
- public static int ENEMYBULLET_HEIGHT=30;
- }
复制代码- package View;
- import GameSubstance.*;
- import Tools.*;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Toolkit;
- import java.awt.event.KeyAdapter;
- import java.awt.event.KeyEvent;
- import java.awt.image.ImageObserver;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
-
- import javax.swing.ImageIcon;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- public class StartFrame extends JFrame implements Runnable{
- //游戏组件
- Image bk=GameBox.backgroundimage;
- MyPlane myplane;
- List<EnemyPlane> enemyplanelist=new ArrayList<EnemyPlane>();
- private int count=0;
- private float sourse=0;
- List<Bullet> bulletlist=new ArrayList<Bullet>();
- List<Explode> explodelist=new ArrayList<Explode>();
- List<EnemyBullet> enemybulletlist=new ArrayList<EnemyBullet>();
- JPanel jp;
- public static void main(String[] args) {
- new Thread(new StartFrame()).start();
-
- }
- public StartFrame(){
- this.setSize(GameBox.GAME_WIDTH,GameBox.GAME_HEIGHT);
- //窗口居中
- int width=Toolkit.getDefaultToolkit().getScreenSize().width;
- int height=Toolkit.getDefaultToolkit().getScreenSize().height;
- setLocation(width/2-GameBox.GAME_WIDTH/2, height/2-GameBox.GAME_HEIGHT/2);
- setResizable(false);
- myplane=new MyPlane(GameBox.GAME_WIDTH/2,GameBox.GAME_HEIGHT-GameBox.PLANE_HEIGHT*2);
- new Thread(new AddEnemy()).start();
- this.addKeyListener(new KeyMonitor());
- this.add(new GameJPanel());
- setTitle("打飞机小游戏");
- this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
- setVisible(true);
- }
-
- @Override
- public void run() {
- while(true){
- repaint();
- Random rand=new Random();
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-
- private class KeyMonitor extends KeyAdapter {
-
- public void keyReleased(KeyEvent e) {
- if(e.getKeyCode()==KeyEvent.VK_F2){
- myplane.setLive(true);
- }
- myplane.keyReleased(e);
- }
-
- public void keyPressed(KeyEvent e) {
- myplane.keyPressed(e);
- }
-
- }
-
- private class AddEnemy implements Runnable{
- @Override
- public void run() {
- while(true){
- try {
- Thread.sleep(500);
- addEnemyPlane();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-
- private void addEnemyPlane(){
- EnemyPlane enemyplane=new EnemyPlane(StartFrame.this);
- enemybulletlist.add(new EnemyBullet(enemyplane.getX(),enemyplane.getY()));
- enemyplanelist.add(enemyplane);
- }
- }
-
-
- private class GameJPanel extends JPanel{
-
- public void paint(Graphics g){
- super.paint(g);
- g.drawImage(bk,0,0,GameBox.GAME_WIDTH,GameBox.GAME_HEIGHT,null);
- myplane.draw(g);
- if (count==0){
- if(myplane.isLive()){
- createBullet();
- }else{
- for(int i=0;i<bulletlist.size();i++){
- bulletlist.remove(i);
- }
- }
- }
- count++;
- if(count==2){
- count=0;
- }
- for(int i=0;i<bulletlist.size();i++){
-
- Bullet bullet=bulletlist.get(i);
- bullet.draw(g);
- clearBullet();
- }
- for(int i=0;i<enemyplanelist.size();i++){
- EnemyPlane enemyplane=enemyplanelist.get(i);
- enemyplane.draw(g);
- clearEnemyplane();
- Random rand=new Random();
- if(rand.nextInt(100)>93&&enemyplane.isLive()){
- enemybulletlist.add(new EnemyBullet(enemyplane.getX(),enemyplane.getY()));
- }
- //如果敌机面对我方飞机时发射一枚子弹
- if(enemyplane.getX()>=myplane.getX()&&enemyplane.getX()<=myplane.getX()+GameBox.PLANE_WIDTH&&enemyplane.isFired()&&enemyplane.isLive()){
- enemybulletlist.add(new EnemyBullet(enemyplane.getX(),enemyplane.getY()));
- enemyplane.setFired(false);
- }
-
- }
- for(int i=0;i<enemybulletlist.size();i++){
- EnemyBullet eb=enemybulletlist.get(i);
- eb.draw(g);
- clearEnemyBullet();
- }
-
- hitPlane();//攻击敌机
- impactMyplane();//敌机与我方飞机发生碰撞
- if(enemybulletlist.size()>=1)hitMyplane();//
- for(int i=0;i<explodelist.size();i++){
- Explode exp=explodelist.get(i);
- exp.draw(g);
- exp.setCount(exp.getCount()+1);
- clearExplode();
- }
- g.setColor(Color.RED);
- // g.setFont(GameBox.f1);//设置字体之后加载窗口会卡2秒钟
- if(sourse!=0){
- g.drawString("您的得分:"+(int)sourse+"0", 50, 50);
- }else{
- g.drawString("您的得分:0", 50, 50);
- }
-
- }
-
- private void clearEnemyBullet() {
- for(int i=0;i<enemybulletlist.size();i++){
- if(!(enemybulletlist.get(i).isLive())){
- enemybulletlist.remove(i);
- }
- }
- }
- private void createBullet(){
- Bullet bullet=new Bullet((myplane.getX()+5),(myplane.getY()-30));
- bulletlist.add(bullet);
- }
- private void clearBullet(){
- for(int i=0;i<bulletlist.size();i++){
- if(!(bulletlist.get(i).isLive())){
- bulletlist.remove(i);
- }
- }
- }
- private void clearEnemyplane() {
- for(int i=0;i<enemyplanelist.size();i++){
- if(!(enemyplanelist.get(i).isLive())){
- enemyplanelist.remove(i);
- }
- }
- }
- private void clearExplode() {
- for(int i=0;i<explodelist.size();i++){
- if(!(explodelist.get(i).isLive())){
- explodelist.remove(i);
- }
- }
- }
- private void hitPlane(){
- int bx,ex,by,ey;
- for(int i=0;i<bulletlist.size();i++){
- Bullet bullet=bulletlist.get(i);
- bx=bullet.getX();
- by=bullet.getY();
- for(int j=0;j<enemyplanelist.size();j++){
- EnemyPlane enemyplane=enemyplanelist.get(j);
- ex=enemyplane.getX();
- ey=enemyplane.getY();
- if(bx>=ex&&bx<=ex+GameBox.ENEMY_WIDTH&&by>=ey&&by<=ey+GameBox.ENEMY_HEIGHT&&enemyplane.isLive()&&bullet.isLive()){
- bullet.setLive(false);
- enemyplane.setLive(false);
- explodelist.add(new Explode(bx,by));
- sourse=sourse+1.168320194f;//防止CE恶意修改分数(我的QQ号码)
- }
- }
- }
- }
- private void impactMyplane(){
- int mx,my,ex,ey;
- mx=myplane.getX();
- my=myplane.getY();
- for(int i=0;i<enemyplanelist.size();i++){
- EnemyPlane enemyplane=enemyplanelist.get(i);
- ex=enemyplane.getX();
- ey=enemyplane.getY();
- if(mx>=ex&&mx<=ex+GameBox.ENEMY_WIDTH&&my>=ey&&my<=ey+GameBox.ENEMY_HEIGHT&&myplane.isLive()&&enemyplane.isLive()){
- myplane.setLive(false);
- enemyplane.setLive(false);
- explodelist.add(new Explode(mx,my));
- explodelist.add(new Explode(ex,ey));
- }
- }
- }
- private void hitMyplane() {
- int mx,my,ex,ey;
- mx=myplane.getX();
- my=myplane.getY();
- for(int i=0;i<enemyplanelist.size();i++){
- EnemyBullet eb=enemybulletlist.get(i);
- ex=eb.getX();
- ey=eb.getY();
- if(ex+GameBox.ENEMYBULLET_WIDTH>=mx&&ex+GameBox.ENEMYBULLET_WIDTH<=mx+GameBox.PLANE_WIDTH&&ey+GameBox.ENEMYBULLET_HEIGHT>=my&&ey+GameBox.ENEMYBULLET_HEIGHT<=my+GameBox.PLANE_HEIGHT&&myplane.isLive()&&eb.isLive()){
- myplane.setLive(false);
- eb.setLive(false);
- explodelist.add(new Explode(mx,my));
- }
- }
- }
- }
- }
复制代码 爆炸.gif
背景.jpg
敌机1.gif
敌机2.gif
愤怒的子弹.gif
子弹.gif
|
|