⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loveeat.java

📁 贪食蛇用了java 和简易的access数据库(数据库为了凑个数)
💻 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 + -