您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲的代碼怎么寫(xiě)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲的代碼怎么寫(xiě)”吧!
效果展示
一、游戲界面
二、得分情況
“貪吃蛇大作戰(zhàn)”游戲是一個(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂(lè)性強(qiáng),自從計(jì)算機(jī)實(shí)現(xiàn)以來(lái),深受廣大電腦玩家的喜愛(ài),本項(xiàng)目基于Java技術(shù),開(kāi)發(fā)了一個(gè) 操作簡(jiǎn)單、界面美觀、功能較齊全 的“貪吃蛇”游戲。通過(guò)本游戲的開(kāi)發(fā),達(dá)到學(xué)習(xí)Java技術(shù)和熟悉軟件開(kāi)發(fā)流程的目的。
本系統(tǒng)主要是完成貪吃蛇游戲的基本操作,用戶可自己練習(xí)和娛樂(lè)。需要滿足以下幾點(diǎn)要求:
(1)利用方向鍵來(lái)改變蛇的運(yùn)行方向。
(2)空格鍵暫?;蚶^續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物。
(3)吃到食物就變成新的蛇體(蛇身長(zhǎng)度變長(zhǎng),游戲繼續(xù))。
(1)繪制窗體對(duì)象。
(2)靜態(tài)UI設(shè)計(jì)(包括小蛇,食物,游戲區(qū)域和標(biāo)題區(qū)域)。
(3)使用鍵盤(pán)監(jiān)聽(tīng)事件和定時(shí)器實(shí)現(xiàn)小蛇的移動(dòng)。
(4)小蛇與食物碰撞的實(shí)現(xiàn)。
(5)定義變量存放小蛇長(zhǎng)度,遍歷數(shù)組實(shí)現(xiàn)小蛇身體的增加功能。
(6)退出條件:當(dāng)游戲積分到達(dá)指定分?jǐn)?shù),游戲退出。
主類(lèi) :Demo類(lèi)
package Demo; /** * 1.畫(huà)出窗體對(duì)象 * * * @author 青00-Java * */ public class Demo0 { }
MyPanel類(lèi) 構(gòu)造方法
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; //畫(huà)布類(lèi) public class MyPanel extends JPanel implements KeyListener,ActionListener{//繼承 private static final Component This = null; //鍵盤(pán)監(jiān)聽(tīng)交互接口 int length; int score; int[] snakeX=new int[500];//坐標(biāo) int[] snakeY=new int[500]; String fx; boolean ifStart=false; //定時(shí)器 Timer timer =new Timer(100,this); int foodx; int foody; Random random =new Random(); public MyPanel(){ init(); //添加監(jiān)聽(tīng)事件 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){//畫(huà)筆對(duì)象 super.paintComponent(g); //繪制頂部的標(biāo)題 new ImageIcon("C:/Users/Desktop/img/title2.png").paintIcon(this,g,25,11);//創(chuàng)建對(duì)象 //繪制游戲區(qū)域 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]); } //游戲的提示語(yǔ) if(ifStart==false){ g.setColor(Color.white); g.setFont(new Font("微軟雅黑",Font.BOLD,40)); g.drawString("按壓空格鍵繼續(xù)游戲", 550,500); g.drawString("無(wú)盡模式", 650,400); } //畫(huà)出食物的位置 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(); }
定時(shí)器執(zhí)行方法
@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("當(dāng)前食物坐標(biāo)("+foodx+","); System.out.print(foody+")"); System.out.println("|||當(dāng)前分?jǐn)?shù):"+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類(lèi)
package Demo; import javax.swing.JFrame; public class Ui { public static void main(String[] args){ JFrame frame=new JFrame("無(wú)盡版貪吃蛇"); frame.setSize(1500, 900); frame.setLocationRelativeTo(null);//居中顯示 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(true); frame.add(new MyPanel()); frame.setVisible(true); } }
到此,相信大家對(duì)“Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲的代碼怎么寫(xiě)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。