package tanchishe;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class she extends Thread implements KeyListener {
mianban mian;
ditu di=new ditu();
//初始化
int h=0;
Node t=new Node(-1,-1);
Node t2=new Node(-1,-1);
int i=25;
int j=2;
int sudu=300;
int sudu2=300;
//当前第一块地址
int z=0;
int m=0;
int leve=0;
boolean zhanting;
boolean q;
boolean jiesu;
// 长度
int x=25;
int ddd=0;//地图选择
int fen=0;
int sbao=0;
int qbao=0;
int ss=0;
int qq=0;
int y=2;
Node foods;
//副本长度
JButton bb[][]=new JButton[50][50];
LinkedList nodeArray=new LinkedList();
//开始 饿哦金额金额金额
public void kaishi(){
sbao=0;
qbao=0;
qq=0;
ss=0;
fen=0;
zhanting=true;
jiesu=true;
q=true;
z=0;
m=0;
int x=25;
int y=2;
this.x=x;
this.y=y;
t.x=-1;
t.y=-1;
sudu=mian.se.sudu;
sudu=mian.se.sudu2;
bb=mian.dd;
leve=0;
nodeArray.clear();
di.shuaxin(bb);
ddd=mian.se.ddd;
di.ditu1(ddd);
nodeArray.add(new Node(x,0));
nodeArray.add(new Node(x,1));
nodeArray.add(new Node(x,2));
bb[x][y-2].setBackground(Color.red);
bb[x][y-1].setBackground(Color.red);
bb[x][y].setBackground(Color.red);
bb[x][y-2].setVisible(true);
bb[x][y-1].setVisible(true);
bb[x][y].setVisible(true);
foods=food();
this.start();
}
public void run(){
while(q)
{if(sudu<=0&&sudu>=500)
{JOptionPane.showMessageDialog(null, "能行不?");
jiesu=false;}
if(jiesu)
move();
try{
Thread.sleep(sudu);
}catch(Exception ex){break;}
}
return;
}
public void keyPressed(KeyEvent e)
{int s=100;
if(sudu<=400&&sudu>150)
s=151;
if(sudu<=150&&sudu>50)
s=51;
if(sudu<=50&&sudu>10)
s=6;
//JOptionPane.showMessageDialog(null, "aaa");
switch(e.getKeyCode())
{
case KeyEvent.VK_DOWN:z=3;sudu=s;break;
case KeyEvent.VK_UP:z=2;sudu=s;break;
case KeyEvent.VK_LEFT:z=1;sudu=s;break;
case KeyEvent.VK_RIGHT:z=0;sudu=s;break;
}
System.out.println(sudu);
}
public void keyReleased(KeyEvent e)
{switch(e.getKeyCode())
{
case KeyEvent.VK_DOWN:sudu=sudu2-leve*10;break;
case KeyEvent.VK_UP:sudu=sudu2-leve*10;break;
case KeyEvent.VK_LEFT:sudu=sudu2-leve*10;break;
case KeyEvent.VK_RIGHT:sudu=sudu2-leve*10;break;
}
}
public void keyTyped(KeyEvent e)
{
}
public boolean move(){
if((int)(fen/50)>leve)
{
leve=(int)(fen/50);
leve1();
}
Node nt=(Node)nodeArray.getLast();
mian.w2.setText(String.valueOf(fen));
mian.w4.setText(String.valueOf(sbao));
mian.w6.setText(String.valueOf(qbao));
mian.w9.setText(String.valueOf(leve));
int x=nt.x;
int y=nt.y;
//原先运行方向M现在运行方向Z 实现不可180度反走
if((m==1&&z==0)||(m==2&&z==3)||(m==0&&z==1)||(m==3&&z==2))
{
z=m;
}
m=z;
switch(z)
{
case 3:x++;break;
case 2:x--;break;
case 1:y--;break;
case 0:y++;break;
}
if((0<=x&&x<50)&&(0<=y&&y<50)){
if(bb[x][y].isVisible())// 吃到食物或者撞到身体
{
if(x==foods.x&&y==foods.y)// 吃到食物
{
nodeArray.addLast(new Node(x,y));
fen=fen+10;
if(ss==1)
{
sbao++;
ss=0;
}
if(qq==1)
{
qbao++;
qq=0;
}
foods=food();
return true;
}
else {
if(bb[x][y].getBackground()!=Color.red)
{
if(qbao>0) //墙宝 游戏中墙
{
bb[x][y].setBackground(Color.red);
bb[x][y].setVisible(true);
t2.x=x;
t2.y=y;
nodeArray.add(new Node(x,y));
nt=(Node)nodeArray.removeFirst();
bb[nt.x][nt.y].setBackground(Color.black);
bb[nt.x][nt.y].setVisible(false);
qbao--;
System.out.println(qbao);
return true;
}
else
//撞墙而死(内墙)
{jieshu();
//JOptionPane.showMessageDialog(null, "aaa");
return false;}
}
else
{
if(sbao>0) //穿身
{ bb[x][y].setVisible(true);
nodeArray.add(new Node(x,y));
bb[x][y].setBackground(Color.red);
t.x=x;
t.y=y;
System.out.println(t.x+" sen "+t.y);
//蛇尾
nt=(Node)nodeArray.removeFirst();
bb[nt.x][nt.y].setVisible(false);
bb[nt.x][nt.y].setBackground(Color.black);
sbao--;
return true;
}
//穿身而死
else {jieshu();
//JOptionPane.showMessageDialog(null, "bbb");
return false;}
}
}
}
else //什么都没碰到
{
bb[x][y].setBackground(Color.red);
bb[x][y].setVisible(true);
nodeArray.add(new Node(x,y));
//蛇尾
nt=(Node)nodeArray.removeFirst();
if((nt.x==t.x&&nt.y==t.y)||(nt.x==t2.x&&nt.y==t2.y))
{
if(nt.x==t.x&&nt.y==t.y)
bb[nt.x][nt.y].setBackground(Color.red);
if(nt.x==t2.x&&nt.y==t2.y)
bb[nt.x][nt.y].setBackground(Color.black);
t.x=-2;
t.y=-3;
t2.x=-2;
t2.y=-3;
System.out.println("aaaaaa");
}
else
{
bb[nt.x][nt.y].setVisible(false);
bb[nt.x][nt.y].setBackground(Color.black);
}
return true;}
}
else {
if(qbao>0) //墙宝
{
if(x>=50)
x=x-50;
if(y>=50)
y=y-50;
if(y<0)
y=y+50;
if(x<0)
x=x+50;
bb[x][y].setBackground(Color.red);
bb[x][y].setVisible(true);
nodeArray.add(new Node(x,y));
nt=(Node)nodeArray.removeFirst();
bb[nt.x][nt.y].setBackground(Color.black);
bb[nt.x][nt.y].setVisible(false);
qbao--;
System.out.println(qbao);
return true;
}
else
{jieshu();
//JOptionPane.showMessageDialog(null, "ccc");
return false;}
}
}
public Node food(){
int x=0;
int y=0;
int r=0;
do{
x = (int)(Math.random()*50);
y = (int)(Math.random()*50);
r=(int)(Math.random()*10);
}
while(bb[x][y].isVisible());
if(r<=6&&r>-1)
{
bb[x][y].setBackground(Color.red);
bb[x][y].setVisible(true);
}
if(r>8&&r<10)
{ ss=1;
bb[x][y].setBackground(Color.blue);
bb[x][y].setVisible(true);
}
if(r<=8&&r>6){qq=1;
bb[x][y].setBackground(Color.yellow);
bb[x][y].setVisible(true);
}
return new Node(x,y);
}
public void zhanting(){
jiesu=!jiesu;
}
public void jieshu()
{
for(int i = 0; i < 50; i++) {
for(int j = 0; j<50; j++)
{bb[i][j].setBackground(Color.black);
bb[i][j].setVisible(false);
}
}
mian.b2.setEnabled(false);
mian.d1.setEnabled(true);
mian.d2.setEnabled(true);
mian.d3.setEnabled(true);
mian.d4.setEnabled(true);
mian.d5.setEnabled(true);
mian.d6.setEnabled(true);
mian.b1.setEnabled(true);
jiesu=false;
JOptionPane.showMessageDialog(null, "游戏结束");
}
public void leve1()
{System.out.println(sudu);
sudu=sudu-10;
}
}
class Node{
int x;
int y;
Node(int x,int y){
this.x=x;
this.y=y;
}
}