大家好,今天尝试用swing技术写一个贪吃蛇大作战小游戏,供大家参考。


效果展示


目录

效果展示

一、游戏界面

二、得分情况

项目介绍

项目背景

总体需求

实现过程

代码展示

主类 :Demo类

MyPanel类

①构造方法

②初始化方法

③绘制方法

④定时器执行方法

框架Ui类

项目结构

总结



效果展示

一、游戏界面

二、得分情况


项目介绍

项目背景

“贪吃蛇大作战”游戏是一个经典的游戏,它因操作简单、娱乐性强,自从计算机实现以来,深受广大电脑玩家的喜爱,本项目基于Java技术,开发了一个 操作简单、界面美观、功能较齐全 的“贪吃蛇”游戏。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。

总体需求

 本系统主要是完成贪吃蛇游戏的基本操作,用户可自己练习和娱乐。需要满足以下几点要求:

(1)利用方向键来改变蛇的运行方向。
(2)空格键暂停或继续游戏,并在随机的地方产生食物。
(3)吃到食物就变成新的蛇体(蛇身长度变长,游戏继续)。

实现过程

(1)绘制窗体对象。
(2)静态UI设计(包括小蛇,食物,游戏区域和标题区域)。
(3)使用键盘监听事件和定时器实现小蛇的移动。
(4)小蛇与食物碰撞的实现。
(5)定义变量存放小蛇长度,遍历数组实现小蛇身体的增加功能。
(6)退出条件:当游戏积分到达指定分数,游戏退出。


代码展示

主类 :Demo类

package Demo;
/*** 1.画出窗体对象* * * @author 青00-Java**/
public class Demo0 {}

MyPanel类

构造方法

package Demo;import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
//画布类
public class MyPanel extends JPanel implements KeyListener,ActionListener{//继承private static final Component This = null;
//键盘监听交互接口
int length;
int score;
int[] snakeX=new int[500];//坐标
int[] snakeY=new int[500];
String fx;
boolean ifStart=false;
//定时器
Timer timer =new Timer(100,this);
int foodx;
int foody;
Random random =new Random();public MyPanel(){init();//添加监听事件this.setFocusable(true);this.addKeyListener(this);score=0;
}

初始化方法

public void init(){length=3;fx="r";//初始化小蛇的位置snakeX[0]=100;snakeY[0]=150;snakeX[1]=75;snakeY[1]=150;snakeX[2]=50;snakeY[2]=150;foodx=25+25*random.nextInt(57);foody=125+25*random.nextInt(27);System.out.println(foodx);System.out.println(foody);timer.start();
}

绘制方法

 @Overrideprotected void paintComponent(Graphics g){//画笔对象super.paintComponent(g);//绘制顶部的标题new ImageIcon("C:/Users/Desktop/img/title2.png").paintIcon(this,g,25,11);//创建对象//绘制游戏区域g.fillRect(25, 125, 1450, 700);//绘制小蛇//蛇头new ImageIcon("C:/Users/Desktop/img/l.png").paintIcon(this, g, snakeX[0], snakeY[0]);//蛇身for(int i=1;i<length;i++){new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(This, g, snakeX[i], snakeY[i]);}//游戏的提示语if(ifStart==false){g.setColor(Color.white);g.setFont(new Font("微软雅黑",Font.BOLD,40));g.drawString("按压空格键继续游戏", 550,500);g.drawString("无尽模式", 650,400);}//画出食物的位置new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(this, g, foodx, foody);}@Override//按压public void keyPressed(KeyEvent e) {int keyCode=e.getKeyCode();if(keyCode==KeyEvent.VK_SPACE){ifStart=!ifStart;}if(ifStart==true){if(keyCode==KeyEvent.VK_LEFT&&fx!="r"){fx="l";}else if(keyCode==KeyEvent.VK_RIGHT&&fx!="l"){fx="r";}else if(keyCode==KeyEvent.VK_UP&&fx!="d"){fx="u";}else if(keyCode==KeyEvent.VK_DOWN&&fx!="u"){fx="d";}}repaint();
}

定时器执行方法

@Overridepublic void actionPerformed(ActionEvent e) {//改变蛇的位置if(ifStart==true){for(int i=length-1;i>0;i--){snakeX[i]=snakeX[i-1];snakeY[i]=snakeY[i-1];}if(fx.equals("l")){snakeX[0]=snakeX[0]-25;if(snakeX[0]<25){snakeX[0]=1450;}}else if(fx.equals("r")){snakeX[0]=snakeX[0]+25;if(snakeX[0]>1450){snakeX[0]=25;}}else if(fx.equals("u")){snakeY[0]=snakeY[0]-25;if(snakeY[0]<120){snakeY[0]=800;}}else if(fx.equals("d")){snakeY[0]=snakeY[0]+25;if(snakeY[0]>800){snakeY[0]=120;}}//判断是否吃了食物if(snakeX[0]==foodx&&snakeY[0]==foody){length++;score++;if(score==100){ifStart=!ifStart;}foodx=25+25*random.nextInt(57);foody=125+25*random.nextInt(27);System.out.print("当前食物坐标("+foodx+",");System.out.print(foody+")");System.out.println("|||当前分数:"+score+" ");}repaint();}timer.start();}@Overridepublic void keyReleased(KeyEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void keyTyped(KeyEvent arg0) {// TODO Auto-generated method stub}
}

框架Ui类

package Demo;import javax.swing.JFrame;public class Ui {public static void main(String[] args){JFrame frame=new JFrame("无尽版贪吃蛇");frame.setSize(1500, 900);frame.setLocationRelativeTo(null);//居中显示frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setResizable(true);frame.add(new MyPanel());frame.setVisible(true);}}

项目结构

本程序用于初学者学习,共封装三个类,分别是Demo类,MyPanel类,框架Ui类,结构简单,所有方法均在MyPanel类中实现。


总结

本游戏的设计思路类似于游戏“贪吃蛇大作战”,程序在一些功能的实现上还存在许多不足,但该项目的实现对Java新手的实战能力有很大的提升。

在使用Java编写该项目时遇到了很多问题,在解决问题时,可以对java的面向对象编程有更加深入的理解和认识。


本项目在一定程度上还有缺陷,仅用于初学者学习,欢迎各位指正。


Java实现贪吃蛇大作战小游戏(完整版)相关推荐

  1. Java实现贪吃蛇大作战小游戏(完整教程+源码)额外实现积分和变速功能

    大家好,我是黄小黄同学!今天给大家带来的是小项目是 基于Java+Swing+IO流实现 的贪吃蛇大作战小游戏.实现了界面可视化.基本的吃食物功能.死亡功能.移动功能.积分功能,并额外实现了主动加速和 ...

  2. 基于Java实现的贪吃蛇大作战小游戏

    贪吃蛇大作战小游戏 整体思路与架构 本项目主要分为三个部分,即UI界面.游戏逻辑与网络传输. UI界面部分,主要是为了实现不同界面之间的切换.包括了注册登陆窗口(loginFrame)与游戏主窗口(G ...

  3. JAVA 实现《贪吃蛇大作战》游戏|CSDN创作打卡

    前言 贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃东西,从而使得蛇变得越来越长. 本程序是通过java的swing来实现<贪吃 ...

  4. 贪吃蛇大作战类游戏的实现

    贪吃蛇大作战类游戏的实现 前段时间玩了一个叫做贪吃蛇大作战的手机游戏,一下子就喜欢上了,然后就有了尝试实现的想法. 制作的平台环境:vs2012/cocos2dx3.8.1/C++ 关于贪吃蛇游戏的了 ...

  5. 用Python写了一个贪吃蛇大冒险小游戏

  6. laya游戏开发之贪吃蛇大作战(一)

    laya游戏开发之贪吃蛇大作战 一.背景 二.引擎选择 三.整体架构 3.1 玩法分析 3.2 游戏架构 3.3 技术选型 一.背景 需要快速实现一个贪吃蛇的 demo 以验证功能,非传统贪吃蛇玩法, ...

  7. java 贪吃蛇穿越边界,刨除可耻的山寨,《贪吃蛇大作战》是如何吸引那么多玩家...

    经典游戏贪吃蛇想必大家都玩过,你能想出这么经典的游戏要怎么创新才能比原作更好玩吗?贪吃蛇大作战就做到了,而且表现异常亮眼,这几天都登上免费榜第一的位置.一时间涌现出虫虫大作战.蛇蛇大作战.贪吃蛇等等产 ...

  8. 【项目实战】轻松实现C/C++大作业:贪吃蛇大作战游戏!

    这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀: 该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类:SnakeBase 和 AI 均继承自 SnakeBa ...

  9. python 贪吃蛇大作战_Python实现贪吃蛇大作战

    本文给大家分享的是一个使用cocos2d-python游戏引擎库制作出来的贪吃蛇大作战的游戏代码,基于Python 2.7 和 cocos2d 库,有需要的小伙伴可以参考下 感觉游戏审核新政实施后,国 ...

  10. 贪吃蛇 c语言 不死模式,贪吃蛇大作战不死版v1.0安卓手机版

    游戏标签 贪吃蛇大作战 贪吃蛇大作战是一款原生态ios平台移植到安卓平台超好玩的休闲竞技小型游戏,今天艾艾给你带来的是贪吃蛇大作战不死版,言一之说就是不管你怎么撞都不会死,你有无数条生命,让你玩到刷新 ...

最新文章

  1. 如何混合编译C语言和C++
  2. Java机器学习库ML之九交叉验证法(Cross Validation)
  3. js碎片知识的学习与补充(parseint与ChildNodes属性)
  4. bootcss echarts_数据可视化插件使用(Echarts)
  5. 各种操作系统简介和功能分析
  6. html 图片防盗链,配置.htaccess文件实现图片防盗链
  7. 并注册烧写钩子 获取启动介质类型_Spark Application的注册 源码剖析
  8. 守护进程: supervisor使用
  9. bzoj 1179: [Apio2009]Atm(Trajan+SPFA)
  10. 【solitidy】生成随机数算法
  11. 用c#创建支持多语言的WinForm应用程序 .
  12. flask页面中Head标签内容为空问题
  13. 黑客攻防技巧:2分钟入侵网站全程实录
  14. linux打开gaussian16软件,Gaussian View 在Ubuntu16下的安装
  15. 快递行业总结(三)同城市场
  16. QT 调用OCX控件
  17. cad快看_对于CAD看图软件,你到底了解多少?
  18. Crypto-Enigma密码机原理
  19. shell粘贴复制快捷键
  20. 儿童卡通城堡banner动画

热门文章

  1. UniCode 常用字符大全
  2. 怎样给计算机做屏幕保护,如何制作电脑屏保?XP系统中怎么制作动态屏幕保护?...
  3. 卡巴斯基授权key导入方式方法及其导入key基本原理
  4. 汇编语言王爽实验16
  5. 数字信号处理实验二 IIR数字滤波器设计及软件实现
  6. Windows加密视频播放器使用教程
  7. hadoop安装教程(一次填完所有的坑)
  8. Hadoop安装实验报告
  9. windows下mysql安装包安装
  10. Windows版 Oracle安装