📄 clcanvas.java
字号:
+ (Cfg.BALL_DIM + 2) * i, tipY, 0);
}
}
//显示分数(注意位置) 首行显示 (20,0)
void drawScore(Graphics g) {
g.setColor(Cfg.SCORE_COLOR);
//g.drawString("Score:"+cx+":"+cy, Cfg.SCORE_POS_X, Cfg.SCORE_POS_Y, 0);
g.drawString("Score:", Cfg.SCORE_POS_X, 0, 0);
//int scoreY = Cfg.SCORE_POS_Y + Font.getDefaultFont().getHeight() + Cfg.LINE_GAP;
int scoreY = Font.getDefaultFont().getHeight() + Cfg.LINE_GAP;
g.drawString("" + score, Cfg.SCORE_POS_X, scoreY, 0);
g.drawString("High:"+cx+":"+cy+":"+gridLength, Cfg.SCORE_POS_X+fWidth*4, 0, 0);
g.drawString("" + maxScore, Cfg.SCORE_POS_X+fWidth*4, scoreY, 0);
//debug
//g.drawRect(0,0,176,208);
}
void drawPos(Graphics g) {
/*
int interval = stoneLength + 2 * Cfg.EDGE + 1;
g.drawImage(curPos, Cfg.X0 + 1 + cx * interval, Cfg.Y0 + 1 + cy
* interval, 0);
if (!(mx == -1)) {
g.drawImage(markPos, Cfg.X0 + 1 + mx * interval, Cfg.Y0 + 1 + my
* interval, 0);
}
*/
int x1 = borderX ;
int y1 = borderY ;
g.drawImage(curPos, x1 + 1 + cx * gridLength, y1 + 1 + cy
* gridLength, 0);
if (!(mx == -1)) {
g.drawImage(markPos, x1 + 1 + mx * gridLength, y1 + 1 + my
* gridLength, 0);
}
}
void drawBalls(Graphics g) {
for (int i = 0; i < balls.length; ++i) {
for (int j = 0; j < balls.length; ++j) {
if (balls[i][j] != null) {
//balls[i][j].draw(g, i, j);
drawBall(g,balls[i][j], i, j);
}
}
}
}
void drawBall(Graphics g, Ball ball, int xPos, int yPos) {
int x0=borderX + xPos * gridLength+1 ;
int y0=borderY + yPos * gridLength+1 ;
//int interval = Cfg.EDGE * 2 + ball_DIMSzie+ 1;
//int x0 = Cfg.X0 + interval * xPos + 1 + Cfg.EDGE;
//int y0 = Cfg.Y0 + interval * yPos + 1 + Cfg.EDGE;
g.drawImage(ball.imgs[ball.id], x0, y0, Graphics.LEFT | Graphics.TOP);
}
void drawBoard(Graphics g) {
g.setColor(Cfg.LINE_COLOR);
int unit = stoneLength + 2 * Cfg.EDGE + 1;
/*
// horizantal line
for (int i = 0; i <= Cfg.SIZE; ++i) {
//int y = Cfg.Y0 + i * unit;
int y = borderX + i * unit;
//g.drawLine(Cfg.X0, y, Cfg.X0 + Cfg.SIZE * unit, y);
g.drawLine(borderX, y, borderY + Cfg.SIZE * unit, y);
}
// vertical line
for (int i = 0; i <= Cfg.SIZE; ++i) {
//int x = Cfg.X0 + i * unit;
//g.drawLine(x, Cfg.Y0, x, Cfg.Y0 + Cfg.SIZE * unit);
int x = borderX + i * unit;
g.drawLine(x, borderY, x, borderY + Cfg.SIZE * unit);
}
*/
//画棋盘 (
int y;
for(int r = 0; r <= Cfg.SIZE; r++)
{
//以borderx为中心,上下半个框的高度
int x1 = borderX ;
int x2 = (x1 + borderLength) ;
y = borderY + r * gridLength ;
g.drawLine(x1, y, x2, y);
}
int x;
for(int c = 0; c <= Cfg.SIZE; c++)
{
x = borderX + c * gridLength ;
int y1 = borderY ;
int y2 = (y1 + borderLength) ;
g.drawLine(x, y1, x, y2);
}
for(int r = 0; r < Cfg.SIZE; r++)
{
for(int c = 0; c < Cfg.SIZE; c++)
{
x = borderX + c * gridLength ;
y = borderY + r * gridLength ;
g.drawImage(imgBackGroundReal,x,y,Graphics.LEFT | Graphics.TOP);
}
}
}
boolean isConnect(int x0, int y0, int x1, int y1) {
Maze maze = new Maze(balls, x0, y0, x1, y1);
return maze.isConnect(); // test!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
}
protected void keyPressed(int key) {
int gameKey = getGameAction(key);
switch (gameKey) {
case Canvas.FIRE:
BallGo();
break;
case Canvas.UP:
cy = (cy - 1 + Cfg.SIZE) % Cfg.SIZE;
break;
case Canvas.DOWN:
cy = (cy + 1) % Cfg.SIZE;
break;
case Canvas.LEFT:
cx = (cx - 1 + Cfg.SIZE) % Cfg.SIZE;
break;
case Canvas.RIGHT:
cx = (cx + 1) % Cfg.SIZE;
break;
}
repaint();
}
//触摸屏控制
protected void pointerPressed(int x, int y)
{
//if(!logic.gameEnd() && !logic.thinking())
{
//计算出点击的位置
cy = (y - borderY) / gridLength;
cx = (x - borderX) / gridLength;
//执行移动
BallGo();
repaint();
}
}
public void BallGo(){
//cx, cy 为当前选中的位置
//mx,my 为上次选中的位置
if (!(cx == mx && cy == my)) { //与上次不是同一个位置
if (balls[cx][cy] != null) {//该处有球, 表示选中该球
mx = cx;
my = cy;
} else { //该处无球,
if (mx != -1 && isConnect(mx, my, cx, cy)) { //上次选中,且与此处连通,需要进行移动,然后进行消除。
balls[cx][cy] = balls[mx][my]; //移动球
balls[mx][my] = null;
mx = -1; //当前未选中球
my = -1;
int exNum = expunge();//进行消除计算,并返回消除的数量
score += Cfg.SCORE[exNum];//按数量统计分数。
if (score>maxScore) {
maxScore=score;
recordsave();
}
//System.out.println("score += Cfg.SCORE[exNum]") ;
if (exNum == 0 && endOfGame(Cfg.RUNNING_BALL_NUM)==false) { //无分数,表示不能消除球
//System.out.println("getRandomBalls(Cfg.RUNNING_BALL_NUM);");
getRandomBalls(Cfg.RUNNING_BALL_NUM);
expunge();
endOfGame(Cfg.RUNNING_BALL_NUM);
}
}
}
}
}
public void commandAction(Command cmd, Displayable arg1) {
// TODO Auto-generated method stub
if(cmd == cmdStop)
midletColorlinez.backHome();
else
if(cmd == cmdNew)
newStage();
}
public boolean newStage()
{
//System.out.println("newStage");
//addCommand(cmdUndo);
addCommand(cmdStop);
removeCommand(cmdNew);
calcSize();
//System.out.println("first calcSize");
init();
//System.out.println("after initial");
repaint();
return true;
}
private boolean endOfGame(int needball)
{
int avaliableBall=0;
endOfGame = true;
for(int r = 0; r < Cfg.SIZE; r++)
{
for(int c = 0; c < Cfg.SIZE; c++)
{
if(balls[r][c] == null ) {
avaliableBall += 1;
if (avaliableBall>=needball) {
endOfGame = false;
break;
}
}
}
if(endOfGame==false) break;
}
if(endOfGame)
notifyGameEnd();
return endOfGame;
}
public void notifyGameEnd()
{
addCommand(cmdNew);
addCommand(cmdStop);
// removeCommand(cmdUndo);
}
private void recordload()
{
try
{
RecordStore rs = RecordStore.openRecordStore("HRecords", false);
//maxScore=rs.getNumRecords() + 2000;
System.out.println("rs.getNumRecords()="+rs.getNumRecords());
if(rs.getNumRecords() > 0)
{
byte bs[] = rs.getRecord(1);
//maxScore=bs.length + 1000;
System.out.println("bs.length="+bs.length);
if(bs.length >= 1)
{
DataInputStream istream = new DataInputStream(new ByteArrayInputStream(bs,0,bs.length)); //注意DataInputStream的使用
try {
maxScore = istream.readInt();
istream.close();
//names[i] = istream.readUTF();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//maxScore = bs[0];
}
}
rs.closeRecordStore();
}
catch(RecordStoreException _ex) { }
}
private void recordsave()
{
try
{
RecordStore rs = RecordStore.openRecordStore("HRecords", true);
byte[] bs = null;
//bs[0] = (byte)maxScore;
//转换为byte
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeInt(maxScore);
//dos.writeLong(long1);
//dos.writeUTF(str1);
//dos.writeBoolean(WroteFlag);
bs = baos.toByteArray();
baos.close();
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(rs.getNumRecords() > 0) {
rs.setRecord(1, bs, 0, bs.length);
}
else {
}
rs.addRecord(bs, 0, bs.length);
rs.closeRecordStore();
}
catch(RecordStoreException _ex) { }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -