📄 ictankcanvas.java
字号:
}
}
if (timeCount == 40) {
// now how many enemy tankers are alive
liveCount = 0;
for (i = 0; i < maxEnemy; i++) {
if (enemyAlive[i]) {
liveCount++;
}
}
timeCount = 0;
if (maxEnemy < maxShowEnemy && maxEnemy < numEnemy) {
maxEnemy++;
//enemy[maxEnemy-1] = new Enemy(kind);
//System.out.println("numPos1="+numPos);
enemy[maxEnemy - 1] = enemy[numPos];
numPos++;
enemy[maxEnemy - 1].alive = true;
enemyAlive[maxEnemy - 1] = true;
int pos = (maxEnemy - 1) % 3;
switch (pos) {
case 0:
enemy[maxEnemy - 1].posX = mapOffsetX + mapWidth / 2 -
enemy[maxEnemy - 1].frameWidth / 2;
enemy[maxEnemy - 1].posY = mapOffsetY + enemy[maxEnemy -
1].frameHeight;
break;
case 1:
enemy[maxEnemy - 1].posX = mapOffsetX;
enemy[maxEnemy - 1].posY = mapOffsetY + enemy[maxEnemy -
1].frameHeight;
break;
case 2:
enemy[maxEnemy - 1].posX = mapOffsetX + mapWidth - enemy[maxEnemy -
1].frameWidth;
enemy[maxEnemy - 1].posY = mapOffsetY + enemy[maxEnemy -
1].frameHeight;
default:
break;
}
//if in the timer process, the new born tanker should also be timered
if (ifTimer) {
enemy[maxEnemy - 1].ifTimer = true;
}
for (int i0 = 0; i0 < maxEnemy - 1; i0++) {
if (enemyAlive[i0]) {
if (enemy[i0].isobjCollide(enemy[maxEnemy - 1].posX,
enemy[maxEnemy - 1].posY)) {
enemy[maxEnemy - 1].alive = false;
enemyAlive[maxEnemy - 1] = false;
enemy[maxEnemy - 1].ifTimer = false;
maxEnemy--;
numPos--;
break;
}
}
}
}
}
//----add new enemy finished here
for (i = 0; i < maxEnemy; i++) {
if (enemyAlive[i]) {
enemy[i].paint(g);
// Check tank collision
for (j = 0; j < maxEnemy; j++) {
if (i == j) {
continue;
}
if (enemy[j].alive) {
//collide with enemy
if (enemy[i].isobjCollide(enemy[j].posX, enemy[j].posY)) {
enemy[i].direction = (enemy[i].direction ^ 7) & 3;
if (enemy[i].direction == 0) {
enemy[i].direction = 4;
}
}
}
}
//collide with hero
if (enemy[i].isobjCollide(hero.posX, hero.posY) && (hero.status == 1)) {
enemy[i].direction = (enemy[i].direction ^ 7) & 3;
if (enemy[i].direction == 0) {
enemy[i].direction = 4;
}
if (!cap) { //when there is no cap protection
hero.status = 7;
hero.direction = hero.direction & 0x0f;
hero.count = 8;
}
else {
hero.direction = (hero.direction ^ 7) & 3;
}
}
if (bullet[0].alive &&
(bullet[0].isobjCollide(enemy[i].posX, enemy[i].posY,
enemy[i].frameWidth, enemy[i].frameHeight)) &&
(!bullet[0].bombFlag)) {
sD[0].stop();
sD[1].stop();
sD[0].play(1);
//account the number of the beat tanker
switch (enemy[i].kind) {
case 0:
normalNum++;
break;
case 1:
redNum++;
break;
case 2:
if (enemy[i].lifeCount == 1) {
greenNum++;
}
break;
case 3:
superNum++;
break;
default:
break;
}
//add by johnson
if (enemy[i].kind == 1) {
reDraw = true;
symboll.formerSymbolX = symboll.symbolX;
symboll.formerSymbolY = symboll.symbolY;
Random r = new Random();
//restore later
int num = Math.abs(r.nextInt() % 6) + 1;
//int num = 3;
symboll.symbolState = num;
symboll.symbolX = Math.abs(r.nextInt() % (mapWidth - 50)) +
mapOffsetX;
symboll.symbolY = Math.abs(r.nextInt() %
(mapHeight - 50)) + mapOffsetY;
}
//end adding
if (enemy[i].kind == 2) {
enemy[i].lifeCount--;
// System.out.println("enemy[i].lifeCount="+enemy[i].lifeCount);
if (enemy[i].lifeCount != 0) {
bullet[0].alive = false;
g.fillRect(bullet[0].posX, bullet[0].posY, bullet[0].frameWidth,
bullet[0].frameHeight);
}
}
if (enemy[i].lifeCount <= 0) {
bullet[0].BposX = enemy[i].posX;
bullet[0].BposY = enemy[i].posY;
bullet[0].bombFlag = true;
bullet[0].bombCount = 8;
enemyAlive[i] = false;
numEnemy--;
enemyover = true;
}
if (numEnemy == 0) {
gameWin = true;
overtimer.timeCounter = 0;
}
g.fillRect(enemy[i].posX, enemy[i].posY, enemy[i].frameWidth,
enemy[i].frameHeight);
if (enemy[i].lifeCount <= 0) {
if (i != maxEnemy - 1) {
enemy[i].posX = -1000;
enemy[i].posY = -1000;
}
}
}
}
else {
if (numEnemy >= maxEnemy ||
(numEnemy > 0 && liveCount < maxEnemy && liveCount < numEnemy)) {
//add by johnson
liveCount++;
Random r = new Random();
j = Math.abs(r.nextInt() % 3);
enemy[i] = enemy[numPos];
numPos++;
switch (j) {
case 0:
enemy[i].posX = mapOffsetX + mapWidth / 2 -
enemy[0].frameWidth / 2;
enemy[i].posY = mapOffsetY + 2;
break;
case 1:
enemy[i].posX = mapOffsetX;
enemy[i].posY = mapOffsetY + 2;
break;
case 2:
enemy[i].posX = mapOffsetX + mapWidth - enemy[2].frameWidth;
enemy[i].posY = mapOffsetY + 2;
default:
break;
}
enemy[i].alive = true;
enemyAlive[i] = true;
if (enemy[i].kind == 2) {
enemy[i].lifeCount = 3;
}
if (ifTimer) {
enemy[i].ifTimer = true;
}
// maxEnemy++;
for (int i0 = 0; i0 < maxEnemy; i0++) {
if (enemyAlive[i0] && (i != i0)) {
if (enemy[i0].isobjCollide(enemy[i].posX, enemy[i].posY)) {
enemy[i].alive = false;
enemyAlive[i] = false;
numPos--;
break;
// maxEnemy--;
}
}
}
// System.out.println("produce a new tanker ok.");
}
}
}
if (bullet[0].alive) {
if (bullet[0].isbomb) {
sD[0].stop();
sD[1].stop();
sD[0].play(1);
bullet[0].isbomb = false;
}
bullet[0].paint(g);
}
else {
hero.shootFlag = false;
bulletAlive[0] = false;
}
hero.paint(g);
for (i = 1; i < maxBullet; i++) {
if (bulletAlive[i]) {
bullet[i].paint(g);
if (!bullet[i].alive) {
bulletAlive[i] = false;
for (j = 0; j < maxEnemy; j++) {
if (enemy[j].bulletNo == i && enemy[j].shootFlag == true) {
enemy[j].shootFlag = false;
}
}
}
//shoot hero bullet
if (bulletAlive[0] &&
bullet[i].isobjCollide(bullet[0].posX, bullet[0].posY,
bullet[0].frameWidth,
bullet[0].frameHeight) &&
(hero.status == 1) && (!bullet[i].bombFlag) &&
(!bullet[0].bombFlag)) {
bullet[i].alive = false;
bullet[0].alive = false;
bulletAlive[0] = false;
bulletAlive[i] = false;
g.fillRect(bullet[i].posX, bullet[i].posY, bullet[i].frameWidth,
bullet[i].frameHeight);
g.fillRect(bullet[0].posX, bullet[0].posY, bullet[0].frameWidth,
bullet[0].frameHeight);
}
//shoot hero
if (bullet[i].isobjCollide(hero.posX, hero.posY, hero.frameWidth,
hero.frameHeight) && (hero.status == 1) &&
(!bullet[i].bombFlag)) {
bullet[i].alive = false;
bulletAlive[i] = false;
g.fillRect(bullet[i].posX, bullet[i].posY,
bullet[i].frameWidth, bullet[i].frameHeight);
if (!cap) {
//when hero is shoot, its star reset to 0
bullet[0].starNum = 0;
hero.status = 7;
hero.direction = hero.direction & 0x0f;
hero.count = 8;
}
}
}
}
//repaint the grass
/* for ( i = 0; i < mapHeight/3; i += 2 ){
for (j = 0; j < mapWidth / 3; j += 2) {
switch (mapInfo[ (i * mapWidth / 3) + j]) {
case 3:
g.drawImage(tile4, mapOffsetX + j * 3,
mapOffsetY + i * 3, g.TOP | g.LEFT);
break;
default:
break;
}
}
}*/
if (grassPaint) {
reDraw(3, g);
}
if (gameWin || gameLose) {
// Load the winlose image
try {
/*if (gameWin)
winlose = Image.createImage("/win.png");
if (gameLose)
winlose = Image.createImage("/lose.png");*/
if (gameLose) {
bullet[0].starNum = 0; //reset the bullet speed
}
}
catch (Exception exception) {
System.out.println(exception);
}
bullet[0].paint(g);
//title_x = winlose.getWidth()/2 ;
//title_y = winlose.getHeight()/2 ;
/* for ( i = 1; i < maxBullet; i ++ ){
if ( bulletAlive[i] )
bullet[i].paint(g);
}*/
if (gameLose) {
canmove = false;
}
if (overtimer.timeCounter == 5) {
title_w = 0;
title_h = 0;
gameSubStatus = 1;
firstTime = true;
gameStatus = 4;
}
}
}
}
private void resultPaint(Graphics g) {
switch (gameSubStatus) {
case 1:
if (firstTime) {
g.setColor(0x3f, 0x3f, 0x3f);
g.fillRect(0, 0, width, height);
g.setColor(0x0);
g.fillRect(mapOffsetX, mapOffsetY, mapWidth, mapHeight);
firstTime = false;
ictimer.timeCounter = 0;
}
g.setColor(0xff8080);
g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
Font.SIZE_MEDIUM));
// g.drawString("HI SCORE:20000", width/2, (height-ic.getHeight()-fontHeight)/2-3, g.TOP|g.HCENTER);
g.drawString("最高分:20000", width / 2, mapOffsetY + 5, g.TOP | g.HCENTER);
g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
Font.SIZE_SMALL));
g.drawString("关数:" + level, width / 2, mapOffsetY + 7 + fontHeight,
g.TOP | g.HCENTER);
g.drawImage(ImageHelper.enemyUp, width / 2 + 25,
mapOffsetY + 10 + 2 * fontHeight, 20);
g.drawImage(ImageHelper.enemyUpRed, width / 2 + 25,
mapOffsetY + 20 + 3 * fontHeight, 20);
g.drawImage(ImageHelper.enemyUpIron, width / 2 + 25,
mapOffsetY + 30 + 4 * fontHeight, 20);
g.drawImage(ImageHelper.enemyUp, width / 2 + 25,
mapOffsetY + 40 + 5 * fontHeight, 20);
g.drawString("得分", mapOffsetX + mapWidth / 4 + 10,
mapOffsetY + 10 + 2 * fontHeight, g.TOP | g.HCENTER);
g.drawString("得分", mapOffsetX + mapWidth / 4 + 10,
mapOffsetY + 20 + 3 * fontHeight, g.TOP | g.HCENTER);
g.drawString("得分", mapOffsetX + mapWidth / 4 + 10,
mapOffsetY + 30 + 4 * fontHeight, g.TOP | g.HCENTER);
g.drawString("得分", mapOffsetX + mapWidth / 4 + 10,
mapOffsetY + 40 + 5 * fontHeight, g.TOP | g.HCENTER);
int total = superNum + greenNum + redNum + normalNum;
int totalMark1 = superNum * 400 + greenNum * 300 + redNum * 200 +
normalNum * 100 + bonusMark;
if (gameWin) {
totalMark = totalMark + totalMark1;
}
else {
totalMark = 0;
}
switch (ictimer.timeCounter) {
case 7:
ictimer.timeCounter = 0;
gameSubStatus++;
case 6:
g.drawString("总共", mapOffsetX + mapWidth / 4 + 15,
mapOffsetY + 70 + 5 * fontHeight, g.TOP | g.HCENTER);
g.drawString(String.valueOf(total),
mapOffsetX + 3 * mapWidth / 8 + 20,
mapOffsetY + 70 + 5 * fontHeight, g.TOP | g.HCENTER);
g.drawString(String.valueOf(totalMark1), mapOffsetX + mapWidth / 8,
mapOffsetY + 70 + 5 * fontHeight, g.TOP | g.HCENTER);
case 5:
g.drawLine(mapOffsetX + mapWidth / 20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -