📄 zoncanvas.java
字号:
}
return true;
}
public boolean loadScore() {
try {
RecordStore rs = RecordStore.openRecordStore("hiscore", false);
RecordEnumeration re = rs.enumerateRecords(null, null, false);
if (!re.hasNextElement()) { // no record exist
return false;
}
byte[] scoreData = re.nextRecord();
ByteArrayInputStream bis = new ByteArrayInputStream(scoreData);
DataInputStream dis = new DataInputStream(bis);
hiScore = dis.readInt();
/* soundOn = dis.readBoolean();
soundType = dis.readInt();*/
scoreData = null;
dis.close();
dis = null;
bis.close();
bis = null;
re.destroy();
re = null;
rs.closeRecordStore();
rs = null;
System.gc();
} catch (Exception e) {
return false;
}
return true;
}
public boolean saveGame() {
try {
RecordStore rs = RecordStore.openRecordStore("savedata", true);
RecordEnumeration re = rs.enumerateRecords(null, null, false);
int id;
while (re.hasNextElement()) {
id = re.nextRecordId();
rs.deleteRecord(id);
}
re.destroy();
re = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeInt(gameStage);
dos.writeInt(soundType);
dos.writeBoolean(soundOn);
dos.writeInt(mainMap.getOffsetX());
dos.writeInt(mainMap.getOffsetY());
dos.writeInt(showTipCount);
dos.writeInt(tipFlag);
if (!spriteLead.saveData(dos))
return false;
int i, count = enemyBirds.length;
for (i = 0; i < count; i++)
if (!enemyBirds[i].saveData(dos))
return false;
count = enemySpring.length;
for (i = 0; i < count; i++)
if (!enemySpring[i].saveData(dos))
return false;
count = stepStone.length;
for (i = 0; i < count; i++)
if (!stepStone[i].saveData(dos))
return false;
count = magicBoxes.length;
for (i = 0; i < count; i++)
if (!magicBoxes[i].saveData(dos))
return false;
count = fence.length;
for (i = 0; i < count; i++)
if (!fence[i].saveData(dos))
return false;
count = deadZone.length;
for (i = 0; i < count; i++)
if (!deadZone[i].saveData(dos))
return false;
switch (gameStage) {
case GAMESTAGE_ONE:
count = enemyTops.length;
for (i = 0; i < count; i++)
if (!enemyTops[i].saveData(dos))
return false;
break;
case GAMESTAGE_TWO:
count = enemyBlueFeet.length;
for (i = 0; i < count; i++)
if (!enemyBlueFeet[i].saveData(dos))
return false;
break;
case GAMESTAGE_THREE:
count = stepYellow.length;
for (i = 0; i < count; i++)
if(!stepYellow[i].saveData(dos))
return false;
count = enemyTops.length;
for (i = 0; i < count; i++)
if (!enemyTops[i].saveData(dos))
return false;
break;
default:
return false;
}
byte[] saveData = bos.toByteArray();
rs.addRecord(saveData, 0, saveData.length);
saveData = null;
dos.close();
dos = null;
bos.close();
bos = null;
rs.closeRecordStore();
rs = null;
System.gc();
} catch (Exception e) {
return false;
}
return true;
}
public boolean loadGame() {
try {
RecordStore rs = RecordStore.openRecordStore("savedata", false);
RecordEnumeration re = rs.enumerateRecords(null, null, false);
if (!re.hasNextElement())
throw new Exception();
byte[] saveData = re.nextRecord();
ByteArrayInputStream bis = new ByteArrayInputStream(saveData);
DataInputStream dis = new DataInputStream(bis);
gameStage = dis.readInt();
soundType = dis.readInt();
soundOn = dis.readBoolean();
if (!initStage())
return false;
int x = dis.readInt();
int y = dis.readInt();
mainMap.setPosition(x, y);
showTipCount = dis.readInt();
tipFlag = dis.readInt();
if (!spriteLead.loadData(dis))
return false;
// birds, spring, tops, stone, box, fence
int i, count = enemyBirds.length;
for (i = 0; i < count; i++)
if (!enemyBirds[i].loadData(dis))
return false;
count = enemySpring.length;
for (i = 0; i < count; i++)
if (!enemySpring[i].loadData(dis))
return false;
count = stepStone.length;
for (i = 0; i < count; i++)
if (!stepStone[i].loadData(dis))
return false;
count = magicBoxes.length;
for (i = 0; i < count; i++)
if (!magicBoxes[i].loadData(dis))
return false;
count = fence.length;
for (i = 0; i < count; i++)
if (!fence[i].loadData(dis))
return false;
count = deadZone.length;
for (i = 0; i < count; i++)
if (!deadZone[i].loadData(dis))
return false;
switch (gameStage) {
case GAMESTAGE_ONE:
count = enemyTops.length;
for (i = 0; i < count; i++)
if (!enemyTops[i].loadData(dis))
return false;
break;
case GAMESTAGE_TWO:
count = enemyBlueFeet.length;
for (i = 0; i < count; i++)
if (!enemyBlueFeet[i].loadData(dis))
return false;
break;
case GAMESTAGE_THREE:
count = stepYellow.length;
for(i = 0; i < count; i++)
if(!stepYellow[i].loadData(dis))
return false;
count = enemyTops.length;
for (i = 0; i < count; i++)
if (!enemyTops[i].loadData(dis))
return false;
break;
default:
return false;
}
appState = APPSTATE_GAME;
saveData = null;
dis.close();
dis = null;
bis.close();
bis = null;
re.destroy();
re = null;
rs.closeRecordStore();
rs = null;
System.gc();
} catch (Exception e) {
return false;
}
return true;
}
private void handleOffset() {
if (spriteLead.getOffsetX() != scrWidth / 2) {
canvasOffsetX = scrWidth / 2 - spriteLead.getOffsetX();
} else {
canvasOffsetX = 0;
}
if (-mainMap.getOffsetX() - canvasOffsetX > mainMap.getMapWidth()
* mainMap.getTileWidth() - scrWidth - 1
|| mainMap.getOffsetX() + canvasOffsetX > 0) {
if (mainMap.getOffsetX() + canvasOffsetX > 0)
canvasOffsetX = -mainMap.getOffsetX();
else
canvasOffsetX = 0;
}
if (spriteLead.getOffsetY() != scrHeight / 2) {
canvasOffsetY = scrHeight / 2 - spriteLead.getOffsetY();
} else {
canvasOffsetY = 0;
}
if (mainMap.getOffsetY() + mainMap.getMapHeight()
* mainMap.getTileHeight() + canvasOffsetY < scrHeight
|| mainMap.getOffsetY() + canvasOffsetY > 0) {
if(mainMap.getOffsetY() + mainMap.getMapHeight()
* mainMap.getTileHeight() + canvasOffsetY < scrHeight){
canvasOffsetY = scrHeight - (mainMap.getOffsetY() + mainMap.getMapHeight() * mainMap.getTileHeight());
} else
canvasOffsetY = 0;
}
if (canvasOffsetX != 0 || canvasOffsetY != 0) {
spriteLead.move(canvasOffsetX, canvasOffsetY);
mainMap.move(canvasOffsetX, canvasOffsetY);
switch (gameStage) {
case GAMESTAGE_ONE:
for (int i = 0; i < enemyTops.length; i++) {
enemyTops[i].move(canvasOffsetX, canvasOffsetY);
}
break;
case GAMESTAGE_TWO:
for (int i = 0; i < enemyBlueFeet.length; i++) {
enemyBlueFeet[i].move(canvasOffsetX, canvasOffsetY);
}
break;
case GAMESTAGE_THREE:
for (int i = 0; i < stepYellow.length; i++) {
stepYellow[i].move(canvasOffsetX, canvasOffsetY);
}
for (int i = 0; i < enemyTops.length; i++) {
enemyTops[i].move(canvasOffsetX, canvasOffsetY);
}
break;
}
// share
for (int i = 0; i < fence.length; i++) {
fence[i].move(canvasOffsetX, canvasOffsetY);
}
for (int i = 0; i < enemySpring.length; i++) {
enemySpring[i].move(canvasOffsetX, canvasOffsetY);
}
for (int i = 0; i < enemyBirds.length; i++) {
enemyBirds[i].move(canvasOffsetX, canvasOffsetY);
}
for (int i = 0; i < stepStone.length; i++) {
stepStone[i].move(canvasOffsetX, canvasOffsetY);
}
for (int i = 0; i < magicBoxes.length; i++) {
magicBoxes[i].move(canvasOffsetX, canvasOffsetY);
}
for (int i = 0; i < deadZone.length; i++) {
deadZone[i].move(canvasOffsetX, canvasOffsetY);
}
}
}
protected void paint(Graphics g) {
switch (appState) {
case APPSTATE_IDLE:
return;
case APPSTATE_SPLASH:
splashCount++;
if (splashCount == 1)
canvasUpdate = true;
else
canvasUpdate = false;
if (splashCount > SPLASH_DELAY) {
splashCount = 0;
splashStage++;
canvasUpdate = true;
if (splashStage > 1){
canvasUpdate = true;
initMenu();
appState = APPSTATE_MENU;
return;
}
}
if (!canvasUpdate)
return;
splash1Image = ZonLayer.findImage("splash1");
splash2Image = ZonLayer.findImage("splash2");
splash3Image = ZonLayer.findImage("splash3");
switch (splashStage) {
case 0:
g.setColor(0xFFFFFF);
g.fillRect(0, 0, scrWidth, scrHeight);
g.drawImage(splash1Image, scrWidth / 2, scrHeight / 2,
Graphics.HCENTER | Graphics.VCENTER);
break;
case 1:
g.setColor(0xFFFFFF);
g.fillRect(0, 0, scrWidth, scrHeight);
g.drawImage(splash2Image, 1, 1, Graphics.LEFT | Graphics.TOP);
g.drawImage(splash3Image, scrWidth / 2,
60 + (scrHeight - 78) / 2, Graphics.HCENTER
| Graphics.VCENTER);
break;
}
return;
case APPSTATE_SOUNDSET:
drawMenuBG(g);
if(subMenuSel == 0){
g.setClip(scrWidth / 2 - 40, scrHeight / 4 + 2 * 13 - 4, 16, 16);
g.drawImage(cursorImage, scrWidth / 2 - 40, scrHeight / 4 + 2 * 13 - 4, Graphics.LEFT | Graphics.TOP);
}else{
g.setClip(scrWidth / 2 - 40, scrHeight / 4 + 4 * 13 - 4, 16, 16);
g.drawImage(cursorImage, scrWidth / 2 - 40, scrHeight / 4 + 4 * 13 - 4, Graphics.LEFT | Graphics.TOP);
}
g.setClip(scrWidth / 2 - 12, scrHeight / 4 + 4 * 13, 23, 13);
g.drawImage(menuItemImage, scrWidth / 2 - 38,
scrHeight / 4 + 4 * 13 - 91, Graphics.LEFT | Graphics.TOP);
switch(soundType){
// 0声音关 1背景音开 2 效果音开
case 0:
g.setClip(scrWidth / 2 - 16, scrHeight / 4 + 2 * 13, 24, 13);
g.drawImage(menuItemImage, scrWidth / 2 - 16,
scrHeight / 4 + 2 * 13 - 39, Graphics.LEFT | Graphics.TOP);
g.setClip(scrWidth / 2 + 8, scrHeight / 4 + 2 * 13, 13, 13);
g.drawImage(menuItemImage, scrWidth / 2 + 8 - 13, scrHeight / 4 + 2 * 13 - 91, Graphics.LEFT | Graphics.TOP);
break;
case 1:
g.setClip(scrWidth / 2 - 20, scrHeight / 4 + 2 * 13, 39, 13);
g.drawImage(menuItemImage, scrWidth / 2 - 20,
scrHeight / 4 + 2 * 13 - 110, Graphics.LEFT | Graphics.TOP);
g.setClip(scrWidth / 2 + 19, scrHeight / 4 + 2 * 13, 13, 13);
g.drawImage(menuItemImage, scrWidth / 2 + 19, scrHeight / 4 + 2 * 13 - 91, Graphics.LEFT | Graphics.TOP);
break;
case 2:
g.setClip(scrWidth / 2 - 20, scrHeight / 4 + 2 * 13, 39, 13);
g.drawImage(menuItemImage, scrWidth / 2 - 20,
scrHeight / 4 + 2 * 13 - 123, Graphics.LEFT | Graphics.TOP);
g.setClip(scrWidth / 2 + 19, scrHeight / 4 + 2 * 13, 13, 13);
g.drawImage(menuItemImage, scrWidth / 2 + 19, scrHeight / 4 + 2 * 13 - 91, Graphics.LEFT | Graphics.TOP);
break;
}
g.setColor(255 << 16 | 100 << 8 | 0);
g.setClip(0, 30, scrWidth, 20);
g.drawString(CHOOSESOUND_TIP, scrWidth / 2, 30, Graphics.HCENTER | Graphics.TOP);
break;
case APPSTATE_MENU:
// draw menu background
/* if (!canvasUpdate)
return;*/
if (fontHeight == 0) {
Font font = g.getFont();
fontHeight = font.getHeight();
font = null;
}
canvasUpdate = false;
drawMenuBG(g);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -