• Java实现贪吃蛇大作战小游戏(完整版)


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


     效果展示


    目录

    效果展示

    一、游戏界面

    二、得分情况

     项目介绍

    项目背景

    总体需求

    实现过程

    代码展示

    主类 :Demo类

     MyPanel类

     ①构造方法

     ②初始化方法

     ③绘制方法

     ④定时器执行方法

    框架Ui类

    项目结构

    总结



    效果展示

    一、游戏界面

    二、得分情况


     项目介绍

    项目背景

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

    总体需求

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

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

    实现过程

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


    代码展示

    主类 :Demo类

    1. package Demo;
    2. /**
    3. * 1.画出窗体对象
    4. *
    5. *
    6. * @author 青00-Java
    7. *
    8. */
    9. public class Demo0 {
    10. }

    MyPanel类

    构造方法

    1. package Demo;
    2. import java.awt.Color;
    3. import java.awt.Component;
    4. import java.awt.Font;
    5. import java.awt.Graphics;
    6. import java.awt.event.ActionEvent;
    7. import java.awt.event.ActionListener;
    8. import java.awt.event.KeyEvent;
    9. import java.awt.event.KeyListener;
    10. import java.util.Random;
    11. import javax.swing.ImageIcon;
    12. import javax.swing.JPanel;
    13. import javax.swing.Timer;
    14. //画布类
    15. public class MyPanel extends JPanel implements KeyListener,ActionListener{//继承
    16. private static final Component This = null;
    17. //键盘监听交互接口
    18. int length;
    19. int score;
    20. int[] snakeX=new int[500];//坐标
    21. int[] snakeY=new int[500];
    22. String fx;
    23. boolean ifStart=false;
    24. //定时器
    25. Timer timer =new Timer(100,this);
    26. int foodx;
    27. int foody;
    28. Random random =new Random();
    29. public MyPanel(){
    30. init();
    31. //添加监听事件
    32. this.setFocusable(true);
    33. this.addKeyListener(this);
    34. score=0;
    35. }

    初始化方法

    1. public void init(){
    2. length=3;
    3. fx="r";
    4. //初始化小蛇的位置
    5. snakeX[0]=100;
    6. snakeY[0]=150;
    7. snakeX[1]=75;
    8. snakeY[1]=150;
    9. snakeX[2]=50;
    10. snakeY[2]=150;
    11. foodx=25+25*random.nextInt(57);
    12. foody=125+25*random.nextInt(27);
    13. System.out.println(foodx);
    14. System.out.println(foody);
    15. timer.start();
    16. }

    绘制方法

    1. @Override
    2. protected void paintComponent(Graphics g){//画笔对象
    3. super.paintComponent(g);
    4. //绘制顶部的标题
    5. new ImageIcon("C:/Users/Desktop/img/title2.png").paintIcon(this,g,25,11);//创建对象
    6. //绘制游戏区域
    7. g.fillRect(25, 125, 1450, 700);
    8. //绘制小蛇
    9. //蛇头
    10. new ImageIcon("C:/Users/Desktop/img/l.png").paintIcon(this, g, snakeX[0], snakeY[0]);
    11. //蛇身
    12. for(int i=1;i<length;i++){
    13. new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(This, g, snakeX[i], snakeY[i]);
    14. }
    15. //游戏的提示语
    16. if(ifStart==false){
    17. g.setColor(Color.white);
    18. g.setFont(new Font("微软雅黑",Font.BOLD,40));
    19. g.drawString("按压空格键继续游戏", 550,500);
    20. g.drawString("无尽模式", 650,400);
    21. }
    22. //画出食物的位置
    23. new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(this, g, foodx, foody);
    24. }
    25. @Override//按压
    26. public void keyPressed(KeyEvent e) {
    27. int keyCode=e.getKeyCode();
    28. if(keyCode==KeyEvent.VK_SPACE){
    29. ifStart=!ifStart;
    30. }
    31. if(ifStart==true){
    32. if(keyCode==KeyEvent.VK_LEFT&&fx!="r"){
    33. fx="l";
    34. }else if(keyCode==KeyEvent.VK_RIGHT&&fx!="l"){
    35. fx="r";
    36. }else if(keyCode==KeyEvent.VK_UP&&fx!="d"){
    37. fx="u";
    38. }else if(keyCode==KeyEvent.VK_DOWN&&fx!="u"){
    39. fx="d";
    40. }
    41. }
    42. repaint();
    43. }

    定时器执行方法

    1. @Override
    2. public void actionPerformed(ActionEvent e) {
    3. //改变蛇的位置
    4. if(ifStart==true){
    5. for(int i=length-1;i>0;i--){
    6. snakeX[i]=snakeX[i-1];
    7. snakeY[i]=snakeY[i-1];
    8. }
    9. if(fx.equals("l")){
    10. snakeX[0]=snakeX[0]-25;
    11. if(snakeX[0]<25){
    12. snakeX[0]=1450;
    13. }
    14. }else if(fx.equals("r")){
    15. snakeX[0]=snakeX[0]+25;
    16. if(snakeX[0]>1450){
    17. snakeX[0]=25;
    18. }
    19. }else if(fx.equals("u")){
    20. snakeY[0]=snakeY[0]-25;
    21. if(snakeY[0]<120){
    22. snakeY[0]=800;
    23. }
    24. }else if(fx.equals("d")){
    25. snakeY[0]=snakeY[0]+25;
    26. if(snakeY[0]>800){
    27. snakeY[0]=120;
    28. }
    29. }
    30. //判断是否吃了食物
    31. if(snakeX[0]==foodx&&snakeY[0]==foody){
    32. length++;
    33. score++;
    34. if(score==100){
    35. ifStart=!ifStart;
    36. }
    37. foodx=25+25*random.nextInt(57);
    38. foody=125+25*random.nextInt(27);
    39. System.out.print("当前食物坐标("+foodx+",");
    40. System.out.print(foody+")");
    41. System.out.println("|||当前分数:"+score+" ");
    42. }
    43. repaint();
    44. }
    45. timer.start();
    46. }
    47. @Override
    48. public void keyReleased(KeyEvent arg0) {
    49. // TODO Auto-generated method stub
    50. }
    51. @Override
    52. public void keyTyped(KeyEvent arg0) {
    53. // TODO Auto-generated method stub
    54. }
    55. }

    框架Ui类

    1. package Demo;
    2. import javax.swing.JFrame;
    3. public class Ui {
    4. public static void main(String[] args){
    5. JFrame frame=new JFrame("无尽版贪吃蛇");
    6. frame.setSize(1500, 900);
    7. frame.setLocationRelativeTo(null);//居中显示
    8. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    9. frame.setResizable(true);
    10. frame.add(new MyPanel());
    11. frame.setVisible(true);
    12. }
    13. }

    项目结构

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


    总结

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

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


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


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

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

  • 相关阅读:
    mPEG-HSA;甲氧基聚乙二醇人血清白蛋白;HSA-PEG简介
    app测试和web测试有什么区别
    OC-底层实现
    vue介绍
    爬虫 | 【实践】Best Computer Science Scientists数据爬取
    Android AIDEGen tools基本使用
    完整恢复Linux误删数据
    gdb命令学习笔记
    【自然语言处理】【大模型】RWKV:基于RNN的LLM
    Linux网络编程基础
  • 原文地址:https://blog.csdn.net/m0_63947499/article/details/125339199