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

📄 greedsnake.java

📁 很好玩的贪吃蛇游戏
💻 JAVA
字号:
import java.awt.*; 
import java.awt.event.*; 
public class greedsnake //主类 
{

/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
new MyWindow();

}

} 
class MyPanel extends Panel implements KeyListener,Runnable//自定义面板类,继承了键盘和线程接口 
{

Button snake[]; //定义蛇按钮 
int shu=0; //蛇的节数 
int food[]; //食物数组 
boolean result=true; //判定结果是输 还是赢 
Thread thread; //定义线程 
static int weix,weiy; //食物位置 
boolean t=true; //判定游戏是否结束 
int fangxiang=0; //蛇移动方向 
int x=0,y=0; //蛇头位置 
MyPanel() 
{

setLayout(null); 
snake=new Button[20]; 
food=new int [20]; 
thread=new Thread(this);


for(int j=0;j<20;j++) 
{ 
food[j]=(int)(Math.random()*99);//定义20个随机食物 
}

weix=(int)(food[0]*0.1)*60; //十位*60为横坐标 
weiy=(int)(food[0]%10)*40; //个位*40为纵坐标 
for(int i=0;i<20;i++) 
{ 
snake[i]=new Button(); 
}

add(snake[0]); 
snake[0].setBackground(Color.black); 
snake[0].addKeyListener(this); //为蛇头添加键盘监视器 
snake[0].setBounds(0,0,10,10); 
setBackground(Color.cyan); 
}

public void run() //接收线程 
{


while(t) 
{


if(fangxiang==0)//向右 
{ 
try 
{ 
x+=10; 
snake[0].setLocation(x, y);//设置蛇头位置

if(x==weix&&y==weiy) //吃到食物 
{ 
shu++; 
weix=(int)(food[shu]*0.1)*60; 
weiy=(int)(food[shu]%10)*40; 
repaint(); //重绘下一个食物 
add(snake[shu]); //增加蛇节数和位置 
snake[shu].setBounds(snake[shu-1].getBounds()); 
} 
thread.sleep(100); //睡眠100ms 
} 
catch(Exception e){} 
} 
else if(fangxiang==1)//向左 
{ 
try 
{ 
x-=10; 
snake[0].setLocation(x, y); 
if(x==weix&&y==weiy) 
{ 
shu++; 
weix=(int)(food[shu]*0.1)*60; 
weiy=(int)(food[shu]%10)*40; 
repaint(); 
add(snake[shu]); 
snake[shu].setBounds(snake[shu-1].getBounds()); 
}

thread.sleep(100); 
} 
catch(Exception e){} 
} 
else if(fangxiang==2)//向上 
{ 
try 
{ 
y-=10; 
snake[0].setLocation(x, y); 
if(x==weix&&y==weiy) 
{ 
shu++; 
weix=(int)(food[shu]*0.1)*60; 
weiy=(int)(food[shu]%10)*40; 
repaint(); 
add(snake[shu]); 
snake[shu].setBounds(snake[shu-1].getBounds()); 
} 
thread.sleep(100); 
} 
catch(Exception e){} 
} 
else if(fangxiang==3)//向下 
{ 
try 
{ 
y+=10; 
snake[0].setLocation(x, y); 
if(x==weix&&y==weiy) 
{ 
shu++; 
weix=(int)(food[shu]*0.1)*60; 
weiy=(int)(food[shu]%10)*40; 
repaint(); 
add(snake[shu]); 
snake[shu].setBounds(snake[shu-1].getBounds()); 
} 
thread.sleep(100); 
} 
catch(Exception e){} 
} 
int num1=shu; 
while(num1>1)//判断是否咬自己的尾巴 
{ 
if(snake[num1].getBounds().x==snake[0].getBounds().x&&snake[num1].getBounds().y==snake[0].getBounds().y) 
{ 
t=false; 
result=false; 
repaint(); 
} 
num1--; 
} 
if(x<0||x>=this.getWidth()||y<0||y>=this.getHeight())//判断是否撞墙 
{ 
t=false; 
result=false; 
repaint(); 
} 
int num=shu; 
while(num>0) //设置蛇节位置 
{ 
snake[num].setBounds(snake[num-1].getBounds()); 
num--; 
}


if(shu==15) //如果蛇节数等于15则胜利 
{ 
t=false; 
result=true; 
repaint(); 
}

}


} 
public void keyPressed(KeyEvent e) //按下键盘方向键 
{ 
if(e.getKeyCode()==KeyEvent.VK_RIGHT)//右键 
{ 
if(fangxiang!=1)//如果先前方向不为左 
fangxiang=0;


} 
else if(e.getKeyCode()==KeyEvent.VK_LEFT) 
{ if(fangxiang!=0) 
fangxiang=1;


} 
else if(e.getKeyCode()==KeyEvent.VK_UP) 
{ if(fangxiang!=3) 
fangxiang=2;


} 
else if(e.getKeyCode()==KeyEvent.VK_DOWN) 
{ if(fangxiang!=2) 
fangxiang=3;


} 
}

public void keyTyped(KeyEvent e) 
{

} 
public void keyReleased(KeyEvent e) 
{

} 
public void paint(Graphics g) //在面板上绘图 
{ 
int x1=this.getWidth()-1; 
int y1=this.getHeight()-1; 
g.setColor(Color.red); 
g.fillOval(weix, weiy, 10, 10);//食物 
g.drawRect(0, 0, x1, y1); //墙 
if(t==false&&result==false) 
g.drawString("GAME OVER!", 250, 200);//输出游戏失败 
else if(t==false&&result==true) 
g.drawString("YOU WIN!", 250, 200);//输出游戏成功 
}

} 
class MyWindow extends Frame implements ActionListener//自定义窗口类 
{ 
MyPanel my; 
Button btn; 
Panel panel; 
MyWindow() 
{ 
super("GreedSnake"); 
my=new MyPanel(); 
btn=new Button("begin"); 
panel=new Panel(); 
btn.addActionListener(this); 
panel.add(new Label("begin后请按Tab键选定蛇")); 
panel.add(btn); 
panel.add(new Label("按上下左右键控制蛇行动")); 
add(panel,BorderLayout.NORTH); 
add(my,BorderLayout.CENTER); 
setBounds(100,100,610,500); 
setVisible(true); 
validate(); 
addWindowListener(new WindowAdapter() 
{ 
public void windowClosing(WindowEvent e) 
{ 
System.exit(0); 
} 
}); 
} 
public void actionPerformed(ActionEvent e)//按下begin按钮 
{

if(e.getSource()==btn) 
{ 
try 
{ 
my.thread.start(); //开始线程 
my.validate(); 
} 
catch(Exception ee){} 
}

} 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -