请选择 进入手机版 | 继续访问电脑版

GUI编程之贪吃蛇小游戏

[复制链接]
冰宇 发表于 2021-1-2 12:12:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本篇实现的是贪吃蛇小游戏,使用的是Java语言,GUI编程。
  1. //启动类import snake.GamePanel;import javax.swing.*;import java.awt.*;public class Start extends JFrame{    public Start() {        this.setBounds(10, 10, 900, 720);        setResizable(false);//窗口巨细不可变        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);        this.setVisible(true);        //正常游戏界面都应该在面上!        Game panel = new Game();        Container container = this.getContentPane();        container.add(panel);    }
复制代码
[code]//主类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;//绘制游戏界面//初始化、画笔JPanel、监听:键盘;事件监听(吃食物)public class Game extends JPanel implements KeyListener, ActionListener {    //属性    String dir;//蛇头方向    int[] snake_x =new int[600];//蛇位置    int[] snake_y =new int[600];    int food_x;//食物位置    int food_y;    Random random = new Random();    int length ;    int score;    //游戏状态    Boolean isstart =false;    Boolean isfail =false;    //定时器    Timer timer = new Timer(100, this);//100ms执行一次定时器    //无参构造    public Game() {        init();        this.setFocusable(true);        this.addKeyListener(this);        timer.start();    }    //游戏开始和重新开始需要初始化,重新开始小蛇位置和分数等,还原到原始状态    public void init() {        //蛇头初始位置        snake_x[0] = 100;snake_y[0] = 100;        snake_x[1] = 75;snake_y[1] = 100;        snake_x[2] = 50;snake_y[2] = 100;        //初始方向        dir = "R";        //随机初始食物位置        food_x=  25+25*random.nextInt(34);        food_y= 75+25*random.nextInt(24);        length=3;        //绘制计分器        score=0;//        timer.start();    }    //绘制面板 重写JComponet方法    @Override    public void paintComponent(Graphics g) {        super.paintComponent(g);        setBackground(Color.WHITE);        Data.header.paintIcon(this,g,25,11);        g.fillRect(25,75,850,600);        //画蛇头        switch (dir) {            case"R":                Data.right.paintIcon(this,g,snake_x[0],snake_y[0]);                break;            case"L":                Data.left.paintIcon(this,g,snake_x[0],snake_y[0]);                break;            case"U":                Data.up.paintIcon(this,g,snake_x[0],snake_y[0]);                break;            case"D":                Data.down.paintIcon(this,g,snake_x[0],snake_y[0]);                break;        }        //画食物        Data.food.paintIcon(this,g,food_x,food_y);        //画蛇身        for (int i = 1; i 0 ; i--) {                snake_x=snake_x[i-1];                snake_y=snake_y[i-1];            }            switch (dir) {                case "U":                    snake_y[0]-=25;                    if(snake_y[0]650){                        snake_y[0]=75;                    }                    break;                case "L":                    snake_x[0]-=25;                    if(snake_x[0]850){                        snake_x[0]=25;                    }                    break;            }            repaint();        }        //小蛇移动        if(isstart)        //判断失败        for (int i = 1; i
回复

使用道具 举报

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

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )