大家好,今天尝试用swing技术写一个贪吃蛇大作战小游戏,供大家参考。
效果展示
目录
效果展示
一、游戏界面
二、得分情况
项目介绍
项目背景
总体需求
实现过程
代码展示
主类 :Demo类
MyPanel类
①构造方法
②初始化方法
③绘制方法
④定时器执行方法
框架Ui类
项目结构
总结
效果展示
一、游戏界面
二、得分情况
项目介绍
项目背景
“贪吃蛇大作战”游戏是一个经典的游戏,它因操作简单、娱乐性强,自从计算机实现以来,深受广大电脑玩家的喜爱,本项目基于Java技术,开发了一个 操作简单、界面美观、功能较齐全 的“贪吃蛇”游戏。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
总体需求
本系统主要是完成贪吃蛇游戏的基本操作,用户可自己练习和娱乐。需要满足以下几点要求:
(1)利用方向键来改变蛇的运行方向。
(2)空格键暂停或继续游戏,并在随机的地方产生食物。
(3)吃到食物就变成新的蛇体(蛇身长度变长,游戏继续)。
实现过程
(1)绘制窗体对象。
(2)静态UI设计(包括小蛇,食物,游戏区域和标题区域)。
(3)使用键盘监听事件和定时器实现小蛇的移动。
(4)小蛇与食物碰撞的实现。
(5)定义变量存放小蛇长度,遍历数组实现小蛇身体的增加功能。
(6)退出条件:当游戏积分到达指定分数,游戏退出。
代码展示
主类 :Demo类
package Demo;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();}
绘制方法
@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定时器执行方法
@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); }}
项目结构
本程序用于初学者学习,共封装三个类,分别是Demo类,MyPanel类,框架Ui类,结构简单,所有方法均在MyPanel类中实现。
总结
本游戏的设计思路类似于游戏“贪吃蛇大作战”,程序在一些功能的实现上还存在许多不足,但该项目的实现对Java新手的实战能力有很大的提升。
在使用Java编写该项目时遇到了很多问题,在解决问题时,可以对java的面向对象编程有更加深入的理解和认识。
本项目在一定程度上还有缺陷,仅用于初学者学习,欢迎各位指正。
🥰以上就是本篇博客的全部内容,如果对你有用麻烦关注点赞收藏三连走一波!
👋如有问题欢迎留言,如有错误烦请指正,期待你的评论!
👨💻个人主页: 青00 (一起学Java)的博客_CSDN博客-一起学Java,Java领域博主🤳我的《一起学Java》板块持续更新中,欢迎各位编程爱好者前来观看!