📄 maincanvas.java
字号:
package demo;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
public class MainCanvas extends GameCanvas implements Runnable{
private boolean m_bRunning; //控制项目运行
public char m_achWords[][] = //存储原始字符矩阵
{ {'H', 'R', 'T', 'W', 'T'},
{'E', 'I', 'H', 'O', 'H'},
{'L', 'G', 'I', 'R', 'R'},
{'L', 'H', 'N', 'L', 'E'},
{'O', 'T', 'G', 'D', 'E'} };
public int m_nCurLine = 0; //记录当前行
public int m_anDis[] = { 0,1,2,3,4 };
//m_anDis记录每行与原始位置向左偏差的位数
//即第一行向左偏差0位,第二向左偏差1位......
//游戏开始前,经过默认移动后,字符矩阵为
//{'H', 'R', 'T', 'W', 'T'},
//{'I', 'H', 'O', 'H', 'E'},
//{'I', 'R', 'R', 'L', 'G'},
//{'L', 'E', 'L', 'H', 'N'},
//{'E', 'O', 'T', 'G', 'D'}
public boolean m_bGameOK = false; //组合成功的标志
public MainCanvas(){
super(true);
Start(); //启动线程
}
public void Start(){
m_bRunning = true;
Thread thread = new Thread(this); //分配新线程
thread.start(); //线程启动
}
public void run() { //新线程自动调用此方法
//得到系统当前时间,并将时间换算成毫秒
long T1 = System.currentTimeMillis();
long T2 = T1;
while(m_bRunning){
T2 = System.currentTimeMillis();
if( T2 - T1 > 100 ){ //间隔100毫秒
T1 = T2;
Input();
Logic();
Paint();
}
}
}
public void Stop(){ //终止游戏
m_bRunning = false;
}
public void Input(){
if( m_bGameOK )
return;
int keyStates = getKeyStates(); //得到当前按键状态
//如果按下方向键的上键,则调整当前行的位置
if( ( keyStates & GameCanvas.UP_PRESSED ) != 0 )
m_nCurLine --;
//如果按下方向键的下键,则调整当前行的位置
if( ( keyStates & GameCanvas.DOWN_PRESSED ) != 0 )
m_nCurLine ++;
//调整当前行的值,使它在0到4之间
if( m_nCurLine < 0 )
m_nCurLine += 5;
if( m_nCurLine > 4)
m_nCurLine -= 5;
//如果按下方向键的左键,则当前行的字符左移
if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 )
m_anDis[m_nCurLine] ++;
//如果按下方向键的右键,则当前行的字符右移
if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 )
m_anDis[m_nCurLine] --;
if( m_anDis[m_nCurLine] < 0 )
m_anDis[m_nCurLine] += 5;
if( m_anDis[m_nCurLine] > 4 )
m_anDis[m_nCurLine] -= 5;
}
public void Logic(){
if( m_bGameOK )
return;
m_bGameOK = true;
for( int n = 0; n < 5; n ++ ){
if( m_anDis[n] != 0 ){
m_bGameOK = false;
break;
}
}
}
public void Paint(){
Graphics g = getGraphics();
//用黑色清屏
g.setColor(0);
g.fillRect( 0, 0, getWidth(), getHeight() );
//显示字符
//realCol为所显示的字符在原始矩阵中的列数
int realCol = 0;
//row为行数,col为列数
for( int row = 0; row < 5; row ++ ){
if( row == m_nCurLine ) //当前行的字符用黄色显示
g.setColor(0xffffff00);
else
g.setColor(0xffffffff); //非当前行的字符用白色显示
for( int col = 0; col < 5; col ++ ){
//利用偏位数得到与当前位置对应的原始矩阵中的位置
realCol = m_anDis[row] + col;
if( realCol > 4 )
realCol = realCol - 5;
g.drawChar(m_achWords[row][realCol], 20 + col * 15, row * 15, 0);
}
}
g.setColor(0xffffffff);
if( m_bGameOK )
g.drawString("真棒,完全正确", 20, 80, 0);
else
g.drawString("左右移动字符,使纵向拼写正确", 10, 80, 0);
flushGraphics();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -