📄 maincanvas.java
字号:
import java.io.IOException;
import javax.microedition.lcdui.*;
class MainCanvas extends Canvas implements Runnable
{
int i;
int j;
int k;
int l;
int seed;
int state;
long nextTime;
long now;
Image maze;
Image buf;
Image mazebuf;
Image imgs[];
Graphics bg;
Graphics mg;
Command startCommand;
Command pauseCommand;
int pX;
int pY;
int pDir;
int pLook;
int pCount;
int pState;
int mX;
int mY;
int wantDir;
int dots;
int lives;
int level;
int eatCount;
int gX[];
int gY[];
int gDir[];
int gState[];
int gCount[];
int gLook[];
int sLook[];
int sX[];
int sY[];
int sCount[];
int w;
int h;
int counter;
int oldState;
int speed;
int targetX;
int targetY;
int bestVal;
int bestDir;
int randomness;
Font f;
char scoreChars[];
char levelChars[];
int fH;
int fW;
int lW;
String various[] = {
"E-BEAR presents", "The Develop Men:", "Bryan", "Tony", "Libeia"
};
String dummyScore;
String dummyLevel;
final int dx[] = {
0, 0, 0, -1, 1
};
final int dy[] = {
0, -1, 1, 0, 0
};
final int offsX[] = {
-6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
-6, -6, -6, -5, -6, -6, -6, -7, -7, -7,
-7
};
final int offsY[] = {
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, 0, -2, -2, -2, 0, 0, 0,
0
};
final int bonuses[] = {
8, 1, 2, 4
};
final int dPos[] = {
0, -31, 31, -1, 1
};
int map[] = {
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 8, 8, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 8,
8, 8, 8, 8, 1, 8, 8, 8, 8, 1,
8, 8, 8, 8, 8, 1, 8, 8, 1, 8,
8, 8, 8, 8, 1, 8, 8, 8, 8, 1,
8, 8, 8, 8, 8, 2, 8, 8, 8, 8,
1, 8, 8, 8, 8, 8, 1, 8, 8, 1,
8, 8, 8, 8, 8, 1, 8, 8, 8, 8,
2, 8, 8, 8, 8, 8, 1, 8, 8, 8,
8, 1, 8, 8, 8, 8, 8, 1, 8, 8,
1, 8, 8, 8, 8, 8, 1, 8, 8, 8,
8, 1, 8, 8, 8, 8, 8, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 8, 8, 8, 8, 8, 1, 8,
8, 8, 8, 1, 8, 8, 1, 8, 8, 8,
8, 8, 8, 8, 8, 1, 8, 8, 1, 8,
8, 8, 8, 1, 8, 8, 8, 8, 8, 1,
8, 8, 8, 8, 1, 8, 8, 1, 8, 8,
8, 8, 8, 8, 8, 8, 1, 8, 8, 1,
8, 8, 8, 8, 1, 8, 8, 8, 8, 8,
1, 1, 1, 1, 1, 1, 8, 8, 1, 1,
1, 1, 8, 8, 1, 1, 1, 1, 8, 8,
1, 1, 1, 1, 1, 1, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 1, 8, 8, 8,
8, 8, 0, 8, 8, 0, 8, 8, 8, 8,
8, 1, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 1, 8, 8,
8, 8, 8, 0, 8, 8, 0, 8, 8, 8,
8, 8, 1, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 1, 8,
8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 8, 8, 1, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 1,
8, 8, 0, 8, 8, 8, 8, 8, 8, 8,
8, 0, 8, 8, 1, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1, 8, 8, 0, 8, 8, 8, 8, 8, 8,
8, 8, 0, 8, 8, 1, 8, 8, 8, 8,
8, 8, 8, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 8, 8, 8, 8, 8,
8, 8, 8, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 8, 8, 8, 8, 8,
8, 8, 1, 8, 8, 0, 8, 8, 8, 8,
8, 8, 8, 8, 0, 8, 8, 1, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 1, 8, 8, 0, 8, 8, 8,
8, 8, 8, 8, 8, 0, 8, 8, 1, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 1, 8, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 8, 8, 1,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 1, 8, 8, 0, 8,
8, 8, 8, 8, 8, 8, 8, 0, 8, 8,
1, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 1, 8, 8, 0,
8, 8, 8, 8, 8, 8, 8, 8, 0, 8,
8, 1, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 8, 8, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 8, 8,
8, 8, 8, 1, 8, 8, 8, 8, 1, 8,
8, 8, 8, 8, 1, 8, 8, 1, 8, 8,
8, 8, 8, 1, 8, 8, 8, 8, 1, 8,
8, 8, 8, 8, 1, 8, 8, 8, 8, 1,
8, 8, 8, 8, 8, 1, 8, 8, 1, 8,
8, 8, 8, 8, 1, 8, 8, 8, 8, 1,
8, 8, 8, 8, 8, 2, 1, 1, 8, 8,
1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
1, 1, 1, 1, 1, 1, 8, 8, 1, 1,
2, 8, 8, 8, 8, 8, 8, 8, 1, 8,
8, 1, 8, 8, 1, 8, 8, 8, 8, 8,
8, 8, 8, 1, 8, 8, 1, 8, 8, 1,
8, 8, 8, 8, 8, 8, 8, 8, 8, 1,
8, 8, 1, 8, 8, 1, 8, 8, 8, 8,
8, 8, 8, 8, 1, 8, 8, 1, 8, 8,
1, 8, 8, 8, 8, 8, 8, 8, 1, 1,
1, 1, 1, 1, 8, 8, 1, 1, 1, 1,
8, 8, 1, 1, 1, 1, 8, 8, 1, 1,
1, 1, 1, 1, 8, 8, 8, 8, 8, 1,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1, 8, 8, 1, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 1, 8, 8, 8, 8, 8,
1, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 1, 8, 8, 1, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 1, 8, 8, 8, 8,
8, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8
};
Thread runner;
int x0;
int y0;
public MainCanvas(Command command, Command command1)
{
seed = 1;
state = 0;
imgs = new Image[27];
gX = new int[3];
gY = new int[3];
gDir = new int[3];
gState = new int[3];
gCount = new int[3];
gLook = new int[3];
sLook = new int[4];
sX = new int[4];
sY = new int[4];
sCount = new int[4];
counter = 0;
f = Font.getFont(0, 0, 0);
scoreChars = new char[6];
levelChars = new char[2];
dummyScore = "00000";
dummyLevel = "00";
//System.out.println("main error 1");
startCommand = command;
pauseCommand = command1;
//System.out.println("main error 2 ");
try
{
maze = Image.createImage("/pacmaze.png");
for(i = 0; i < 27; i++)
imgs[i] = Image.createImage("/img" + i + ".png");
}
catch(IOException ioexception) { }
//System.out.println("main error 3 ");
w = getWidth();
h = getHeight();
if(w > 112)
{
x0 = (w - 112) / 2;
w = 112;
}
if(h > 133)
{
y0 = (h - 133) / 2;
h = 133;
}
//System.out.println("main error 4 ");
buf = Image.createImage(w, h);
mazebuf = Image.createImage(112, 124);
bg = buf.getGraphics();
mg = mazebuf.getGraphics();
//System.out.println("main error 4 ");
bg.setColor(0, 0, 0);
bg.fillRect(0, 0, w, h);
//System.out.println("main error 5 ");
f = Font.getFont(0, 0, 0);
fH = f.getHeight() - 1;
if(fH > 10)
{
f = Font.getFont(0, 0, 8);
fH = f.getHeight() - 1;
if(fH > 11)
fH = 11;
}
//System.out.println("main error 6 ");
bg.setFont(f);
mg.setFont(f);
fW = f.stringWidth(dummyScore);
lW = f.stringWidth(dummyLevel);
prepareIntro();
//System.out.println("main error 7 ");
runner = new Thread(this);
runner.start();
//System.out.println("main error 8 ");
}
public void prepareIntro()
{
//System.out.println("main error 9 ");
mg.setColor(0, 0, 0);
mg.fillRect(0, 0, w, h - 9);
//MainCanvas _tmp = this;
//MainCanvas _tmp1 = this;
//System.out.println("main error 10 ");
mg.drawImage(imgs[25], (w - 96) / 2, 11, 0x10 | 0x4);
mg.setColor(255, 255, 255);
//System.out.println("main error 11 ");
//MainCanvas _tmp2 = this;
//MainCanvas _tmp3 = this;
//System.out.println("main error 12 ");
mg.drawString(various[0], (w - f.stringWidth(various[0])) / 2, 0, 0x10 | 0x4);
//MainCanvas _tmp4 = this;
//MainCanvas _tmp5 = this;
//System.out.println("main error 13 ");
mg.drawString(various[1], (w - f.stringWidth(various[1])) / 2, 35, 0x10 | 0x4);
bg.setClip(0, 0, w, h - 9);
state = 10;
oldState = 10;
counter = 0;
//System.out.println("main error 14 ");
removeCommand(pauseCommand);
addCommand(startCommand);
//System.out.println("main error 15 ");
}
public void resetGame()
{
bg.setClip(0, 0, w, h);
bg.setColor(0, 0, 0);
removeCommand(startCommand);
addCommand(pauseCommand);
for(i = 0; i < 6; i++)
scoreChars[i] = '0';
lives = 2;
level = 1;
bg.fillRect(0, h - 9, w, 9);
//MainCanvas _tmp = this;
//MainCanvas _tmp1 = this;
bg.drawImage(imgs[5], fW + 8, h - 8, 0x10 | 0x4);
//MainCanvas _tmp2 = this;
//MainCanvas _tmp3 = this;
bg.drawImage(imgs[5], fW + 18, h - 8, 0x10 | 0x4);
resetMap();
}
public void resetMap()
{
for(i = 0; i < 930; i++)
map[i] &= 0xb;
dots = 0;
//MainCanvas _tmp = this;
//MainCanvas _tmp1 = this;
mg.drawImage(maze, 0, 0, 0x10 | 0x4);
bg.setColor(0, 0, 0);
bg.fillRect(w - lW - 10, h - 9, lW + 10, 9);
bg.setColor(255, 255, 255);
levelChars[1] = (char)(48 + level % 10);
levelChars[0] = (char)(48 + (level / 10) % 10);
//MainCanvas _tmp2 = this;
//MainCanvas _tmp3 = this;
bg.drawChars(levelChars, 0, 2, w - lW, h - fH, 0x10 | 0x4);
//MainCanvas _tmp4 = this;
//MainCanvas _tmp5 = this;
bg.drawImage(imgs[21 + (level + 3 & 0x3)], w - lW - 10, h - 8, 0x10 | 0x4);
resetMobiles();
}
public void resetMobiles()
{
state = 0;
counter = 0;
pX = 58;
pY = 92;
pLook = 4;
wantDir = 0;
pDir = 0;
pState = 0;
pCount = 20;
for(i = 0; i < 4; i++)
sCount[i] = 0;
for(i = 0; i < 3; i++)
{
gLook[i] = 8 + i;
gY[i] = 56;
gX[i] = 50 + 8 * i;
gDir[i] = 3 + (randi() & 0x1);
gCount[i] = 30 + 30 * i;
gState[i] = 0;
}
if(map[541] + map[542] > 0)
{
map[541] = 0;
map[542] = 0;
mg.setColor(0, 0, 0);
mg.fillRect(50, 66, 12, 8);
}
}
public int randi()
{
seed = (seed * 171) % 30269;
return seed;
}
public void run()
{
do
{
now = System.currentTimeMillis();
if(nextTime < now + 15L)
nextTime = now + 15L;
try
{
//MainCanvas _tmp = this;
Thread.sleep(nextTime - now);
}
catch(Exception exception) { }
nextTime = System.currentTimeMillis() + 50L;
counter++;
switch(state)
{
case 1: // '\001'
case 5: // '\005'
case 6: // '\006'
case 7: // '\007'
case 8: // '\b'
case 9: // '\t'
default:
break;
case 0: // '\0'
if((counter & 0xff) == 255)
{
map[541] = 4;
map[542] = 4;
//MainCanvas _tmp1 = this;
//MainCanvas _tmp2 = this;
mg.drawImage(imgs[21 + (level + 3 & 0x3)], 53, 66, 0x10 | 0x4);
}
pCount--;
switch(pState)
{
default:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -