📄 tankcanvas.java
字号:
g.setColor(0x00, 0xfe, 0xfe);
g.drawString("开始游戏", CanvasWidth / 2, (CanvasHeight -
imgTitle.getHeight()) / 3+imgTitle.getHeight(), g.TOP |
g.HCENTER);
g.drawString("选择关卡", CanvasWidth / 2, (CanvasHeight -
imgTitle.getHeight()) / 3+imgTitle.getHeight() +
fontHeight, g.TOP | g.HCENTER);
g.drawString("游戏说明", CanvasWidth / 2, (CanvasHeight -
imgTitle.getHeight()) / 3+imgTitle.getHeight() + 2 *
fontHeight, g.TOP | g.HCENTER);
g.setColor(0xfe, 0x3f, 0x00);
g.drawString("退出程序", CanvasWidth / 2, (CanvasHeight -
imgTitle.getHeight()) / 3+imgTitle.getHeight() + 3 *
fontHeight, g.TOP | g.HCENTER);
break;
default:
break;
}
break;
default:
break;
}
}
private void drawGame(Graphics g)
{
if(!isPaused){
g.setColor(0x3f, 0x3f, 0x3f);
g.fillRect(0, 0, CanvasWidth, mapOffsetY);
g.fillRect(0, 0, mapOffsetX, mapOffsetY+mapHeight);
g.fillRect(mapOffsetX + mapWidth, 0, CanvasWidth - mapOffsetX - mapWidth, mapOffsetY+mapHeight);
if (isShowLevel)
{
g.setColor(0);
g.fillRect(0, 0, CanvasWidth, CanvasHeight);
g.setColor(fadeColor, fadeColor, fadeColor);
g.setFont(font);
g.drawString("第 " + level + " 关", CanvasWidth / 2, CanvasHeight /
2, 17);
if (isFadeIn)
{
if (fadeColor < 0xfc)
{
fadeColor += 16;
if (fadeColor > 0xfc)
{
fadeColor -= 16;
isFadeIn = false;
}
}
else
isFadeIn = false;
}
else
{
if (fadeColor > 0)
{
fadeColor -= 16;
if (fadeColor < 0)
{
isShowLevel = false;
}
}
else
{
isShowLevel = false;
}
}
return ;
}
if ( isFirstTime ){
isVictorShowed = false;
g.setColor(0x3f, 0x3f, 0x3f);
g.fillRect(0, 0, CanvasWidth, CanvasHeight);
for ( i = 0; i < mapHeight/tileW; i += 2 ){
for ( j = 0; j < mapWidth/tileW; j += 2 ){
switch( mapInfo[(i*mapWidth/tileW)+j] ) {
case 0:
g.drawImage(imgTile1, mapOffsetX+j*tileW, mapOffsetY+i*tileW, g.TOP|g.LEFT);
break;
case 1:
g.drawImage(imgTile2, mapOffsetX+j*tileW, mapOffsetY+i*tileW, g.TOP|g.LEFT);
break;
case 2:
g.drawImage(imgTile3, mapOffsetX+j*tileW, mapOffsetY+i*tileW, g.TOP|g.LEFT);
break;
case 3:
g.drawImage(imgTile4, mapOffsetX+j*tileW, mapOffsetY+i*tileW, g.TOP|g.LEFT);
break;
case 4:
case 5:
case 6:
case 7:
if ( !isVictorShowed ){
g.drawImage(imgVictor, mapOffsetX+j*tileW, mapOffsetY+i*tileW, g.TOP|g.LEFT);
isVictorShowed = true;
}
default:
break;
}
}
}
g.setColor(0x0);
if ( isNotationDown ){
g.drawImage(imgLogoPlayer, mapOffsetX+mapWidth+2, mapOffsetY+2 , g.TOP|g.LEFT);
g.drawImage(imgLogoEnemy, mapOffsetX+mapWidth+2, mapOffsetY+mapHeight/2, g.TOP|g.LEFT);
}else {
g.drawImage(imgLogoPlayer, mapOffsetX+2, mapOffsetY+mapHeight+2 , g.TOP|g.LEFT);
g.drawImage(imgLogoEnemy, mapOffsetX+mapWidth/2, mapOffsetY+mapHeight+2, g.TOP|g.LEFT);
}
isFirstTime = false;
}
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL));
if ( isNotationDown){ //draw the string
g.setColor(0x3f, 0x3f, 0x3f);
g.fillRect(mapOffsetX+mapWidth+1, mapOffsetY+hero.frameHeight+3, 20, fontHeight);
g.fillRect(mapOffsetX+mapWidth+1, mapOffsetY+mapHeight/2+hero.frameHeight+2, 20, fontHeight);
g.setColor(0xff, 0xff, 0xfe);
g.drawString(" "+ life, mapOffsetX+mapWidth+2, mapOffsetY+hero.frameHeight+1, g.TOP|g.LEFT);
g.drawString(" "+ leftEnemy, mapOffsetX+mapWidth+2, mapOffsetY+mapHeight/2+hero.frameHeight+0, g.TOP|g.LEFT);
}else { //vertical
g.setColor(0x3f, 0x3f, 0x3f);
g.fillRect(mapOffsetX+hero.frameWidth+3, mapOffsetY+mapHeight+1, 20, fontHeight);
g.fillRect(mapOffsetX+mapWidth/2+hero.frameWidth+1, mapOffsetY+mapHeight+1, 20, fontHeight);
g.setColor(0xff, 0xff, 0xfe);
g.drawString(" "+ life, mapOffsetX+hero.frameWidth+2, mapOffsetY+mapHeight+1, g.TOP|g.LEFT);
g.drawString(" "+ leftEnemy, mapOffsetX+mapWidth/2+hero.frameWidth, mapOffsetY+mapHeight+1, g.TOP|g.LEFT);
}
g.setColor(0xffffff);
g.setFont(font);
if(reDraw ){
if (bonus.formerBonusX != -1) {
int fromX = bonus.formerBonusX - mapOffsetX - tileW*2;
int fromY = bonus.formerBonusY - mapOffsetY - tileW*2;
int toX = bonus.formerBonusX - mapOffsetX + bonus.bonusWidth + tileW*2;
int toY = bonus.formerBonusY - mapOffsetY + bonus.bonusHeight + tileW*2;
if(fromX<0){
fromX = 0;
}else if((fromX%(tileW*2))!=0){
fromX = fromX - (fromX%(tileW*2));
}
if(fromY<0){
fromY = 0;
}else if((fromY%(tileW*2))!=0){
fromY = fromY - (fromY%(tileW*2));
}
if(toX>mapWidth){
toX = mapWidth;
}
if(toY>mapHeight){
toY = mapHeight;
}
for (i = fromY / tileW;
i < toY / tileW;
i += 2) {
for (j = fromX / tileW;
j < toX / tileW;
j += 2) {
switch (mapInfo[ (i * mapWidth / tileW) + j]) {
case 0:
g.drawImage(imgTile1, mapOffsetX + j * tileW,
mapOffsetY + i * tileW,
g.TOP | g.LEFT);
break;
case 1:
g.drawImage(imgTile2, mapOffsetX + j * tileW,
mapOffsetY + i * tileW,
g.TOP | g.LEFT);
break;
case 2:
g.drawImage(imgTile3, mapOffsetX + j * tileW,
mapOffsetY + i * tileW,
g.TOP | g.LEFT);
break;
case 3:
g.drawImage(imgTile4, mapOffsetX + j * tileW,
mapOffsetY + i * tileW,
g.TOP | g.LEFT);
break;
default:
break;
}
}
}
}
reDraw = false;
}
if(bonus.bonusKind!=0){
bonus.paint(g);
}
if(bonus.bonusKind != 0){
if (hero.isObjCollide(bonus.bonusX, bonus.bonusY,
bonus.bonusWidth, bonus.bonusHeight)) {
bonusMark = bonusMark + 500;
switch(bonus.bonusKind){
case 1: //timer
for ( i = 0; i < currentEnemy; i ++ ){
if (enemyAlive[i]) {
enemy[i].ifTimer = true;
}
ifTimer = true;
timeCount = 0;
}
break;
case 2:
if(bullet[0].starNum<3){
bullet[0].starNum = bullet[0].starNum + 1;
}
break;
case 3:
timeCount = 0;
for ( i = 0; i < currentEnemy; i ++ ){
enemy[i].alive = false;
if ( enemyAlive[i] ){
enemyAlive[i] = false;
leftEnemy--;
g.drawImage(bombImage, enemy[i].posX, enemy[i].posY, g.TOP|g.LEFT);
Point p = new Point(enemy[i].posX,enemy[i].posY);
tempPos.addElement(p);
enemy[i].posX = -1000;
enemy[i].posY = -1000;
if(leftEnemy == 0){
isWin = true;
timeCount = 0;
}
}
}
break;
case 4:
if(!homeWall){
homeWall = true;
for (i = (mapHeight - tileW*6) / tileW;
i < (mapHeight) / tileW;
i += 2) {
for (j = (mapWidth / 2 - tileW*4) / tileW;
j < (mapWidth / 2 + tileW*4) / tileW;
j += 2) {
switch (mapInfoFormer[ (i * mapWidth / tileW) +
j]) {
case 0:
g.drawImage(imgTile1,
mapOffsetX + j * tileW,
mapOffsetY + i * tileW,
g.TOP | g.LEFT);
break;
case 1:
g.drawImage(imgTile3,
mapOffsetX + j * tileW,
mapOffsetY + i * tileW,
g.TOP | g.LEFT);
mapInfo[ (i * mapWidth / tileW) +
j] = 2;
break;
default:
break;
}
}
}
}
timeCount = 0;
break;
case 5:
life++;
break;
case 6:
isCapped = true;
hero.isCapped = true;
timeCount = 0;
break;
default:
break;
}
bonus.bonusKind = 0;
reDraw = true;
bonus.formerBonusX = bonus.bonusX;
bonus.formerBonusY = bonus.bonusY;
}
}
if (timeCount == 15) {
if(ifTimer){
for (i = 0; i < currentEnemy; i++) {
if (enemyAlive[i]) {
enemy[i].ifTimer = false;
}
}
ifTimer = false;
}
if (homeWall) {
for (i = (mapHeight - tileW*6) / tileW;
i < (mapHeight) / tileW;
i += 2) {
for (j = (mapWidth / 2 - tileW*4) / tileW;
j < (mapWidth / 2 + tileW*4) / tileW;
j += 2) {
switch (mapInfo[ (i * mapWidth / tileW) + j]) {
case 0:
g.drawImage(imgTile1, mapOffsetX + j * tileW,
mapOffsetY + i * tileW,
g.TOP | g.LEFT);
break;
case 2:
g.drawImage(imgTile2, mapOffsetX + j * tileW,
mapOffsetY + i * tileW,
g.TOP | g.LEFT);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -