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

使用JAVA制作一个简单的贪吃蛇小游戏(附源码)

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

使用JAVA制作一个简单的贪吃蛇小游戏(附源码)

 1、运行环境(博主使用的是IDEA)

运行效果截图:

 

 

 

 2、创建项目

image文件夹下存放需要用到的图片,wav文件夹下存放.wav格式的无损音乐文件,

cn.gzcc.game下创建项目

2、在Main()下创建运行Jframe窗口,并且添加面板类
package cn.gzcc.game;

//导入窗口类
import javax.swing.*;
import java.io.File;


public class Main {
    private static int result;
    static void SnakeGame(){
        //造窗口
        Jframe window = new Jframe();
        //设置窗口名
        window.setTitle("贪吃蛇");
        //设置窗口的高和宽
        window.setSize(600,700);
        //窗口不可以改变大小
        window.setResizable(false);
        //设置窗口居中
        window.setLocationRelativeTo(null);
        //设置窗口可见
        window.setVisible(true);
        //蛇面板对象,也是监听器对象
        SnakePanel panel = new SnakePanel();
        //设置窗口添加面版
        window.add(panel);
        //窗口添加键盘监听器
        window.addKeyListener(panel);
        //面板添加键盘监听器
        panel.addKeyListener(panel);
        //调用run方法
        panel.run();
        result=JOptionPane.showConfirmDialog(null, "是否重新开始?", "游戏结束", JOptionPane.YES_NO_OPTION);
        //设置窗口可见
        window.setVisible(true);
        //设置窗口窗口默认关闭
        window.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        //背景音乐设置
        Music bg_music = new Music();
        bg_music.playMusic(new File("wav/背景音乐.wav"),true);
        SnakeGame();
        while (result==JOptionPane.YES_NO_OPTION){
            SnakeGame();
        }
    }
    
}
3、创建格子类Cell(用于制造食物和蛇 )
package cn.gzcc.game;

import java.util.Random;


public class Cell {
    
    int width = 25;
    
    int height = 25;
    
    int x;
    
    int y;

}
 4、创建背景音乐类Music(用于背景音乐的是否循环播放)
package cn.gzcc.game;
import javax.sound.sampled.*;
import java.io.File;
public class Music {
    void playMusic(File file,Boolean e)
    {
        try
        {
            //创建相当于音乐播放器的对象
            Clip clip = AudioSystem.getClip();
            //将传入的文件转成可播放的文件
            AudioInputStream audioInput = AudioSystem.getAudioInputStream(file);
            //播放器打开这个文件
            clip.open(audioInput);
            if(e){
                clip.loop(Clip.LOOP_CONTINUOUSLY);  //循环播放
            }
            else clip.start();  //只播放一次
        } catch(Exception ex){
            ex.printStackTrace();
        }
    }
}
5、创建图片类 Snake_Image(用于存放游戏使用的图片)
package cn.gzcc.game;

import java.awt.*;

public class Snake_Image {
    //图片导入
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    //背景图片
    Image background = toolkit.getImage("image/游戏背景.gif");
    Image background1 = toolkit.getImage("image/底部背景.jpg");
    Image background2 = toolkit.getImage("image/方向按键.png");
    //食物图片
    Image food_img1 = toolkit.getImage("image/食物1.png");
    Image food_img2 = toolkit.getImage("image/食物2.png");
    Image food_img3 = toolkit.getImage("image/食物3.png");
    Image food_img4 = toolkit.getImage("image/食物4.png");
    Image food_img5 = toolkit.getImage("image/食物5.png");
    Image food_img6 = toolkit.getImage("image/食物6.png");
    Image food_img7 = toolkit.getImage("image/食物7.png");
    Image food_img8 = toolkit.getImage("image/食物8.png");
    Image food_img9 = toolkit.getImage("image/食物9.png");
    Image food_img10 = toolkit.getImage("image/食物10.png");
    Image food_img11 = toolkit.getImage("image/食物11.png");
    Image food_img12 = toolkit.getImage("image/食物12.png");


    //蛇身图片
    Image snake_img1 = toolkit.getImage("image/蛇身1.png");
    Image snake_img2 = toolkit.getImage("image/蛇身2.png");
    Image snake_img3 = toolkit.getImage("image/蛇身3.png");
    Image snake_img4 = toolkit.getImage("image/蛇身4.png");
    Image snake_img5 = toolkit.getImage("image/蛇身5.png");
    Image snake_img6 = toolkit.getImage("image/蛇身6.png");
    Image snake_img7 = toolkit.getImage("image/蛇身7.png");
    Image snake_img8 = toolkit.getImage("image/蛇身8.png");
    Image snake_img9 = toolkit.getImage("image/蛇身9.png");
    Image snake_img10 = toolkit.getImage("image/蛇身10.png");


    //蛇头图片
    Image snake_head_img1 = toolkit.getImage("image/蛇头1.png");
    Image snake_head_img2 = toolkit.getImage("image/蛇头2.png");
    Image snake_head_img3 = toolkit.getImage("image/蛇头3.png");
    Image snake_head_img4 = toolkit.getImage("image/蛇头4.png");

}
 6、创建面板类SnakePanel(用于绘制游戏界面)
package cn.gzcc.game;

//导入面板类

import javax.swing.*;
//导入画笔类
import java.awt.*;

import java.awt.event.KeyEvent;
import java.io.File;
import java.util.Arrays;
//导入随即库类
import java.util.Random;
//导入键盘监听器接口
import java.awt.event.KeyListener;



public class SnakePanel extends JPanel implements KeyListener{
    
    final int LEFT = 4;
    final int RIGHT = 6;
    final int UP = 8;
    final int DOWN = 2;
    final int LEFT_UP = 7;
    final int RIGHT_UP = 9;
    final int RIGHT_DOWN = 3;
    final int LEFT_DOWN = 1;
    final int BECONT0 = -1;
    final int BECONT = 0;
    int lenght = 3;
    //定义默认蛇头方向
    int direction = RIGHT;
    int direct = BECONT0;
    //定义蛇移动的速度
    int snake_sleep = 500;
    //定义食物
    Cell food;
    //定义蛇
    Cell[] snake;
    //定义游戏图片类
    Snake_Image images = new Snake_Image();
    //定义蛇头
    Cell heard;
    //定义游戏分数
    int game_num = 0;
    //定义游戏难度
    String game_nandu = "简单";
    //定义游戏难度颜色
    Color game_nandu_color = Color.green;
    //判断游戏状况
    String game_state = "蛇当前状态良好";
    //定义游戏状态跟踪
    String game_txet = "开始游戏";
    //定义游戏状态跟踪颜色
    Color game_txet_color = Color.white;
    Color game_state_color = Color.green;
    //定义食物图片数组
    Image[] food_imgs = {images.food_img1,images.food_img2,images.food_img3,images.food_img4,images.food_img5,
            images.food_img6,images.food_img7,images.food_img8,images.food_img9,images.food_img10,images.food_img11,images.food_img12};
    //定义蛇身图片数组
    Image[] snake_imgs = {images.snake_img1,images.snake_img2,images.snake_img3,images.snake_img4,
            images.snake_img5,images.snake_img6,images.snake_img7,images.snake_img8,images.snake_img9,images.snake_img10};
    //定义蛇头图片数组
    Image[] snake_head_imgs = {images.snake_head_img1,images.snake_head_img2,images.snake_head_img3,images.snake_head_img4};
    //随机产生蛇身颜色
    Random r = new Random();
    Image[] snake_img = {snake_imgs[r.nextInt(snake_imgs.length)],snake_imgs[r.nextInt(snake_imgs.length)],snake_imgs[r.nextInt(snake_imgs.length)]};
    //随机产生食物
    Image food_img = food_imgs[r.nextInt(food_imgs.length)];
    //随机产生蛇头
    Image snake_head_img = snake_head_imgs[r.nextInt(snake_head_imgs.length)];
    
    SnakePanel(){
        //给food赋值
        food = new Cell();
        //造随机数工具
        Random ran = new Random();
        //给food的x,y赋值
        food.x = ran.nextInt(20) * food.width;
        food.y = ran.nextInt(20) * food.height;

        //给snake赋值
        snake = new Cell[lenght];
        for (int i=0;i蛇头坐标("+heard.x+","+heard.y+")");
            game_txet = text+"-->蛇头坐标("+heard.x+","+heard.y+")";
            game_txet_color = Color.white;

            if (heard.x == -25 || heard.y == -25 || heard.x == 500 || heard.y == 500){
                System.out.println("撞到墙壁了!");
                game_state_color = Color.red;
                game_state = "蛇撞到墙壁了!";
                //背景音乐设置
                Music bg_music3 = new Music();
                bg_music3.playMusic(new File("wav/游戏失败.wav"),false);
                repaint();
                break;
            }
            
            if(heard.x == food.x && heard.y == food.y){
                snake = Arrays.copyOf(snake,snake.length+1);
                snake[snake.length-1] = food;
                System.out.println("吃到食物-->食物坐标("+food.x+","+food.y+")");
                game_txet = "吃到食物-->食物坐标("+food.x+","+food.y+")";
                game_txet_color = Color.green;
                //背景音乐设置
                Music bg_music1 = new Music();
                bg_music1.playMusic(new File("wav/吃到食物.wav"),false);
                //给food赋值
                food = new Cell();
                //造随机数工具
                Random ran = new Random();
                //随机产生新的食物
                food_img = food_imgs[ran.nextInt(food_imgs.length)];
                //给food的x,y赋值
                food.x = ran.nextInt(20) * food.width;
                food.y = ran.nextInt(20) * food.height;
                snake_sleep -= 10;
                game_num += 10;
                if(snake_sleep <= 0){
                    PASS = "恭喜你通过关卡!";
                    game_state_color = Color.yellow;
                    game_state = "恭喜你通过关卡!";
                }
            }


            //蛇咬到自己停止
            Boolean snake_de = false;
            for (int i=0;i=400){
                    game_nandu = "简单";
                    game_nandu_color = Color.green;
                }
                if(snake_sleep >=300 && snake_sleep <400){
                    game_nandu = "入门";
                    game_nandu_color = Color.cyan;
                }
                if(snake_sleep >=200 && snake_sleep <300){
                    game_nandu = "良好";
                    game_nandu_color = Color.yellow;
                }
                if(snake_sleep >=100 && snake_sleep <200){
                    game_nandu = "困难";
                    game_nandu_color = Color.orange;
                }
                if(snake_sleep <100){
                    game_nandu = "炼狱";
                    game_nandu_color = Color.red;
                }
                Thread.sleep(snake_sleep);
                System.out.println("当前速度-->"+snake_sleep);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }


    @Override
    public void keyTyped(KeyEvent e) {

    }

    

    @Override
    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
//        System.out.println(code);
        if(code == 96){
            direct = BECONT;
        }
        if(code == 97 && direction != RIGHT_UP){
            direction = LEFT_DOWN;
        }
        if(code == 40 && direction != UP || code == 98 && direction != UP){
            direction = DOWN;
        }
        if(code == 99 && direction != LEFT_UP){
            direction = RIGHT_DOWN;
        }
        if(code == 37 && direction != RIGHT || code == 100 && direction != RIGHT){
            direction = LEFT;
        }
        if(code == 39 && direction != LEFT || code == 102 && direction != LEFT){
            direction = RIGHT;
        }
        if(code == 103 && direction != RIGHT_DOWN){
            direction = LEFT_UP;
        }
        if(code == 38 && direction != DOWN || code == 104 && direction != DOWN){
            direction = UP;
        }
        if(code == 105 && direction != LEFT_DOWN){
            direction = RIGHT_UP;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
}

7、源码下载

链接:JAVA贪吃蛇
提取码:5310 

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

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

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