GUI:贪吃蛇

编程入门 行业动态 更新时间:2024-10-28 12:29:28

GUI:<a href=https://www.elefans.com/category/jswz/34/1769263.html style=贪吃蛇"/>

GUI:贪吃蛇

以上是准备工作

Data


import javax.swing.*;
import java.URL;public class Data {public static URL headerURL=Data.class.getResource("static/header.png");public static ImageIcon header =new ImageIcon(headerURL);public static URL upURL=Data.class.getResource("static/up.png");public static URL downURL=Data.class.getResource("static/down.png");public static URL leftURL=Data.class.getResource("static/left.png");public static URL rightURL=Data.class.getResource("static/right.png");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 URL bodyURL=Data.class.getResource("static/body.png");public static ImageIcon body =new ImageIcon(bodyURL);public static URL foodURL=Data.class.getResource("static/food.png");public static ImageIcon food =new ImageIcon(foodURL);
}

GamePanel


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;//蛇的长度// 蛇的x,y坐标int[]snakeX=new int[600];int[]snakeY=new int[500];String fx;//游戏当前的状态:开始,停止boolean isStart=false;//默认是不开始boolean isFail=false;//游戏结果的状态int score;int foody,foodx;Random  random=new Random();//定时器 ms为单位 1000ms=1sTimer timer=new Timer(100,this);//构造器public GamePanel(){init();//获得焦点和键盘事件this.setFocusable(true);this.addKeyListener(this);timer.start();//游戏qidong}public void init(){length=3;snakeX[0]=100;snakeY[0]=100;//脑袋坐标snakeX[1]=75;snakeY[1]=100;//第一个身体的坐标snakeX[2]=50;snakeY[2]=100;//第二个身体的坐标fx="R";//inti向右//随机分布foodfoodx=25+25*random.nextInt(34);foody=75+25*random.nextInt(24);score=0;}@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);//清屏//绘制静态的面板this.setBackground(Color.WHITE);Data.header.paintIcon(this,g,25,11);//画头部广告g.fillRect(25,75,850,600);//默认的游戏界面//画积分g.setColor(Color.WHITE);g.setFont(new Font("微软雅黑",Font.BOLD,18));g.drawString("长度 "+length,750,30);g.drawString("积分 "+score,750,55);//画食物Data.food.paintIcon(this,g,foodx,foody);//把小蛇画上去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]);//蛇头初始化向L}else if(fx.equals("U")){Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向UP}else if(fx.equals("D")){Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向down}for(int i=1;i<length;i++){Data.body.paintIcon(this,g,snakeX[i],snakeY[i] );}//游戏状态if(isStart==false){g.setColor(Color.white);g.setFont(new Font("微软雅黑",Font.BOLD,30));g.drawString("Pressed the Blank Key Begin Game",300,300);}//游戏结束if(isFail){g.setColor(Color.RED);g.setFont(new Font("微软雅黑",Font.BOLD,30));g.drawString("The Game Is Failed",250,300);}}@Overridepublic void keyPressed(KeyEvent e) {int keyCode=e.getKeyCode();//获得键盘参数//空格开始if(keyCode==KeyEvent.VK_SPACE){if(isFail){isFail=false;}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";}//走向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;}//边界判断}}@Overridepublic void actionPerformed(ActionEvent e) {if(isStart&&isFail==false){for (int i = length-1; i >0 ; i--) {snakeX[i]=snakeX[i-1];snakeY[i]=snakeY[i-1];}if(snakeX[0]==foodx&&snakeY[0]==foody){length++;score+=10;
//重置食物foodx=25+25*random.nextInt(34);foody=75+25*random.nextInt(24);}//头部走向if(fx.equals("R")){snakeX[0] = snakeX[0]+25;   //头部右移25个单位(即一格)if(snakeX[0]>850){  //边界判断:如果蛇右移到了边界,则回到左边snakeX[0] = 25;}}else if(fx.equals("L")){snakeX[0] = snakeX[0]-25;           //头部左移25个单位(即一格)if(snakeX[0]<25){snakeX[0] = 850;}  //边界判断}else if(fx.equals("U")){snakeY[0] = snakeY[0]-25;           //向上移动应该是-25if(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;init();}}repaint();}timer.start();}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}
}

StartGame


import javax.swing.*;public class StartGame {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);}
}

更多推荐

GUI:贪吃蛇

本文发布于:2023-11-15 15:48:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1602242.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:贪吃蛇   GUI

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!