Java编写“诸神黄昏“小游戏

Posted 每日小新

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java编写“诸神黄昏“小游戏相关的知识,希望对你有一定的参考价值。

😻Java编写"诸神黄昏"小游戏


此游戏历经10800(3小时)秒独具匠心的精心打造,全人工编写,使用最通俗简单的语句编写“史诗级”作品🐕,没错,它就是我们的"诸神黄昏"(贪吃蛇)小游戏😏。正文:主要就是通过java编写一个简单的贪吃蛇🐍游戏,有关卡模式和无尽模式,并将此游戏打包,变成.exe程序,并且可以通过玩家手动自由更换贪吃蛇的皮肤,比如一下皮肤(有兴趣的可以直接下载源码以及EXE打包软件)。主要还是教会大家如何把自己辛辛苦苦编写的小程序小游戏变成一个exe文件(项目每行都有注释,人人都可以看懂哟)🤗。


一、代码以及效果展示

这里展示部分代码,需要的直接去我上传资源处直接下载整个项目即可😪

/*
* 画板类,游戏的整体框架设置以及内容展示(游戏启动类)
* */
public class GameFrame extends JFrame 

    //设置通关分数
    public static int maxNum=30;
    //定义窗口的宽高
    int GFWidth=800;
    int GFHeight=600;
    //通过设置缓存解决窗口闪动
    Image buffer;

    //游戏状态 0未开始,1开始,2暂停 3通关 4.游戏失败 5.重新游戏 6.关卡模式 7.无尽模式 8.无尽模式开始
    public static int status=0;
    //积分
    public int score=0;

    //创建🐍对象
    Snake snake=new Snake(GameUtils.rightImg,60,570,this);
    //创建设身体
    public List<SnakeBody> list=new ArrayList<SnakeBody>();
    //创建事务
    public FoodObj foodObj=new FoodObj().getFood();
    //构造器
    public GameFrame()
        //设置窗口大小
        setSize(GFWidth,GFHeight);
        //设置是否显示
        setVisible(true);
        //设置居中显示
        setLocationRelativeTo(null);
        //设置标题名
        setTitle("诸神黄昏✧1.0");
        //设置游戏图标
        setIconImage(ImgTool.getimg("src/com/yjxxt/img/snake.png"));
        //设置程序关闭随窗口同时关闭
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置大小不可变
        setResizable(false);
        //初始化两个🐍身体
        list.add(new SnakeBody(GameUtils.bodyImg,30,570,this));
        list.add(new SnakeBody(GameUtils.bodyImg,0,570,this));

        //设置面板键盘监听
        this.addKeyListener(new KeyAdapter() 
            //重写键盘监听方法
            @Override
            public void keyPressed(KeyEvent e) 
                //判断是否是空格
                if(e.getKeyCode()==KeyEvent.VK_SPACE)
                    //判断游戏状态
                    switch(status)
                        //游戏未开始--开始
                        case 0:status=1;break;
                        //游戏开始--暂停
                        case 1:status=2;repaint();break;
                        //游戏暂停---继续
                        case 2:status=1;break;
                        //游戏通关--下一关
                        //case 3:status=5;repaint();score=0;break;
                        case 3:if(GameUtils.level==3&&score==maxNum)
                            status=7;
                        else
                            status=6;
                        
                        repaint();
                        score=0;break;
                        //游戏死亡--重新开始
                        case 4:status=5;repaint();score=0;break;
                        //通关后空格下一关
                        case 6:status=1;repaint();score=0;break;
                        //无尽模式
                        case 7:status=8;repaint();score=0;break;
                        default:break;
                    

                
            
        );

        //重复刷新页面
        while(true)
            //游戏开始才会不断刷新页面
            if(status==1||status==8)
                //刷新页面
                repaint();
            
            //重新开始
            if(status==5)
                //5代表重新游戏,将游戏状态设置为0未开始游戏
                status=0;
                //重启程序
                reGame();
            
            //下一关(只有三关)
            if(status==6&&GameUtils.level!=3)
                //设置游戏关卡加一
                GameUtils.level++;
                //设置游戏状态开始
                status=1;
                reGame();
            
            //无尽模式
            if(status==7)
                //开启无尽模式
                status=8;
                GameUtils.level=0;
                reGame();
            




            //休眠
            try 
                Thread.sleep(200);
             catch (InterruptedException e) 
                e.printStackTrace();
            
        

    

    @Override
    public void paint(Graphics g) 
        //初始化缓存图片
        if(buffer==null)
            buffer=this.createImage(GFWidth,GFHeight);
        

        //获取缓存空白图片的画笔对象
        Graphics gImage=buffer.getGraphics();
        gImage.setColor(Color.gray);
        gImage.fillRect(0,0,GFWidth,GFHeight);
        gImage.setColor(Color.black);
        for (int i = 0; i <=20; i++) 
            gImage.drawLine(0,i*30,600,i*30);
            gImage.drawLine(i*30,0,i*30,600);
        

        //画蛇身(倒序遍历防止身体重叠)
        for (int i = list.size()-1; i >=0; i--) 
            list.get(i).paintSelf(gImage);
        

        //画蛇头
        try
            //System.out.println("努力加载~~");
            snake.paintSelf(gImage);
        catch (Exception e)
            System.out.println(e);
        
        //画食物
        foodObj.paintSelf(gImage);
        //画关卡
        System.out.println(status+"-----"+score);
        if(status==8||(status==4&&GameUtils.level==0))
            GameUtils.drawWord(gImage,"无尽模式",Color.orange,40,610,260);
        else
            GameUtils.drawWord(gImage,"第"+GameUtils.level+"关",Color.orange,40,650,260);
        
        //画分数
        GameUtils.drawWord(gImage,score+"分",Color.GREEN,50,650,330);
        //画标签
        GameUtils.drawWord(gImage,"每日小新",Color.PINK ,30,630,570);
        GameUtils.drawWord(gImage,"w:上 s:下",Color.cyan ,30,630,450);
        GameUtils.drawWord(gImage,"a:左 d:右",Color.cyan ,30,630,480);
        //绘制提示语
        gImage.setColor(Color.gray);
        startPaint(gImage);

        //最后将画好的也面一次性全部展现出来
        g.drawImage(buffer,0,0,null);

    

    //游戏准备画面
    public void startPaint(Graphics g)
        //未开始
        if(status==0)
            g.fillRect(120,240,400,70);
            //画提示语
            GameUtils.drawWord(g,"按下空格开始游戏",Color.yellow,35,150,290);
        
        //暂停
        if(status==2)
            g.fillRect(120,240,400,70);
            //画提示语
            GameUtils.drawWord(g,"按下空格继续游戏",Color.PINK,35,150,290);
        
        //通关
        if(status==3)
            g.fillRect(120,240,400,70);
            if(GameUtils.level==3)
                GameUtils.drawWord(g,"恭喜全部通关,进入无尽模式!",Color.yellow,35,150,290);
                //GameUtils.level=0;
            else
                //画提示语
                GameUtils.drawWord(g,"恭喜通关!空格进入下一关",Color.yellow,35,150,290);
            

        
        //失败
        if(status==4)
            g.fillRect(120,240,400,70);
            //画提示语
            GameUtils.drawWord(g,"小垃圾,Space重来吧~",Color.yellow,35,150,290);
        

    

    //重启游戏
    public void reGame()
       //关闭当前窗口
       this.dispose();
       //开启新窗口
        String[] args=;
        main(args);
    

    public static void main(String[] args) 
        GameFrame gameFrame=new GameFrame();
    


初始皮肤展示


皮肤版本演示(皮肤随意更改)


二、项目打成Jar包

拿到源码后用IDea打开即可,先将项目达成jar包,之后才能通过Jsmooth将jar包打包成我们双击就能运行的程序


1、第一步 点击File,选择Project Structure


2、依次选择如下


3、选择打包位置与名字


4、选择项目和启动类


5、设置完毕后,点击Build编译jar包



6、启动测试

那么jar包变成功了!😛😜


三、利用JSmooth生成EXE

1、启动JSmooth


2、配置设置



编译后,在你指定的位置应该有一个exe文件,这里我放在一个桌面文件夹里,此时再将项目里的图片文件加img抽离出来,方便更换图片,也就是先换皮肤效果了。


四、换皮肤展示

src 文件夹里存放的是图片,大家可以随意替换,只要图片名字注意一下就行,这样也就可以随便发给别人完啦😋



最后代码和已经打包好的项目全部已经上传,有需要的自己下载~拜拜(三连私信获得免费源码哟)😋

以上是关于Java编写“诸神黄昏“小游戏的主要内容,如果未能解决你的问题,请参考以下文章

卡塔尔世界杯-诸神黄昏

[开发ing] Unity项目 - Hero英雄

「BJOI2019」奥术神杖

C++ 后台开发知识点及学习路线

如何看待2022年秋招Java后端开发岗一片红海?

2022秋招大战:算法岗挤破头,JAVA开发也被迫内卷