日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java--贪吃蛇日志

發布時間:2023/12/8 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java--贪吃蛇日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

13/100發布文章 博文管理我的博客退出 Trash Temp Java – 貪吃蛇日志 歡迎使用CSDN-markdown編輯器 添加摘要 記錄我寫貪吃蛇的歷程## 標題。


從接到任務到現在已經過了一個多星期了,貪吃蛇游戲我已經實現了:蛇頭的移動以及游戲界面的構建。
思路:先做一個最簡單的版本,實現基本的功能。在這個版本里,游戲界面由JFrame窗口嵌套兩個JPanel來實現,JFrame的布局目前是采用null,等游戲的基本功能實現后會修改為合適的布局。
第一個JPanel用于構建游戲區域,采用GridLayout布局,目前已設計成2020的網格(在該JPanel中嵌套一個長度為400的JPanel數組,即小面板,小面板背景設為綠色,其長和寬為20個像素,兩兩之間的間距為1個像素,使用setSize()方法對大、小面板的尺寸進行設計+GridLayout布局 便能實現2020的網格)。同時此面板還要繼承KeyListener實現對自身的監聽。在通過對鍵盤的監聽實現蛇頭的移動時,我遇到了一個問題:當主窗口只嵌套一個面板時,蛇頭的移動可以順利實現,但是一旦主窗口嵌套了兩個面板,就監聽不了游戲界面的面板。看了看一些博客后我找到了原因:若我的監聽器用于監聽主面板,一旦主面板嵌套了一個以上的組件,我所要監聽的組件便無法聚焦(第一個JPanel,即我要監聽的面板,沒有設置獲取焦點的方法“this.setFocusable(true);”)。改良之后,我讓繼承了KeyListener的JPanel監聽自己本身,并且設置了獲取焦點的方法,這樣一來即使在主面板中嵌套了多個容器,蛇頭任然可以受鍵盤的控制而移動。以下鏈接是在解決焦點問題時找到的博客:解決焦點問題

以下為游戲界面的面板,其中蛇頭有自己的類,記錄坐標。 import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener;public class SnakePanel1 extends JPanel implements KeyListener{JPanel jps[]; //定義面板數組,充當背景。SnakeHead head; //定義蛇頭public SnakePanel1() { //構造方法this.head = new SnakeHead();this.setSize(419,419); //設置大面板尺寸this.setLayout(new GridLayout(20,20,1,1)); //設置大面板布局方式:分成20*20的區域,間距為1個像素jps = new JPanel[400]; //創建一個容量為400的JPanels數組,存放小面板for(int i=0; i<jps.length; i++) {jps[i] = new JPanel();jps[i].setBackground(Color.green); //設置小面板的顏色為綠色this.add(jps[i]); //在大面板中添加小面板}this.setFocusable(true); //獲取焦點addKeyListener(this); //監聽自己}public void setColor(Color c) {for(int i=0; i<jps.length; i++) {jps[i].setBackground(c); //設置小面板的顏色為綠色}}public void paint(Graphics g) {super.paint(g);g.setColor(Color.RED);g.fillRect(this.head.getX(), this.head.getY(), 20, 20);} @Overridepublic void keyPressed(KeyEvent e) { // TODO 自動生成的方法存根int n = e.getKeyCode();if(n == KeyEvent.VK_UP) {head.setY(head.getY()-21);}else if(n == KeyEvent.VK_DOWN) {head.setY(head.getY()+21);}else if(n == KeyEvent.VK_LEFT) {head.setX(head.getX()-21);}else if(n == KeyEvent.VK_RIGHT) {head.setX(head.getX()+21);}repaint();} @Overridepublic void keyReleased(KeyEvent arg0) {// TODO 自動生成的方法存根} @Overridepublic void keyTyped(KeyEvent arg0) {// TODO 自動生成的方法存根}}

總面板的效果圖如下:

當然,這個界面是最初版本,相對簡陋,之后會改良。
主面板嵌套的第二個面板為 按鈕&信息區域,鼠標點擊設置按鈕會彈出一個窗口,在這個窗口中用戶可以選擇游戲模式,以及自定義游戲按鍵(這功兩個能尚未實現)。

接下來我完成的任務有:

  • 實現食物類的最簡單版本:每個食物都有一定的分數,蛇吃掉一個食物,身體變長、得分。當蛇吃掉一個食物后,才在隨機位置生成另一個食物。
  • 蛇身體的增長:通過數組來實現,目前沒有思路。
  • 游戲結束:當且僅當蛇撞墻、或用戶點擊結束鍵時,游戲結束。
  • 計算游戲時間。
  • 實現 按鈕&信息區域 面板。
  • AI貪吃蛇。
  • 保存用戶的最高分以及自定義的按鍵設置。
  • 上傳最高分。
  • 總結

    以上是生活随笔為你收集整理的Java--贪吃蛇日志的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。