📄 puzzle.java
字号:
package mypackage;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class puzzle extends Applet implements MouseListener{
public piece pieces[]=new piece[16];
int i,x,y,cur_val;
int start_x=50;
int start_y=50;//初始拼图位置
int row_size=4;
int piece_width=50;
int piece_height=50;
private int blank_piece_pos;
Graphics myG;
simple_puzzle simple;
random_value value_supplier=new random_value(1,16);
MediaTracker tracker;
selector level_indicator;
Thread loadThread;//thread used to load images
String image_name;
media_checker checker;
boolean images_loaded=false;
boolean user_waitting =false;
public boolean user_waiting;
public void init(){
myG=getGraphics();
checker=null;
tracker=new MediaTracker(this);
level_indicator=new selector(0,this,100,5);
image_name=getParameter("PREFIX");
/*初始化游戏*/
x=start_x;
y=start_y;
for(i=0;i<=15;i++){
cur_val=value_supplier.getRandomValue();
}
/*设置空白块的位置*/
if(cur_val==16)
blank_piece_pos=i;
Object cur_var;
pieces[i]=new piece(i, cur_val, myG, x, y, null, this);
x+=50;
if(x>200){x=50;y+=50;}
/*开始*/
simple=new simple_puzzle(15,this);
resize(pieces[0].width*6,pieces[0].height*6);
addMouseListener(this);
checker=new media_checker(myG,this);
}
public void start(){}
public void stop(){
if(loadThread!=null){
loadThread.stop();
loadThread=null;
}
}
public void run(){}
public void mouseEntered(MouseEvent evt){}
public void mouseExited(MouseEvent evt){}
public void mouseReleased(MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
public void mousePressed(MouseEvent evt){
int x,y;
Component e = null;
x=e.getX();
y=e.getY();
int i;
int rel_x,rel_y;
int click_piece;
int cur;
String str;
//首先检查点是否在拼图内
if(point_inside(x,y)){
rel_x=(int)(x-start_x)/piece_width;
rel_y=(int)(y-start_y)/piece_height;
click_piece=rel_x+row_size*rel_y;
if(pieces[blank_piece_pos].same_row(y)){
if(pieces[click_piece].toLeft(pieces[blank_piece_pos])){
cur=pieces[blank_piece_pos].left;
while(cur!=pieces[click_piece].left){
pieces[cur].xchg(pieces[blank_piece_pos]);
blank_piece_pos=cur;
cur=pieces[blank_piece_pos].left;
if(simple.puzzle_complete())
myG.drawString("Congratulation!!!", 75, 275);
}
}
else if(pieces[click_piece].toRight(pieces[blank_piece_pos])){
cur=pieces[blank_piece_pos].right;
while(cur!=pieces[click_piece].right){
pieces[cur].xchg(pieces[blank_piece_pos]);
blank_piece_pos=cur;
cur=pieces[blank_piece_pos].right;
if(simple.puzzle_complete())
myG.drawString("Congratulation!!!", 75, 275);
}
}
else if(pieces[blank_piece_pos].same_col(x)){
if(pieces[click_piece].above(pieces[blank_piece_pos])){
cur=pieces[blank_piece_pos].up;
while(cur!=pieces[click_piece].left){
pieces[cur].xchg(pieces[blank_piece_pos]);
blank_piece_pos=cur;
cur=pieces[blank_piece_pos].up;
if(simple.puzzle_complete())
myG.drawString("Congratulation!!!", 75, 275);
}
}
else if(pieces[click_piece].below(pieces[blank_piece_pos])){
cur=pieces[blank_piece_pos].down;
while(cur!=pieces[click_piece].left){
pieces[cur].xchg(pieces[blank_piece_pos]);
blank_piece_pos=cur;
cur=pieces[blank_piece_pos].down;
if(simple.puzzle_complete())
myG.drawString("Congratulation!!!", 75, 275);
}
}
}
}
else if(level_indicator.inside(x,y)){
boolean user_waiting = false;
if(images_loaded==true){
if(user_waiting==true){
str="Image loading complete!";
myG.setColor(Color.pink);
myG.fillRect(0, 251, 300, 300);
myG.setFont(new Font("Times",Font.BOLD,8));
myG.setColor(Color.black);
myG.drawString(str,10,275);
user_waiting=false;
}
level_indicator.change();
level_indicator.paint();
paint(myG);
}
else{
user_waiting=true;
str="All Images not loaded,try again soon...";
myG.setFont(new Font("Times",Font.BOLD,8));
myG.setColor(Color.black);
myG.drawString(str, 10, 275);
}
}
}
}
public void paint(Graphics g){
int i;
int j;
int cur;
g.setColor(Color.pink);
g.fillRect(0,0,getSize().width,getSize().height);
cur=0;
for(i=0;i<=(15);i++)
pieces[i].draw();
level_indicator.paint();
}
//获得位置
int getLocValue(int arr_loc){
return (pieces[arr_loc].value).intValue();
}
//获得空白位置
int getBlankLocValue(){
return pieces[blank_piece_pos].value.intValue();
}
public boolean point_inside(int x,int y){
if((x>=start_x)&&(y>=start_y)&&(x<=start_x+row_size*piece_width)&&(y<=start_y+row_size*piece_width))
return true;
else
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -