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

java练手项目(贪吃蛇)

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

java练手项目(贪吃蛇)

 

一、游戏背景

1976年,Gremlin平台推出了一款经典街机游戏Blockade。游戏中,两名玩家分别控制一个角色在屏幕上移动,所经之处砌起围栏。角色只能向左、右方向90度转弯,游戏目标保证让对方先撞上屏幕或围栏。

二、功能实现

目前使用intellij idea。

创建游戏项目game。src下创建一个包。包中包含其中Direction为枚举类型

在MySnake中代码

package dem;
import javax.swing.*;
public class MySnake {
    public static void main(String[] args) {
        //创建一个窗口
        JFrame frame = new JFrame();
        //指定窗口xy的位置以及窗口宽度和高度的值
        frame.setBounds(600,100,700,900);
        //不允许拖拽改变大小
        frame.setResizable(false);
        //奠基窗口关闭按钮,执行操作退出
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //添加画布
        frame.add(new MyPanel());
        //展示出来
        frame.setVisible(true);
    }
}

MyPanel中代码

package dem;

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.util.Random;

public class MyPanel extends JPanel implements KeyListener, ActionListener {
    //声明蛇头和身体图片
    ImageIcon right = new ImageIcon("image/right.png");
    ImageIcon body = new ImageIcon("image/body.png");
    //声明上下左蛇头图片
    ImageIcon top = new ImageIcon("image/top.png");
    ImageIcon left = new ImageIcon("image/left.png");
    ImageIcon bottom = new ImageIcon("image/bottom.png");
    //声明一个初始值,表示蛇的长度
    int len = 3;
    //声明两个数组分别存放x和y的位置
    int[] snakeX = new int[1008];
    int[] snakeY = new int[1008];
    //枚举
    Direction direction = Direction.right;
    //添加一个判断开始游戏true
    boolean isStart = false;
    //创建定时器
    Timer timer = new Timer(100,this);
    //声明食物的两个坐标
    int foodX;
    int foodY;
    //声明随机变量random
    Random random = new Random();
    //声明食物图片
    ImageIcon food = new ImageIcon("image/food.png");
    public MyPanel(){
        //设定蛇的头和身体的起始位置
        snakeX[0] = 100;
        snakeY[0] = 100;
        snakeX[1] = 75;
        snakeY[1] = 100;
        snakeX[2] = 50;
        snakeY[2] = 100;
        //获取键盘事件
        this.setFocusable(true);
        //添加监听
        this.addKeyListener(this);
        //启动定时器
        timer.start();
        //生成食物坐标
        foodX = 25+25*random.nextInt(20);
        foodY = 25+25*random.nextInt(20);
    }
//重写画组件方法
    @Override
    protected void paintComponent(Graphics g) {
        //调用父类方法做一些基本工作
        super.paintComponent(g);
        //设置背景颜色
        this.setBackground(Color.red);
        //在画布添加游戏区域
        g.fillRect(0,0,700,900);
        //添加右侧蛇头
        //right.paintIcon(this,g,snakeX[0],snakeY[0]);
        //根据枚举变量的方向值进行判断
        switch(direction){
            case top:
                top.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case left:
                left.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case right:
                right.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case bottom:
                bottom.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
        }
        //两个身体
        
        for(int i = 1; i 0;i--){
                snakeX[i] = snakeX[i - 1];
                snakeY[i] = snakeY[i - 1];

            }
           //通过方向键进行判断控制蛇头
            switch (direction){
                case top:
                    snakeY[0] -= 25;
                    if (snakeY[0] <=0) {
                        snakeY[0] = 900;
                    }
                    break;
                case bottom:
                    //假如蛇水平向右,则蛇头值+25
                    snakeY[0] += 25;
                    //超出700像素x从0
                    if (snakeY[0] >= 900) {
                        snakeY[0] = 0;
                    }
                    break;
                case right:
                    //假如蛇水平向右,则蛇头值+25
                    snakeX[0] += 25;
                    //超出700像素x从0
                    if (snakeX[0] >= 700) {
                        snakeX[0] = 0;
                    }
                    break;
                case left:
                    //假如蛇水平向右,则蛇头值+25
                    snakeX[0] -= 25;
                    //超出700像素x从0
                    if (snakeX[0] <=0) {
                        snakeX[0] = 700;
                    }
                    break;
            }
            //判断当蛇头的X坐标和Y坐标与食物一致时长度+1随机生成食物
            if (snakeY[0]==foodY && snakeX[0]==foodX){
                //蛇长度+1
                len++;
                //重新生成food
                foodX=25+25*random.nextInt(20);
                foodY=25+25*random.nextInt(20);
            }
            //重写画组件
            repaint();
            //重新启动定时器
            timer.start();
        }
    }
}

 Direction

package dem;

public enum Direction {//定义一个枚举方向
    top,left,right,bottom;
}

三、效果展示

按下空格键开始,再按空格键暂停。方向键控制蛇头移动,当蛇头穿过窗口从另一面通过。

 吃掉食物长度加一,食物随机生成

 

在Game文件夹下添加image文件夹文件夹保存png文件

 图片大小为25*25

游戏结束设定  大家可以随意发挥

 

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

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

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