一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 基于Java實現簡單貪吃蛇游戲

基于Java實現簡單貪吃蛇游戲

2021-09-07 12:36小吳學JAVA Java教程

這篇文章主要為大家詳細介紹了基于Java實現簡單貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java實現簡單貪吃蛇游戲的具體代碼,供大家參考,具體內容如下

貪吃蛇小游戲制作方法

首先需要的準備有:

1、掌握Java基礎知識,即Java SE
2、了解一定的GUI知識
3、自定義的貪吃蛇圖片(可以在網上找到)

如果以上三點都沒有,也不要緊,完全可以看我之前的博文來進行學習!!??!

學習貪吃蛇的目的

一:了解GUI 對前端的知識進行了解
二:了解監聽器的作用 熟練掌握監聽器(重點)
三:為枯燥乏味的學習提高興趣(大重點?。。?/p>

貪吃蛇小游戲運行效果

基于Java實現簡單貪吃蛇游戲

基于Java實現簡單貪吃蛇游戲

設計思路:

由GameStart的啟動方法 main方法,Date存儲外部數據,GamePanel進行畫出貪吃蛇并監聽輸入

基于Java實現簡單貪吃蛇游戲

基于Java實現簡單貪吃蛇游戲

基于Java實現簡單貪吃蛇游戲

GamePanel:

  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.KeyEvent;
  6. import java.awt.event.KeyListener;
  7. import java.util.Random;
  8. public class GamePanel extends JPanel implements KeyListener,ActionListener{
  9. int lenth;
  10. int[] snakeX = new int [600]; // 蛇的坐標X
  11. int[] snakeY = new int [600];// 蛇的坐標Y
  12. String fx; // 操控上下左右
  13. boolean isStart = false;
  14. Timer timer = new Timer(100,this);
  15. // 定義一個食物
  16. int foodx;
  17. int foody;
  18. Random random = new Random();
  19. // 添加一個死亡判斷
  20. boolean isFail = false;
  21. boolean isPass = false; //游戲是否通關
  22. // 積分系統
  23. int score;
  24.  
  25. // 構造器
  26. public GamePanel(){
  27. init();
  28. // 獲取鍵盤監聽事件
  29. this.setFocusable(true);
  30. this.addKeyListener(this);
  31. timer.start(); // 讓時間動起來
  32. }
  33. // 初始化游戲
  34. public void init(){
  35. lenth = 3;
  36. snakeX[0] = 100; snakeY[0] = 100; // 頭部坐標
  37. snakeX[1] = 75; snakeY[1] = 100; // 第一個身體坐標
  38. snakeX[2] = 50; snakeY[2] = 100;// 第二個身體坐標
  39. fx = "R";
  40. foodx = 25 + 25 * random.nextInt(34);
  41. foody = 75 + 25 * random.nextInt(24);
  42. score = 0;
  43. }
  44. // 畫板 畫出界面和蛇
  45. // Graphics : 畫筆
  46.  
  47. @Override
  48. protected void paintComponent(Graphics g) {
  49. super.paintComponent(g);//清屏
  50. this.setBackground(Color.BLUE);//設置背景的顏色
  51.  
  52. //繪制頭部的廣告欄
  53. Date.header.paintIcon(this, g, 25, 11);
  54.  
  55. //繪制游戲區域
  56. g.fillRect(25, 75, 850, 600);
  57. // 畫一條靜態的小蛇
  58. if (fx.equals("R")){
  59. Date.right.paintIcon(this,g,snakeX[0],snakeY[0]);
  60. }else if (fx.equals("L")){
  61. Date.left.paintIcon(this,g,snakeX[0],snakeY[0]);
  62. }else if (fx.equals("U")){
  63. Date.up.paintIcon(this,g,snakeX[0],snakeY[0]);
  64. }else if (fx.equals("D")){
  65. Date.down.paintIcon(this,g,snakeX[0],snakeY[0]);
  66. }
  67. for (int i = 1; i < lenth; i++) {
  68. Date.body.paintIcon(this,g,snakeX[i],snakeY[i]); // 蛇的身體長度通過了lenth控制
  69. }
  70.  
  71. // 畫食物
  72. Date.food.paintIcon(this,g,foodx,foody);
  73. // 畫積分
  74. g.setColor(Color.WHITE);
  75. g.setFont(new Font("微軟雅黑",Font.BOLD,18)); // 設置字體
  76. g.drawString("您的積分是:" + score,700,50);
  77. g.drawString("您的長度是:" + lenth,700,35);
  78. // 游戲提示:是否開始
  79. if (isStart == false){
  80. // 畫一個文字String
  81. g.setColor(Color.WHITE); // 設置畫筆顏色
  82. g.setFont(new Font("微軟雅黑",Font.BOLD,40)); // 設置字體
  83. g.drawString("摁下空格開始游戲",300,300);
  84. }
  85. // 失敗提醒
  86. if (isFail){
  87. g.setColor(Color.RED);
  88. g.setFont(new Font("微軟雅黑", Font.BOLD,40));
  89. g.drawString("摁下空格開始游戲", 200, 300);
  90. }
  91. if (isPass) {
  92. g.setColor(Color.YELLOW);
  93. g.setFont(new Font("微軟雅黑", Font.BOLD, 40));//設置字體
  94. g.drawString("游戲通關!", 350, 300);
  95. }
  96. }
  97. // 接收鍵盤的輸入:監聽
  98. @Override
  99. public void keyPressed(KeyEvent e) {
  100. //鍵盤摁下 未釋放
  101. // 獲取輸入哪個鍵
  102. int keyCode = e.getKeyCode();
  103.  
  104. if (keyCode == KeyEvent.VK_SPACE){ // 如果摁下空格鍵 則改變啟動或暫停狀態
  105. if (isFail){ // 失敗 游戲重新開始
  106. isFail = false;
  107. init(); // 重新初始化游戲
  108. }else {
  109. isStart = !isStart;
  110. }
  111. repaint(); //刷新界面
  112. }
  113. // 鍵盤控制走向
  114. if(keyCode == KeyEvent.VK_LEFT){
  115. fx = "L";
  116. }else if (keyCode == KeyEvent.VK_UP){
  117. fx = "U";
  118. }else if (keyCode == KeyEvent.VK_DOWN){
  119. fx = "D";
  120. }else if (keyCode == KeyEvent.VK_RIGHT){
  121. fx = "R";
  122. }
  123. }
  124. // 定時器 :監聽時間流動 執行定時操作
  125. @Override
  126. public void actionPerformed(ActionEvent e) {
  127. //隨著分數增加,蛇的運動速度加快,難度增大,并判斷是否已通關
  128. int delay = 100 - score / 5;
  129. timer.setDelay(delay);
  130. if (delay <= 20) {
  131. isPass = true;
  132. repaint();
  133. }
  134. // 如果游戲開始狀態 并且游戲沒有結束
  135. if (isStart&&isFail==false){
  136. // 右移
  137. for (int i = lenth - 1; i > 0; i--) {
  138. snakeX[i] = snakeX[i-1];
  139. snakeY[i] = snakeY[i-1];
  140. }
  141. // 通過控制方向 讓頭部移動
  142. if (fx.equals("R")){
  143. snakeX[0] = snakeX[0] + 25;
  144. if (snakeX[0]>850){ isFail = true; }
  145. } else if (fx.equals("L")) {
  146. snakeX[0] = snakeX[0] - 25;
  147. if (snakeX[0] < 25) { isFail = true;}
  148. } else if (fx.equals("U")) {
  149. snakeY[0] = snakeY[0] - 25;
  150. if (snakeY[0] < 75) { isFail = true; }
  151. }else if (fx.equals("D")) {
  152. snakeY[0] = snakeY[0] + 25;
  153. if (snakeY[0] > 650) { isFail = true; }
  154. }
  155.  
  156. // 如果小蛇的頭于食物坐標重合
  157. if (snakeX[0]==foodx && snakeY[0]==foody){
  158. // 長度加一
  159. lenth++;
  160. snakeX[lenth - 1] = foodx - 1;
  161. snakeY[lenth - 1] = foody - 1;
  162. score = score + 10;
  163. // 重新生成食物
  164. foodx = 25 + 25 * random.nextInt(34);
  165. foody = 75 + 25 * random.nextInt(24);
  166. }
  167. // 結束判斷
  168. for (int i = 1; i < lenth; i++) {
  169. if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){
  170. isFail = true;
  171. break;
  172. }
  173. }
  174. // 刷新界面
  175. repaint();
  176. }
  177. timer.start(); //讓時間動起來
  178. }
  179.  
  180. //------------------------------------------------------以下不用:
  181. @Override
  182. public void keyTyped(KeyEvent e) {
  183. // 鍵盤摁下 彈起
  184.  
  185. }
  186. @Override
  187. public void keyReleased(KeyEvent e) {
  188. // 釋放某個鍵
  189.  
  190. }
  191. }

其中的圖片可以更換成自己喜歡的貪吃蛇,并且可以通過改變參數使貪吃蛇加快移動速度,當完成了貪吃蛇小游戲后 ,還能溫習學到的Java知識。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

原文鏈接:https://blog.csdn.net/qq_51555533/article/details/115670754

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
主站蜘蛛池模板: 五月桃花网婷婷亚洲综合 | 色视频久久 | 青青久久久国产线免观 | 高贵女王调奴vk | 国产成人精品免费大全 | 亚洲区精品久久一区二区三区 | 亚洲午夜精品久久久久久成年 | 男人在女人下面狂躁 | 九九99亚洲精品久久久久 | 日本动漫打扑克动画片樱花动漫 | α级毛片 | 国产精品免费视频一区一 | 2022最新国产在线不卡a | 含羞草传媒每天免费一次破解 | 国产成人福利美女观看视频 | 日本剧情片在线播放中文版 | 手机在线观看国产精选免费 | 日本中文字幕高清 | 男人j放进女人的p免费看视频 | 99精品免费视频 | 色777777女人色 | 青青操在线播放 | 99九九精品视频 | 日本无卡码一区二区三区 | 国产三级跑 | 欧美视频在线播放观看免费福利资源 | 99热成人精品热久久669 | 日本人与黑人做爰视频网站 | 免费看成年视频网页 | 亚洲男人天堂2023 | 拿捏小说| 极品妖艳许清赵丽全文免费阅读 | 国产午夜亚洲精品一区网站 | 俺去俺来也www色官网免费的 | 无限在线看免费视频大全 | 欧美日韩国产在线一区 | 91制片厂制作传媒网站 | 国产精品香蕉在线观看不卡 | 欧美日韩视频在线一区二区 | 国产一成人精品福利网站 | 欧美性videossex丝袜 |