📄 playscreen.java
字号:
//敌人
Enemy enemy = (Enemy) getEnemyPool().getFirstUsed();
while (enemy != null) {
MovingObject next = enemy.getNextLinked();
if (enemy.isDead() || enemy.getLocationX() + 20 < 0 ||
enemy.getLocationX() - 10 > ThreadCanvas.SCREEN_WIDTH
|| enemy.getLocationY() + enemy.getHeight() < 0 ||
enemy.getLocationY() - 20 > ThreadCanvas.SCREEN_HEIGHT) {
releaseEnemy(enemy);
}
enemy.cycle(posX, posY);
enemy.animateCycle();
enemy = (Enemy) next;
}
// 关卡资源
stage.cycle();
}
private MovingObject getPlayerHitBullet(Rectangle target) {
MovingObject b = bulletPool.getFirstUsed();
while (b != null) {
if (b.getBounds().intersects(target)) {
return b;
}
b = b.getNextLinked();
}
return null;
}
private MovingObject getEnemyHitBullet(Rectangle target) {
MovingObject b = enemyBulletPool.getFirstUsed();
while (b != null) {
if (b.getBounds().intersects(target)) {
return b;
}
b = b.getNextLinked();
}
return null;
}
/**
* 碰撞检测
*
*/
public void collisionDetection() {
MovingObject hitBullet = null;
// 检测玩家的子弹是否击中敌人
// 普通敌人
Enemy enemy = (Enemy) getEnemyPool().getFirstUsed();
while (enemy != null) {
Enemy next = (Enemy) enemy.getNextLinked();
if (!enemy.isDead() && !enemy.isDestroy()) {
if (player.isBombState && enemy.getLocationX() > 0
&& enemy.getLocationX() < ThreadCanvas.SCREEN_WIDTH
&& enemy.getLocationY() - 10 > 0
&& enemy.getLocationY() < ThreadCanvas.SCREEN_HEIGHT) {
enemy.reduceEnergy(1);
if (enemy.getEnergy() <= 0) {
player.addScore(enemy.getScore());
if (enemy.getType() != 26 && enemy.getType() != 27
&& enemy.getType() != 28
&& enemy.getType() != 29) {
enemy.setDestroy(true);
} else {
enemy.setDestroy(true);
hasPass = true;
}
}
}
hitBullet = getPlayerHitBullet(enemy.getBounds());
if (hitBullet != null) {
if (hitBullet.getType() == 1 || hitBullet.getType() == 2
|| hitBullet.getType() == 3
|| hitBullet.getType() == 0) {
enemy.reduceEnergy(player.bulletPower);
releaseBullet(hitBullet);
}
if (enemy.reduceEnergy(hitBullet.getHitPower()) <= 0) {
player.addScore(enemy.getScore());
if ((player.getScore() > 2000 && player.getScore() <= 2020)
|| (player.getScore() > 6000 && player
.getScore() <= 6020)) {
if (player.getLife() < 5)
player.setLife(player.getLife() + 1); //奖励生命
}
if (enemy.getType() != 26 && enemy.getType() != 27
&& enemy.getType() != 28
&& enemy.getType() != 29) {
enemy.setDestroy(true);
} else {
enemy.setDestroy(true);
hasPass = true;
}
if (enemy.getType() == 5 || enemy.getType() == 13
|| enemy.getType() == 4
|| enemy.getType() == 15) {
if (enemy.getType() == 5 || enemy.getType() == 13)
initialTreasure(TREASURE_04, enemy
.getLocationX(), enemy.getLocationY(),
2, 2);
if (enemy.getType() == 4 || enemy.getType() == 15)
initialTreasure(TREASURE_03, enemy
.getLocationX(), enemy.getLocationY(),
2, 2);
} else {
if (isInProbability(Tools.getRand(0, 99), 1)) {
initialTreasure(TREASURE_02, enemy
.getLocationX(), enemy.getLocationY(),
2, 2);
}
if (isInProbability(Tools.getRand(0, 99), 2)) {
initialTreasure(TREASURE_01, enemy
.getLocationX(), enemy.getLocationY(),
2, 2);
}
}
}
}
}
enemy = next;
}
// BOSS
if (!boss.isDead() && !boss.isDestroy()) {
hitBullet = getPlayerHitBullet(boss.getBounds());
if (hitBullet != null) {
if (hitBullet.getType() == 1 || hitBullet.getType() == 2
|| hitBullet.getType() == 3 || hitBullet.getType() == 0){
boss.reduceEnergy(player.bulletPower);
releaseBullet(hitBullet);
}
if (boss.reduceEnergy(hitBullet.getHitPower()) <= 0) {
player.addScore(boss.getScore());
player.addBombPoint();
boss.setDestroy(true);
}
}
}
// 宝物
if (!player.isDestroy()) {
MovingObject treasure = treasurePool.getFirstUsed();
while (treasure != null) {
MovingObject next = treasure.getNextLinked();
if (!treasure.isDestroy()
&& treasure.getBounds().intersects(player.getBounds())) {
switch (treasure.getType()) {
case TREASURE_01:
if(player.energy<100)player.addEnergy(10);
releaseTreasure(treasure);
break;
case TREASURE_02:
if(player.energy<100)player.addEnergy(30);
releaseTreasure(treasure);
break;
case TREASURE_03:
if(player.getBombNum() < 3)
{
player.addBomb();
}
releaseTreasure(treasure);
break;
case TREASURE_04:
int gunLevel = player.getGunLevel();
if (gunLevel < 3) {
player.setGunId(player.getGunId(), player.getGunLevel() + 1);
}
releaseTreasure(treasure);
break;
}
treasure.setType(treasure.getType() + 4);
treasure.reset();
treasure.setSpeedX(0);
treasure.setSpeedY(-2);
}
treasure = next;
}
}
// 看玩家是否与敌人或敌人的子弹发生碰撞
if (!player.isInvisible() || player.isDestroy()) {
// 普通敌人
enemy = (Enemy) getEnemyPool().getFirstUsed();
while (enemy != null) {
Enemy next = (Enemy) enemy.getNextLinked();
if (!enemy.isDead() && !enemy.isDestroy()) {
if (enemy.getBounds().intersects(player.getBounds())) {
if(enemy.getType()!=26&&enemy.getType()!=27&&enemy.getType()!=28&&enemy.getType()!=29)
{
enemy.setDestroy(true);
}
player.addEnergy((-1)*enemy.energy);
if (player.reduceEnergy(enemy.energy) <= 0)
{
player.setDestroy(true);
}
if (player.isDead())
return;
}
}
enemy = next;
}
// BOSS
if (!boss.isDead() && !boss.isDestroy()) {
if (boss.getBounds().intersects(player.getBounds())) {
player.setDestroy(true);
if (player.isDead())
return;
}
}
// 敌人子弹
hitBullet = getEnemyHitBullet(player.getBounds());
if (hitBullet != null) {
player.strong();
player.addEnergy(-10);
if (player.reduceEnergy(hitBullet.getHitPower()) <= 0) {
player.setDestroy(true);
}
releaseEnemyBullet(hitBullet);
if (player.isDead())
return;
}
}
}
/**
* 初始化宝物
*
* @param treasureType
* @param locX
* @param locY
* @param speedX
* @param speedY
* @return
*/
public boolean initialTreasure(int treasureType, int locX, int locY, int speedX, int speedY) {
MovingObject treasure = getTreasurePool().getNextFree();
treasure.initial(treasureType, 1, speedX, speedY, locX + 5, locY, 13,
13);
treasure.currentState = treasureType - TREASURE_01;
treasure.currentFrame = 0;
treasure.energy = 1;
treasure.destroy(false);
return true;
}
/**
* 返回是否在概率所在的范围内
*
* @param number
* 表示0-100区间的任意数
* @param probability
* 概率度
* @return 是否在概率度范围内
*/
private boolean isInProbability(int number, int probability) {
if (number <= probability) {
return true;
} else {
return false;
}
}
public void setControlKeys(boolean keyUp, boolean keyDown, boolean keyLeft,boolean keyRight) {
isKeyUp = keyUp;
isKeyDown = keyDown;
isKeyLeft = keyLeft;
isKeyRight = keyRight;
}
/**
* 获取对象池
* @return
*/
public MovingObjectPool getTreasurePool() {
return treasurePool;
}
public static MovingObjectPool getBulletPool() {
return bulletPool;
}
public static MovingObjectPool getEnemyBulletPool() {
return enemyBulletPool;
}
public MovingObjectPool getEnemyPool() {
return enemyPool;
}
/**
* 释放对象池
* @param treasure
*/
public final void releaseTreasure(MovingObject treasure) {
treasurePool.release(treasure);
}
public final void releaseBullet(MovingObject bullet) {
bulletPool.release(bullet);
}
public final void releaseEnemyBullet(MovingObject eBullet) {
enemyBulletPool.release(eBullet);
}
public final void releaseEnemy(MovingObject enemy) {
enemyPool.release(enemy);
}
public void reset() {
player.reset();
stage.reset();
clearPool();
boss.dead();
resetAllKey();
}
/**
* 回收资源
*
*/
public void reCycle() {
reset();
}
private void resetAllKey() {
setControlKeys(false, false, false, false);
isKeyFire = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -