<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
大家好,今天嘗試用swing技術寫一個貪吃蛇大作戰小遊戲,供大家參考。
效果展示
一、遊戲介面
二、得分情況
“貪吃蛇大作戰”遊戲是一個經典的遊戲,它因操作簡單、娛樂性強,自從計算機實現以來,深受廣大電腦玩家的喜愛,本專案基於Java技術,開發了一個 操作簡單、介面美觀、功能較齊全 的“貪吃蛇”遊戲。通過本遊戲的開發,達到學習Java技術和熟悉軟體開發流程的目的。
本系統主要是完成貪吃蛇遊戲的基本操作,使用者可自己練習和娛樂。需要滿足以下幾點要求:
(1)利用方向鍵來改變蛇的執行方向。
(2)空格鍵暫停或繼續遊戲,並在隨機的地方產生食物。
(3)吃到食物就變成新的蛇體(蛇身長度變長,遊戲繼續)。
(1)繪製表單物件。
(2)靜態UI設計(包括小蛇,食物,遊戲區域和標題區域)。
(3)使用鍵盤監聽事件和定時器實現小蛇的移動。
(4)小蛇與食物碰撞的實現。
(5)定義變數存放小蛇長度,遍歷陣列實現小蛇身體的增加功能。
(6)退出條件:當遊戲積分到達指定分數,遊戲退出。
主類 :Demo類
package Demo; /** * 1.畫出表單物件 * * * @author 青00-Java * */ public class Demo0 { }
MyPanel類 構造方法
package Demo; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JPanel; import javax.swing.Timer; //畫布類 public class MyPanel extends JPanel implements KeyListener,ActionListener{//繼承 private static final Component This = null; //鍵盤監聽互動介面 int length; int score; int[] snakeX=new int[500];//座標 int[] snakeY=new int[500]; String fx; boolean ifStart=false; //定時器 Timer timer =new Timer(100,this); int foodx; int foody; Random random =new Random(); public MyPanel(){ init(); //新增監聽事件 this.setFocusable(true); this.addKeyListener(this); score=0; }
初始化方法
public void init(){ length=3; fx="r"; //初始化小蛇的位置 snakeX[0]=100; snakeY[0]=150; snakeX[1]=75; snakeY[1]=150; snakeX[2]=50; snakeY[2]=150; foodx=25+25*random.nextInt(57); foody=125+25*random.nextInt(27); System.out.println(foodx); System.out.println(foody); timer.start(); }
繪製方法
@Override protected void paintComponent(Graphics g){//畫筆物件 super.paintComponent(g); //繪製頂部的標題 new ImageIcon("C:/Users/Desktop/img/title2.png").paintIcon(this,g,25,11);//建立物件 //繪製遊戲區域 g.fillRect(25, 125, 1450, 700); //繪製小蛇 //蛇頭 new ImageIcon("C:/Users/Desktop/img/l.png").paintIcon(this, g, snakeX[0], snakeY[0]); //蛇身 for(int i=1;i<length;i++){ new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(This, g, snakeX[i], snakeY[i]); } //遊戲的提示語 if(ifStart==false){ g.setColor(Color.white); g.setFont(new Font("微軟雅黑",Font.BOLD,40)); g.drawString("按壓空格鍵繼續遊戲", 550,500); g.drawString("無盡模式", 650,400); } //畫出食物的位置 new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(this, g, foodx, foody); } @Override//按壓 public void keyPressed(KeyEvent e) { int keyCode=e.getKeyCode(); if(keyCode==KeyEvent.VK_SPACE){ ifStart=!ifStart; } if(ifStart==true){ if(keyCode==KeyEvent.VK_LEFT&&fx!="r"){ fx="l"; }else if(keyCode==KeyEvent.VK_RIGHT&&fx!="l"){ fx="r"; }else if(keyCode==KeyEvent.VK_UP&&fx!="d"){ fx="u"; }else if(keyCode==KeyEvent.VK_DOWN&&fx!="u"){ fx="d"; } } repaint(); }
定時器執行方法
@Override public void actionPerformed(ActionEvent e) { //改變蛇的位置 if(ifStart==true){ for(int i=length-1;i>0;i--){ snakeX[i]=snakeX[i-1]; snakeY[i]=snakeY[i-1]; } if(fx.equals("l")){ snakeX[0]=snakeX[0]-25; if(snakeX[0]<25){ snakeX[0]=1450; } }else if(fx.equals("r")){ snakeX[0]=snakeX[0]+25; if(snakeX[0]>1450){ snakeX[0]=25; } }else if(fx.equals("u")){ snakeY[0]=snakeY[0]-25; if(snakeY[0]<120){ snakeY[0]=800; } }else if(fx.equals("d")){ snakeY[0]=snakeY[0]+25; if(snakeY[0]>800){ snakeY[0]=120; } } //判斷是否吃了食物 if(snakeX[0]==foodx&&snakeY[0]==foody){ length++; score++; if(score==100){ ifStart=!ifStart; } foodx=25+25*random.nextInt(57); foody=125+25*random.nextInt(27); System.out.print("當前食物座標("+foodx+","); System.out.print(foody+")"); System.out.println("|||當前分數:"+score+" "); } repaint(); } timer.start(); } @Override public void keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub } @Override public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub } }
框架Ui類
package Demo; import javax.swing.JFrame; public class Ui { public static void main(String[] args){ JFrame frame=new JFrame("無盡版貪吃蛇"); frame.setSize(1500, 900); frame.setLocationRelativeTo(null);//居中顯示 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(true); frame.add(new MyPanel()); frame.setVisible(true); } }
本程式用於初學者學習,共封裝三個類,分別是Demo類,MyPanel類,框架Ui類,結構簡單,所有方法均在MyPanel類中實現。
本遊戲的設計思路類似於遊戲“貪吃蛇大作戰”,程式在一些功能的實現上還存在許多不足,但該專案的實現對Java新手的實戰能力有很大的提升。
在使用Java編寫該專案時遇到了很多問題,在解決問題時,可以對java的物件導向程式設計有更加深入的理解和認識。
本專案在一定程度上還有缺陷,僅用於初學者學習,歡迎各位指正。
到此這篇關於Java實現貪吃蛇大作戰小遊戲的範例程式碼的文章就介紹到這了,更多相關Java 貪吃蛇內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45