贪吃蛇游戏

package pintu;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class TanChiShe extends JFrame implements KeyListener {
    private int x = 5;      //蛇的横坐标
    private int y = 5;      //蛇的纵坐标
    private int a = 303;        //食物的横坐标
    private int b = 303;        //食物的纵坐标
    private int count = 1;          //计分器

    ArrayList<int[]> list = new ArrayList<>();

    public TanChiShe(){
        list.add(new int[]{5,5});
//        list.add(x);list.add(y);
        //初始化界面
        initJFrame();

        //初始化图片
        initImage();

        this.setVisible(true);      //显示
    }
    public static void main(String[] args) {
        new TanChiShe();
    }

    int x1 = 0,y1 = 0;

    //初始化图片
    private void initImage() {
        this.getContentPane().removeAll();          //清空内容

        if (a == list.get(0)[0] && b == list.get(0)[1]){
            a += 300;
            b += 300;
            System.out.println("得了" + count + "分");
            count++;

            list.add(new int[]{x1,y1});
//            ImageIcon icon = new ImageIcon("D:\\java代码\\heima\\pintu\\1.png");
//            JLabel jLabel = new JLabel(icon);
//            jLabel.setBounds(x1,y1,20,20);        //指定容器位置
//            this.getContentPane().add(jLabel);       //获取主容器,把管理器添加到界面中
        }

        //🐍
        ImageIcon icon = new ImageIcon("D:\\java代码\\heima\\pintu\\1.png");       //创建一个图片 ImageIcon 的对象
        JLabel jLabel = new JLabel(icon);       //创建一个 JLabel 的对象
        if (list.get(0)[0] < 0){
            list.get(0)[0] = 585;
            jLabel.setBounds(list.get(0)[0],list.get(0)[1],20,20);
        } else if (list.get(0)[0] > 590) {
            list.get(0)[0] = 5;
            jLabel.setBounds(list.get(0)[0],list.get(0)[1],20,20);
        } else if (list.get(0)[1] < 0) {
            list.get(0)[1] = 585;
            jLabel.setBounds(list.get(0)[0],list.get(0)[1],20,20);
        } else if (list.get(0)[1] > 590) {
            list.get(0)[1] = 5;
            jLabel.setBounds(list.get(0)[0],list.get(0)[1],20,20);
        }       //
        //蛇头
        jLabel.setBounds(list.get(0)[0],list.get(0)[1],20,20);
        x1 = list.get(0)[0];y1 = list.get(0)[1];
        this.getContentPane().add(jLabel);
        //蛇身
        for (int i = list.size(); i > 1; i--) {
            list.get(i-1)[0] = list.get(i-2)[0];
            list.get(i-1)[1] = list.get(i-2)[1];
            ImageIcon icon1 = new ImageIcon("D:\\java代码\\heima\\pintu\\1.png");       //创建一个图片 ImageIcon 的对象
            JLabel jLabel1 = new JLabel(icon);       //创建一个 JLabel 的对象
            jLabel1.setBounds(list.get(i-1)[0],list.get(i-1)[1],20,20);
            this.getContentPane().add(jLabel1);
        }
        /*jLabel.setBounds(list.get(0)[0],list.get(0)[1],20,20);        //指定容器位置
        x1 = list.get(0)[0];y1 = list.get(0)[1];
        this.getContentPane().add(jLabel);       //获取主容器,把管理器添加到界面中*/

        //食物
        ImageIcon icon2 = new ImageIcon("D:\\java代码\\heima\\pintu\\2.png");
        JLabel jLabel2 = new JLabel(icon2);
        //jLabel2.setBounds(a,b,20,20);
        Random r = new Random();
        while ((a < 0 || a >280) || (b < 0 || b >280)){
            int j = r.nextInt(300);
            a = (j / 20) * 20 + 5;
            j = r.nextInt(300);
            b = (j / 20) * 20 + 5;
        }
        jLabel2.setBounds(a,b,20,20);
        /*Random r = new Random();
        jLabel2.setBounds(r.nextInt(300),r.nextInt(300),20,20);*/
        this.getContentPane().add(jLabel2);

        //边墙
        for (int i = 2; i < 605; i+=3) {
            ImageIcon icon1 = new ImageIcon("D:\\java代码\\heima\\pintu\\2.png");
            JLabel jLabel1 = new JLabel(icon1);
            jLabel1.setBounds(i,2,3,3);
            this.getContentPane().add(jLabel1);
        }
        for (int i = 2; i < 605; i+=3) {
            ImageIcon icon1 = new ImageIcon("D:\\java代码\\heima\\pintu\\2.png");
            JLabel jLabel1 = new JLabel(icon1);
            jLabel1.setBounds(2,i,3,3);
            this.getContentPane().add(jLabel1);
        }
        for (int i = 2; i < 605; i+=3) {
            ImageIcon icon1 = new ImageIcon("D:\\java代码\\heima\\pintu\\2.png");
            JLabel jLabel1 = new JLabel(icon1);
            jLabel1.setBounds(i,605,3,3);
            this.getContentPane().add(jLabel1);
        }
        for (int i = 2; i < 605; i+=3) {
            ImageIcon icon1 = new ImageIcon("D:\\java代码\\heima\\pintu\\2.png");
            JLabel jLabel1 = new JLabel(icon1);
            jLabel1.setBounds(605,i,3,3);
            this.getContentPane().add(jLabel1);
        }

        this.getContentPane().repaint();        //刷新界面
    }

    public void initJFrame(){
        this.setSize(630,650);
        this.setTitle("吃不胖游戏");         //标题
        this.setLocationRelativeTo(null);       //设置界面居中
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);       //关闭
        this.setLayout(null);       //取消默认的居中放置,只有取消了才会按照xy轴的形式添加

        this.addKeyListener(this);      //给整个界面添加事件
    }

    @Override
    public void keyTyped(KeyEvent e) {}
    @Override
    public void keyPressed(KeyEvent e) {}

    @Override
    public void keyReleased(KeyEvent e) {
        //对上,下,左,右判断
        //左:37 上:38 右:39 下:40
        int code = e.getKeyCode();
        /*System.out.println(code);*/
        if (code == 37){
            list.get(0)[0]-=20;
            initImage();
        } else if (code == 38) {
            list.get(0)[1]-=20;
            initImage();
        } else if (code == 39) {
            list.get(0)[0]+=20;
            initImage();
        } else if (code == 40){
            list.get(0)[1]+=20;
            initImage();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值