📄 startcanvas.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
import java.io.*;
public class StartCanvas extends GameCanvas implements Runnable{
private PinTu midlet;
private Image gameImg;
private Sprite[] spriteArray;
private int rowCol;
private final int BLOCKWH,STARTX,STARTY;
private int outLineWidth,outLineHeight;
protected boolean stoped = false;
private int delay = 120;
protected final int WIDTH,HEIGHT;
private int[] sequenceArray;
private int index,upIndex,downIndex,leftIndex,rightIndex;
private Sprite upSprite,downSprite,leftSprite,rightSprite,menuSprite;
private Image dirImg;
private Thread t;
public StartCanvas(PinTu m) {
super(true);
setFullScreenMode(true);
midlet = m;
rowCol = midlet.rowColArray[midlet.selectedLevelIndex];
index = rowCol*(rowCol+1)-1;
outLineWidth = midlet.WIDTHHEIGHT;
BLOCKWH = outLineWidth/rowCol;
outLineHeight = midlet.WIDTHHEIGHT + BLOCKWH;
spriteArray = new Sprite[rowCol*rowCol];
WIDTH = getWidth();
HEIGHT = getHeight();
STARTX = (WIDTH - outLineWidth)/2;
STARTY = (HEIGHT - outLineHeight)/2;
////////////////////////////////////////////////////////////////
sequenceArray = new int[rowCol*(rowCol+1)];
for(int i=0;i<rowCol*rowCol;i++)
sequenceArray[i] = i;
for(int i =rowCol*rowCol;i<rowCol*(rowCol+1);i++){
sequenceArray[i] = -2;//////////////////////////////////////
}
sequenceArray[rowCol*(rowCol+1)-1] = -1;////////////////////////
/////////////////////////////////////////////////////////////////
}
protected void start(){
try{
dirImg = Image.createImage(midlet.imgPath + "dir.png");
gameImg = Image.createImage(midlet.imgPath +
midlet.nameArray[midlet.
selectedPicIndex]);
}catch(IOException e){
System.out.println("Image loaded error!");
}
extractImg(gameImg,BLOCKWH,BLOCKWH);
randomSequence();
setPosition();
menuSprite = new Sprite(dirImg,10,10);
menuSprite.setTransform(Sprite.TRANS_ROT270);
menuSprite.setPosition(5,HEIGHT -15);
t = new Thread(this);
t.start();
}
public void randomSequence(){
Random r = new Random();
int rValue,t;
for(int i=0;i<rowCol * rowCol - 1;i++){/////////////////////////////////////////////////
//rValue = r.nextInt(rowCol * rowCol);//////////////////////////////////////////////
rValue = Math.abs(r.nextInt()%(rowCol*rowCol - 1));/////////////////////////////////////
t = sequenceArray[i];
sequenceArray[i] = sequenceArray[rValue];
sequenceArray[rValue] = t;
}
}
public void extractImg(Image source,int width,int height){
Image result;
int x = 0,y = 0;
for(int i=1;i<=rowCol;i++){
for(int j=1;j<=rowCol;j++){
x = (j-1) * width;
y = (i-1) * height;
result = Image.createImage(width,height);/////////////////////////////////////////
result.getGraphics().drawImage(source,-x,-y,Graphics.TOP | Graphics.LEFT);
spriteArray[(i-1)*rowCol + j-1] = new Sprite(result,width,height);
}
}
}
public void setPosition(){
int posX,posY,row,col;
for(int i=0;i<spriteArray.length;i++){
row =(int)(i/rowCol);
col = i%rowCol;
posX = STARTX + col*BLOCKWH;/////////////////////////
posY = STARTY + row*BLOCKWH;/////////////////////////////
spriteArray[sequenceArray[i]].setPosition(posX,posY);
}
}
public void run(){
while(!stoped){
checkIndex();
update();
draw();
try{
t.sleep(delay);
}catch(InterruptedException e){
//
}
}
}
protected void keyPressed(int key){
if(key == 42){
midlet.showMenuCanvas();
stoped = true;
}
}
private void update(){
int keyState = getKeyStates();
if((keyState & LEFT_PRESSED)!=0)
resetPosition("LEFT");
if((keyState & RIGHT_PRESSED)!=0)
resetPosition("RIGHT");
if((keyState & UP_PRESSED)!=0)
resetPosition("UP");
if((keyState & DOWN_PRESSED)!=0)
resetPosition("DOWN");
menuSprite.nextFrame();
}
private void checkIndex(){
int row,col;
row = (int)(index/rowCol);
col = index % rowCol;
upIndex = index - rowCol;
downIndex = index + rowCol;
leftIndex = index -1;
rightIndex = index +1;
downSprite = upSprite = leftSprite = rightSprite = null;
if(downIndex < sequenceArray.length && sequenceArray[downIndex] != -2 && sequenceArray[downIndex]!= -1)
downSprite = spriteArray[sequenceArray[downIndex]];
if(upIndex >=0)
upSprite = spriteArray[sequenceArray[upIndex]];
if(leftIndex >=0 && sequenceArray[leftIndex] != -2 && sequenceArray[leftIndex]!=-1 && ((int)(leftIndex/rowCol)==row))///////////////////
leftSprite = spriteArray[sequenceArray[leftIndex]];
if((int)(rightIndex/rowCol)==row)/////////////////////////////////////////////////////
rightSprite = spriteArray[sequenceArray[rightIndex]];
}
private void resetPosition(String dir){
int posX,posY,row,col,t;
row = (int)(index/rowCol);
col = index % rowCol;
posX = STARTX + col*BLOCKWH;////////////////////////////////////
posY = STARTY + row*BLOCKWH;///////////////////////////////////
if(dir.toString()=="LEFT" && rightSprite!=null){
t = sequenceArray[rightIndex];
sequenceArray[rightIndex] = -1;
sequenceArray[index] = t;
index = rightIndex;
rightSprite.setPosition(posX,posY);
}
if(dir.toString() == "RIGHT" && leftSprite != null){
t = sequenceArray[leftIndex];
sequenceArray[leftIndex] = -1;
sequenceArray[index] = t;
index = leftIndex;
leftSprite.setPosition(posX,posY);
}
if(dir.toString() == "UP" && downSprite != null){
t = sequenceArray[downIndex];
sequenceArray[downIndex] = -1;
sequenceArray[index] = t;
index = downIndex;
downSprite.setPosition(posX,posY);
}
if(dir.toString() == "DOWN" && upSprite != null){
t = sequenceArray[upIndex];
sequenceArray[upIndex] = -1;
sequenceArray[index] = t;
index = upIndex;
upSprite.setPosition(posX,posY);
}
}
private void draw(){
Graphics g = getGraphics();
g.setColor(0xFFFFFF);
g.fillRect(0,0,WIDTH,HEIGHT);
g.setColor(0x317E3D);
g.setStrokeStyle(Graphics.SOLID);
g.drawRect(STARTX-2,STARTY-2,outLineWidth+3,outLineHeight+3);
g.setColor(0xF5F4B8);
g.fillRect(STARTX,STARTY,outLineWidth,outLineHeight);
g.setColor(0x317E3D);
g.drawRect(STARTX,STARTY + rowCol * BLOCKWH + 1,(rowCol -1) * BLOCKWH-2,BLOCKWH -2 );
for(int i=0;i<rowCol*rowCol;i++){
spriteArray[i].paint(g);
}
menuSprite.paint(g);
flushGraphics();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -