贪食蛇

贪食蛇代码

package basic;

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.net.URL;
import java.util.Arrays;
import java.util.Random;

public class SnakeDemo01{
    public static void main(String[] args) {
       JFrame jf = new JFrame("贪食蛇");

       jf.setBounds(10,10,900,720);

       jf.add(new SnakePanel());
       jf.setVisible(true);
    }


}

class SnakePanel extends JPanel implements KeyListener, ActionListener{
    Timer timer = new Timer(100,this);
    boolean isFail = false;
    boolean isStart = false;
    char direct='R';
    int[] snakeX = new int[600];
    int[] snakeY = new int[500];
    int score;
    int foodX;
    int foodY;
    Random r = new Random();
    public int len;
    public SnakePanel(){
        super();
        init();
        this.setFocusable(true);
        this.addKeyListener(this);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        //System.out.println("1");
        this.setBackground(Color.white);
        Data.headi1.paintIcon(this,g,25,11);
        g.fillRect(25,75,850,600);

        switch(direct){
            case 'L':
                Data.lefti1.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case 'R':
                Data.righti1.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case 'U':
                Data.upi1.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case 'D':
                Data.downi1.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;

        }

        for(int i=1;i<len;i++){
            Data.bodyi1.paintIcon(this,g,snakeX[i],snakeY[i]);
        }

        Data.foodi1.paintIcon(this,g,foodX,foodY);

        if(!isStart){
            g.setColor(Color.black);
            g.setFont(new Font("微软雅黑",Font.BOLD,40));
            g.drawString("按下空格开始游戏",300,300);
        }

        if(isFail){
            g.setColor(Color.black);
            g.setFont(new Font("微软雅黑",Font.BOLD,40));
            g.drawString("Game Over\n按下空格重新开始",300,300);
        }

        timer.start();
    }



    public void init(){
        len = 3;
        snakeX[0] = 100;
        snakeY[0] = 100;

        snakeX[1] = 75;
        snakeY[1] = 100;

        snakeX[2] = 50;
        snakeY[2] = 100;

        do{
            foodX = 25+25*r.nextInt(34);
            foodY = 75+25*r.nextInt(24);
        }
        while((foodX==snakeX[0]&&foodY==snakeY[0])||(foodX==snakeX[1]&&foodY==snakeY[1])||(foodX==snakeX[2]&&foodY==snakeY[2]));
        score = 0;
        direct='R';
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        //System.out.println(2);
        if(isStart&&!isFail){
            for(int i=len-1;i>0;i--){
                snakeX[i]=snakeX[i-1];
                snakeY[i]=snakeY[i-1];
            }

            switch(direct){
                case 'L':
                    snakeX[0]-=25;
                    if(snakeX[0]<25){
                        isFail = !isFail;
                    }
                    break;
                case 'R':
                    snakeX[0]+=25;
                    if(snakeX[0]>855){
                        isFail = !isFail;
                    }
                    break;
                case 'U':
                    snakeY[0]-=25;
                    if(snakeY[0]<75){
                        isFail = !isFail;
                    }
                    break;
                case 'D':
                    snakeY[0]+=25;
                    if(snakeY[0]>650){
                        isFail = !isFail;
                    }
                    break;

            }

            //吃点
            if(snakeX[0]==foodX&&snakeY[0]==foodY){
                len++;
                score+=10;
                boolean flag = false;
                do{
                    foodX = 25 + 25* r.nextInt(34);
                    foodY = 75 + 25* r.nextInt(24);
                    for(int i=0;i<len;i++){
                        if(foodX==snakeX[i]&&foodY==snakeY[i]){
                            flag=true;
                            break;
                        }
                    }
                }while(flag);



            }
            for(int i=1;i<len;i++){
                if(snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){
                    isFail=!isFail;
                    break;
                }
            }


            repaint();

        }
        timer.start();
    }

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if(keyCode==KeyEvent.VK_SPACE){
            if(isFail){
                isFail = !isFail;
                init();
            }else{
                isStart = !isStart;
            }
            repaint();

        }

        switch (keyCode){
            case KeyEvent.VK_LEFT:
                if(direct!='L'&&direct!='R'){
                    direct = 'L';
                }
                break;
            case KeyEvent.VK_RIGHT:
                if(direct!='L'&&direct!='R'){
                    direct = 'R';
                }
                break;
            case KeyEvent.VK_UP:
                if(direct!='U'&&direct!='D'){
                    direct = 'U';
                }
                break;
            case KeyEvent.VK_DOWN:
                if(direct!='U'&&direct!='D'){
                    direct = 'D';
                }
                break;
        }

    }

    @Override
    public void keyReleased(KeyEvent e) {
        //留空
    }

    @Override
    public void keyTyped(KeyEvent e) {
        //留空
    }
}

class Data{
    public static URL head = SnakeDemo01.class.getResource("statics/header.png");
    public static URL left = SnakeDemo01.class.getResource("statics/left.png");
    public static URL right = SnakeDemo01.class.getResource("statics/right.png");
    public static URL up = SnakeDemo01.class.getResource("statics/up.png");
    public static URL down = SnakeDemo01.class.getResource("statics/down.png");
    public static URL food = SnakeDemo01.class.getResource("statics/food.png");
    public static URL body = SnakeDemo01.class.getResource("statics/body.png");

    public static ImageIcon headi1 = new ImageIcon(head);
    public static ImageIcon lefti1 = new ImageIcon(left);
    public static ImageIcon righti1 = new ImageIcon(right);
    public static ImageIcon upi1 = new ImageIcon(up);
    public static ImageIcon downi1 = new ImageIcon(down);
    public static ImageIcon foodi1 = new ImageIcon(food);
    public static ImageIcon bodyi1 = new ImageIcon(body);
}

posted @ 2021-03-16 19:05  天然卷123  阅读(69)  评论(0)    收藏  举报