贪吃蛇大作战java代码_java做贪吃蛇需要用到哪些知识

贪吃蛇大作战java代码_java做贪吃蛇需要用到哪些知识用swing技术实现编写一个贪吃蛇大作战小游戏,项目供大家参考学习交流。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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


 效果展示

贪吃蛇大作战java代码_java做贪吃蛇需要用到哪些知识


目录

效果展示

一、游戏界面

二、得分情况

 项目介绍

项目背景

总体需求

实现过程

代码展示

主类 :Demo类

 MyPanel类

 ①构造方法

 ②初始化方法

 ③绘制方法

 ④定时器执行方法

框架Ui类

项目结构

总结



效果展示

一、游戏界面

贪吃蛇大作战java代码_java做贪吃蛇需要用到哪些知识

二、得分情况

贪吃蛇大作战java代码_java做贪吃蛇需要用到哪些知识


 项目介绍

项目背景

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

总体需求

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

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

实现过程

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


代码展示

主类 :Demo类

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

}

Jetbrains全家桶1年46,售后保障稳定

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

绘制方法

	@Override
	 protected 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();
}

定时器执行方法

@Override
	public 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();
	}
	
	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public 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);
	}

}

项目结构

贪吃蛇大作战java代码_java做贪吃蛇需要用到哪些知识

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


总结

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

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


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


 ?以上就是本篇博客的全部内容,如果对你有用麻烦关注点赞收藏三连走一波!
?如有问题欢迎留言,如有错误烦请指正,期待你的评论!
?‍?个人主页: 青00 (一起学Java)的博客_CSDN博客-一起学Java,Java领域博主

?我的《一起学Java》板块持续更新中,欢迎各位编程爱好者前来观看!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230822.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Macbook上打开多个终端的方法[通俗易懂]

    Macbook上打开多个终端的方法

    2022年2月9日
    41
  • sigaction函数和signal函数

    sigaction函数和signal函数signal和sigaction的区别:signal都是指以前的oldersignal函数,现在大多系统都用sigaction重新实现了signal函数。1.      signal在调用handler之前先把信号的handler指针恢复;sigaction调用之后不会恢复handler指针,直到再次调用sigaction修改handler指针。这样,signal就会丢失信号,而且不能处

    2022年5月25日
    40
  • vdbench的使用教程——裸盘测试和文件系统测试

    一、vdbench简介  vdbench是一个I/O工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。可以使用vdbench测试磁盘和文件系统的读写性能。vdbench中常用的一些名词解释:HD  主机定义 SD  存储定义  WD 工作负载定义 RD  运行定义 FSD…

    2022年4月3日
    1.1K
  • idea 2022 Mac 激活码【中文破解版】

    (idea 2022 Mac 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html4KDDGND3CI-eyJsaWN…

    2022年4月1日
    465
  • json 转list 集合

    json 转list 集合好久没写博客了 虽然写的一塌糊涂吧 但也得坚持 今天遇到 json 转 list 集合的问题 随便就记一下 importnet sf json JSONArray importnet sf json JSONObject pom xml 文件 lt json 依赖 gt lt dependency gt amp l

    2025年9月3日
    2
  • ue4 弱指针_智能指针如何实现自动释放

    ue4 弱指针_智能指针如何实现自动释放原创文章,转载请注明出处。UE4也有一套智能指针库,整理了一下做个介绍。也请大家做补充。共享指针/共享引用/弱指针/注意事项一.TSharePtr1.如何创建一个TSharePtr2.TSharePtr如何进行类型转换1)TSharePtr转TSharePtr2)ConstTSharePtr转TSharePtr3)TSharePtr转TShareRef3.使用注意事项1)TSharePtr2)类型转换二.TShareRef1.如何创建一个TShareRef2.TShareRef如何进行类型转换1)TS

    2022年10月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号