本文实例为大家分享了java实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下

1.封装贪吃蛇身体,抽象出贪吃蛇结点类Node,结点用ArrayList存储

import java.awt.*;

public class Node {

private int x;

private int y;

public Node(int x, int y) {

this.x = x;

this.y = y;

}

public Node(){

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public void drawNode(int i, Graphics g){

if(i==0){//头绘制成圆

g.fillOval(this.x,this.y,20-1,20-1);

}else{//身体绘制成矩形

g.fillRect(this.x,this.y,20-1,20-1);

}

}

}

2.主类

import java.awt.*;

import java.awt.event.*;

import java.util.ArrayList;

public class Snake extends Frame implements KeyListener , ActionListener {

//初始蛇移动方向

String fx="right";

//碰撞判断

boolean is_attack=false;

private ArrayList body=new ArrayList();

{

body.add(new Node(160, 60));

body.add(new Node(140, 60));

body.add(new Node(120, 60));

int x=(int)(Math.random()*580);

int y=(int)(Math.random()*580);

body.add(new Node(x-x%20,y-y%20));

}

/**

* 贪吃蛇

* 1、窗体

* 位置(坐标) * 标题 * 大小 * 背景颜色 * 窗体的大小不可变 * 可见

* 2、绘制蛇

*/

public Snake(){

//窗体标题

super.setTitle("贪吃蛇游戏");

//窗体位置

super.setLocation(100,100);

//窗体大小

super.setSize(600,600);

//背景颜色

super.setBackground(new Color(252,255, 208));

//设置窗体可见

super.setVisible(true);

// 窗体大小不可变

super.setResizable(false);

//给关闭按钮添加事件

super.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

//获取聚焦

super.setFocusable(true);

//添加键盘监听

super.addKeyListener(this);

start();

}

public void start(){

while(!is_attack){

try{

Thread.sleep(200);

}catch (Exception e){

e.printStackTrace();

}

//碰撞检测

attack_check();

//刷新窗体,调用paint方法

repaint();

}

}

//碰撞检测

public void attack_check(){

//撞到身体检测

for(int i=1;i

if (body.get(0).getX()==body.get(i).getX()&&body.get(0).getY()==body.get(i).getY()){

is_attack=true;

}

}

//撞到边界

if(body.get(0).getX()==0||body.get(0).getX()==600||body.get(0).getY()==0||body.get(0).getY()==600){

is_attack=true;

}

}

//移动贪吃蛇

public void move(){

//吃到食物判断,头结点坐标和食物坐标相等

if ((body.get(0).getX()==body.get(body.size()-1).getX())&&(body.get(0).getY()==body.get(body.size()-1).getY())) {

//出现下一个食物

int x=(int)(Math.random() * 580);

int y=(int)(Math.random() * 580);

body.get(body.size()-1).setX(x-x%20);

body.get(body.size()-1).setY(y-y%20);

//蛇身加一个结点

body.add(body.size()-1,new Node(0,0));

}

//移动头尾节点,使贪吃蛇移动

Node node=body.get(0);

if (fx.equals("up")){

node=new Node(node.getX(),node.getY()-20);

//加头

body.add(0,node);

//去尾

body.remove(body.size()-2);

}if (fx.equals("down")){

node=new Node(node.getX(),node.getY()+20);

//加头

body.add(0,node);

//去尾

body.remove(body.size()-2);

}if (fx.equals("right")){

node=new Node(node.getX()+20,node.getY());

//加头

body.add(0,node);

//去尾

body.remove(body.size()-2);

}if (fx.equals("left")){

node=new Node(node.getX()-20,node.getY());

//加头

body.add(0,node);

//去尾

body.remove(body.size()-2);

}

}

/**

* 展示窗体|每一次刷新窗体都会执行的方法

* @param g 画笔

*/

@Override

public void paint(Graphics g) {

g.setColor(new Color(105, 78,255));

for(int i=0; i

body.get(i).drawNode(i,g);

}

move();

//游戏结束绘制

if(is_attack){

g.setColor(new Color(255, 67, 40));

Font ft = new Font("宋体", Font.PLAIN, 40);

g.setFont(ft);

g.drawString("很遗憾,游戏结束",150,300);

}

}

//事件监听

@Override

public void actionPerformed(ActionEvent e) {

}

@Override

public void keyPressed(KeyEvent e) {

int keyCode=e.getKeyCode();

if(keyCode==KeyEvent.VK_UP){

fx="up";

}if (keyCode==KeyEvent.VK_DOWN){

fx="down";

}if (keyCode==KeyEvent.VK_LEFT){

fx="left";

}if (keyCode==KeyEvent.VK_RIGHT){

fx="right";

}

}

@Override

public void keyTyped(KeyEvent e) {

}

@Override

public void keyReleased(KeyEvent e) {

}

/**

* main方法

* @param args

*/

public static void main(String[] args) {

new Snake();

}

}

运行图片

游戏结束

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

java超级简单贪吃蛇_java实现简易贪吃蛇游戏相关推荐

  1. java超级简单到爆的Excel导入导出(easypoi)

    场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...

  2. java的简单工厂模式_java设计模式之简单工厂模式

    简单工厂模式的概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. ...

  3. java udp简单聊天程序_Java基于UDP协议实现简单的聊天室程序

    最近比较闲,一直在抽空回顾一些java方面的技术应用. 今天没什么事做,基于udp协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对java网络编程方面的一个简单回忆. ...

  4. java web简单工厂模式_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  5. java的简单数字时钟_Java实现的简单数字时钟功能示例

    本文实例讲述了java实现的简单数字时钟功能.分享给大家供大家参考,具体如下: 应用名称:java数字时钟 用到的知识:java gui编程,线程 开发环境:win8+eclipse+jdk1.8 功 ...

  6. java消费者和生产者模型_Java实现简易生产者消费者模型过程解析

    一.概述 一共两个线程,一个线程生产产品,一个线程消费产品,使用同步代码块方法,同步两个线程.当产品没有时,通知生产者生产,生产者生产后,通知消费者消费,并等待消费者消费完. 需要注意的是,有可能出现 ...

  7. Java编写一个桌球_java练习题——简易的桌球游戏

    import java.awt.*; import javax.swing.*; public class BallGame extends JFrame{ Image ball =Toolkit.g ...

  8. java 模拟简单打印机功能_java之玩转打印机

    说在前面 很喜欢并发,所以一直在学并发.这就是因为爱,所以爱了吧!对了,上次说到去南天的事情,我过了,还算对得起自己吧,毕竟连hr都当面夸我优秀,哈哈! demo一之采用Lock锁仿一个打印机随机打印 ...

  9. java 模拟简单打印机功能_java 单例模式模拟打印机打印任务

    1.打印机报错处理类 package com.pattern06.singleton.sample03; public class PrintSpoolerException extends Exce ...

最新文章

  1. 冰岛试行四天工作制大获成功:每周缩短五小时,生产力没变!
  2. 华为FusionCompute添加NAS存储
  3. springboot参数检验,Assert使用
  4. 7-1 最大子列和问题 (20 分)
  5. 曲奇饼案例运营管理_昆仑海岸 农村生活污水处理设施智慧运营管理项目荣获典型案例奖...
  6. 二元偏导数存在的条件_多元函数 可导、可微、连续、一阶偏导数连续 之间关系的总结...
  7. 基于ASP的课外培训在线教育毕设免费下载
  8. SpringBoot+Vue项目上手
  9. AngularJS transclude 理解及例子
  10. EDA技术实用教程 | 复习三 | 不同类型的赋值语句
  11. Ubuntu默认防火墙UFW命令大全
  12. 计算机的发展共经历了哪几个阶段,1. 计算机的发展经历了哪几个阶段?各阶段的主要特征是什么,计算机的发展经历了哪些阶段?...
  13. android app开发计划
  14. Java递归法解决猴子吃桃问题_C语言实现猴子吃桃问题(循环、递归两种方法)...
  15. 修了一天的kali外置网卡,重装了n遍系统后..
  16. 穿山甲 groMore 配置广告位 穿山甲/优良汇
  17. Unity3D项目升级URP
  18. 一篇文章带你认识芯片分类及代表企业
  19. Mac系统打开命令行终端及查看操作系统版本号的方法
  20. vivado HLS ORB算法设计实现----质心求取主方向

热门文章

  1. 基本数据结构----循环链表
  2. 【.Net Micro Framework PortingKit(补) – 1】USB驱动开发
  3. [轉]子窗口和父窗口的函数或对象能否相互访问
  4. python 画风场 scipy_科学网-Python: 扩展库SciPy-刘洋洋的博文
  5. 12 个非常有用的 JavaScript Hacks
  6. 《深度学习的数学》二刷总结
  7. 无法亲自到长城那就用纸箱做个长城吧!
  8. [Android工具]安卓百度云盘百度网盘资源搜索工具,安卓网盘搜索软件
  9. 浅谈上、下拉电阻的作用/什么是拉电流和灌电流[转]
  10. 【网上的都不靠谱?还是得改源码】用Javasisst的字节码插桩技术,彻底解决Gson转Map时,Int变成double问题...