自制贪吃蛇小游戏代码

package game;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Game_Start extends JFrame{

JFrame frame = new JFrame();   
JButton btn1 = new JButton("开始游戏");
JButton btn2 = new JButton("游戏介绍");
JButton btn3 = new JButton("退出游戏");
Image start = (new ImageIcon("src/icon/start.jpg")).getImage();
Font f = new Font("微软雅黑",Font.BOLD,30);

public Game_Start() {
    setSize(1400,1200);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setResizable(false);
    setTitle("贪吃蛇开始界面");
    add(new Pane());
}

public class Pane extends JPanel{
    public Pane() {
        setLayout(null);
        Button();

    btn1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
                new Operation();
                dispose();
}
    });

    btn2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JDialog dialog=new JDialog();
            dialog.setSize(800,600);
            dialog.setLocationRelativeTo(null);
            dialog.setVisible(true);
            dialog.setTitle("游戏介绍");
            String strMsg1 = "____通过键盘的上下左右键控制小蛇的移动";   
            String strMsg2 = "____当小蛇吃到食物会增长身体一单位长度"; 
            String strMsg3="____当蛇头碰到墙壁或身体则游戏结束";
            String strMsg4="____点击空格游戏开始,游戏结束可点击空格重新开始游戏";
            String strMsg = "<html><body>" + strMsg1 + "<br>" + strMsg2 + "<br>"+strMsg3+"<br>"+strMsg4+"<body></html>";  
            JLabel label = new JLabel(strMsg);
            label.setFont(f);
            dialog.add(label);
        }
    });

    btn3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
            }
        });
    }

public void paintComponent(Graphics g) {
    super.paintComponents(g);
    g.drawImage(start,0,0,1400,1200,this);
}

public void Button() {
    add(btn1);
    add(btn2);
    add(btn3);
    btn1.setBounds(575,350,200,100);
    btn2.setBounds(575,500,200,100);
    btn3.setBounds(575,650,200,100);
    btn1.setFont(f);
    btn2.setFont(f);
    btn3.setFont(f);
}
}

    public static void main(String[]args) {
    new Game_Start();
}
}

package game;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.*;
public class Operation extends JFrame {
public Operation() {
    setSize(1400,1200);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setLocationRelativeTo(null);  
    setTitle("贪吃蛇小游戏");
    add(new Panel());
}

public class Panel extends JPanel implements ActionListener, KeyListener {
    Image up = (new ImageIcon("src/icon/up.png")).getImage();
    Image down = (new ImageIcon("src/icon/down.png")).getImage();
    Image left = (new ImageIcon("src/icon/left.png")).getImage();
    Image right = (new ImageIcon("src/icon/right.png")).getImage();
    Image body = (new ImageIcon("src/icon/body.png")).getImage();
    Image food = (new ImageIcon("src/icon/food.png")).getImage();
    Image gamebg = (new ImageIcon("src/icon/gamebg.jpg")).getImage();
    String fx;
    boolean isStart = false;
    boolean isOver = false;
    int len;
    int[]snakex = new int[1400];
    int[]snakey = new int[1200];
    Timer timer = new Timer(100,this);
    int foodx;
    int foody;
    Random random = new Random();
    int score = 0;

    public Panel() {
        Snake();
        timer.start();
        this.setFocusable(true);
        this.addKeyListener(this);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.ORANGE);
        g.setFont(new Font("黑体",Font.BOLD,70));
        g.drawImage(gamebg,0,0,1400,1200,this);
        if(fx == "U") {
            g.drawImage(up, snakex[0], snakey[0], 50, 50, this);
        }else if(fx == "D"){
            g.drawImage(down, snakex[0], snakey[0], 50, 50, this);
        }else if(fx == "L") {
            g.drawImage(left, snakex[0], snakey[0], 50, 50, this);
        }else if(fx == "R") {
            g.drawImage(right, snakex[0], snakey[0], 50, 50, this);
        }
        for(int i = 1;i<len;i++) {
            g.drawImage(body,snakex[i],snakey[i],50,50,this);
        }
        g.drawImage(food, foodx, foody, 30, 30, this);
        g.drawString("分数: "+score, 1000, 100);
        if(isStart == false) {
            g.drawString("按下空格键开始游戏",380,600);
        }
        if(isOver == true) {
            g.drawString("按下空格键开始游戏", 380, 600);
        }
    }

    public void Snake() {
        len = 3;
        fx = "R";
        score = 0;
        snakex[0] = 200;
        snakey[0] = 40;
        snakex[1] = 160;
        snakey[1] = 40;
        snakex[2] = 120;
        snakey[2] = 40;
        foodx = 40*random.nextInt(31);
        foody = 40*random.nextInt(28);
    }
    
public void actionPerformed(ActionEvent e) {
    if(isStart&&!isOver) {
        for(int i = len-1;i>0;i--) {
            snakex[i] = snakex[i-1];
            snakey[i] = snakey[i-1];
        }
        if(snakex[0] == foodx && snakey[0] == foody) {
            len++;
            score++;
            foodx = 40*random.nextInt(31);
            foody = 40*random.nextInt(28);
            for(int i = len-1;i>0;i--) {
                snakex[i] = snakex[i-1];
                snakey[i] = snakey[i-1];}
        }
        if(fx == "R") {
            snakex[0] += 40;
            
        }else if(fx == "L") {
            snakex[0] -= 40;
            
        }else if(fx == "U") {
            snakey[0] -= 40;
            
        }else if(fx == "D") {
            snakey[0] += 40;
            
        }
        for(int i = 1;i<len;i++) {
            if(snakex[i] == snakex[0] && snakey[i] == snakey[0]||snakex[0]>1380||snakex[0]<0|| snakey[0]<0 || snakey[0]>1120) {
                isOver = true;
            }
        }
        repaint();
    }
    timer.start();
    }

    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_SPACE) {
            if(isOver) {
                isOver = false;
                Snake();
            }
            isStart = !isStart;
            repaint();
        }else if (keyCode == KeyEvent.VK_LEFT && fx! = "R"){
            fx="L";
        }else if (keyCode == KeyEvent.VK_DOWN && fx! = "U"){
            fx = "D";
        }else if(keyCode == KeyEvent.VK_UP && fx! = "D") {
            fx = "U";
        }else if(keyCode == KeyEvent.VK_RIGHT && fx! = "L") {
            fx = "R";
        }
    }

    public void keyReleased(KeyEvent e) {
    }

    public void keyTyped(KeyEvent e) {
    }
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的...
    派派森森阅读 4,394评论 0 2
  • C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程...
    小辰带你看世界阅读 1,412评论 0 4
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,520评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,562评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,724评论 1 1