java写的贪吃蛇小游戏

游戏的主启动类

import javax.swing.*;//游戏的主启动类public class StarGame {public static void main(String[] args) {JFrame jFrame = new JFrame();        jFrame.add(new GamePanel());        //窗口的坐标与大小        jFrame.setBounds(10,10,900,720);        //窗口大小不可变        jFrame.setResizable(false);        //设置窗口为可见的        jFrame.setVisible(true);        //退出窗口        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);    }}

游戏的面板

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 length;//蛇的长度    int[] snakeX = new int[600];//蛇的x坐标25*25    int[] snakeY = new int[500];//蛇的y坐标25*25    String fx;    //游戏当前的状态:开始、停止    boolean isStart = false;//默认是不开始!    //食物的坐标    int foodx;    int foody;    Random random = new Random();    //成绩    int score;    //游戏失败状态    boolean isFail = false;    //定时器 以ms为单位 1000ms=1s    Timer timer = new Timer(100,this);//100ms执行一次    //构造器    public GamePanel(){init();        //获得焦点事件        this.setFocusable(true);        //获得键盘监听事件        this.addKeyListener(this);        //游戏一开始,定时器就启动        timer.start();    }    //初始化方法    public void init(){length = 3;        snakeX[0]=100;snakeY[0]=100;//脑袋的坐标        snakeX[1]=75;snakeY[1]=100;//第一个身体的坐标        snakeX[2]=50;snakeY[2]=100;//第二个身体的坐标        fx = "R";//初始方向向右        foodx = 25   25 * random.nextInt(34);        foody = 75   25 * random.nextInt(24);        //初始化成绩        score = 0;    }    //绘制面板    @Override    protected void paintComponent(Graphics g) {//用来清屏        super.paintComponent(g);        //绘制静态的画板        setBackground(Color.WHITE);        //广告头        Data.header.paintIcon(this,g,25,11);        //矩形面板        g.fillRect(25,75,850,600);        //画积分        g.setColor(Color.white);        g.setFont(new Font("微软雅黑",Font.BOLD,18));        g.drawString("长度:"   length,750,34);        g.drawString("分数:"   score,750,51);        //把食物画上去        Data.foot.paintIcon(this,g,foodx,foody);        //把小蛇画上去        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 < length; i  ) {Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);        }        //Data.body.paintIcon(this,g,snakeX[1],snakeY[1]);//第一个身体的坐标        //Data.body.paintIcon(this,g,snakeX[2],snakeY[2]);//第二个身体的坐标        //游戏状态        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("游戏失败,按下空格重新开始!",300,300);        }    }    //键盘监听事件    @Override    public void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();//获得键盘按键是哪一个        if(keyCode == e.VK_SPACE){//如果按下的空格键            if(isFail){//重新开始                isFail = false;                init();            }else {isStart = !isStart;//取反            }            repaint();        }        //小蛇移动        if(keyCode == KeyEvent.VK_UP){fx = "U";        }else if(keyCode == KeyEvent.VK_DOWN){fx = "D";        }else if(keyCode == KeyEvent.VK_LEFT){fx = "L";        }else if(keyCode == KeyEvent.VK_RIGHT){fx = "R";        }    }    //事件监听··需要通过固定事件来刷新,1s=10次    @Override    public void actionPerformed(ActionEvent e) {//吃食物        if(snakeX[0] == foodx && snakeY[0] == foody){//小蛇长度 1            length  ;            //分数 10            score = score   10;            //再次随机食物            foodx = 25   25 * random.nextInt(34);            foody = 75   25 * random.nextInt(24);        }        if(isStart && isFail == false){//如果游戏是开始状态,就让小蛇动起来!            //移动            for (int i = length-1; i > 0; i--) {snakeX[i] = snakeX[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;}            }            //失败判断,撞到自己就算失败            for (int i = 1; i < length; i  ) {if(snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]){isFail = true;                }                            }            repaint();//重画页面        }        timer.start();//定时器开启;    }    @Override    public void keyTyped(KeyEvent e) {}    @Override    public void keyReleased(KeyEvent e) {}}

游戏的素材类

import javax.swing.*;import java.net.URL;public class Data {public static URL headerURL = Data.class.getResource("static/header.png");    public static ImageIcon header = new ImageIcon(headerURL);    public static URL upURL = Data.class.getResource("static/up.png");    public static ImageIcon up = new ImageIcon(upURL);    public static URL downURL = Data.class.getResource("static/down.png");    public static ImageIcon down = new ImageIcon(downURL);    public static URL bodyURL = Data.class.getResource("static/body.png");    public static ImageIcon body = new ImageIcon(bodyURL);    public static URL leftURL = Data.class.getResource("static/left.png");    public static ImageIcon left = new ImageIcon(leftURL);    public static URL rightURL = Data.class.getResource("static/right.png");    public static ImageIcon right = new ImageIcon(rightURL);    public static URL footURL = Data.class.getResource("static/foot.png");    public static ImageIcon foot = new ImageIcon(footURL);

来源:https://www.icode9.com/content-1-806701.html

(0)

相关推荐

  • java学习——58.java.swing学习

    AWT组件不是跨平台的,从外观到控制都依赖本地操作系统,所以称为重型组件.它会造成在不同的操作系统中会有不同的外观显现,所以现在均推荐使用Swing组件. Swing组件扩展了AWT,AWT中有的组件 ...

  • java简易小游戏

    java简易小游戏制作 游戏思路:设置人物移动,游戏规则,积分系统,随机移动的怪物,游戏胜负判定,定时器. 游戏内容部分 package 代码部分;import javax.swing.*;impor ...

  • Python简单通俗易懂的贪吃蛇小游戏,儿时童年的味道!

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 今天,给大家介绍一个简单易懂的贪吃蛇小游戏 代码 如下 import pygame,sys, ...

  • 使用Opencv和Python构建贪吃蛇小游戏

    重磅干货,第一时间送达 来源丨https://blog.csdn.net/ZeroSwift/article/details/112172663 编辑丨AI算法与图像处理 导读 本文详细介绍贪吃蛇小游 ...

  • 如何写Node.JS版本小游戏

    简介JavaScript的出现催动了前端开发的萌芽,前后端分离促进了Vue.React等开发框架的发展,Weex.React-Native等的演变赋予了并存多端开发的能力,而Node.JS的面世无疑是 ...

  • 广电11月已过审国产游戏887款 “贪吃蛇”类游戏高达8款

    文/游戏陀螺 浩南哥 广电总局昨日在官网更新了11月国产网游过审信息,截止23日,11月过审的国产网游达887款,其中864款标注为移动游戏.本月过审游戏数量已达到了历史最高值,预计整个11月的数量将 ...

  • 用python写一个简单的贪吃蛇游戏

    不知道有多少同学跟我一样,最初接触编程的动机就是为了自己做个游戏玩? Python 虽然并不是一个"为游戏而生"的语言,但也有着自己的游戏引擎.最常用的就是 pygame.另外还有 ...

  • 打手电的贪吃蛇:不一样的贪吃蛇进化论大作战游戏小程序

    沐沐带你发现好游戏! 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微信小游戏大全, 模拟经营游戏.恐怖游戏.消除游戏.休闲游戏. 益智游戏.吃鸡游戏.烧脑游戏.解谜游戏大全 ...

  • 蛇蛇大乱斗:贪吃蛇进化论,一起贪吃蛇大作战游戏小程序!

    沐沐带你发现好游戏! 沐沐今天推荐这款游戏叫<蛇蛇大乱斗>, 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微信小游戏大全, 模拟经营游戏.恐怖游戏.消除游戏.休 ...

  • 贪吃蛇2020:不一样的贪吃蛇游戏小程序,点开既玩

    沐沐带你发现好游戏! 沐沐今天推荐这款游戏叫<贪吃蛇2020>, 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微信小游戏大全, 模拟经营游戏.恐怖游戏.消除游戏 ...

  • 龙行蛇蛇大战:龙行贪吃蛇大作战新版本,好玩的贪吃蛇微信小游戏

    沐沐带你发现好游戏! 沐沐今天推荐这款游戏叫<龙行蛇蛇大战>, 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微信小游戏大全, 模拟经营游戏.恐怖游戏.消除游戏. ...