📄 boardcanvas.java
字号:
// Decompiled by DJ v2.9.9.61 Copyright 2000 Atanas Neshkov Date: 2004-12-21 16:10:40
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
package igs;
import javax.microedition.lcdui.*;
// Referenced classes of package igs:
// ThinkThread, HelloMIDlet
public class BoardCanvas extends Canvas
implements CommandListener
{
public void setSide(int i)
{
side = i;
}
public void clearBoard()
{
for(int i = 0; i < 15; i++)
{
for(int j = 0; j < 15; j++)
board[i][j] = 0;
}
stepIndex = 0;
}
public BoardCanvas(byte abyte0[][], HelloMIDlet hellomidlet)
{
stepIndex = 0;
gameName = 0;
side = 0;
blackName = "";
blackTime = 0;
blackStep = 0;
whiteName = "";
whiteTime = 0;
whiteStep = 0;
gameInfo = "";
cursorX = 0;
cursorY = 0;
board = abyte0;
midlet = hellomidlet;
clearBoard();
}
public void checkWin(byte abyte0[][], int i, int j)
{
try
{
StringBuffer stringbuffer = new StringBuffer();
byte byte0 = ThinkThread.computerSide;
boolean flag = false;
boolean flag1 = false;
for(int k = 0; k < dxs.length; k++)
{
int l = dxs[k];
int i1 = dys[k];
stringbuffer.delete(0, stringbuffer.length());
int j1 = i - l * 6;
int k1 = j - i1 * 6;
for(int l1 = 0; l1 < 12;)
{
char c = 'X';
if(j1 >= 0 && j1 < 15 && k1 >= 0 && k1 < 15)
if(abyte0[j1][k1] == 0)
c = '.';
else
if(abyte0[j1][k1] == byte0)
c = 'M';
else
if(abyte0[j1][k1] == 3 - byte0)
c = 'W';
stringbuffer.append(c);
l1++;
j1 += l;
k1 += i1;
}
String s = stringbuffer.toString();
if(s.indexOf("MMMMM") >= 0)
{
flag1 = true;
continue;
}
if(s.indexOf("WWWWW") >= 0)
flag = true;
}
if(flag1)
{
midlet.alarm("\u7535\u8BDD\u8D62\u4E86", AlertType.INFO, 1000);
clearBoard();
side = ThinkThread.userSide;
}
if(flag)
{
midlet.alarm("\u4F60\u8D62\u4E86", AlertType.INFO, 1000);
clearBoard();
side = ThinkThread.userSide;
}
}
catch(Throwable throwable)
{
throwable.printStackTrace();
}
}
public void commandAction(Command command, Displayable displayable)
{
}
public void paint(Graphics g)
{
int i = 0;
int j = 0;
g.setColor(0);
g.fillRect(0, 0, g.getClipWidth(), g.getClipHeight());
i = Math.min(g.getClipWidth() / 2 - cursorX * perBox, i);
j = Math.min(g.getClipHeight() / 2 - cursorY * perBox, j);
i = Math.max(i, g.getClipWidth() - 16 * perBox);
j = Math.max(j, g.getClipHeight() - 16 * perBox);
g.translate(i, j);
int k = i + g.getClipX() / perBox;
int l = j + g.getClipY() / perBox;
int i1 = k + g.getClipWidth() / perBox + 1;
int j1 = l + g.getClipHeight() / perBox + 1;
k = 0;
l = 0;
i1 = 15;
j1 = 15;
if(k < 0)
k = 0;
if(i1 > 15)
i1 = 15;
if(l < 0)
l = 0;
if(j1 > 15)
j1 = 15;
g.setColor(0xf9a902);
g.fillRect(0, 0, perBox * 16, perBox * 16);
g.setColor(0);
for(int k1 = k; k1 < i1; k1++)
g.drawLine((k1 + 1) * perBox, perBox, (k1 + 1) * perBox, 15 * perBox);
for(int l1 = l; l1 < j1; l1++)
g.drawLine(perBox, (l1 + 1) * perBox, 15 * perBox, (l1 + 1) * perBox);
for(int i2 = k; i2 < i1; i2++)
{
for(int k2 = l; k2 < j1; k2++)
switch(board[i2][k2])
{
case 1: // '\001'
g.setColor(0xffffff);
g.fillArc(i2 * perBox + (perBox + 1) / 2, k2 * perBox + (perBox + 1) / 2, perBox - 1, perBox - 1, 0, 360);
g.setColor(0x400000);
g.drawArc(i2 * perBox + (perBox + 1) / 2, k2 * perBox + (perBox + 1) / 2, perBox - 1, perBox - 1, 0, 360);
break;
case 2: // '\002'
g.setColor(0);
g.fillArc(i2 * perBox + (perBox + 1) / 2, k2 * perBox + (perBox + 1) / 2, perBox - 1, perBox - 1, 0, 360);
g.setColor(0x400000);
g.drawArc(i2 * perBox + (perBox + 1) / 2, k2 * perBox + (perBox + 1) / 2, perBox - 1, perBox - 1, 0, 360);
break;
}
}
int j2 = cursorX;
int l2 = cursorY;
g.setColor(255, 0, 0);
g.drawRect(j2 * perBox + perBox / 2, l2 * perBox + perBox / 2, perBox, perBox);
g.drawLine(j2 * perBox + perBox / 2, l2 * perBox + perBox / 2, j2 * perBox + (perBox * 3) / 2, l2 * perBox + (perBox * 3) / 2);
g.drawLine(j2 * perBox + (perBox * 3) / 2, l2 * perBox + perBox / 2, j2 * perBox + perBox / 2, l2 * perBox + (perBox * 3) / 2);
g.translate(-i, -j);
g.setFont(Font.getFont(0, 1, 16));
int i3 = 0;
if(cursorX < 10)
{
Graphics _tmp = g;
i3 |= 8;
i = g.getClipWidth();
} else
{
Graphics _tmp1 = g;
i3 |= 4;
i = 0;
}
if(cursorY < 10)
{
Graphics _tmp2 = g;
i3 |= 0x20;
j = g.getClipHeight();
} else
{
Graphics _tmp3 = g;
i3 |= 0x10;
j = 0;
}
g.translate(i, j);
g.setColor(0, 0, 0);
g.drawString(gameInfo, 1, 0, i3);
g.drawString(gameInfo, 0, 1, i3);
g.drawString(gameInfo, -1, 0, i3);
g.drawString(gameInfo, 0, -1, i3);
g.setColor(255, 0, 0);
g.drawString(gameInfo, 0, 0, i3);
}
protected void keyRepeated(int i)
{
int j = getGameAction(i);
switch(j)
{
case 1: // '\001'
case 2: // '\002'
case 5: // '\005'
case 6: // '\006'
keyPressed(i);
// fall through
case 3: // '\003'
case 4: // '\004'
default:
return;
}
}
protected void pointerPressed(int i, int j)
{
int k = 0;
int l = 0;
k = Math.min(getWidth() / 2 - cursorX * perBox, k);
l = Math.min((getHeight()+20) / 2 - cursorY * perBox, l);
k = Math.max(k, getWidth() - 16 * perBox);
l = Math.max(l, (getHeight()+20) - 16 * perBox);
cursorX = ((i - k) + perBox / 2) / perBox;
cursorY = ((j - l) + perBox / 2) / perBox;
repaint();
keyPressed(8);
}
protected void keyPressed(int i)
{
int j = getGameAction(i);
switch(j)
{
case 1: // '\001'
case 50: // '2'
if(cursorY > 0)
cursorY--;
break;
case 6: // '\006'
case 56: // '8'
if(cursorY < 14)
cursorY++;
break;
case 2: // '\002'
case 52: // '4'
if(cursorX > 0)
cursorX--;
break;
case 5: // '\005'
case 54: // '6'
if(cursorX < 14)
cursorX++;
break;
case 8: // '\b'
if(side == ThinkThread.userSide && board[cursorX][cursorY] == 0)
{
board[cursorX][cursorY] = ThinkThread.userSide;
side = ThinkThread.computerSide;
repaint();
checkWin(board, cursorX, cursorY);
ThinkThread thinkthread = new ThinkThread(board, this);
thinkthread.start();
}
break;
}
switch(i)
{
case 55: // '7'
perBox--;
break;
case 57: // '9'
perBox++;
break;
}
repaint();
}
private Command gotoMainFormCommand;
private Command passCommand;
private Command doneCommand;
private Command undoCommand;
private Command resignCommand;
byte board[][];
int stepIndex;
HelloMIDlet midlet;
int gameName;
int side;
String blackName;
int blackTime;
int blackStep;
String whiteName;
int whiteTime;
int whiteStep;
String gameInfo;
static final int dxs[] = {
1, 1, 0, -1, -1, -1, 0, 1
};
static final int dys[] = {
0, 1, 1, 1, 0, -1, -1, -1
};
public static int perBox = 6;
static final int borderColor = 0x400000;
static final int whiteColor = 0xffffff;
static final int blackColor = 0;
static final int boardColor = 0xf9a902;
int cursorX;
int cursorY;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -