📄 maincanvas.java
字号:
package com.j2medev.chapter5;
import javax.microedition.lcdui.*;
public class MainCanvas extends Canvas implements CommandListener{
private GameEngine engine = null;
private int playerID = -1;
//五子棋盘的单元格长度
private int d = -1;
//自己的棋子的颜色
private int color = 0xFF0000;
public static final int margin = 5;
//棋子的半径
public static final int r = 5;
//焦点的x,y坐标
private int focusX = 7;
private int focusY = 7;
private Command exitCommand = new Command("Exit Game",Command.EXIT,0);
public MainCanvas(GameEngine _engine,int _playerID) {
this.engine = _engine;
this.playerID = _playerID;
addCommand(exitCommand);
setCommandListener(this);
d = ((getWidth()-getHeight()>0?getHeight():getWidth())-2*margin)/14;
}
protected void paint(Graphics g) {
int _color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(_color);
//画棋盘
for(int i = 0;i<15;i++){
g.drawLine(margin,margin+d*i,margin+14*d,margin+d*i);
}
for(int j = 0;j<15;j++){
g.drawLine(margin+d*j,margin,margin+d*j,margin+14*d);
}
//画棋子,自己的用红色,对手的用黑色
for(int i=0;i<15;i++){
for(int j = 0;j<15;j++){
int t = engine.grid[i][j];
if(t>0){
if(t == playerID)
g.setColor(color);
g.fillArc(margin+d*i-r,margin+d*j-r,2*r,2*r,0,360);
g.setColor(_color);
}
}
}
//画焦点
if(engine.getState() == GameEngine.PLAYING)
g.drawRect(margin+focusX*d-r,margin+focusY*d-r,2*r,2*r);
int fh = Font.getDefaultFont().getHeight();
//d根据游戏的状态画底部的信息,提示用户现在的状态
if(engine.getState() == GameEngine.WAITING){
g.drawString("waiting to start...",margin,getHeight()-fh-2,Graphics.LEFT|Graphics.BOTTOM);
}else if(engine.getState() == GameEngine.PLAYING){
int old = g.getColor();
g.setColor(color);
g.fillArc(margin,getHeight()-fh-2,fh,fh,0,360);
g.setColor(old);
g.drawString("is yours",margin+fh+2,getHeight()-fh-2,Graphics.LEFT|Graphics.TOP);
}
}
public void keyPressed(int keyCode){
int action = getGameAction(keyCode);
switch(action){
//用户放棋子的时候,让engine决定是否该放在这里
case FIRE:{
boolean b = engine.getTurn();
if(b){
engine.update(focusX,focusY);
}else{
Alert alert = new Alert("warning","not your turn",null,AlertType.WARNING);
alert.setTimeout(2000);
GoBang.setCurrent(alert,this);
}
//break;
return;
}
case UP:{
focusY--;
break;
}
case DOWN:{
focusY++;
break;
}
case LEFT:{
focusX--;
break;
}case RIGHT:{
focusX++;
break;
}
default:
break;
}
//让canvas自己处理焦点的移动
repaint();
serviceRepaints();
}
public void commandAction(Command command, Displayable displayable) {
if(command == exitCommand){
engine.exitGame();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -