栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java简单的贪吃蛇

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java简单的贪吃蛇

项目结构

Mainframe

package my;

import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.awt.*;
import java.util.linkedList;
import java.util.TimerTask;

public class Mainframe extends Jframe {
 
    private boolean isLiving = true;

    private JPanel jPanel;

    private Snake snake;

    private Timer timer;
    //    食物
    private  Node food=new Node();

    public static void main(String[] args) {
        new Mainframe().setVisible(true);
    }
    public Mainframe() throws HeadlessException {
        initframe();
        initGamePanel();

        initSnake();
        initTimer();

        setKeyListener();

        initfood();
    }
    private void  initfood(){
        food=new Node(30,30);
        food.random();
    }
    private void setKeyListener(){
        addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {


                switch (e.getKeyCode()){

                    case KeyEvent.VK_UP:
                        if (snake.getDirection()!=Direction.DOWN){

                            snake.setDirection(Direction.UP);

                        }
                        break;

                    case KeyEvent.VK_DOWN:
                        if (snake.getDirection()!=Direction.UP){
                            snake.setDirection(Direction.DOWN);
                        }
                        break;

                    case KeyEvent.VK_LEFT:
                        if (snake.getDirection()!=Direction.RIGHT){
                            snake.setDirection(Direction.LEFT);
                        }
                        break;

                    case KeyEvent.VK_RIGHT:
                        if (snake.getDirection()!=Direction.LEFT){
                            snake.setDirection(Direction.RIGHT);
                        }
                        break;

                }
            }
        });
    }

    private void initTimer(){

        timer= new Timer();
        TimerTask timerTask=new TimerTask() {
            @Override
            public void run() {
                snake.move();

                Node head = snake.getBody().getFirst();
                if(head.getX()==food.getX()&&head.getY()==food.getY()){
                    snake.eat(food);
                    food.random();
                }

                jPanel.repaint();
            }
        };
        timer.scheduleAtFixedRate(timerTask,0,100);
    }


    private  void  initSnake(){
        snake=new Snake();
    }
    private void initGamePanel() {

        jPanel = new JPanel() {
   
            @Override
            public void paint(Graphics g) {
                g.clearRect(0,0,600,600);

                g.setColor(Color.white);
                for(int i=0;i<=40;i++){

                  g.drawLine(0,15*i,600,15*i);
                }

                for (int i=0;i<=40;i++){
                    g.drawLine(15*i,0,15*i,600);
                }
                linkedList body=snake.getBody();
                g.setColor(Color.black);

                for (Node node:body){
                    g.fillRect(node.getX()*15,node.getY()*15,15,16);
                }
                g.setColor(Color.red);
                g.fillRect(food.getX()*15,food.getY()*15,15,15);
            }
        };
        add(jPanel);
    }
    private void  initframe(){
        setTitle("一条小蛇蛇");
        setSize(615,640);
        setLocation(400,100);
        setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
        setResizable(false);
    }
}
Direction
package my;

public enum Direction {
    UP,DOWN,LEFT,RIGHT
}
Node

package my;
import java.util.Random;
public class Node {
    private int x; //横坐标
    private int y; //纵坐标
    public Node(){
    }
    public Node(int x,int y){
        this.x=x;
        this.y=y;
    }
    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
    public void random(){
        Random r=new Random();
        this.x=r.nextInt(40);
        this.y=r.nextInt(40);
    }

}

Snake

package my;

import java.util.linkedList;

public class Snake {
    private boolean isLiving=true;
    private Direction direction=Direction.LEFT;
    public Direction getDirection() {
        return direction;
    }

    public void setDirection(Direction direction) {
        this.direction = direction;
    }

    //body
    private linkedList body;
    public Snake() {
        initSnake();
    }
    public void initSnake(){
        body=new linkedList<>();
        body.add(new Node(20,20));
        body.add(new Node(21,20));
        body.add(new Node(22,20));
        body.add(new Node(23,20));
        body.add(new Node(24,20));
        body.add(new Node(25,20));
    }

    public linkedList getBody(){
        return body;
    }
    public void setBody(linkedList body){
     this.body=body;
    }
    public void move(){
        if (isLiving){
            Node head=body.getFirst();
            switch (direction){
                case UP:
                    body.addFirst(new Node(head.getX(),head.getY()-1));
                    break;
                case DOWN:
                    body.addFirst(new Node(head.getX(),head.getY()+1));
                    break;
                case LEFT:
                    body.addFirst(new Node(head.getX()-1,head.getY()));
                    break;
                case RIGHT:
                    body.addFirst(new Node(head.getX()+1,head.getY()));
                    break;
            }
            body.removeLast();
            head=body.getFirst();
            if (head.getX()<0||head.getY()<0||head.getY()>40||head.getX()>40){
                isLiving=false;
            }
            for (int i=1;i                 Node node=body.get(i);
                if (head.getX()==node.getX()&&head.getY()==node.getY()){
                    isLiving=false;
                }

            }
        }

        }

        public void eat(Node food){

            Node head=body.getFirst();

            switch (direction){
                case UP:
                    body.addFirst(new Node(head.getX(),head.getY()-1));
                    break;
                case DOWN:
                    body.addFirst(new Node(head.getX(),head.getY()+1));
                    break;
                case LEFT:
                    body.addFirst(new Node(head.getX()-1,head.getY()));
                    break;
                case RIGHT:
                    body.addFirst(new Node(head.getX()+1,head.getY()));
                    break;
            }
        }
}

这个是运行效果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号