Fork me on GitHub

Java之GUI实战--贪吃蛇

  贪吃蛇,相信大家都玩过吧!

  今天,分享给大家的是一个由跟麦叔学习的一个Java版的GUI小游戏——贪吃蛇。我在此基础上添加了撞墙会死,Space键控制暂停、开始和死亡后重新开始两个功能。有兴趣的同学,可以对其功能进行扩展,比如:

①游戏途中会产生一些有毒的食物
②或者是内部每隔一段时间产生围墙增加游戏难度
③又或者是添加时间限制(在指定的时间内吃到规定的食物数量)
④又或者是可以添加两条蛇让好友和你在指定的时间内一起争夺食物
……

  下面是项目要用到的知识点:

用JFrame写一个简单的窗口,还要知道ActionEvent事件、FocusEvent事件和KeyEvent事件,及多态的相关知识等等

游戏效果图展示:

1、开始或暂停界面

2、结束界面

代码实现如下:

Msnake.java

package Snake;

import javax.swing.*;
import java.awt.*;

public class Msnake {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Lencamo's 贪吃蛇 program");
        frame.setBounds(10,10,915,720); //大小和位置
        //---------------------------------

        Mpanel Lencamo = new Mpanel();
        frame.add(Lencamo);

        frame.setResizable(false); //大小不能变
        frame.setVisible(true); //设为组件可见窗口,😭【❤必须放在.add()后❤】
        //frame.getContentPane().setBackground(Color.RED);
        frame.setBackground(new Color(49, 121, 74));

        //----------------------------------
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点×的时候,JVM随之关闭

    }
}

Mpanel.java

package Snake;

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;

//this: 指向当前的类,类需要作为【监听事件】接口的实现类
public class Mpanel extends JPanel implements KeyListener, ActionListener {

    public Mpanel() {
        initDate(); //初始化蛇长、食物数据

        //获取焦点(键盘事件)、处理(监听)事件
        this.setFocusable(true);
        this.addKeyListener(this);

        //启动时钟
        timer.start();
    }

    //重写KeyListener接口方法
    @Override
    public void keyTyped(KeyEvent e) {   //准备敲

    }

    @Override
    public void keyPressed(KeyEvent e) {  //敲的过程
        int keyCode = e.getKeyCode(); //获得键盘上按键对应的编码数字
        if(keyCode == KeyEvent.VK_SPACE) {//VK_SPACE ==32 即空格键
            if(isFailed) {
                isFailed = false;
                initDate();
            }else {
                isStarted = !isStarted;
            }
            repaint();  //新的数据状态
        }else if(keyCode == KeyEvent.VK_LEFT) {  //定义键盘按键与蛇头部事件
            dir = "L";
        }else if(keyCode == KeyEvent.VK_RIGHT) {  //定义键盘按键与蛇头部事件
            dir = "R";
        }else if(keyCode == KeyEvent.VK_UP) {  //定义键盘按键与蛇头部事件
            dir = "U";
        }else if(keyCode == KeyEvent.VK_DOWN) {  //定义键盘按键与蛇头部事件
            dir = "D";
        }
    }

    @Override
    public void keyReleased(KeyEvent e) { //结束

    }
    
    
//----------------------------------------------------------------------------------------
//-----------此处省略-------------------完整代码请到在我的GitHub项目中下载-----------------------------
//----------------------------------------------------------------------------------------

想要获得完整版【Java贪吃蛇】的最新源码,可以点击页面右上角的GitHub图标即可下载完整源码。

posted @ 2021-06-17 14:16  Lencamo  阅读(120)  评论(0编辑  收藏  举报