📄 tankcanvas.java
字号:
mapInfo[ (i * mapWidth / tileW) + j] = 1;
break;
default:
break;
}
}
}
homeWall = false;
}
}
if (timeCount == 10) {
isCapped = false;
hero.isCapped = false;
}
timeCount++;
if(timeCount == 10){ //erase the bomb image
if(tempPos.size()!=0){
g.setColor(0x0);
for(i=0;i<tempPos.size();i++){
Point p = (Point)tempPos.elementAt(i);
g.fillRect(p.x,p.y,12,12);
}
tempPos.removeAllElements();
}
}
if(timeCount == 40){
liveCount = 0;
for (i = 0; i < currentEnemy; i++) {
if (enemyAlive[i]) {
liveCount++;
}
}
timeCount = 0;
if(currentEnemy<maxShowEnemy&¤tEnemy<leftEnemy){
currentEnemy++;
enemy[currentEnemy-1] = enemy[numPos];
numPos++;
enemy[currentEnemy-1].alive = true;
enemyAlive[currentEnemy-1] = true;
int pos = (currentEnemy-1)%3;
switch(pos) {
case 0:
enemy[currentEnemy-1].posX = mapOffsetX + mapWidth/2 - enemy[currentEnemy-1].frameWidth/2;
enemy[currentEnemy-1].posY = mapOffsetY + enemy[currentEnemy-1].frameHeight;
break;
case 1:
enemy[currentEnemy-1].posX = mapOffsetX;
enemy[currentEnemy-1].posY = mapOffsetY + enemy[currentEnemy-1].frameHeight;
break;
case 2:
enemy[currentEnemy-1].posX = mapOffsetX + mapWidth - enemy[currentEnemy-1].frameWidth;
enemy[currentEnemy-1].posY = mapOffsetY + enemy[currentEnemy-1].frameHeight;
default:
break;
}
if(ifTimer){
enemy[currentEnemy-1].ifTimer = true;
}
for ( int i0 = 0; i0 < currentEnemy-1; i0 ++ ){
if ( enemyAlive[i0] ) {//add failed
if ( enemy[i0].isObjCollide( enemy[currentEnemy-1].posX, enemy[currentEnemy-1].posY ) ){
enemy[currentEnemy-1].alive = false;
enemyAlive[currentEnemy-1] = false;
enemy[currentEnemy-1].ifTimer = false;
currentEnemy--;
numPos--;
break;
}
}
}
}
}
for ( i = 0; i < currentEnemy; i ++ ){
if ( enemyAlive[i] ) {
enemy[i].paint(g);//绘制当前敌人
for ( j = 0; j < currentEnemy; j ++ ){//检测地任何敌人的碰撞
if ( i == j )
continue;
if ( enemy[j].alive ) {
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;
}
}
}
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(!isCapped){ //when there is no isCapped protection
hero.status = 2;
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) ){
SoundPlayer.getInstance().playExplodeSound();
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;
}
if(enemy[i].kind == 1){
reDraw = true;
bonus.formerBonusX = bonus.bonusX;
bonus.formerBonusY = bonus.bonusY;
Random r = new Random();
int num = Math.abs(r.nextInt()%6)+1;
bonus.bonusKind = num;
bonus.bonusX = Math.abs(r.nextInt() % (mapWidth - 50)) +
mapOffsetX;
bonus.bonusY = Math.abs(r.nextInt() %
(mapHeight - 50)) + mapOffsetY;
}
if(enemy[i].kind == 2){
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;
leftEnemy--;
}
if ( leftEnemy == 0 ){
isWin = true;
}
g.fillRect(enemy[i].posX, enemy[i].posY, enemy[i].frameWidth, enemy[i].frameHeight);
if(enemy[i].lifeCount <= 0){
if(i!=currentEnemy-1){
enemy[i].posX = -1000;
enemy[i].posY = -1000;
}
}
}
} else {
if ( leftEnemy >= currentEnemy ||(leftEnemy>0&&liveCount<currentEnemy&&liveCount<leftEnemy)){
//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;
}
for ( int i0 = 0; i0 < currentEnemy; 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; }
}
}
}
}
}
if ( bullet[0].alive ){
if(bullet[0].isbomb){
SoundPlayer.getInstance().playExplodeSound();
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 < currentEnemy; j ++ ){
if ( enemy[j].bulletNo == i && enemy[j].shootFlag == true )
enemy[j].shootFlag = false;
}
}
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);
}
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 (!isCapped) {
bullet[0].starNum = 0;
hero.status = 2;
hero.direction = hero.direction & 0x0f;
hero.count = 8;
}
}
}
}
if(grassPaint){
reDraw(3, g);
}
if ( isWin || isLose){
if (isLose){
bullet[0].starNum = 0; //reset the bullet speed
}
bullet[0].paint(g);
if(isLose)canMove = false;
isFirstTime = true;
gameStatus = 5;
gameSubStatus = 1;
}
}
g.setColor(0x3f, 0x3f, 0x3f);
g.fillRect(0,CanvasHeight-fontHeight,CanvasWidth,CanvasHeight);
g.setColor(0xffffff);
g.setFont(font);
if(isPaused==false)g.drawString("暂停", CanvasWidth-2*fontWidth, CanvasHeight-fontHeight, 20);
else g.drawString("继续", CanvasWidth-2*fontWidth, CanvasHeight-fontHeight, 20);
g.drawString("退出", 0, CanvasHeight-fontHeight, 20);
}
private void drawResult(Graphics g){
ResultCnt++;
switch(gameSubStatus) {
case 1:
if(isFirstTime){
g.setColor(0x3f, 0x3f, 0x3f);
g.fillRect(0,0,CanvasWidth,CanvasHeight);
g.setColor(0x0);
g.fillRect(mapOffsetX,mapOffsetY,mapWidth,mapHeight);
isFirstTime = false;
}
g.setColor(0xff8080);
g.setFont(Font.getFont(Font. FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_LARGE));
g.drawString("最高分:20000", CanvasWidth/2, mapOffsetY+5, g.TOP|g.HCENTER);
g.setFont(Font.getFont(Font. FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
g.drawString("关数:"+level, CanvasWidth/2, mapOffsetY+7+fontHeight, g.TOP|g.HCENTER);
g.drawImage(EnemyPool.enemyUpNormal,CanvasWidth/2+25, mapOffsetY+10+2*fontHeight,20);
g.drawImage(EnemyPool.enemyUpRed,CanvasWidth/2+25, mapOffsetY+20+3*fontHeight,20);
g.drawImage(EnemyPool.enemyUpGreen,CanvasWidth/2+25, mapOffsetY+30+4*fontHeight,20);
g.drawImage(EnemyPool.enemyUpNormal,CanvasWidth/2+25, mapOffsetY+40+5*fontHeight,20);
g.drawString("得分", mapOffsetX+mapWidth/4+30, mapOffsetY+10+2*fontHeight, g.TOP|g.HCENTER);
g.drawString("得分", mapOffsetX+mapWidth/4+30, mapOffsetY+20+3*fontHeight, g.TOP|g.HCENTER);
g.drawString("得分", mapOffsetX+mapWidth/4+30, mapOffsetY+30+4*fontHeight, g.TOP|g.HCENTER);
g.drawString("得分", mapOffsetX+mapWidth/4+30, 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -