怎么添加拓展 除了6
import java.awt.Container;
import javax.swing.JFrame;
public class planeFrame extends JFrame {
public planeFrame() {
setTitle("飞行射击类游戏");
GamePanel panel = new GamePanel();
Container contentPane = getContentPane();
contentPane.add(panel);
pack();
}
public static void main(String[] args) {
planeFrame e1 = new planeFrame();
e1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
e1.setVisible(true);
}
}
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;
import javax.swing.JPanel;
// ӵ
public class Bullet {
static final int BULLET_STEP_X = 3;
static final int BULLET_STEP_Y = 15;
static final int BULLET_WIDTH = 40;
public int m_posX = 0;
public int m_posY = 0;
boolean mFacus = true;
private Image pic[] = null;
private int mPlayID = 0;
public Bullet() {
pic = new Image[4];
for (int i = 0; i < 4; i++)
pic[i] = Toolkit.getDefaultToolkit().getImage(
"images\\bullet_" + i + ".png");
}
public void init(int x, int y) {
m_posX = x;
m_posY = y;
mFacus = true;
}
public void DrawBullet(Graphics g,JPanel i)
{
g.drawImage(pic[mPlayID++],m_posX,m_posY,(ImageObserver)i);
if(mPlayID==4)mPlayID=0;
}
public void UpdateBullet() {
if (mFacus) {
m_posY -= BULLET_STEP_Y;
}
}
}
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Enemy {
public static final int ENEMY_ALIVE_STATE = 0;
public static final int ENEMY_DEATH_STATE = 1;
static final int ENEMY_STEP_Y = 5;
public int m_posX = 0;
public int m_posY = 0;
public int mAnimState = ENEMY_ALIVE_STATE;
private Image enemyExplorePic[] = new Image[6];
public int mPlayID = 0;
public Enemy() {
for (int i = 0; i < 6; i++)
enemyExplorePic[i] = Toolkit.getDefaultToolkit().getImage(
"images\\bomb_enemy_" + i + ".png");
}
public void init(int x, int y) {
m_posX = x;
m_posY = y;
mAnimState = ENEMY_ALIVE_STATE;
mPlayID = 0;
}
public void DrawEnemy(Graphics g,JFrame i)
{
Image pic;
try {
pic = ImageIO.read(new File("images/e1_0.png"));
g.drawImage(pic,m_posX,m_posY,(ImageObserver)i);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void DrawEnemy(Graphics g,JPanel i)
{
if(mAnimState == ENEMY_DEATH_STATE && mPlayID<6) {
g.drawImage(enemyExplorePic[mPlayID],m_posX,m_posY,(ImageObserver)i);
mPlayID++;
return;
}
Image pic = Toolkit.getDefaultToolkit().getImage("images/e1_0.png");
g.drawImage(pic,m_posX,m_posY,(ImageObserver)i);
}
public void UpdateEnemy() {
m_posY += ENEMY_STEP_Y;
}
}
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import bean.Bullet;
import bean.Enemy;
public class GamePanel extends JPanel implements Runnable,KeyListener{
private int mScreenWidth = 320;
private int mScreenHeight = 480;
private static final int STATE_GAME = 0;
private int mState = STATE_GAME;
private Image mBitMenuBG0 = null;
private Image mBitMenuBG1 = null;
private int mBitposY0 = 0;
private int mBitposY1 = 0;
final static int BULLET_POOL_COUNT = 15;
final static int PLAN_STEP = 10;
final static int PLAN_TIME = 500;
final static int ENEMY_POOL_COUNT = 5;
final static int ENEMY_POS_OFF = 65;
private Thread mThread = null;
private boolean mIsRunning = false;
public int mAirPosX = 0;
public int mAirPosY = 0;
Enemy mEnemy[] = null;
Bullet mBuilet[] = null;
public int mSendId = 0;
public Long mSendTime = 0L;
Image myPlanePic[];
public int myPlaneID = 0;
public GamePanel() {
setPreferredSize(new Dimension(mScreenWidth, mScreenHeight));
setFocusable(true);
addKeyListener(this);
init();
setGameState(STATE_GAME);
mIsRunning = true;
mThread = new Thread(this);
mThread.start();
//setVisible(true);
}
protected void Draw() {
switch (mState) {
case STATE_GAME:
renderBg();
updateBg();
break;
}
}
private void init() {
try {
mBitMenuBG0 = Toolkit.getDefaultToolkit().getImage("res\\map_0.png");
mBitMenuBG1 = Toolkit.getDefaultToolkit().getImage("res\\map_1.png");
ImageIO.read(new File("res/map_1.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mBitposY0 = 0;
mBitposY1 = -mScreenHeight;
mAirPosX = 150;
mAirPosY = 400;
myPlanePic = new Image[6];
for (int i = 0; i < 6; i++)
myPlanePic[i] = Toolkit.getDefaultToolkit().getImage(
"res\\plan_" + i + ".png");
mEnemy = new Enemy[ENEMY_POOL_COUNT];
for (int i = 0; i < ENEMY_POOL_COUNT; i++) {
mEnemy[i] = new Enemy();
mEnemy[i].init(i * ENEMY_POS_OFF, i * ENEMY_POS_OFF-300);
}
mBuilet = new Bullet[BULLET_POOL_COUNT];
for (int i = 0; i < BULLET_POOL_COUNT; i++) {
mBuilet[i] = new Bullet();
}
mSendTime = System.currentTimeMillis();
}
private void setGameState(int newState) {
mState = newState;
}
public void renderBg() {
myPlaneID++;
if (myPlaneID == 6)
myPlaneID = 0;
repaint();
}
public void paint(Graphics g) {
g.drawImage(mBitMenuBG0, 0, mBitposY0, this);
g.drawImage(mBitMenuBG1, 0, mBitposY1, this);
g.drawImage(myPlanePic[myPlaneID], mAirPosX, mAirPosY, this);
for (int i = 0; i < BULLET_POOL_COUNT; i++)
mBuilet[i].DrawBullet(g, this);
for (int i = 0; i < ENEMY_POOL_COUNT; i++)
mEnemy[i].DrawEnemy(g, this);
}
private void updateBg() {
mBitposY0 += 10;
mBitposY1 += 10;
if (mBitposY0 == mScreenHeight) {
mBitposY0 = -mScreenHeight;
}
if (mBitposY1 == mScreenHeight) {
mBitposY1 = -mScreenHeight;
}
for (int i = 0; i < BULLET_POOL_COUNT; i++) {
mBuilet[i].UpdateBullet();
}
for (int i = 0; i < ENEMY_POOL_COUNT; i++) {
mEnemy[i].UpdateEnemy();
if (mEnemy[i].mAnimState == Enemy.ENEMY_DEATH_STATE
&& mEnemy[i].mPlayID == 6
|| mEnemy[i].m_posY >= mScreenHeight) {
mEnemy[i].init(UtilRandom(0, ENEMY_POOL_COUNT) * ENEMY_POS_OFF,
0);
}
}
if (mSendId < BULLET_POOL_COUNT) {
long now = System.currentTimeMillis();
if (now - mSendTime >= PLAN_TIME) {
mBuilet[mSendId].init(mAirPosX-5, mAirPosY-40);
mSendTime = now;
mSendId++;
}
} else {
mSendId = 0;
}
Collision();
}
public void Collision() {
for (int i = 0; i < BULLET_POOL_COUNT; i++) {
for (int j = 0; j < ENEMY_POOL_COUNT; j++) {
if (mBuilet[i].m_posX >= mEnemy[j].m_posX
&& mBuilet[i].m_posX <= mEnemy[j].m_posX + 30
&& mBuilet[i].m_posY >= mEnemy[j].m_posY
&& mBuilet[i].m_posY <= mEnemy[j].m_posY + 30
) {
mEnemy[j].mAnimState = Enemy.ENEMY_DEATH_STATE;
}
}
}
}
private int UtilRandom(int botton, int top) {
return ((Math.abs(new Random().nextInt()) % (top - botton)) + botton);
}
public void run() {//2
while (mIsRunning) {
Draw();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
System.out.println(key);
if (key == KeyEvent.VK_UP)
mAirPosY -= PLAN_STEP;
if (key == KeyEvent.VK_DOWN)
mAirPosY += PLAN_STEP;
if (key == KeyEvent.VK_LEFT) {
mAirPosX -= PLAN_STEP;
if (mAirPosX < 0)
mAirPosX = 0;
}
if (key == KeyEvent.VK_RIGHT) {
mAirPosX += PLAN_STEP;
if (mAirPosX > mScreenWidth - 30)
mAirPosX = mScreenWidth - 30;
}
}
public void keyReleased(KeyEvent arg0) {}
public void keyTyped(KeyEvent arg0) {}
}