欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信游戏打飞机游戏制作(java模拟微信打飞机游戏)

程序员文章站 2024-02-19 11:36:10
复制代码 代码如下:package com.beancore.ui; import java.awt.borderlayout;import java.awt.conta...

复制代码 代码如下:

package com.beancore.ui;

import java.awt.borderlayout;
import java.awt.container;
import java.awt.dimension;
import java.awt.toolkit;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import java.io.ioexception;
import java.util.arraylist;
import java.util.collections;
import java.util.date;
import java.util.list;

import javax.sound.sampled.lineunavailableexception;
import javax.sound.sampled.unsupportedaudiofileexception;
import javax.swing.box;
import javax.swing.boxlayout;
import javax.swing.imageicon;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.joptionpane;
import javax.swing.jpanel;

import com.beancore.config.config;
import com.beancore.config.imageconstants;
import com.beancore.entity.score;
import com.beancore.util.fileutil;
import com.beancore.util.imageloader;
import com.beancore.util.images;
import com.beancore.util.soundplayer;

public class mainframe extends jframe implements actionlistener {

    private static final long serialversionuid = 1l;
    private imageloader imgloader;

    private gameloadingpanel gameloadingpanel;
    private gameplayingpanel gameplayingpanel;

    private popupmenupanel popupmenupanel;
    private top10scorepanel popupscorepanel;
    private helpdialog helpdialog;

    private soundplayer achievementsoundplayer;

    private list<score> scorelist;

    public mainframe() throws ioexception, lineunavailableexception, unsupportedaudiofileexception {
 try {
     this.scorelist = fileutil.readscore(config.score_file);
 } catch (exception e) {
     this.scorelist = new arraylist<score>();
 }
 this.loadimage();
 this.initsoundplayer();
 this.initcomponents();
 this.setbackgroundimage();
    }

    /**
     * load the image part from the whole image, shoot_background.png shoot.png
     * are both extracted from the weixin apk file
     * */
    private void loadimage() throws ioexception {
 this.imgloader = new imageloader(config.shoot_background_img);
 images.game_loading_img1 = this.imgloader.getimage(imageconstants.game_loading_plane_1_pos_x,
  imageconstants.game_loading_plane_1_pos_y, imageconstants.game_loading_plane_1_width,
  imageconstants.game_loading_plane_1_height);
 images.game_loading_img2 = this.imgloader.getimage(imageconstants.game_loading_plane_2_pos_x,
  imageconstants.game_loading_plane_2_pos_y, imageconstants.game_loading_plane_2_width,
  imageconstants.game_loading_plane_2_height);
 images.game_loading_img3 = this.imgloader.getimage(imageconstants.game_loading_plane_3_pos_x,
  imageconstants.game_loading_plane_3_pos_y, imageconstants.game_loading_plane_3_width,
  imageconstants.game_loading_plane_3_height);

 images.shoot_background_img = this.imgloader.getimage(imageconstants.game_background_img_pos_x,
  imageconstants.game_background_img_pos_y, imageconstants.game_background_img_width,
  imageconstants.game_background_img_height);

 images.game_loading_text_img = this.imgloader.getimage(imageconstants.game_loading_text_img_pos_x,
  imageconstants.game_loading_text_img_pos_y, imageconstants.game_loading_text_img_width,
  imageconstants.game_loading_text_img_height);

 this.imgloader = new imageloader(config.shoot_img);
 images.yellow_bullet_img = this.imgloader.getimage(imageconstants.yellow_bullet_pos_x,
  imageconstants.yellow_bullet_pos_y, imageconstants.yellow_bullet_width,
  imageconstants.yellow_bullet_height);
 images.blue_bullet_img = this.imgloader.getimage(imageconstants.blue_bullet_pos_x,
  imageconstants.blue_bullet_pos_y, imageconstants.blue_bullet_width, imageconstants.blue_bullet_height);
 images.my_plane_img = this.imgloader.getimage(imageconstants.my_plane_pos_x, imageconstants.my_plane_pos_y,
  imageconstants.my_plane_width, imageconstants.my_plane_height);
 images.my_plane_flying_img = this.imgloader.getimage(imageconstants.my_plane_flying_pos_x,
  imageconstants.my_plane_flying_pos_y, imageconstants.my_plane_flying_width,
  imageconstants.my_plane_flying_height);
 images.small_plane_img = this.imgloader.getimage(imageconstants.small_plane_pos_x,
  imageconstants.small_plane_pos_y, imageconstants.small_plane_width, imageconstants.small_plane_height);
 images.big_plane_img = this.imgloader.getimage(imageconstants.big_plane_pos_x, imageconstants.big_plane_pos_y,
  imageconstants.big_plane_width, imageconstants.big_plane_height);
 images.boss_plane_img = this.imgloader.getimage(imageconstants.boss_plane_pos_x,
  imageconstants.boss_plane_pos_y, imageconstants.boss_plane_width, imageconstants.boss_plane_height);
 images.bomb_img = this.imgloader.getimage(imageconstants.bomb_pos_x, imageconstants.bomb_pos_y,
  imageconstants.bomb_width, imageconstants.bomb_height);
 images.caught_bomb_img = this.imgloader.getimage(imageconstants.caught_bomb_pos_x,
  imageconstants.caught_bomb_pos_y, imageconstants.caught_bomb_width, imageconstants.caught_bomb_height);
 images.double_laser_img = this.imgloader.getimage(imageconstants.double_laser_pos_x,
  imageconstants.double_laser_pos_y, imageconstants.double_laser_width,
  imageconstants.double_laser_height);

 images.small_plane_fighting_img = this.imgloader.getimage(imageconstants.small_plane_fighting_pos_x,
  imageconstants.small_plane_fighting_pos_y, imageconstants.small_plane_fighting_width,
  imageconstants.small_plane_fighting_height);
 images.small_plane_killed_img = this.imgloader.getimage(imageconstants.small_plane_killed_pos_x,
  imageconstants.small_plane_killed_pos_y, imageconstants.small_plane_killed_width,
  imageconstants.small_plane_killed_height);
 images.small_plane_ashed_img = this.imgloader.getimage(imageconstants.small_plane_ashed_pos_x,
  imageconstants.small_plane_ashed_pos_y, imageconstants.small_plane_ashed_width,
  imageconstants.small_plane_ashed_height);

 images.big_plane_fighting_img = this.imgloader.getimage(imageconstants.big_plane_fighting_pos_x,
  imageconstants.big_plane_fighting_pos_y, imageconstants.big_plane_fighting_width,
  imageconstants.big_plane_fighting_height);
 images.big_plane_hitted_img = this.imgloader.getimage(imageconstants.big_plane_hitted_pos_x,
  imageconstants.big_plane_hitted_pos_y, imageconstants.big_plane_hitted_width,
  imageconstants.big_plane_hitted_height);
 images.big_plane_baddly_wounded_img = this.imgloader.getimage(imageconstants.big_plane_baddly_wounded_pos_x,
  imageconstants.big_plane_baddly_wounded_pos_y, imageconstants.big_plane_baddly_wounded_width,
  imageconstants.big_plane_baddly_wounded_height);
 images.big_plane_killed_img = this.imgloader.getimage(imageconstants.big_plane_killed_pos_x,
  imageconstants.big_plane_killed_pos_y, imageconstants.big_plane_killed_width,
  imageconstants.big_plane_killed_height);
 images.big_plane_ashed_img = this.imgloader.getimage(imageconstants.big_plane_ashed_pos_x,
  imageconstants.big_plane_ashed_pos_y, imageconstants.big_plane_ashed_width,
  imageconstants.big_plane_ashed_height);

 images.boss_plane_fighting_img = this.imgloader.getimage(imageconstants.boss_plane_fighting_pos_x,
  imageconstants.boss_plane_fighting_pos_y, imageconstants.boss_plane_fighting_width,
  imageconstants.boss_plane_fighting_height);
 images.boss_plane_hitted_img = this.imgloader.getimage(imageconstants.boss_plane_hitted_pos_x,
  imageconstants.boss_plane_hitted_pos_y, imageconstants.boss_plane_hitted_width,
  imageconstants.boss_plane_hitted_height);
 images.boss_plane_baddly_wounded_img = this.imgloader.getimage(imageconstants.boss_plane_baddly_wounded_pos_x,
  imageconstants.boss_plane_baddly_wounded_pos_y, imageconstants.boss_plane_baddly_wounded_width,
  imageconstants.boss_plane_baddly_wounded_height);
 images.boss_plane_killed_img = this.imgloader.getimage(imageconstants.boss_plane_killed_pos_x,
  imageconstants.boss_plane_killed_pos_y, imageconstants.boss_plane_killed_width,
  imageconstants.boss_plane_killed_height);
 images.boss_plane_ashed_img = this.imgloader.getimage(imageconstants.boss_plane_ashed_pos_x,
  imageconstants.boss_plane_ashed_pos_y, imageconstants.boss_plane_ashed_width,
  imageconstants.boss_plane_ashed_height);

 images.score_img = this.imgloader.getimage(imageconstants.score_img_pos_x, imageconstants.score_img_pos_y,
  imageconstants.score_img_width, imageconstants.score_img_height);

 this.imgloader = new imageloader(config.font_img);
 images.x_mark_img = this.imgloader.getimage(imageconstants.x_mark_pos_x, imageconstants.x_mark_pos_y,
  imageconstants.x_mark_width, imageconstants.x_mark_height);

 images.number_0_img = this.imgloader.getimage(imageconstants.number_0_pos_x, imageconstants.number_0_pos_y,
  imageconstants.number_0_width, imageconstants.number_0_height);
 images.number_1_img = this.imgloader.getimage(imageconstants.number_1_pos_x, imageconstants.number_1_pos_y,
  imageconstants.number_1_width, imageconstants.number_1_height);
 images.number_2_img = this.imgloader.getimage(imageconstants.number_2_pos_x, imageconstants.number_2_pos_y,
  imageconstants.number_2_width, imageconstants.number_2_height);
 images.number_3_img = this.imgloader.getimage(imageconstants.number_3_pos_x, imageconstants.number_3_pos_y,
  imageconstants.number_3_width, imageconstants.number_3_height);
 images.number_4_img = this.imgloader.getimage(imageconstants.number_4_pos_x, imageconstants.number_4_pos_y,
  imageconstants.number_4_width, imageconstants.number_4_height);
 images.number_5_img = this.imgloader.getimage(imageconstants.number_5_pos_x, imageconstants.number_5_pos_y,
  imageconstants.number_5_width, imageconstants.number_5_height);
 images.number_6_img = this.imgloader.getimage(imageconstants.number_6_pos_x, imageconstants.number_6_pos_y,
  imageconstants.number_6_width, imageconstants.number_6_height);
 images.number_7_img = this.imgloader.getimage(imageconstants.number_7_pos_x, imageconstants.number_7_pos_y,
  imageconstants.number_7_width, imageconstants.number_7_height);
 images.number_8_img = this.imgloader.getimage(imageconstants.number_8_pos_x, imageconstants.number_8_pos_y,
  imageconstants.number_8_width, imageconstants.number_8_height);
 images.number_9_img = this.imgloader.getimage(imageconstants.number_9_pos_x, imageconstants.number_9_pos_y,
  imageconstants.number_9_width, imageconstants.number_9_height);
    }

    private void initcomponents() {
 this.settitle("shoot plane - www.java1234.com");
 this.seticonimage(new imageicon(config.logo_img).getimage());
 this.setsize(config.main_frame_width, config.main_frame_height);
 dimension d = toolkit.getdefaulttoolkit().getscreensize();
 this.setbounds((d.width - config.main_frame_width) / 2, (d.height - config.main_frame_height) / 2,
  config.main_frame_width, config.main_frame_height);
 this.setresizable(false);
 this.setvisible(true);
 this.setdefaultcloseoperation(jframe.exit_on_close);
    }

    private void initsoundplayer() throws lineunavailableexception, unsupportedaudiofileexception, ioexception {
 achievementsoundplayer = new soundplayer(config.achievement_audio);
    }

    private void setbackgroundimage() {
 imageicon bgimgicon = new imageicon(images.shoot_background_img);
 jlabel bglabel = new jlabel(bgimgicon);
 this.getlayeredpane().add(bglabel, new integer(integer.min_value));
 bglabel.setbounds(0, 0, bgimgicon.geticonwidth(), bgimgicon.geticonheight());
 ((jpanel) this.getcontentpane()).setopaque(false);
    }

    private void popupmenupanel() {
 container c = this.getcontentpane();
 c.removeall();
 this.repaint();
 if (this.popupmenupanel == null) {
     this.popupmenupanel = new popupmenupanel(this);
 }
 boxlayout boxlayout = new boxlayout(c, boxlayout.y_axis);
 c.setlayout(boxlayout);
 c.add(box.createverticalglue());
 c.add(this.popupmenupanel);
 c.add(box.createverticalglue());
 this.validate();
    }

    public void loadgame() throws lineunavailableexception, unsupportedaudiofileexception, ioexception {
 container c = this.getcontentpane();
 c.removeall();
 this.repaint();
 if (this.gameloadingpanel == null) {
     this.gameloadingpanel = new gameloadingpanel();
 }

 boxlayout boxlayout = new boxlayout(c, boxlayout.y_axis);
 c.setlayout(boxlayout);
 c.add(box.createverticalglue());
 c.add(this.gameloadingpanel);
 c.add(box.createverticalglue());
 this.gameloadingpanel.loadinggame();

 this.startgame();
    }

    private void startgame() throws lineunavailableexception, unsupportedaudiofileexception, ioexception {
 container c = this.getcontentpane();
 c.removeall();
 this.repaint();
 borderlayout borderlayout = new borderlayout();
 c.setlayout(borderlayout);
 this.gameplayingpanel = new gameplayingpanel();
 c.add(this.gameplayingpanel, borderlayout.center);
 this.gameplayingpanel.startgame();
 long starttime = system.currenttimemillis();
 while (this.gameplayingpanel.getmyplane().isalive()) {
     try {
  thread.sleep(config.game_panel_repaint_interval);
     } catch (interruptedexception e) {
  e.printstacktrace();
     }
 }
 long endtime = system.currenttimemillis();
 // add to score list
 this.addscore(this.gameplayingpanel.getscore(), endtime - starttime);
 int option = joptionpane.showconfirmdialog(this, "game over, score:" + this.gameplayingpanel.getscore()
  + ", start again?", "game over", joptionpane.yes_no_option);
 switch (option) {
 case joptionpane.yes_option:
     loadgame();
     break;
 case joptionpane.no_option:
     stopgame();
     break;
 }
    }

    private void addscore(int score, long lastmilliseconds) throws ioexception {
 score s = new score(new date(system.currenttimemillis()), score, lastmilliseconds);
 int size = this.scorelist.size();
 if (this.scorelist.contains(s)) {
     return;
 }
 if (size < config.max_score_count) {
     this.scorelist.add(s);
 } else {
     score lastscore = this.scorelist.get(size - 1);
     if (s.compareto(lastscore) > 0) {
  this.scorelist.remove(lastscore);
  this.scorelist.add(s);
     }
 }
 collections.sort(this.scorelist);
 collections.reverse(this.scorelist);
 fileutil.writescore(scorelist, config.score_file);
    }

    public void stopgame() {
 popupmenupanel();
    }

    @override
    public void actionperformed(actionevent e) {
 string actioncmd = e.getactioncommand();
 if (actioncmd.equals(popupmenupanel.start_game_button)) {
     startgameaction();
 } else if (actioncmd.equals(popupmenupanel.top_10_scores_button)) {
     this.achievementsoundplayer.play();
     popupscorepanel(this.scorelist);
 } else if (actioncmd.equals(popupmenupanel.exit_game_button)) {
     exitgameaction();
 } else if (actioncmd.equals(popupmenupanel.help_button)) {
     helpaction();
 } else if (actioncmd.equals(top10scorepanel.ok_button)) {
     this.popupmenupanel();
 }
    }

    private void popupscorepanel(list<score> sortedscorelist) {
 container c = this.getcontentpane();
 c.removeall();
 this.repaint();
 if (this.popupscorepanel == null) {
     this.popupscorepanel = new top10scorepanel(this);
 }
 this.popupscorepanel.loadscore(sortedscorelist);
 boxlayout boxlayout = new boxlayout(c, boxlayout.y_axis);
 c.setlayout(boxlayout);
 c.add(box.createverticalglue());
 c.add(this.popupscorepanel);
 c.add(box.createverticalglue());
 this.validate();
    }

    private void startgameaction() {
 new thread(new startgameactionclass()).start();
    }

    class startgameactionclass implements runnable {

 @override
 public void run() {
     try {
  loadgame();
     } catch (exception e) {
  e.printstacktrace();
     }
 }
    }

    private void exitgameaction() {
 system.exit(0);
    }

    private void helpaction() {
 if (this.helpdialog == null) {
     this.helpdialog = new helpdialog();
 }
 this.helpdialog.setvisible(true);
    }
}