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

打印 上一主题 下一主题

主题 648|帖子 648|积分 1944

 大家好,今天尝试用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.                  //蛇身
  13.                  for(int i=1;i<length;i++){
  14.                          new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(This, g, snakeX[i], snakeY[i]);
  15.                  }
  16.                  //游戏的提示语
  17.                  if(ifStart==false){
  18.                          g.setColor(Color.white);
  19.                          g.setFont(new Font("微软雅黑",Font.BOLD,40));
  20.                          g.drawString("按压空格键继续游戏", 550,500);
  21.                          g.drawString("无尽模式", 650,400);
  22.                  }
  23.                  //画出食物的位置
  24.                  new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(this, g, foodx, foody);
  25.         }
  26.        
  27.         @Override//按压
  28.         public void keyPressed(KeyEvent e) {
  29.                 int keyCode=e.getKeyCode();
  30.                 if(keyCode==KeyEvent.VK_SPACE){
  31.                         ifStart=!ifStart;
  32.                 }
  33.                 if(ifStart==true){
  34.                         if(keyCode==KeyEvent.VK_LEFT&&fx!="r"){
  35.                                 fx="l";
  36.                         }else if(keyCode==KeyEvent.VK_RIGHT&&fx!="l"){
  37.                                 fx="r";
  38.                         }else if(keyCode==KeyEvent.VK_UP&&fx!="d"){
  39.                                 fx="u";
  40.                         }else if(keyCode==KeyEvent.VK_DOWN&&fx!="u"){
  41.                                 fx="d";
  42.                         }
  43.         }
  44.                 repaint();
  45. }
复制代码
框架Ui类

  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.        
  48.         @Override
  49.         public void keyReleased(KeyEvent arg0) {
  50.                 // TODO Auto-generated method stub
  51.                
  52.         }
  53.         @Override
  54.         public void keyTyped(KeyEvent arg0) {
  55.                 // TODO Auto-generated method stub
  56.                
  57.         }
  58. }
复制代码

项目结构


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

总结

   本游戏的设计思路类似于游戏“贪吃蛇大作战”,程序在一些功能的实现上还存在许多不足,但该项目的实现对Java新手的实战能力有很大的提升。
  在使用Java编写该项目时遇到了很多问题,在解决问题时,可以对java的面向对象编程有更加深入的理解和认识。
  
本项目在一定程度上还有缺陷,仅用于初学者学习,欢迎各位指正。
  


   
 
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表