贪吃蛇 java下载_Java实现贪吃蛇游戏源码
本文实例为大家分享了Java实现贪吃蛇游戏源码的具体代码,供大家参考,具体内容如下
1.StartGame
package com.qiang.snake;
import javax.swing.*;
//游戏的主启动类
public class StartGame {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setResizable(false); //窗口大小不可变
frame.setBounds(10,10,900,720);
frame.add(new GamePanel());
frame.setVisible(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
2.Data
package com.qiang.snake;
import javax.swing.*;
import java.net.URL;
//数据中心
public class Data {
public static URL headerURL = Data.class.getResource("/statics/header.png");
public static URL upURL = Data.class.getResource("/statics/up.png");
public static URL downURL = Data.class.getResource("/statics/down.png");
public static URL leftURL = Data.class.getResource("/statics/left.png");
public static URL rightURL = Data.class.getResource("/statics/right.png");
public static URL bodyURL = Data.class.getResource("/statics/body.png");
public static URL foodURL = Data.class.getResource("/statics/food.png");
public static ImageIcon header = new ImageIcon(headerURL);
public static ImageIcon up = new ImageIcon(upURL);
public static ImageIcon down = new ImageIcon(downURL);
public static ImageIcon left = new ImageIcon(leftURL);
public static ImageIcon right = new ImageIcon(rightURL);
public static ImageIcon body = new ImageIcon(bodyURL);
public static ImageIcon food = new ImageIcon(foodURL);
}
3.GamePanel
package com.qiang.snake;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class GamePanel extends JPanel implements KeyListener, ActionListener {
int lenth; //蛇的长度
int[] snakeX = new int[600]; //蛇的坐标x
int[] snakeY = new int[500]; //蛇的坐标y
String fx = "R"; //蛇的方向 : R:右 L:左 U:上 D:下
boolean isStart = false; //游戏是否开始
Timer timer = new Timer(100, this); //定时器:第一个参数,就是定时执行时间
//食物
int foodx;
int foody;
Random random = new Random();
boolean isFail = false; //游戏是否结束
int score; //游戏分数!
//构造方法
public GamePanel(){
init();//初始化
this.setFocusable(true); //获取焦点事件
this.addKeyListener(this); //键盘监听事件
timer.start();
}
//初始化方法
public void init(){
lenth = 3;//初始小蛇有三节,包括小脑袋
//初始化开始的蛇,给蛇定位,
snakeX[0] = 100; snakeY[0] = 100;
snakeX[1] = 75; snakeY[1] = 100;
snakeX[2] = 50; snakeY[2] = 100;
//初始化食物数据
foodx = 25 + 25* random.nextInt(34);
foody = 75 + 25* random.nextInt(24);
score = 0; //初始化游戏分数
}
//画组件
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);//清屏
this.setBackground(Color.WHITE); //设置面板的背景色
Data.header.paintIcon(this,g,25,11); //绘制头部信息区域
g.fillRect(25,75,850,600); //绘制游戏区域
//把小蛇画上去
if (fx.equals("R")){ //蛇的头通过方向变量来判断
Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);
}else if (fx.equals("L")){
Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);
}else if (fx.equals("U")){
Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);
}else if (fx.equals("D")){
Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);
}
for (int i = 1; i < lenth; i++) {
Data.body.paintIcon(this,g,snakeX[i],snakeY[i]); //蛇的身体长度根据lenth来控制
}
//画食物
Data.food.paintIcon(this,g,foodx,foody);
g.setColor(Color.white);
g.setFont(new Font("微软雅黑",Font.BOLD,18));
g.drawString("长度 " + lenth,750,35);
g.drawString("分数 " + score,750,50);
//游戏提示
if (isStart==false){
g.setColor(Color.white);
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.drawString("按下空格开始游戏!",300,300);
}
//失败判断
if (isFail){
g.setColor(Color.RED);
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.drawString("失败, 按下空格重新开始",200,300);
}
}
@Override
public void keyTyped(KeyEvent e) {
}
//键盘监听事件
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode(); //获取按下的键盘
if (keyCode==KeyEvent.VK_SPACE){ //如果是空格
if (isFail){ //如果游戏失败,从头再来!
isFail = false;
init(); //重新初始化
}else { //否则,暂停游戏
isStart = !isStart;
}
repaint();
}
//键盘控制走向
if (keyCode==KeyEvent.VK_LEFT){
fx = "L";
}else if (keyCode==KeyEvent.VK_RIGHT){
fx = "R";
}else if (keyCode==KeyEvent.VK_UP){
fx = "U";
}else if (keyCode==KeyEvent.VK_DOWN){
fx = "D";
}
}
@Override
public void keyReleased(KeyEvent e) {
}
//定时执行的操作
@Override
public void actionPerformed(ActionEvent e) {
//如果游戏处于开始状态,并且没有结束,则小蛇可以移动
if (isStart && isFail==false){
//右移:即让后一个移到前一个的位置即可 !
for (int i = lenth-1; i > 0; i--) { //除了脑袋都往前移:身体移动
snakeX[i] = snakeX[i-1]; //即第i节(后一节)的位置变为(i-1:前一节)节的位置!
snakeY[i] = snakeY[i-1];
}
//通过方向控制,头部移动
if (fx.equals("R")){
snakeX[0] = snakeX[0]+25;
if (snakeX[0]>850) snakeX[0] = 25;
}else if (fx.equals("L")){
snakeX[0] = snakeX[0]-25;
if (snakeX[0]<25) snakeX[0] = 850;
}else if (fx.equals("U")){
snakeY[0] = snakeY[0]-25;
if (snakeY[0]<75) snakeY[0] = 650;
}else if (fx.equals("D")){
snakeY[0] = snakeY[0]+25;
if (snakeY[0]>650) snakeY[0] = 75;
}
//吃食物:当蛇的头和食物一样时,算吃到食物!
if (snakeX[0]==foodx && snakeY[0]==foody){
//1.长度加一
lenth++;
//每吃一个食物,增加积分
score = score + 10;
//2.重新生成食物
foodx = 25 + 25* random.nextInt(34);
foody = 75 + 25* random.nextInt(24);
}
//结束判断,头和身体撞到了
for (int i = 1; i < lenth; i++) {
//如果头和身体碰撞,那就说明游戏失败
if (snakeX[i]==snakeX[0] && snakeY[i]==snakeY[0] ){
isFail = true;
}
}
repaint(); //需要不断的更新页面实现动画
}
timer.start();//让时间动起来!
}
}
更多有趣的经典小游戏实现专题,分享给大家:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
贪吃蛇 java下载_Java实现贪吃蛇游戏源码相关推荐
- 像素鸟java版_JAVA 像素鸟小游戏源码(支持俩人一起玩)
[实例简介] [实例截图] 双人 像素鸟如下: [核心代码] package Flappybirid_1; import java.awt.image.BufferedImage; import ja ...
- java计算机毕业设计虚拟银行业务培训游戏源码+mysql数据库+lw文档+系统+调试部署
java计算机毕业设计虚拟银行业务培训游戏源码+mysql数据库+lw文档+系统+调试部署 java计算机毕业设计虚拟银行业务培训游戏源码+mysql数据库+lw文档+系统+调试部署 本源码技术栈: ...
- java开发愤怒的小鸟_Java实现愤怒的小鸟AngryBirds游戏源码
[实例简介] Java实现愤怒的小鸟AngryBirds游戏源码,可以直接运行! [实例截图] [核心代码] Java实现愤怒的小鸟AngryBirds游戏源码下载 └── [www.java1234 ...
- java大作业的打猎游戏_Java Swing打猎射击游戏源码
Java Swing打猎射击游戏源码 代码如下package Game;import java.awt.Graphics;import java.awt.Image;import javax.swin ...
- 贪吃蛇java 暂停_Java实现贪吃蛇小游戏
三月份的时候用Java写了一个贪吃蛇的小游戏,写完的时候颇有成就感,现在在这里做一下总结. 先把需要用到的图片资源放在这里,分别为上.下.左.右方向的蛇头,蛇身,食物,标题,可以通过右击另存为的方式下 ...
- 贪吃蛇java代码_java实现贪吃蛇的代码实例
用几天的空闲时间写个贪吃蛇. 下面的代码都打了注释,如果有什么问题或者有什么指点的地方希望留言不吝赐教! 下载地址(需要1积分,如果不想用积分,直接拷贝下面的代码即可) Board类:import j ...
- 《游戏学习》Java版仿windows扫雷小游戏源码
项目代码目录结构 启动类 StartFrame 代码展示 import java.awt.BorderLayout; import java.awt.Font;import javax.swing. ...
- Java swing实现的俄罗斯方块小游戏源码附带视频导入运行教程
大家好,今天给大家演示一下由Java swing实现的小游戏俄罗斯方块的运行过程,该小游戏虽小,但功能非常丰富,可以设置速度.颜色.声音等等,是学习Java开发的童鞋参考学习不可多得的好项目.该程序可 ...
- 基于Java+JFrame开发的单机版开心农场游戏源码,Java开发的单机电脑版开心农场游戏源代码
单机版开心农场项目 介绍 使用 Java+JFrame 等相关知识开发一个单机电脑版的开心农场 软件架构 使用java中JFrame类相关知识进行可视化开发 使用javase阶段知识进行项目开发 本项 ...
最新文章
- codeforces round 418 div2 补题 CF 814 A-E
- 图解TCP协议中的三次握手和四次挥手
- 50 【Go版本变化】
- One order text browser tool
- 《Python编程从入门到实践》记录之第3章 列表简介总结——列表添加修改和删除元素(思维导图)
- Android-完全退出当前应用程序-新公司学习到的细节
- angular 首屏加载优化_[转]Angular4首页加载慢优化之路
- maven-resources-plugin插件使用
- java thread lambda_Java8新特性--Lambda表达式
- 苹果公布了一些最新无人车进展,但,研发依然缓慢
- dreamweaver 正则表达式为属性值加上双引号_「前端篇」不再为正则烦恼
- matplotlib——直方图
- ubuntu16 install sogou input
- 解析dex2oat的实现
- Clickhouse 普通视图
- 打乱魔方软件_怎样打乱魔方
- linux如何卸载lightdm,在Linux Deepin上安装Pantheon Lightdm主题
- Win7里如何找到管理员账号并切换到管理员账户登录?
- 物联网为什么需要5G?
- 如何构建高质量的 QA 问答知识库
热门文章
- GEE:时间序列分析2——将Landsat5、7、8所有影像合成一个影像集合,构建NDVI时间序列
- JAVA 字母+数字混合自增(适用组织机构新、流水号等生成)
- 【DSP实验】实验6音频信号处理实验-实现参量均衡器+滤波器+反相器的总和DSP处理交互系统
- 【MOL PLANT PATHOL】苹果MdMRLK2 通过抑制防御反应和过敏反应负向调节对V. mali的抗性
- 基于CRDT的数据最终一致性
- 推荐|NE(Network Embedding)论文小览,附21篇经典论文和代码
- PHP程序设计基础教程pdf
- 爆笑!公交车上的笑话
- 免费的QQ靓号!!!!!!
- 驱动开发基础知识——设备树