该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package snake4;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.*;
public class TanChiShe2 extends JFrame implements ActionListener, KeyListener,Runnable
{
private JMenuBar menuBar;
private JMenu youXiMenu,fenShuMenu,guanYuMenu;
private JMenuItem kaiShiYouXi,zuoZheItem,fenShuItem;
private int length = 5;
private Toolkit toolkit;
private int i,x,y,z,objectX,objectY,object=0,growth=0,time,j;
private int m[]=new int[50];
private int n[]=new int[50];
private Thread it = null;
private int life=0;
private int foods = 0;
private int fenshu=0;
JPanel jpanel1;
public void run() //运行
{
time=500;//蛇速度
for(i=0;i<=length-1;i++)
{
m[i]=90-i*10;n[i]=60;
}
x=m[0];
y=n[0];
z=4; //尾巴
while(it!=null)
{
check();
try
{
it.sleep(time);
}
catch(Exception ee)
{
System.out.println(z+"哎呀"); //游戏异常结束是输出哎呀
}
}
}
public TanChiShe2()
{
setVisible(true);
//创建新对象
menuBar = new JMenuBar();
Container con=getContentPane();
toolkit=getToolkit();
//游戏菜单对象
youXiMenu = new JMenu("游戏");
kaiShiYouXi = new JMenuItem("开始游戏");
//分数菜单对象
fenShuMenu = new JMenu("积分排行");
fenShuItem = new JMenuItem("最高记录");
//关于对象
guanYuMenu = new JMenu("关于");
zuoZheItem = new JMenuItem("关于作者");
//设置关于菜单
guanYuMenu.add(zuoZheItem);
//设置分数菜单
fenShuMenu.add(fenShuItem);
//设置游戏菜单
youXiMenu.add(kaiShiYouXi);
//设置主菜单
menuBar.add(youXiMenu);
menuBar.add(fenShuMenu);
menuBar.add(guanYuMenu);
//监听注册
zuoZheItem.addActionListener(this);
kaiShiYouXi.addActionListener(this);
addKeyListener(this);
fenShuItem.addActionListener(this);
//设置框架
setJMenuBar(menuBar);
setTitle("贪吃蛇");
setResizable(false);
setBounds(500,200,400,400); //框架在x=500,y=200,长=400,宽=400
validate();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[])
{
new TanChiShe2();
}
//菜单监听
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==kaiShiYouXi) //点击开始游戏
{
length = 5;
life = 0;
foods = 0;
if(it==null)
{
it=new Thread(this); //this代表蛇
it.start();
}
else if(it!=null)
{
it=null;
it= new Thread(this);
it.start();
}
}
if(e.getSource()==zuoZheItem)
{
JOptionPane.showMessageDialog(this, "梁耀彬"+"\n"+"石家卓"+"\n"+"黄辉飞");
}
if(e.getSource()==fenShuItem)
{
JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+"");
}
}
//检查一下
public void check()
{
isDead();
if(it!=null)
{
if(growth==0) //成长数等于0.
{
reform();
}
else
{
upgrowth();
}
if(x==objectX&&y==objectY)
{
object=0;
growth=1;
toolkit.beep();
}
//产生食物坐标
if(object==0)
{
object=1;
objectX=(int)Math.floor(Math.random()*39)*10;
objectY=(int)Math.floor(Math.random()*29)*10+50;
}
this.repaint();
}
}
void isDead()
{
if(z==4)
{
x=x+10;
}
else if(z==3)
{
x=x-10;
}
else if(z==2)
{
y=y+10;
}
else if(z==1)
{
y=y-10;
}
if(x<0||x>390||y<50||y>390)
{
it=null;
}
for(i=1;i
{
if(m[i]==x&&n[i]==y)
{
it=null;
}
}
}
public void upgrowth()
{
if(length<50)
{
length++;
}
growth--;
time=time-10;
reform();
life+=100;
if(fenshu
{
fenshu = life;
}
foods++;
}
public void reform()
{
for(i=length-1;i>0;i--)
{
m[i]=m[i-1];
n[i]=n[i-1];
}
if(z==4)
{
m[0]=m[0]+10;
}
if(z==3)
{
m[0]=m[0]-10;
}
if(z==2)
{
n[0]=n[0]+10;
}
if(z==1)
{
n[0]=n[0]-10;
}
}
public void keyPressed(KeyEvent e)
{
if(it!=null)
{
if(e.getKeyCode()==KeyEvent.VK_UP)
{
if(z!=2)
{
z=1;
check();
}
}
else if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
if(z!=1)
{
z=2;
check();
}
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
if(z!=4)
{
z=3;
check();
}
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
if(z!=3)
{
z=4;
check();
}
}
}
}
public void keyReleased(KeyEvent e)
{
// TODO 自动生成方法存根
}
public void keyTyped(KeyEvent e)
{
// TODO 自动生成方法存根
}
public void paint(Graphics g)
{
//画图
g.setColor(Color.white); //背景
g.fillRect(0,50,400,400);
g.setColor(Color.green);
for(i=0;i<=length-1;i++)
{
g.fillRect(m[i],n[i],10,10);
}
g.setColor(Color.red); //食物
g.fillRect(objectX,objectY,10,10);
g.setColor(Color.black); //字体
g.drawString("当前 分数"+this.life,6,60);
g.drawString("当前已吃食物数"+this.foods,6,72);
} }