最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java使用GUI實現(xiàn)貪吃蛇游戲

 更新時間:2022年04月02日 08:29:34   作者:.墨跡.  
這篇文章主要為大家詳細介紹了java使用GUI實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java使用GUI實現(xiàn)貪吃蛇游戲的具體代碼,供大家參考,具體內(nèi)容如下

整個代碼分為三部分

1.游戲開始界面
2.data基本圖片的添加
3.面板,將小蛇畫到面板上

這是游戲完整界面

1. 游戲開始界面

public class StartGame {
? ? public static void main(String[] args) {
? ? ? ? JFrame frame = new JFrame();

? ? ? ? frame.setBounds(10,10,900,720);
? ? ? ? frame.setResizable(false);

? ? ? ? frame.add(new GamePanel());
? ? ? ? frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
? ? ? ? frame.setVisible(true);

? ? }
}

2.data數(shù)據(jù)

public class Data {

? ? private static URL headerURL=Data.class.getResource("statics/header.png");
? ? public static ImageIcon header=new ImageIcon(headerURL);
? ? private static URL upURL=Data.class.getResource("statics/up.png");
? ? private static URL downURL=Data.class.getResource("statics/down.png");
? ? private static URL leftURL=Data.class.getResource("statics/left.png");
? ? private static URL rightURL=Data.class.getResource("statics/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);

? ? private static URL bodyURL=Data.class.getResource("statics/body.png");
? ? public static ImageIcon body=new ImageIcon(bodyURL);

? ? private static URL foodURL=Data.class.getResource("statics/food.png");
? ? public static ImageIcon food=new ImageIcon(foodURL);

}

3.面板繪制

public class GamePanel extends JPanel ?implements KeyListener, ActionListener {

? ? int length;
? ? int [] snakeX=new int[600];
? ? int [] snakeY=new int[500];
? ? String fx;

? ? int foodx;
? ? int foody;
? ? Random random=new Random();

? ? int score;


? ? boolean isStart=false;
? ? boolean isFail=false;

? ? Timer timer=new Timer(75,this);

? ? public GamePanel() {
? ? ? ? init();
? ? ? ? this.setFocusable(true);
? ? ? ? this.addKeyListener(this);
? ? ? ? timer.start();
? ? }

? ? 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";

? ? ? ? foodx=25+25*random.nextInt(34);
? ? ? ? foody=75+25*random.nextInt(24);
? ? ? ? score=0;
? ? }

? ? @Override
? ? protected 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("分數(shù)"+score,750,50);

? ? ? ? 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]);
? ? ? ? }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]);
? ? ? ? }

? ? ? ? //Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);
? ? ? ? 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,40));
? ? ? ? ? ? g.drawString("想玩就嗯空格",300,300);
? ? ? ? }

? ? ? ? if(isFail){
? ? ? ? ? ? g.setColor(Color.red);
? ? ? ? ? ? g.setFont(new Font("微軟雅黑",Font.BOLD,40));
? ? ? ? ? ? g.drawString("人生不能重來,請走好每一步",150,350);
? ? ? ? }
? ? }

? ? @Override
? ? public void keyPressed(KeyEvent e) {
? ? ? ? int keyCode = e.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";
? ? ? ? }

? ? }
? ? @Override
? ? public void actionPerformed(ActionEvent e) {
? ? ? ? if(isStart&&isFail==false){

? ? ? ? ? ? if(foodx==snakeX[0]&&foody==snakeY[0]){
? ? ? ? ? ? ? ? length++;

? ? ? ? ? ? ? ? score+=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(snakeY[0]==snakeY[i]&&snakeX[0]==snakeX[i]){
? ? ? ? ? ? ? ? ? ? isFail=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

? ? ? ? ? ? repaint();
? ? ? ? }
? ? ? ? timer.start();
? ? }


? ? @Override
? ? public void keyTyped(KeyEvent e) {

? ? }
? ? @Override
? ? public void keyReleased(KeyEvent e) {

? ? }


}

小蛇的各個部位參數(shù)如下

頭部尺寸

身體尺寸

食物尺寸

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot使用AOP實現(xiàn)統(tǒng)一角色權限校驗

    SpringBoot使用AOP實現(xiàn)統(tǒng)一角色權限校驗

    這篇文章主要介紹了SpringBoot如何使用AOP實現(xiàn) 統(tǒng)一角色權限校驗,文中有詳細的代碼示例講解和操作流程,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • Java中抽象類和接口介紹

    Java中抽象類和接口介紹

    大家好,本篇文章主要講的是Java中抽象類和接口介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java Metrics系統(tǒng)性能監(jiān)控工具的使用詳解

    Java Metrics系統(tǒng)性能監(jiān)控工具的使用詳解

    Metrics是一個Java庫,可以對系統(tǒng)進行監(jiān)控,統(tǒng)計一些系統(tǒng)的性能指標。本文就來和大家詳細聊聊這個工具的具體使用,希望對大家有所幫助
    2022-11-11
  • springboot+vue實現(xiàn)登錄功能

    springboot+vue實現(xiàn)登錄功能

    這篇文章主要為大家詳細介紹了springboot+vue實現(xiàn)登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Spring Mybatis 分頁插件使用教程

    Spring Mybatis 分頁插件使用教程

    這篇文章主要介紹了Spring Mybatis分頁插件使用教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 混亂的Java日志體系及集成jar包梳理分析

    混亂的Java日志體系及集成jar包梳理分析

    這篇文章主要詳細的為大家梳理分析了剪不斷理還亂的Java日志體系,以及日志系統(tǒng)涉及到的繁雜的各種集成?jar?包,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • SpringBoot整合Mybatis實現(xiàn)CRUD

    SpringBoot整合Mybatis實現(xiàn)CRUD

    這篇文章主要介紹了SpringBoot整合Mybatis實現(xiàn)CRUD的相關知識,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • 如何使用RabbitMQ實現(xiàn)異步秒殺

    如何使用RabbitMQ實現(xiàn)異步秒殺

    這篇文章主要介紹了如何使用RabbitMQ實現(xiàn)異步秒殺,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04
  • mybatis向數(shù)據(jù)庫里插入記錄后自動返回記錄ID問題

    mybatis向數(shù)據(jù)庫里插入記錄后自動返回記錄ID問題

    本文介紹了在接手項目時,對一個業(yè)務處理邏輯進行重構和性能優(yōu)化的經(jīng)歷,作者提到,性能問題可能是導致bug的一個重要原因,作者提到,在以前的.NET項目中,插入記錄后系統(tǒng)會自動刷新實體類,為其中的主鍵ID賦值,而SpringBoot項目mybatis也可以通過指定主鍵來優(yōu)化代碼
    2025-01-01
  • Java線程安全問題的解決方案

    Java線程安全問題的解決方案

    這篇文章主要介紹了Java線程安全問題的解決方案,文章關于安全的問題的解決方案本文主要分享了三種方法,使用線程安全類,比如?AtomicInteger,使用線程本地變量?ThreadLocal,加鎖排隊執(zhí)行,三種方法的使用場景及區(qū)別需要的小伙伴可以參考一下
    2022-05-05

最新評論

宁明县| 平武县| 宽城| 鲁甸县| 宁强县| 资讯 | 天等县| 同心县| 基隆市| 文登市| 安福县| 疏勒县| 吴堡县| 建阳市| 六枝特区| 修武县| 兴化市| 运城市| 象州县| 永靖县| 永安市| 青川县| 浪卡子县| 修武县| 肥乡县| 婺源县| 玉屏| 石城县| 盐池县| 台南县| 安仁县| 南开区| 武陟县| 定陶县| 德格县| 乌什县| 宿州市| 垣曲县| 墨玉县| 松潘县| 嘉兴市|