请教五子棋游戏棋盘类的一些疑问
请教五子棋游戏棋盘类的一些疑问,希望有人帮忙解答一下,先谢过了!
public class WzqChessBoard extends Canvas implements CommandListener {
public WzqChessBoard() {
}
protected void paintMap(Graphics g) {
g.setColor(128, 128, 128);
for (int i = 0; i < nMapGrid; i++) {
for (int j = 0; j < nMapGrid; j++) {
g.drawRect(nMapX + j * nGridWidth,
nMapY + i * nGridWidth,
nGridWidth,
nGridWidth);
}
}
}
protected void paintSelectBox(Graphics g) {
g.setColor(255, 0, 255);
g.drawRect(nMapX + nSelectX * nGridWidth - nGridWidth / 2,
nMapY + nSelectY * nGridWidth - nGridWidth / 2,
nGridWidth,
nGridWidth);
}
protected void paintChesses(Graphics g) {
for (int i = 0; i <= nMapGrid; i++) {
for (int j = 0; j <= nMapGrid; j++) {
if (chess.getChess()[i][j] != Chesses.NO_CHESS) {
if (chess.getChess()[i][j] == Chesses.WHITE_CHESS) {
g.setColor(255, 255, 255);
} else {
g.setColor(0, 0, 0);
}
g.fillArc(nMapX + j * nGridWidth - nChessWidth / 2,
nMapY + i * nGridWidth - nChessWidth / 2,
nChessWidth, nChessWidth, 0, 360);
}
}
}
}
private void jbInit() throws Exception {
setCommandListener(this);
if (bNewGame) {
chess = new Chesses();
nSelectX = nSelectY = nMapGrid / 2;
}
}
public void commandAction(Command command, Displayable displayable) {
if (command == cmdExit) {
WzqMIDlet.quitApp();
} else if (command == cmdRestart) {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
repaint();
}else if (command == cmdPause){
nState = GAME_PAUSE;
this.removeCommand(cmdPause);
this.removeCommand(cmdRestart);
this.addCommand(cmdStart);
repaint();
}else if (command == cmdStart){
nState = GAME_RUN;
this.removeCommand(cmdStart);
this.addCommand(cmdRestart);
this.addCommand(cmdPause);
repaint();
}
}
protected synchronized void keyPressed(int keyCode) {
if (nState == GAME_RUN) {
int action = getGameAction(keyCode);
switch(action){
case Canvas.LEFT:
nSelectX = (--nSelectX + nMapGrid + 1) % (nMapGrid + 1);
break;
case Canvas.RIGHT:
nSelectX = (++nSelectX) % (nMapGrid + 1);
break;
case Canvas.UP:
nSelectY = (--nSelectY + nMapGrid + 1) % (nMapGrid + 1);
break;
case Canvas.DOWN:
nSelectY = (++nSelectY) % (nMapGrid + 1);
break;
case Canvas.FIRE:
boolean flag = chess.putChess(nSelectY, nSelectX); //chess.putChess是另一个类里面用来放棋子的方法
if (!chess.isGameOver() && flag) {
this.AIputChess();
if (chess.isGameOver()) {
nState = GAME_OVER;
this.removeCommand(cmdStart);
this.removeCommand(cmdPause);
repaint();
}
break;
}
}
repaint();
}
}
protected void drawMessage(Vector msg) {
int rowW = 0;
int w = 0;
for (int i = 0; i < msg.size(); i++) {
w = gx.getFont().stringWidth("" + msg.elementAt(i));
if (w > rowW) {
rowW = w; }
}
int rowH = gx.getFont().getHeight();
int gap = 5;
int boxX = (getWidth() - rowW - gap * 2) / 2;
int boxH = rowH * msg.size() + gap * 2;
int boxY = (getHeight() - boxH) / 2;
int boxW = rowW + gap * 2;
gx.setColor(128, 128, 128);
drawMask(boxX, boxY, boxW, boxH, true);
gx.setColor(0, 255, 0);
gx.drawRect(boxX, boxY, boxW, boxH);
gx.setColor(255, 0, 0);
for (int i = 0; i < msg.size(); i++) {
int msgW = gx.getFont().stringWidth("" + msg.elementAt(i));
gx.drawString("" + msg.elementAt(i), boxX + gap,
boxY + gap + i * rowH, 0);
}
}
private void drawMask(int mx, int my, int mw, int mh, boolean dark) {
for (int i = 0; i < mh; i += 2) {
gx.drawLine(mx, my + i, mx + mw, my + i);
}
if (dark) {
for (int i = 0; i < mw; i += 2) {
gx.drawLine(mx + i, my, mx + i, my + mh);
}
}
}
protected void AIputChess() {
Point ptBest = AI.findBestLocation(this.chess); //AI.findBestLocation是另一个类里用于找电脑最佳下起点的方法
this.chess.putChess(ptBest.getX(), ptBest.getY());
}
protected void paint(Graphics g) {
switch(nState){
case GAME_RUN:
case GAME_OVER:
gx = g;
g.setColor(0, 0, 191);
g.fillRect(0, 0, getWidth(), getHeight());
paintMap(g);
paintSelectBox(g);
paintChesses(g);
if (this.chess.getMessages().size() > 0) {
drawMessage(this.chess.getMessages());
}
break;
case GAME_PAUSE:
g.setColor(0,0,0);
g.fillRect(0,0,getWidth(),getHeight());
Image img = null;
try {
img = Image.createImage("/res/pause.png");
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(img, getWidth() / 2, getHeight() / 2,
Graphics.HCENTER | Graphics.VCENTER);
String str = new String("ÔÝÍ£ÖÐ...");
g.setColor(255,0,0);
g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
Font.SIZE_LARGE));
g.drawString(str,getWidth()/2,getHeight()-20,
Graphics.HCENTER|Graphics.BASELINE);
break;
}
}
}
问题二:paintMap()、paintSelectBox()、paintChesses()这三个方法什么时候调用的???
问题三:jbInit()这个方法有什么用???