Java贪吃蛇游戏源代码

import java.awt.Color;

import java。awt.Graphics;

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 javax。swing。JCheckBoxMenuItem;

import javax.swing。JFrame;

import javax。swing。JMenu;

import javax.swing。JMenuBar;

import javax.swing。JMenuItem;

import javax。swing.JOptionPane;

import javax。swing.KeyStroke;

public class 贪吃蛇 extends JFrame implements ActionListener, KeyListener,Runnable {

/**

*

*/

private static final long serialVersionUID = 1L;

private JMenuBar menuBar;

private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu;

private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem;

private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan;

private int length = 6;

private Toolkit toolkit;

private int i,x,y,z,objectX,objectY,object=0,growth=0,time;//bojectX,Y

private int m[]=new int[50];

private int n[]=new int[50];

private Thread she = null;

private int life=0;

private int foods = 0;

private int fenshu=0;

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(she!=null)

{

check();

try

{

Thread。sleep(time);

}

catch(Exception ee)

{

System。out.println(z+"");

}

public 贪吃蛇() {

setVisible(true);

menuBar = new JMenuBar();

toolkit=getToolkit();

youXiMenu = new JMenu("游戏");

kaiShiYouXi = new JMenuItem("开始游戏");

exitItem = new JMenuItem("退出游戏");

nanDuMenu = new JMenu("困难程度");

cJianDan = new JCheckBoxMenuItem("简单");

cPuTong = new JCheckBoxMenuItem("普通");

cKunNan = new JCheckBoxMenuItem("困难");

fenShuMenu = new JMenu("积分排行");

fenShuItem = new JMenuItem("最高记录");

guanYuMenu = new JMenu("关于");

zuoZheItem = new JMenuItem("关于作者");

guanYuMenu。add(zuoZheItem);

nanDuMenu.add(cJianDan);

nanDuMenu。add(cPuTong);

nanDuMenu。add(cKunNan);

fenShuMenu.add(fenShuItem);

youXiMenu.add(kaiShiYouXi);

youXiMenu.add(exitItem);

menuBar.add(youXiMenu);

menuBar.add(nanDuMenu);

menuBar。add(fenShuMenu);

menuBar.add(guanYuMenu);

zuoZheItem.addActionListener(this);

kaiShiYouXi.addActionListener(this);

exitItem.addActionListener(this);

addKeyListener(this);

fenShuItem.addActionListener(this);

KeyStroke keyOpen = KeyStroke.getKeyStroke('O',InputEvent。CTRL_DOWN_MASK);

kaiShiYouXi。setAccelerator(keyOpen);

KeyStroke keyExit = KeyStroke。getKeyStroke('X',InputEvent。CTRL_DOWN_MASK);

exitItem。setAccelerator(keyExit);

setJMenuBar(menuBar);

setTitle("贪吃蛇");

setResizable(false);

setBounds(300,200,400,400);

validate();

setDefaultCloseOperation(EXIT_ON_CLOSE);

public static void main(String args[]) {

new 贪吃蛇();

public void actionPerformed(ActionEvent e){

if(e.getSource()==kaiShiYouXi)

{

length = 6;

life = 0;

foods = 0;

if(she==null)

she=new Thread(this);

she。start();

}

else if(she!=null)

{

she=null;

she= new Thread(this);

she。start();

}

}

if(e。getSource()==exitItem)

System.exit(0);

}

if(e。getSource()==zuoZheItem)

{

JOptionPane.showMessageDialog(this, "孤独的野狼制作"+"\n\n"+" "+"QQ号:2442701497"+"\n");

}

if(e。getSource()==fenShuItem)

JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+"");

}

public void check(){

isDead();

if(she!=null)

if(growth==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)

she=null;

}

for(i=1;i<length;i++)

if(m[i]==x&&n[i]==y)

{

she=null;

}

}

public void upgrowth()

//当蛇吃到东西时的方法

if(length<50)

{

length++;

growth------;

time=time-10;

reform();

life+=100;

if(fenshu<life)

{

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(she!=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)

public void keyTyped(KeyEvent e)

{

}

public void paint(Graphics g) {

g。setColor(Color.DARK_GRAY); //设置背景

g。fillRect(0,50,400,400);

g。setColor(Color.pink);

for(i=0;i〈=length-1;i++)

{

g.fillRect(m[i],n[i],10,10);

}

g.setColor(Color。green); //蛇的食物

g.fillRect(objectX,objectY,10,10);

g。setColor(Color.white);

g.drawString("当前 分数"+this。life,6,60);

g.drawString("当前已吃食物数"+this.foods,6,72);

}

相关推荐
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_996 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子7 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34167 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy18098 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18098 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假8 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
资生算法程序员_畅想家_剑魔9 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin