📄 dragoncanvas.java
字号:
/**
* 关闭线程
*
*/
public void stop() {
dragonCanvasRunning = false;
dragonThread = null;
}
/**
* 游戏核心驱动线程!!
*/
public void run() {
long startTime = 0, endTime = 0, difTime = 0;
int rate = 30;// 刷新速度40/70/30/100/20/10/16/17
Thread currentThread = Thread.currentThread();
while (currentThread == dragonThread) {
startTime = System.currentTimeMillis();
gameUpdate();
drawIt(g);
endTime = System.currentTimeMillis();
difTime = endTime - startTime;
if (difTime < rate) {
try {
Thread.sleep(rate - difTime);
} catch (InterruptedException e) {
stop();
}
}
}
}
private void gameUpdate() {
//能够在游戏刚开始很短的时间内作为显示字符的条件
stringShowCounts++;
// =============龙和它的炸弹Start==============
if (random.nextInt() % 10 == 0) {
dragonYspeed = Math.min(Math.max(dragonYspeed + random.nextInt()
% 2, -1), 1);
}
dragonMonster.move(-2, dragonYspeed);
dragonMonster.nextFrame();
checkBounds(dragonMonster, WRAP);
// dragon随机投掷炸弹
if (random.nextInt() % 15 == 0) {
for (int i = 0; i < MISSILECOUNT; i++) {
if (!missile[i].isVisible()) {
missile[i].setFrame(4);
missile[i].setPosition(dragonMonster.getX() + 20,
dragonMonster.getY() + 25);
missile[i].setVisible(true);
break;
}
}
}
// ============龙和它的炸弹StartEnd=================
// ================自杀机start=====================
// 加入自杀机
if (random.nextInt() % 60 == 0) {
for (int i = 0; i < SUICIDORCOUNTS; i++) {
if (!suicidor[i].isVisible()) {
suicidor[i].setPosition(Math.abs(random.nextInt()
% (getWidth() - 50) + 40), Math.abs(random
.nextInt()
% (getHeight() - 100)));
suicidor[i].setVisible(true);
// break;//没有这一句产生4个自杀机
}
}
}
// 维护自杀机
for (int i = 0; i < SUICIDORCOUNTS; i++) {
if (suicidor[i].isVisible()) {
suicidor[i].move(0, 3);
if (suicidor[i].collidesWith(playerPlane, false)) {
if (!explosion[i].isVisible()) {
explosion[i].setPosition(playerPlane.getX() + 1,
playerPlane.getY());
explosion[i].setVisible(true);
explosion[i].nextFrame();
}
suicidor[i].setVisible(false);
playerHP = playerHP - 10;
}
checkBounds(suicidor[i], HIDE);
}
}
// ================自杀机end=======================
// =================粘土怪start====================
// 加入粘土怪2只
if(random.nextInt() % 10==0){
for (int i = 0; i < CLAYERCOUNTS; i++) {
if (!clayer[i].isVisible()) {
clayer[i].setPosition(Math.abs(random.nextInt()
% (getWidth() - 50) + 40), Math.abs(random
.nextInt()
% (getHeight() - 100)));
clayer[i].setVisible(true);
//break;
}
break;
}
}
// 维护粘土怪
for (int i = 0; i < CLAYERCOUNTS; i++) {
if (clayer[i].isVisible()) {
clayer[i].move(clayerXspeed, clayerYspeed);
clayer[i].nextFrame();
checkBounds(clayer[i], BOUNCE);
}
}
// =================粘土怪end======================
// =================粘土怪的炸弹start===============
// 添加粘土怪的炸弹
if (random.nextInt() % 15 == 0) {
for (int i = 0; i < CLAYERCOUNTS; i++) {
if (clayer[i].isVisible()) {
for (int j = 0; j < MISSILECOUNT; j++) {
if (!missile[j].isVisible()) {
missile[j].setFrame(1);
missile[j].setPosition(clayer[i].getX() + 10,
clayer[i].getY() + 20);
missile[j].setVisible(true);
break;
}
}
}
}
}
// =================粘土怪的炸弹end=================
// ==================维护爆炸start==================
for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
if (explosion[i].isVisible()) {
if (explosion[i].getFrame() < 3) {
explosion[i].nextFrame();
} else {
explosion[i].setVisible(false);
}
}
}
// ==================维护爆炸end===================
// ===============急救箱start===============
if (random.nextInt() % 180 == 0) {
for (int i = 0; i < 20; i++) {
if (!missile[i].isVisible()) {
missile[i].setFrame(9);
missile[i].setPosition(Math.abs(random.nextInt()
% (getWidth() - 50) + 25), Math.abs(random
.nextInt()
% (getHeight() - 100)) + 25);
missile[i].setVisible(true);
break;
}
}
}
// =============急救箱end==================
// ===============红心start=================
if (random.nextInt() % 350 == 0) {
for (int i = 0; i < MISSILECOUNT; i++) {
if (!missile[i].isVisible()) {
missile[i].setFrame(13);
missile[i].setPosition(Math.abs(random.nextInt()
% (getWidth() - 50) + 25), Math.abs(random
.nextInt()
% (getHeight() - 100) + 25));// x(25~151),y(25~123)
missile[i].setVisible(true);
break;
}
}
}
// ===============红心end==================
// playPlane响应按键
// =============playPlaneStart====================
playerPlaneXspeed = 0;
playerPlaneYspeed = 0;
int keyState = getKeyStates();
// 向左移动
if ((keyState & LEFT_PRESSED) != 0) {
playerPlaneXspeed = playerPlaneXspeed - 3;
playerPlane.nextFrame();
}
// 向右移动
else if ((keyState & RIGHT_PRESSED) != 0) {
playerPlaneXspeed = playerPlaneXspeed + 3;
playerPlane.nextFrame();
}
//返回菜单
else if((keyState & UP_PRESSED) != 0){
System.out.println(" 1.game interrupted! back to menu!");
missionOneGameOver = false;
dragonThread = null;
isWin = false;
Dragon.MISSIONCOUNTS = Dragon.MENULIST;
Dragon.showMenu = true;
// dragon.stop();
//menuList.setGameActive(true);
System.gc();
}
// 玩家开火
else if ((keyState & FIRE_PRESSED) != 0) {
/**
* 这里添加开火声!
*/
if(random.nextInt()%2 == 0){
for (int i = 0; i < MISSILECOUNT; i++) {
if (!missile[i].isVisible()) {
missile[i].setFrame(0);
missile[i].setPosition(playerPlane.getX() + 6, playerPlane
.getY() - 1);
missile[i].setVisible(true);
break;
}
}
}
}
playerPlane.move(playerPlaneXspeed, playerPlaneYspeed);
checkBounds(playerPlane, STOP);
// ================playerPlaneEnd====================
// =================对各种导弹的处理start===============
for (int i = 0; i < MISSILECOUNT; i++) {
if (missile[i].isVisible()) {
// ==========================玩家发射的导弹start=====================
if (missile[i].getFrame() == 0) {
missile[i].move(playerMissileXspeed, playerMissileYspeed);
// ==================击中龙start============================
if (missile[i].collidesWith(dragonMonster, false)) {
/**
* 这里添加爆炸音效
*/
// 对爆炸的处理start
for (int j = 0; i < EXPLOSIONCOUNTS; i++) {
if (!explosion[j].isVisible()) {
explosion[j].setFrame(0);
explosion[j].setPosition(
dragonMonster.getX() + 10,
dragonMonster.getY() + 15);
explosion[j].setVisible(true);
break;
}
}
// 对爆炸的处理end
missile[i].setVisible(false);
// 击中龙时更新信息star
bossHP = bossHP - 1;
playerScores = playerScores + 10;
// 击中龙时更新信息end
}
// ==================击中龙end===========================
// =================击中自杀机start====================
for (int k = 0; k < SUICIDORCOUNTS; k++) {
if (missile[i].collidesWith(suicidor[k], true)) {
for (int j = 0; i < EXPLOSIONCOUNTS; i++) {
if (!explosion[j].isVisible()) {
explosion[j].setFrame(0);
explosion[j].setPosition(
suicidor[k].getX() + 10,
suicidor[k].getY() + 15);
explosion[j].setVisible(true);
break;
}
}
// 隐藏碰撞后的精灵
missile[i].setVisible(false);
suicidor[k].setVisible(false);
// 击中自杀机后的奖励
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -