本文实例为大家分享了java编写的贪吃蛇源码,供大家参考,具体内容如下

程序共包含以下两个文件:

文件:ShellWin.java

import java.awt.Color;

import java.awt.Dimension;

import java.awt.FlowLayout;

import java.awt.Graphics;

import java.awt.event.*;

import javax.swing.Box;

import javax.swing.JButton;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

@SuppressWarnings("serial")

public class ShellWin extends JPanel implements Runnable{ //实现了键盘与鼠标两个接口

int direction;

int length;

int score=0;

boolean control=false;

int[] xs=new int[400]; //蛇的个数,xy,坐标控制

int[] ys=new int[400];

int douX;int douY;

Thread thread;

public ShellWin()

{

setPreferredSize(new Dimension(600, 600));

setLocation(100, 100);

setBackground(Color.GREEN);

thread=new Thread(this); //为这个类添加一个线程

create_snake();

create_bean();

}

public void paintComponent(Graphics g) //绘制

{

super.paintComponent(g); //Jpanel内的方法,起到清屏的作用

g.drawString("分数:"+score, 50, 50);

g.drawRect(0,0, 600, 600);

show_snake(g);

show_bean(g);

}

//能不能吃豆,能不能死

void die()

{

JOptionPane.showMessageDialog(null, "game over", "游戏结束", JOptionPane.ERROR_MESSAGE);

}

void eat()

{

length++;

this.score+=100;

create_bean();

}

boolean out_bounds()

{

if(xs[0]==-10||xs[0]==600||ys[0]==-10||ys[0]==600) //出界即死

{

return true;

}

return false;

}

void change_direction(int new_direction) //控制方向

{

if(direction%2!=new_direction%2||direction==0) // 2 4 3 1 上下左右

{

direction=new_direction;

}

}

boolean eat_self()

{

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

if(xs[0]==xs[i]&&ys[0]==ys[i])

{

return true;

}

}

return false;

}

boolean can_eat()

{

if(xs[0]==douX&&ys[0]==douY)

{

return true;

}

return false;

}

void create_snake()

{

direction=0;length=5;

for (int i = 0; i < length; i++) {

xs[i]=400;

ys[i]=400+10*i;

}

}

void create_bean()

{

douX=10*(int)(Math.random()*60);

douY=10*(int)(Math.random()*60);

for (int i = 0; i < length; i++) {

if(xs[i]==douX&&ys[i]==douY)

{

create_bean();

return;

}

}

}

void show_bean(Graphics g) //仍然得要写入到paintComponent方法内

{

g.setColor(Color.RED);

g.fillOval(douX, douY, 10, 10);

}

void crawl()

{

if(direction!=0)

for (int i = length-1; i >0; i--) { // 2 4 3 1 上下左右

xs[i]=xs[i-1]; //后一个替代前一个 4=3;

ys[i]=ys[i-1];

}

switch (direction) {

case 1:

xs[0]=xs[0]+10;

break;

case 2:

ys[0]=ys[0]-10;

break;

case 3:

xs[0]=xs[0]-10;

break;

case 4:

ys[0]=ys[0]+10;

break;

default:

break;

}

}

void show_snake(Graphics g)

{

for (int i = 0; i < length; i++) {

g.setColor(Color.BLUE);

if(i==0){

g.drawOval(xs[i], ys[i], 10, 10);

continue;

}

g.drawRect(xs[i], ys[i], 10, 10); //蛇的长度与大小

}

}

@Override

public void run() {

while(control)

{

try {

if(can_eat())

{

eat();

}

if(out_bounds())

{

die();

return;

}

if(eat_self())

{

die();

return;

}

crawl();

Thread.sleep(200);

repaint();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

class panel extends JPanel implements ActionListener,KeyListener{

JButton startGame=new JButton("开始");

JButton stopGame=new JButton("停止");

Box box1; //盒式布局

panel(){

setLayout(new FlowLayout());

box1=Box.createHorizontalBox();

box1.add(startGame);

box1.add(Box.createHorizontalStrut(2));

box1.add(stopGame);

setSize(800,800);

setBackground(Color.black);

addKeyListener(this); //为ShellWin 对象注册一个侦听器

startGame.addActionListener(this); //为开始按钮添加侦听器,this指代的是Actionistener这个类所创建的对象

stopGame.addActionListener(this); //为结束按钮添加侦听器,this指代的是Actionistener这个类所创建的对象

}

@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource()==startGame)

{

this.requestFocus(); //将光标添加到该控件中

control=true;

thread.start(); //线程开始

//***********************************

this.repaint(100,100, 600, 600);

}

if(e.getSource()==stopGame)

{

this.requestFocus(); //将光标添加到该控件中

control=false; //线程结束

}

}

@Override

public void keyPressed(KeyEvent e) {

switch (e.getKeyCode()) {

case KeyEvent.VK_UP:

change_direction(2);

break;

case KeyEvent.VK_DOWN:

if(direction!=0)

change_direction(4);

break;

case KeyEvent.VK_LEFT:

change_direction(3);

break;

case KeyEvent.VK_RIGHT:

change_direction(1);

break;

default:

break;

}

}

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

}

}

文件:ShellMain.java

import javax.swing.Box;

import javax.swing.JFrame;

@SuppressWarnings("serial")

public class ShellMain extends JFrame {

ShellWin win=new ShellWin();

ShellWin.panel pan=win.new panel();

Box box,box2;

ShellMain(){

box2=Box.createHorizontalBox();

box2.add(win);

box=Box.createVerticalBox();

box.add(pan.box1);

box.add(Box.createVerticalStrut(8));

box.add(box2);

pan.add(box);

setTitle("贪吃蛇");

setSize(800,800);

setVisible(true);

setLayout(null);

add(pan);

setLocation(0,0);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

new ShellMain();

}

}

更多精彩游戏,请参考专题《java经典小游戏》

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

原文链接:https://blog.csdn.net/qq_35273452/article/details/77621895

贪吃蛇计时器怎么编写java_java编写简易贪吃蛇游戏相关推荐

  1. Luat Inside | 致敬经典,使用Air724UG制作简易贪吃蛇

    作者简介: 打盹的消防车--活跃于Luat社群的新生代全能开发者,东北小伙儿爽朗幽默.好学敏思,更是实力行动派.幼年曾手握火红炽铁而后全然无恙,堪称魔幻经历:如今热衷于各类嵌入式软硬件研究,快意物联江 ...

  2. python简易贪吃蛇小游戏任务书含代码

    目  录 第一章 绪论 1.1 开发的背景 1.2 开发的目的 1.3 开发的意义 1.4 开发工具简介 第二章 需求分析 (1) 利用方向键来改变蛇的运行方向. (2) 在随机的地方产生食物. (3 ...

  3. JAVA简易贪吃蛇游戏实现

    JAVA简易贪吃蛇游戏实现 自学java不久,最近看了些GUI编程,就拿贪吃蛇练个手,很基础 刚学的 也是最简易的版本.纯粹就想通过博客记录来巩固自己的学习效果. 游戏介绍 玩家通过按键控制蛇身的移动 ...

  4. python 贪吃蛇_python简易贪吃蛇

    python简易贪吃蛇 前言 开始 献上代码 from tkinter.messagebox import showinfo as msg from random import randint as ...

  5. JavaGUI 简易贪吃蛇代码详解+图片素材

    简易贪吃蛇 运行截图 图片素材 代码详解 package com.du.snake; import javax.swing.*; import java.awt.*; import java.awt. ...

  6. java超级简单贪吃蛇_java实现简易贪吃蛇游戏

    本文实例为大家分享了java实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 1.封装贪吃蛇身体,抽象出贪吃蛇结点类Node,结点用ArrayList存储 import java.awt.*; pu ...

  7. 简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏

    本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public stat ...

  8. c语言:数据保存的方法实现简易贪吃蛇

    贪吃蛇作为我童年第一个接触的手机游戏,在学c语言的时候就一直在想什么时候可以自己实现.经过一年的学习也是终于写出来了,在这期间我看了很多其它博客上的文章,我也很感谢那些愿意把自己的知识在网上和大家分享 ...

  9. 【使用java swing制作简易贪吃蛇游戏】软件实习项目二

    一.项目准备 需求分析: 实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子,上下左右控制"蛇"的移动,吃到"豆子"以后" ...

最新文章

  1. CF558E A Simple Task 线段树
  2. Linux 服务详解
  3. 对vector等STL标准容器进行排序操作
  4. ES5 数组扩展方法 forEach/filter/map的使用与重写
  5. Jexus针对Asp.net core应用程序的六大不可替代的优势
  6. 打印冻结窗格怎么保证每页都有_在打印Excel表时怎么设置才能实现每页都打印标题行...
  7. python bootstrap安装_python + django + bootstrap + uWSGI + nginx 环境搭建
  8. 全国程序员工资最新统计来了,平均 14,542 元!
  9. glusterfs分布式文件系统初探
  10. MySql 5.7 Archive 版本安装失败 解决过程
  11. java中的io系统详解[转]
  12. pyquery库之爬取豆瓣读书
  13. 动易CMS粘贴word图片且图片文件自动上传功能
  14. 开发QQ桌球瞄准器(1):桌球瞄准器介绍与使用方法
  15. 我们为什么选择计算机专业?为什么学习编程?
  16. 【论文翻译】nuPlan: A closed-loop ML-based planning benchmark for autonomous vehicles
  17. Markdown使用学习笔记(第一次,拉的很,别骂了,别骂了)
  18. 苹果计算机怎么开科学,苹果手机怎样设置科学计算器?
  19. 计算机网络第二章 物理层练习题(中文带答案解析)
  20. 有人云网络IO控制器 对接私有服务器

热门文章

  1. 解读模拟摇杆原理及实验
  2. 嵌入式Linux设备驱动程序:发现硬件配置
  3. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍
  4. 2021年大数据Hive(十一):Hive调优
  5. docker 实现redis集群搭建
  6. php.ini Xdebug配置
  7. INSTALL_FAILED_UID_CHANGED
  8. Android TextView 去除顶部和底部留白(上下的间距有空白问题处理)
  9. Found option without preceding group in config file E:\mysql\mysql-5.7.23-winx64\my.ini at line 1!
  10. error: No resource identifier found for attribute 'showAsAction' in package 'com.ymeng.项目名字'