欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

JavaGUI 简易贪吃蛇代码详解+图片素材

发布时间:2024/1/1 java 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 JavaGUI 简易贪吃蛇代码详解+图片素材 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

简易贪吃蛇

运行截图

图片素材







代码详解

package com.du.snake; 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 GamePanel extends JPanel implements KeyListener, ActionListener {//定义蛇的数据结构int length; //长度int[] snakeX=new int[600]; //蛇的x坐标int[] snakeY=new int[500]; //蛇的Y坐标String fx; //方向int score; //分数//食物坐标int foodx;int foody;//随机数Random random=new Random();//游戏当前状态: 开始 停止boolean isStart=false;//默认停止boolean isFail=false;//游戏失败状态//定时器 ms 1000ms=1sTimer timer=new Timer(100,this); //100毫秒执行一次public GamePanel(){init();//获得焦点和键盘 事件this.setFocusable(true);this.addKeyListener(this);timer.start();//游戏开始 定时器启动}//初始化方法public void init(){length=3;//默认2个身体1个头snakeX[0]=100;snakeY[0]=100; //脑袋坐标snakeX[1]=75;snakeY[1]=100; //第一个身体坐标snakeX[2]=50;snakeY[2]=100; //第二个身体坐标fx="R";//初始方向向右score=0;//分数为0//随机食物 坐标foodx=25+25*random.nextInt(34);foody=75+25*random.nextInt(24);}//绘制面板 //游戏中 所有东西 由画笔画出@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);//绘制静态面板Data.header.paintIcon(this,g,25,11);//头部广告栏this.setBackground(Color.WHITE); //面板背景颜色//成绩 长度g.setFont(new Font("微软雅黑",Font.BOLD,18));g.setColor(Color.WHITE);g.drawString("长度"+length,750,35);//成绩 分数g.setFont(new Font("微软雅黑",Font.BOLD,18));g.setColor(Color.WHITE);g.drawString("分数"+score,750,55);//画出矩形 游戏界面g.setColor(Color.BLACK);g.fillRect(25,75,850,600);//把小蛇画上去 上下左右方向if (fx.equals("R")){Data.right.paintIcon(this,g,snakeX[0],snakeY[0]); //初始化蛇头向右}else if (fx.equals("L")){Data.left.paintIcon(this,g,snakeX[0],snakeY[0]); //初始化蛇头向走} else if(fx.equals("U")){Data.up.paintIcon(this,g,snakeX[0],snakeY[0]); //初始化蛇头向上}else if(fx.equals("D")){Data.down.paintIcon(this,g,snakeX[0],snakeY[0]); //初始化蛇头向下}//for (int i = 1; i < length; i++) {Data.body.paintIcon(this,g,snakeX[i],snakeY[i]); //第一个身体}//画出食物Data.food.paintIcon(this,g,foodx,foody);//游戏状态if (isStart==false){g.setFont(new Font("微软雅黑",Font.BOLD,40));g.setColor(Color.WHITE);g.drawString("按下空格开始游戏",300,300);}//游戏失败if (isFail){g.setFont(new Font("微软雅黑",Font.BOLD,40));g.setColor(Color.RED);g.drawString("失败按下空格重新开始",300,300);}}@Overridepublic void keyTyped(KeyEvent keyEvent) {}//事件监听@Overridepublic void actionPerformed(ActionEvent actionEvent) {//没有粘贴 没有失败 游戏继续if (isStart&&isFail==false){//吃食物 蛇头坐标==食物坐标if (snakeX[0] == foodx && snakeY[0] == foody) {//长度+1length++;//分数+10score+=10;//随机分别 坐标foodx = 25 + 25 * random.nextInt(34);foody = 75 + 25 * random.nextInt(24);}//如果游戏开始状态 ,就让蛇动起来//移动 末尾坐标=末尾前一格的坐标 向前移动一格for (int i = length - 1; i > 0; i--) {snakeX[i] = snakeX[i - 1];snakeY[i] = snakeY[i - 1];}//走向if (fx.equals("R")) {snakeX[0] = snakeX[0] + 25;//边界判断if (snakeX[0] > 850) {snakeX[0] = 25;}} else if (fx.equals("L")) {snakeX[0] = snakeX[0] - 25;//边界判断if (snakeX[0] < 25) {snakeX[0] = 850;}} else if (fx.equals("U")) {snakeY[0] = snakeY[0] - 25;//边界判断if (snakeY[0] < 75) {snakeY[0] = 650;}} else if (fx.equals("D")) {snakeY[0] = snakeY[0] + 25;//边界判断if (snakeY[0] > 650) {snakeY[0] = 75;} }//失败判断,撞到自己算失败for (int i = 1; i <length ; i++) {if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){isFail=true;}}repaint();//重画 }}//键盘 监听@Overridepublic void keyPressed(KeyEvent keyEvent) {int keyCode=keyEvent.getKeyCode();//获得按键//空格if (keyCode==KeyEvent.VK_SPACE){//游戏失败 重新开始 否则暂停if(isFail){isFail=false;init();}else {isStart = !isStart;repaint();} }//小蛇移动if (keyCode==keyEvent.VK_UP){fx="U";}else if (keyCode==keyEvent.VK_DOWN){fx="D";}else if(keyCode==keyEvent.VK_LEFT){fx="L";}else if(keyCode==keyEvent.VK_RIGHT){fx="R";}}@Overridepublic void keyReleased(KeyEvent keyEvent) {} } package com.du.snake; import javax.swing.*; import java.net.URL; public class Data {//相对路径 tx.jpg//绝对路径 ///获取图片路径public static URL headerURL=Data.class.getResource("statics/header.png");public static URL upURL=Data.class.getResource("statics/up.png");public static URL downURL=Data.class.getResource("statics/down.png");public static URL leftURL=Data.class.getResource("statics/left.png");public static URL rightURL=Data.class.getResource("statics/right.png");public static URL bodyURL=Data.class.getResource("statics/body.png");public static URL foodURL=Data.class.getResource("statics/food.png");//图像图标public static ImageIcon header=new ImageIcon(headerURL);public static ImageIcon up=new ImageIcon(upURL);public static ImageIcon down=new ImageIcon(downURL);public static ImageIcon left=new ImageIcon(leftURL);public static ImageIcon right=new ImageIcon(rightURL);public static ImageIcon body=new ImageIcon(bodyURL);public static ImageIcon food=new ImageIcon(foodURL); } package com.du.snake; import javax.swing.*; //游戏主启动类 public class StarGame {public static void main(String[] args) {JFrame frame=new JFrame();frame.setBounds(10,10,900,720);//不可拖拽frame.setResizable(false);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//正常游戏界面frame.add(new GamePanel());frame.setVisible(true);} }

总结

以上是生活随笔为你收集整理的JavaGUI 简易贪吃蛇代码详解+图片素材的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。