📄 loveeat.java
字号:
import java.lang.*;
import java.sql.*;
import java.awt.*;
import java.io.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
class ctl extends Thread{
LoveEat L;
public int kBuffer=1;
public int speed=200;
public int restart=1;
public int stage=1;
public ctl(LoveEat T)
{
L=T;
}
public void run()
{
keyDown kd=new keyDown(L.worm,this);
L.addKeyListener(kd);
while(true)
{
try
{ Thread.sleep(speed);}
catch(InterruptedException e){e.printStackTrace();}
L.worm.Direction=kBuffer;
if(L.pad.Remain()==0)
{
stage=stage+1;
if(stage==6)stage=1;
speed=(int)(speed*0.90);
L.pad=new snakePad(L.sizeX,L.sizeY,stage);
L.worm=new snake();
L.worm.Direction=1;
kBuffer=1;
L.removeKeyListener(kd);
kd=new keyDown(L.worm,this);
L.addKeyListener(kd);
}
if(getStat(L.worm.Head.getX(),L.worm.Head.getY())==1||L.worm.Head.getX()<1||L.worm.Head.getY()<1||L.worm.Head.getX()>L.sizeX-1||L.worm.Head.getY()>L.sizeY-1)
{
L.pad=new snakePad(L.sizeX,L.sizeY,stage);
L.worm=new snake();
L.worm.Direction=1;
L.removeKeyListener(kd);
kd=new keyDown(L.worm,this);
L.addKeyListener(kd);
}
else if(getStat(L.worm.Head.getX(),L.worm.Head.getY())==0)
{L.worm.Move();}
else if(getStat(L.worm.Head.getX(),L.worm.Head.getY())==2)
{
L.worm.eat();
L.pad.stat[L.worm.Head.getX()][L.worm.Head.getY()]=0;
}
L.repaint();
}
}
public void setSpeed(int s)
{
speed=s;
}
public int getStat(int xx,int yy)
{
int x=L.worm.Head.getX(),y=L.worm.Head.getY();
switch(L.worm.Direction)
{
case 0: y--;break;
case 1: x++;break;
case 2: y++;break;
case 3: x--;break;
}
return L.pad.getStat(x,y,L.worm);
}
}
class LoveEat extends Frame{
snakePad pad;
int sizeX=20,sizeY=20;
public snake worm;//XD WORM ~~~:
public static void main(String args[])
{
System.out.println("a:左 s:下 d:右 w:上");
LoveEat L=new LoveEat();
L.setTitle("看你能撑过几轮.......");
ctl Contrl=new ctl(L);
L.setSize(L.sizeX*30,L.sizeY*30);
L.show();
Contrl.start();
}
public void restart()
{
pad=new snakePad(sizeX,sizeY);
worm=new snake();
repaint();
}
public LoveEat()
{
pad=new snakePad(sizeX,sizeY,1);
worm=new snake();
repaint();
}
public void pSnake(Graphics g,snake s)
{
g.setColor(Color.black);
snakeUnit t=s.getHead();
pRect(t.getX(),t.getY(),g);
while(true)
{
t=t.Next;
pRect(t.getX(),t.getY(),g);
if(t.isTail==true)break;
}
}
public void pPad(Graphics g)
{int i,j;
g.setColor(Color.blue);
for(i=0;i<20;i++)
for(j=0;j<20;j++)
{
if(pad.stat[i][j]==1)pRect(i,j,g);
else if(pad.stat[i][j]==2)pBall(i,j,g);
}
}
public void pBall(int px,int py,Graphics g)
{
g.setColor(Color.yellow);
g.fillOval(30*px,30*py,30,30);
}
public void pRect(int px,int py,Graphics g)
{
g.setColor(Color.blue);
g.fillRect(30*px,30*py,30,30);
}
public void paint(Graphics g)
{
pPad(g);
pSnake(g,worm);
}
}
class snake{
snakeUnit Head,Tail;
snakeUnit tmp;
int Count;
public int Direction=0;
public snake()
{
Head=new snakeUnit(3,2);
tmp=new snakeUnit(2,2);
Tail=new snakeUnit(1,2);
tmp.Next=Tail;
tmp.Last=Head;
Head.Next=tmp;
Tail.Last=tmp;
Head.setKind(0);
Tail.setKind(1);
Direction=1;
Count=3;
}
public void eat()
{
tmp=Head;
int x=Head.getX(),y=Head.getY();
switch(Direction)
{
case 0: y--;break;
case 1: x++;break;
case 2: y++;break;
case 3: x--;break;
}
Head=new snakeUnit(x,y);
tmp.Last=Head;
Head.Next=tmp;
tmp.clearKind();
Head.setKind(0);
Count++;
}
public void Move()
{
tmp=Head;
int x=Head.getX(),y=Head.getY();
switch(Direction)
{
case 0: y--;break;
case 1: x++;break;
case 2: y++;break;
case 3: x--;break;
}
Tail.setPos(x,y);
snakeUnit tmp2;
tmp=Tail.Last;
Head.clearKind();
tmp.clearKind();
Tail.clearKind();
Head.Last=Tail;
tmp.Next=null;
Tail.Next=Head;
Tail.isHead=true;
tmp.isTail=true;
Head=Tail;
Tail=tmp;
}
public snakeUnit getHead()
{
return Head;
}
public snakeUnit getTail()
{
return Tail;
}
}
class snakeUnit{
public static int count=0;
int x=2,y=2;
public boolean isHead=false;
public boolean isTail=false;
snakeUnit Last;
snakeUnit Next;
public snakeUnit(int xx,int yy)
{
x=xx;y=yy;
count++;
}
public void setPos(int xx,int yy)
{
x=xx;y=yy;
}
public void setKind(int kind)//kind=0令该点为头,kind=1令该点为尾
{ isHead=false;
isTail=false;
if (kind==0) isHead=true;
else if(kind==1) isTail=true;
}
public void clearKind()
{
isHead=false;
isTail=false;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
}
class snakePad{
int stat[][];
int inSnake[][];
public snakePad(int sizeX,int sizeY)
{int i,j;
stat=new int[sizeX][sizeY];
inSnake=new int[sizeX][sizeY];
for(i=0;i<20;i++)
for(j=0;j<20;j++)
{
if(i==sizeX-1||j==sizeY-1||i==0||j==1)stat[i][j]=1;
else if((i+j)%2==1)stat[i][j]=2;
else stat[i][j]=0;
}
for(i=0;i<20;i++)
for(j=0;j<20;j++)
{
inSnake[i][j]=0;
}
}
public snakePad(int sizeX,int sizeY,int stage)
{
stat=new int[sizeX][sizeY];
inSnake=new int[sizeX][sizeY];
for(int i=0;i<=19;i++)
try{
Dbconn.fillPad(stage,stat);
}catch(Exception e){;}
}
public void ScanSnake(snake s)
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<20;j++)
{
inSnake[i][j]=0;
}
snakeUnit t=s.Head;
while(t.isTail==false)
{
inSnake[t.getX()][t.getY()]=1;
t=t.Next;
}
inSnake[t.getX()][t.getY()]=1;
}
public int getStat(int x,int y,snake s)
{
if(getBlock(x,y,s)==1)return 1;
else return stat[x][y];
}
public int getBlock(int x,int y,snake s)
{
ScanSnake(s);
return inSnake[x][y];
}
public int Remain()
{int Left=0;
for(int i=0;i<=19;i++)
for(int j=0;j<=19;j++)
if(stat[i][j]==2)Left++;
return Left;
}
}
class keyDown extends KeyAdapter{
snake s;
ctl c;
public keyDown(snake ss,ctl control)
{
s=ss;
c=control;
}
public void keyPressed (KeyEvent e)
{
char Key =e.getKeyChar();
switch(Key)
{
case 'w':if(s.Direction!=2)c.kBuffer=0;break;
case 's':if(s.Direction!=0)c.kBuffer=2;break;
case 'a':if(s.Direction!=1)c.kBuffer=3;break;
case 'd':if(s.Direction!=3)c.kBuffer=1;break;
case 'r': c.restart=1;break;
default : break;
}
}
}
class Dbconn{
public static void fillPad(int stage,int stat[][]) throws ClassNotFoundException {
try{
String strurl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=LoveEat.mdb";//此为NO-DSN方式
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection(strurl);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select Content from LoveEat where stage="+stage);
int i=0;
while(rs.next())
{
String tmpstr=rs.getString("Content");
for(int j=0;j<20;j++)
{
stat[j][i]=Integer.parseInt(tmpstr.substring(j,j+1));;
}
i++;
if(i>=20)break;
}
conn.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -