Java贪吃蛇游戏源代码

news/2024/10/15 7:23:12/

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);

}


http://www.ppmy.cn/news/1539327.html

相关文章

若依前后端分离版本el-select下拉框字典如何设置默认值。

在若依前后端分离框架中&#xff0c;如何给下拉框设置默认值&#xff0c;刚入门的小伙伴&#xff0c;可能会不知道如何去做。 本章教程&#xff0c;主要以用户管理模块中的添加用户举例说明如何设置用户性别默认值为男。 解决思路 首先&#xff0c;我们需要找到打开新增页面的方…

前端/node.js锁定依赖版本、锁定依赖的依赖的版本

一、知识前提 version&#xff1a;必须依赖某个具体的版本。如&#xff1a;vue的3.2.0&#xff0c;表示必须安装3.2.0版本。>version&#xff1a;必须大于某个版本。>version&#xff1a;大于或等于某个版本。<version&#xff1a;必须小于某个版本。<version&…

从2.x到3.x:Spring Boot升级遇到的问题!

从2.x到3.x&#xff1a;Spring Boot升级遇到的问题&#xff01; 1.关于redis报错2.关于servlet报错2.关于Spring Security报错 报错内容采集 1.关于redis报错 报错内容&#xff1a;Property ‘spring.redis.host’ is Deprecated: Use ‘spring.data.redis.host’ instead.”、…

SeamlessUI功能验证流程

停止服务 systemctl stop aispeech-engine-wrapper systemctl stop dialog-domain-handlers systemctl stop dialog-engine systemctl stop dialog-audio-service然后是修改配置文件&#xff0c;打开配置文件中的SeamlessUI的开关 /etc/dialog-engine/features/toggles.json …

linux线程 | 线程的控制(一)

前言&#xff1a;本节内容为线程的控制。在本篇文章中&#xff0c; 博主不仅将会带友友们认识接口&#xff0c; 使用接口。 而且也会剖析底层&#xff0c;带领友友们理解线程的底层原理。 相信友友们学完本节内容&#xff0c; 一定会对线程的控制有一个很好的把握。 那么&#…

Springboot --- 使用国内的 AI 大模型 对话

尝试使用 国内给出的 AI 大模型做出一个 可以和 AI 对话的 网站出来 使用 智普AI 只能 在控制台中输出 对应的信息 不如就做一个 maven 的 项目调用对应的API 智谱AI开放平台 <dependency><groupId>cn.bigmodel.openapi</groupId><artifactId>oapi-j…

10 分钟使用豆包 MarsCode 帮我搭建一套后台管理系统

以下是「 豆包MarsCode 体验官」优秀文章&#xff0c;作者把梦想揉碎。 十分钟使用豆包 MarsCode 搭建后台管理项目 在这个快节奏的时代&#xff0c;开发者们总是希望能够快速、高效地完成项目的搭建与开发工作。无论是初创企业还是大型公司&#xff0c;后台管理系统都是必不可…

链接伪类(:hover)CSS背景图片有闪动BUG的解决方法 vue3

现象&#xff1a; hover时候&#xff0c;图片还没加载出来&#xff0c;导致边框闪烁 在Vue 3中&#xff0c;如果你遇到了使用伪类(:hover)时背景图片出现闪烁的问题&#xff0c;可能是由于浏览器的渲染机制导致的。解决这个问题的方法可能包括&#xff1a; 使用background-pos…