📄 ycgdiamonds.java
字号:
for(int i=1;i<=SIZEI-3;i++)
for(int j=1;j<=SIZEJ;j++)
{
chessView.add(cb[i+3][j]);
}
}
//清屏
public void ClearChess(){
for(int i=1;i<=SIZEI;i++)
for(int j=1;j<=SIZEJ;j++)
{
cb[i][j].color=0;
}
}
//重绘棋盘
public void ReDraw(){
for(int i=1;i<=SIZEI;i++)
for(int j=1;j<=SIZEJ;j++)
{
cb[i][j].color=diamonds_panel[i][j];
}
chessView.repaint();
}//end of ReDraw
//初始化棋盘
void CreatDiamondsPanel()
{
for(int i=0;i<=SIZEI+1;i++)
diamonds_panel[i][0]=diamonds_panel[i][SIZEJ+1]=1;
for(int i=0;i<=SIZEJ+1;i++)
diamonds_panel[0][i]=diamonds_panel[SIZEI+1][i]=1;
for(int i=1;i<=SIZEI;i++)
for(int j=1;j<=SIZEJ;j++)
diamonds_panel[i][j]=0;
}
public void RandomMyImage()
{
flag_random=true;
AskRandom();//请求缓存//外部函数
}
//判断有无图象重叠冲突
boolean Clash(MyImage temp){
if(diamonds_panel[temp.x1][temp.y1]!=0||
diamonds_panel[temp.x2][temp.y2]!=0||
diamonds_panel[temp.x3][temp.y3]!=0||
diamonds_panel[temp.x4][temp.y4]!=0)
return false;
else
return true;
}
MyImage temp=new MyImage(0,0,0,0,0,0,0,0,0);
//判断可否响应键盘事件
boolean CanDown(){
temp.SetMyImage(tempMyImage.x1+1,tempMyImage.y1,tempMyImage.x2+1,tempMyImage.y2,
tempMyImage.x3+1,tempMyImage.y3,tempMyImage.x4+1,tempMyImage.y4,tempMyImage.color);
return Clash(temp);
}
boolean CanLeft(){
temp.SetMyImage(tempMyImage.x1,tempMyImage.y1-1,tempMyImage.x2,tempMyImage.y2-1,
tempMyImage.x3,tempMyImage.y3-1,tempMyImage.x4,tempMyImage.y4-1,tempMyImage.color);
return Clash(temp);
}
boolean CanRight(){
temp.SetMyImage(tempMyImage.x1,tempMyImage.y1+1,tempMyImage.x2,tempMyImage.y2+1,
tempMyImage.x3,tempMyImage.y3+1,tempMyImage.x4,tempMyImage.y4+1,tempMyImage.color);
return Clash(temp);
}
boolean CanRound(){
if(tempMyImage.color==YELLOW)//田字格,不变形
return false;
int x1=tempMyImage.x1-tempMyImage.x3;
int x2=tempMyImage.x2-tempMyImage.x3;
int x4=tempMyImage.x4-tempMyImage.x3;
int y1=tempMyImage.y1-tempMyImage.y3;
int y2=tempMyImage.y2-tempMyImage.y3;
int y4=tempMyImage.y4-tempMyImage.y3;
temp.SetMyImage(tempMyImage.x3+y1,tempMyImage.y3-x1,tempMyImage.x3+y2,tempMyImage.y3-x2,
tempMyImage.x3,tempMyImage.y3,tempMyImage.x3+y4,tempMyImage.y3-x4,tempMyImage.color);
return Clash(temp);
}
//清除当前活动图形
void ClearTemp(){
cb[tempMyImage.x1][tempMyImage.y1].color=0;
cb[tempMyImage.x2][tempMyImage.y2].color=0;
cb[tempMyImage.x3][tempMyImage.y3].color=0;
cb[tempMyImage.x4][tempMyImage.y4].color=0;
cb[tempMyImage.x1][tempMyImage.y1].repaint();
cb[tempMyImage.x2][tempMyImage.y2].repaint();
cb[tempMyImage.x3][tempMyImage.y3].repaint();
cb[tempMyImage.x4][tempMyImage.y4].repaint();
}
//重绘当前活动图形
void PrintTemp(){
cb[tempMyImage.x1][tempMyImage.y1].color=tempMyImage.color;
cb[tempMyImage.x2][tempMyImage.y2].color=tempMyImage.color;
cb[tempMyImage.x3][tempMyImage.y3].color=tempMyImage.color;
cb[tempMyImage.x4][tempMyImage.y4].color=tempMyImage.color;
cb[tempMyImage.x1][tempMyImage.y1].repaint();
cb[tempMyImage.x2][tempMyImage.y2].repaint();
cb[tempMyImage.x3][tempMyImage.y3].repaint();
cb[tempMyImage.x4][tempMyImage.y4].repaint();
}
//处理消层事件
void DealWin(){
int i=SIZEI;
int flag=1;
win_num=0;
while(i>0)
{
flag=1;
for(int j=1;j<=SIZEJ;j++)
if(diamonds_panel[i][j]==0)
flag=0;
if(flag==1)
{
win_number++;
win_num++;
mark+=10;
if(win_number%5==0&&(state==0||state==2))
speed=speed*9/10;
for(int k=i;k>=2;k--)
for(int j=1;j<=SIZEJ;j++)
diamonds_panel[k][j]=diamonds_panel[k-1][j];
}
else
i--;
}
if(win_num>1)
{
mark+=(win_num-1)*10;
if(state==1)
Destroy(win_num);
}
ReDraw();
//ClearTemp();
//PrintTemp();//刷新后立即显示小图
}
//判断是否有消层
boolean HaveWin(int x1,int x2,int x3,int x4){
int i=1;
for(int j=1;j<=SIZEJ;j++)
if(diamonds_panel[x1][j]==0)
i=0;
if(i==1)
return true;
i=1;
for(int j=1;j<=SIZEJ;j++)
if(diamonds_panel[x2][j]==0)
i=0;
if(i==1)
return true;
i=1;
for(int j=1;j<=SIZEJ;j++)
if(diamonds_panel[x3][j]==0)
i=0;
if(i==1)
return true;
i=1;
for(int j=1;j<=SIZEJ;j++)
if(diamonds_panel[x4][j]==0)
i=0;
if(i==1)
return true;
//System.out.println("have no win");
return false;
}
//处理事件
public void DealWith()
{
if(CanDown())
{
list_key.addLast(new Integer(down_key));
DealWithKey();
}
else
{
list_key.addLast(new Integer(bottom_key));
DealWithKey();
}
}
//事件处理线程
class Diamonds extends Thread{
Diamonds(){
win_number=0;
mark=0;
CreatDiamondsPanel();
RandomMyImage();
speed=SPEED;
ReDraw();
}
public void run(){
while(true)
{
{
try{
sleep(speed);
}catch(Exception e){};
DealWith();
}
}
}
}
}
public void DealWithKey()
{
int key_num=0;
while(!list_key.isEmpty())
{
key_num=((Integer)list_key.removeFirst()).intValue();
if(key_num==user1.left_key)//<
{
{
if(user1.CanLeft())
{
user1.ClearTemp();
user1.tempMyImage.y1--;
user1.tempMyImage.y2--;
user1.tempMyImage.y3--;
user1.tempMyImage.y4--;
user1.PrintTemp();
}
}
}
else if(key_num==user1.up_key)//^
{
{
if(user1.CanRound())
{
user1.ClearTemp();
int x1=user1.tempMyImage.x1-user1.tempMyImage.x3;
int x2=user1.tempMyImage.x2-user1.tempMyImage.x3;
int x4=user1.tempMyImage.x4-user1.tempMyImage.x3;
int y1=user1.tempMyImage.y1-user1.tempMyImage.y3;
int y2=user1.tempMyImage.y2-user1.tempMyImage.y3;
int y4=user1.tempMyImage.y4-user1.tempMyImage.y3;
user1.tempMyImage.x1=user1.tempMyImage.x3+y1;
user1.tempMyImage.y1=user1.tempMyImage.y3-x1;
user1.tempMyImage.x2=user1.tempMyImage.x3+y2;
user1.tempMyImage.y2=user1.tempMyImage.y3-x2;
user1.tempMyImage.x4=user1.tempMyImage.x3+y4;
user1.tempMyImage.y4=user1.tempMyImage.y3-x4;
user1.PrintTemp();
}
}
}
else if(key_num==user1.right_key)//>
{
{
if(user1.CanRight())
{
user1.ClearTemp();
user1.tempMyImage.y1++;
user1.tempMyImage.y2++;
user1.tempMyImage.y3++;
user1.tempMyImage.y4++;
user1.PrintTemp();
}
}
}
else if(key_num==user1.down_key)//V
{
{
if(user1.CanDown())
{
user1.ClearTemp();
user1.tempMyImage.x1++;
user1.tempMyImage.x2++;
user1.tempMyImage.x3++;
user1.tempMyImage.x4++;
user1.PrintTemp();
}
}
}
else if(key_num==user1.bottom_key)//到底
{
num1.setText("1消去"+user1.win_number+"分数:"+user1.mark);
num2.setText("2消去"+user2.win_number+"分数:"+user2.mark);
{
while(user1.CanDown())
{
user1.ClearTemp();
user1.tempMyImage.x1++;
user1.tempMyImage.x2++;
user1.tempMyImage.x3++;
user1.tempMyImage.x4++;
//user1.PrintTemp();
}
user1.diamonds_panel[user1.tempMyImage.x1][user1.tempMyImage.y1]=user1.tempMyImage.color;
user1.diamonds_panel[user1.tempMyImage.x2][user1.tempMyImage.y2]=user1.tempMyImage.color;
user1.diamonds_panel[user1.tempMyImage.x3][user1.tempMyImage.y3]=user1.tempMyImage.color;
user1.diamonds_panel[user1.tempMyImage.x4][user1.tempMyImage.y4]=user1.tempMyImage.color;
user1.PrintTemp();
if(user1.HaveWin(user1.tempMyImage.x1,user1.tempMyImage.x2,user1.tempMyImage.x3,user1.tempMyImage.x4))
{
//System.out.println("have win");
user1.DealWin();
}
user1.RandomMyImage();
}
}
else if(key_num==user2.left_key)//<
{
{
if(user2.CanLeft())
{
user2.ClearTemp();
user2.tempMyImage.y1--;
user2.tempMyImage.y2--;
user2.tempMyImage.y3--;
user2.tempMyImage.y4--;
user2.PrintTemp();
}
}
}
else if(key_num==user2.up_key)//^
{
{
if(user2.CanRound())
{
user2.ClearTemp();
int x1=user2.tempMyImage.x1-user2.tempMyImage.x3;
int x2=user2.tempMyImage.x2-user2.tempMyImage.x3;
int x4=user2.tempMyImage.x4-user2.tempMyImage.x3;
int y1=user2.tempMyImage.y1-user2.tempMyImage.y3;
int y2=user2.tempMyImage.y2-user2.tempMyImage.y3;
int y4=user2.tempMyImage.y4-user2.tempMyImage.y3;
user2.tempMyImage.x1=user2.tempMyImage.x3+y1;
user2.tempMyImage.y1=user2.tempMyImage.y3-x1;
user2.tempMyImage.x2=user2.tempMyImage.x3+y2;
user2.tempMyImage.y2=user2.tempMyImage.y3-x2;
user2.tempMyImage.x4=user2.tempMyImage.x3+y4;
user2.tempMyImage.y4=user2.tempMyImage.y3-x4;
user2.PrintTemp();
}
}
}
else if(key_num==user2.right_key)//>
{
{
if(user2.CanRight())
{
user2.ClearTemp();
user2.tempMyImage.y1++;
user2.tempMyImage.y2++;
user2.tempMyImage.y3++;
user2.tempMyImage.y4++;
user2.PrintTemp();
}
}
}
else if(key_num==user2.down_key)//V
{
{
if(user2.CanDown())
{
user2.ClearTemp();
user2.tempMyImage.x1++;
user2.tempMyImage.x2++;
user2.tempMyImage.x3++;
user2.tempMyImage.x4++;
user2.PrintTemp();
}
}
}
else if(key_num==user2.bottom_key)//到底
{
num1.setText("1消去"+user1.win_number+"分数:"+user1.mark);
num2.setText("2消去"+user2.win_number+"分数:"+user2.mark);
{
while(user2.CanDown())
{
user2.ClearTemp();
user2.tempMyImage.x1++;
user2.tempMyImage.x2++;
user2.tempMyImage.x3++;
user2.tempMyImage.x4++;
//user2.PrintTemp();
}
user2.diamonds_panel[user2.tempMyImage.x1][user2.tempMyImage.y1]=user2.tempMyImage.color;
user2.diamonds_panel[user2.tempMyImage.x2][user2.tempMyImage.y2]=user2.tempMyImage.color;
user2.diamonds_panel[user2.tempMyImage.x3][user2.tempMyImage.y3]=user2.tempMyImage.color;
user2.diamonds_panel[user2.tempMyImage.x4][user2.tempMyImage.y4]=user2.tempMyImage.color;
user2.PrintTemp();
if(user2.HaveWin(user2.tempMyImage.x1,user2.tempMyImage.x2,user2.tempMyImage.x3,user2.tempMyImage.x4))
{
//System.out.println("have win");
user2.DealWin();
}
user2.RandomMyImage();
}
}
}//end of while
}//end of the method
//添加键盘事件
public void OpenKey(){
this.addKeyListener(
new KeyListener()
{
public void keyPressed(KeyEvent event)
{
//System.out.println(event.getKeyCode());
if(event.getKeyCode()==82)
{
state=(state+1)%3;
if(state==0)
kind.setText("单人模式");
if(state==1)
kind.setText("双人对攻");
if(state==2)
kind.setText("双人自玩");
}
//单人模式
if(event.getKeyCode()==user1.begin_key&&state==0)
{
try{
user1.diamonds_thread.stop();
}catch(Exception e){};
}
//双人模式
if(event.getKeyCode()==user2.begin_key)
{
try{
user2.diamonds_thread.stop();
}catch(Exception e){};
Initial();
//PictureCreat();
result.setText("");
user2.diamonds_thread=user2.new Diamonds();
user2.diamonds_thread.start();
}
if(event.getKeyCode()==user1.begin_key&&(state==1||state==2))
{
result.setText("");
//PictureCreat();
try{
user1.diamonds_thread.stop();
}catch(Exception e){};
user1.diamonds_thread=user1.new Diamonds();
user1.diamonds_thread.start();
}
//暂停
if(event.getKeyCode()==user1.pause_key)
{
try{
if(user1.flag)
{
user1.flag=!user1.flag;
user1.diamonds_thread.suspend();
}
else
{
user1.flag=!user1.flag;
user1.diamonds_thread.resume();
}
}catch(Exception e){};
}
if(event.getKeyCode()==user2.pause_key)
{
try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -