package com.company; import javax.swing.*; public class Main { public static void main(String[] args) { //创建窗体对象 JFrame frame = new JFrame(); //创建窗体参数() frame.setBounds(10,10,900,720); //设置不允许更改大小 //frame.setResizable(false); //设置关闭方式 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //添加主题逻辑框架 frame.add(new Mpanel()); //设置窗体可见 frame.setVisible(true); } }
package com.company; import javax.imageio.ImageIO; import javax.sound.sampled.*; 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.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Random; //基本套路,继承JPanel,实现KeyListener, ActionListener接口 public class Mpanel extends JPanel implements KeyListener, ActionListener { //定义所需要的图片元素 //标题 ImageIcon title; //蛇的身体部位 ImageIcon body; //蛇向上方向的头 ImageIcon up; //蛇向下方向的头 ImageIcon down; //蛇向左方向的头 ImageIcon left; //蛇向右方向的头 ImageIcon right; //食物元素 ImageIcon food; //定义初始长度 int len = 3; //定义初始分数 int score = 0; //存放蛇位置坐标的数组 int[] snakex = new int[750]; int[] snakey = new int[750]; //定义方向 String fx = "R"; //定义游戏是否开始 Boolean isStart = false; //定义游戏是否失败 Boolean isFailed = false; //定义游戏时钟,在此可以设置蛇移动速度,默认100ms Timer timer = new Timer(100,this); //定义食物的坐标 int foodx; int foody; //引入随机数,用于生成食物的随机位置 Random random = new Random(); //定义背景音乐 Clip bgm; //构造方法 public Mpanel(){ //加载图片元素 loadImages(); //初始化数据 initSnake(); //设置聚焦 this.setFocusable(true); //设置键盘监听 this.addKeyListener(this); //开始计时 timer.start(); //加载背景音乐 loadBGM(); } //设置绘图元素 public void paintComponent(Graphics g){ //调用父类方法 super.paintComponent(g); //设置背景颜色为白色 this.setBackground(Color.white); //设置标题元素位置 title.paintIcon(this,g,25,11); //设置白色背景填充位置 g.fillRect(25,75,850,600); //设置画笔颜色为白色 g.setColor(Color.white); //设置长度显示 g.drawString("Len: " + len,750,35); //设置分数显示 g.drawString("Score: " + score,750,50); //根据方向调用相应的蛇头元素 if(fx == "R"){ right.paintIcon(this,g,snakex[0],snakey[0]); } else if(fx == "L"){ left.paintIcon(this,g,snakex[0],snakey[0]); } else if(fx == "U"){ up.paintIcon(this,g,snakex[0],snakey[0]); } else if(fx == "D"){ down.paintIcon(this,g,snakex[0],snakey[0]); } for(int i=1;i0;i--){ snakex[i]=snakex[i-1]; snakey[i]=snakey[i-1]; } //向右移动并判断是否撞墙,撞墙则失败 if(fx == "R"){ snakex[0]=snakex[0]+25; if(snakex[0]>825)isFailed=true; } //向左移动并判断是否撞墙,撞墙则失败 else if(fx == "L"){ snakex[0]=snakex[0]-25; if(snakex[0]<50)isFailed=true; } //向上移动并判断是否撞墙,撞墙则失败 else if(fx == "U"){ snakey[0]=snakey[0]-25; if(snakey[0]<100)isFailed=true; } //向下移动并判断是否撞墙,撞墙则失败 else if(fx == "D"){ snakey[0]=snakey[0]+25; if(snakey[0]>625)isFailed=true; } //吃到食物的判断 if(snakex[0]==foodx&&snakey[0]==foody){ //身体加长,分加多,并且随机生成新食物 len++; score += 10; foodx = 25 + 25 * random.nextInt(34); foody = 75 + 25 * random.nextInt(24); } //撞到自身的处理 for(int i=1;i
到此这篇关于Java实战之贪吃蛇小游戏(源码+注释)的文章就介绍到这了,更多相关java贪吃蛇小游戏内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!