中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

關(guān)于做營(yíng)銷(xiāo)型網(wǎng)站的建議互聯(lián)網(wǎng)營(yíng)銷(xiāo)師考試題庫(kù)

關(guān)于做營(yíng)銷(xiāo)型網(wǎng)站的建議,互聯(lián)網(wǎng)營(yíng)銷(xiāo)師考試題庫(kù),指紋鎖在什么網(wǎng)站做宣傳好,阿里云服務(wù)器做盜版視頻網(wǎng)站嗎簡(jiǎn)介 簡(jiǎn)易貪吃蛇,使用 javax.swing 組件構(gòu)建游戲界面,通過(guò)監(jiān)聽(tīng)鍵盤(pán)按鍵實(shí)現(xiàn)游戲操縱。 功能設(shè)計(jì) 按1 - 開(kāi)始游戲按2 - 重新開(kāi)始按3 - 暫停/繼續(xù)按Esc-退出游戲統(tǒng)計(jì)吃到的蘋(píng)果個(gè)數(shù)(得分)難度控制,得分超過(guò)閾值時(shí)難度…

簡(jiǎn)介

簡(jiǎn)易貪吃蛇,使用 javax.swing 組件構(gòu)建游戲界面,通過(guò)監(jiān)聽(tīng)鍵盤(pán)按鍵實(shí)現(xiàn)游戲操縱。

功能設(shè)計(jì)

  • 按1 - 開(kāi)始游戲
  • 按2 - 重新開(kāi)始
  • 按3 - 暫停/繼續(xù)
  • 按Esc-退出游戲
  • 統(tǒng)計(jì)吃到的蘋(píng)果個(gè)數(shù)(得分)
  • 難度控制,得分超過(guò)閾值時(shí)難度增加(蛇身移動(dòng)速度加快)

實(shí)現(xiàn)

定義 SnakeGame 類(lèi):
繼承 JPanel 類(lèi), 重寫(xiě)其由 JComponent 類(lèi)中繼承的 paintComponent 方法,在此方法中進(jìn)行圖像的繪制。
實(shí)現(xiàn) ActionListener 類(lèi), 實(shí)現(xiàn)其 actionPerformed 方法, 通過(guò)監(jiān)聽(tīng)在 SnakeGame 類(lèi)中的Timer 計(jì)時(shí)器步長(zhǎng)內(nèi)按鍵的輸入完成對(duì)圖像的操作。

public class SnakeGame extends JPanel implements ActionListener {//(timer = new Timer(delay, this)).start();public void paintComponent(Graphics g) {//在這里操作圖像的繪制,蛇身和蘋(píng)果等}public void actionPerformed(ActionEvent e) {//在這里通過(guò)對(duì)定時(shí)器的監(jiān)聽(tīng)完成對(duì)圖像的操作}}

自定義按鍵適配器, 將鍵盤(pán)輸入轉(zhuǎn)換為程序識(shí)別的方向值,同時(shí)記錄鍵盤(pán)輸入。


/*** 定義方向*/
public interface Direction {char LEFT = 'L';char RIGHT = 'R';char UP = 'U';char DOWN = 'D';}/*** 按鍵適配器,用于監(jiān)聽(tīng)輸入按鍵*/
public class MyKeyAdapter extends KeyAdapter {public void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();eventKeyCode = e.getKeyCode();if ((keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) && direction != Direction.RIGHT) {direction = Direction.LEFT;} else if ((keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) && direction != Direction.LEFT) {direction = Direction.RIGHT;} else if ((keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) && direction != Direction.DOWN) {direction = Direction.UP;} else if ((keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) && direction != Direction.UP) {direction = Direction.DOWN;}}
}

在 paintComponent 和 actionPerformed 方法中實(shí)現(xiàn)游戲邏輯。

注意:

  • 對(duì)可用像素點(diǎn)的處理:可用像素點(diǎn)個(gè)數(shù) = 屏幕長(zhǎng) * 屏幕寬 / 單位大小(蘋(píng)果大小)。
  • 對(duì)蛇身初始坐標(biāo)的處理: 存儲(chǔ)蛇身的初始坐標(biāo)須在可用像素點(diǎn)中。
  • 對(duì)蘋(píng)果坐標(biāo)的處理:需判斷新的蘋(píng)果坐標(biāo)是否在蛇身內(nèi)。
  • 對(duì)游戲是否存活的處理:蛇頭撞到蛇身或者蛇頭撞到邊緣都應(yīng)視為結(jié)束。
  • 對(duì)接收到的按鍵值的處理:除方向按鍵外,其余按鍵值使用完之后需做清除。

完整實(shí)現(xiàn)代碼如下

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Arrays;
import java.util.Random;public class SnakeGame extends JPanel implements ActionListener {public interface Direction {char LEFT = 'L';char RIGHT = 'R';char UP = 'U';char DOWN = 'D';}public interface RunStatus {char READY = '0'; // 就緒char RUN = '1'; // 運(yùn)行char OVER = '2'; // 失敗char PAUSE = '3'; // 暫停/繼續(xù)}final Random random = new Random();volatile int eventKeyCode;//記時(shí)步長(zhǎng)volatile int delay = 150;Timer timer = null;//屏幕大小static final int SCREEN_WIDTH = 600;static final int SCREEN_HEIGHT = 600;//可用像素點(diǎn)static final int UNIT_SIZE = 25;static final int GAME_UNITS = (SCREEN_WIDTH * SCREEN_HEIGHT) / UNIT_SIZE;//蛇身volatile int bodyParts;int snakeBodyX[];int snakeBodyY[];//目標(biāo)int appleX;int appleY;//得分volatile int applesEaten;volatile char direction;volatile char runStatus;SnakeGame() {this.setPreferredSize(new Dimension(SCREEN_WIDTH, SCREEN_HEIGHT));this.setFocusable(true);this.addKeyListener(new MyKeyAdapter());(timer = new Timer(delay, this)).start();init();}public void init() {bodyParts = 1;snakeBodyX = new int[GAME_UNITS];Arrays.fill(snakeBodyX, -1);snakeBodyX[0] = 0;snakeBodyY = new int[GAME_UNITS];Arrays.fill(snakeBodyY, -1);snakeBodyY[0] = 0;appleX = nextCoordinate(SCREEN_WIDTH, snakeBodyX);appleY = nextCoordinate(SCREEN_HEIGHT, snakeBodyY);applesEaten = 0;direction = Direction.RIGHT;runStatus = RunStatus.READY;timer.setDelay(delay);}public void paintComponent(Graphics g) {super.paintComponent(g);String tip = "" + applesEaten;int y = SCREEN_HEIGHT / 2 - 120;switch (runStatus) {case RunStatus.READY:drawing(g);g.setColor(Color.BLUE);g.setFont(new Font(null, Font.ITALIC, 20));g.drawString("按1-開(kāi)始游戲", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, (y = y + 40));g.drawString("按2-重新開(kāi)始", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, (y = y + 40));g.drawString("按3-暫停/繼續(xù)", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, (y = y + 40));g.drawString("按Esc-退出游戲", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, (y = y + 40));break;case RunStatus.PAUSE:drawing(g);g.setColor(Color.BLUE);g.setFont(new Font(null, Font.ITALIC, 20));y = y + 80;g.drawString("按3-繼續(xù)", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, (y = y + 40));g.drawString("按Esc-退出游戲", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, (y = y + 40));break;case RunStatus.RUN:drawing(g);g.setColor(Color.blue);g.setFont(new Font(null, Font.BOLD, 20));g.drawString(tip, (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, g.getFont().getSize());break;case RunStatus.OVER:g.setColor(Color.RED);g.setFont(new Font("Ink Free", Font.BOLD, 40));g.drawString("Game Over", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, y - 120);g.setFont(new Font(null, Font.ITALIC, 20));g.drawString("得分:" + applesEaten, (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, y - 60);g.setColor(Color.BLUE);g.drawString("按2-重新開(kāi)始", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, (y = y + 40));g.drawString("按Esc-退出游戲", (SCREEN_WIDTH - getFontMetrics(g.getFont()).stringWidth(tip)) / 2, (y = y + 40));break;default:break;}}/*** 繪制蛇身和蘋(píng)果** @param g*/public void drawing(Graphics g) {//蘋(píng)果顏色g.setColor(Color.PINK);//畫(huà)蘋(píng)果g.fillOval(appleX, appleY, UNIT_SIZE, UNIT_SIZE);//蛇身顏色g.setColor(Color.RED);//填充蛇身for (int i = 0; i < bodyParts; i++) {g.fillRect(snakeBodyX[i], snakeBodyY[i], UNIT_SIZE, UNIT_SIZE);}}/*** 執(zhí)行的動(dòng)作* 會(huì)定時(shí)執(zhí)行此方法** @param e*/public void actionPerformed(ActionEvent e) {//前置事件doSomeThing();if (runStatus == RunStatus.RUN) {move();//撞到邊緣if (snakeBodyX[0] < 0 || snakeBodyX[0] > SCREEN_WIDTH || snakeBodyY[0] < 0 || snakeBodyY[0] > SCREEN_HEIGHT) {runStatus = RunStatus.OVER;}//蛇身相撞for (int i = bodyParts; i > 0; i--) {if ((snakeBodyX[0] == snakeBodyX[i]) && (snakeBodyY[0] == snakeBodyY[i])) {runStatus = RunStatus.OVER;}}//得分if ((snakeBodyX[0] == appleX) && (snakeBodyY[0] == appleY)) {applesEaten++;bodyParts++;//重新生成蘋(píng)果appleX = nextCoordinate(SCREEN_WIDTH, snakeBodyX);appleY = nextCoordinate(SCREEN_HEIGHT, snakeBodyY);//預(yù)留難度設(shè)置的方法difficultySettings();}}//重新繪圖, 執(zhí)行 paintComponent 方法repaint();}/*** 蛇身移動(dòng)*/private void move() {for (int i = bodyParts; i > 0; i--) {snakeBodyX[i] = snakeBodyX[(i - 1)];snakeBodyY[i] = snakeBodyY[(i - 1)];}switch (direction) {case Direction.UP:snakeBodyY[0] -= UNIT_SIZE;break;case Direction.DOWN:snakeBodyY[0] += UNIT_SIZE;break;case Direction.LEFT:snakeBodyX[0] -= UNIT_SIZE;break;case Direction.RIGHT:snakeBodyX[0] += UNIT_SIZE;break;default:break;}}private void doSomeThing() {if (KeyEvent.VK_ESCAPE == eventKeyCode) {System.out.println("退出程序");System.exit(0);return;}if (KeyEvent.VK_1 == eventKeyCode) {System.out.println("開(kāi)始游戲");runStatus = RunStatus.RUN;}if (KeyEvent.VK_2 == eventKeyCode) {if (runStatus != RunStatus.RUN) {System.out.println("重新開(kāi)始");init();}runStatus = RunStatus.RUN;}if (KeyEvent.VK_3 == eventKeyCode) {if (runStatus == RunStatus.RUN) {System.out.println("暫停");runStatus = RunStatus.PAUSE;eventKeyCode = -1;return;}if (runStatus == RunStatus.PAUSE) {System.out.println("繼續(xù)");runStatus = RunStatus.RUN;eventKeyCode = -1;return;}}eventKeyCode = -1;}/*** 難度設(shè)置, 默認(rèn)得分超過(guò)16的倍數(shù)時(shí)速度提升1/4*/private void difficultySettings() {//難度增加, 速度加快if (applesEaten % 16 == 0 && applesEaten != 0) {timer.setDelay(timer.getDelay() - timer.getDelay() / 4);}}/*** 下一個(gè)蘋(píng)果坐標(biāo)** @param randomFactorint* @param arr* @return*/synchronized private int nextCoordinate(int randomFactorint, int[] arr) {int coordinate = random.nextInt(randomFactorint / UNIT_SIZE) * UNIT_SIZE;for (int i = 0; i < arr.length; i++) {if (arr[i] == -1) {break;}if (coordinate == arr[i]) {nextCoordinate(randomFactorint, arr);}}return coordinate;}/*** 按鍵適配器,用于監(jiān)聽(tīng)輸入按鍵*/public class MyKeyAdapter extends KeyAdapter {public void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();eventKeyCode = e.getKeyCode();if ((keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) && direction != Direction.RIGHT) {direction = Direction.LEFT;} else if ((keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) && direction != Direction.LEFT) {direction = Direction.RIGHT;} else if ((keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) && direction != Direction.DOWN) {direction = Direction.UP;} else if ((keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) && direction != Direction.UP) {direction = Direction.DOWN;}}}public static void main(String[] args) {JFrame frame = new JFrame();frame.setTitle("貪吃蛇");SnakeGame snake = new SnakeGame();frame.add(snake);frame.setResizable(false);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();frame.setVisible(true);}
}

效果展示

游戲啟動(dòng)

在這里插入圖片描述

游戲暫停

在這里插入圖片描述

http://www.risenshineclean.com/news/27100.html

相關(guān)文章:

  • 優(yōu)秀定制網(wǎng)站建設(shè)案例寧波的網(wǎng)絡(luò)營(yíng)銷(xiāo)服務(wù)公司
  • 建網(wǎng)站報(bào)價(jià)表百度一下首頁(yè)
  • 深圳上市公司100強(qiáng)常州seo外包
  • 做凍品海鮮比較大的網(wǎng)站有哪些深圳網(wǎng)站建設(shè)推廣方案
  • 響應(yīng)式做的好的網(wǎng)站有哪些怎么樣推廣自己的公司
  • 如何給自己網(wǎng)站做反鏈seo的中文意思是什么
  • 附近裝修公司電話號(hào)碼seo排名首頁(yè)
  • 高端裝修公司名稱seo推廣優(yōu)化培訓(xùn)
  • 代購(gòu)網(wǎng)站系統(tǒng)杭州制作公司網(wǎng)站
  • 佛山做外貿(mào)網(wǎng)站方案百度站長(zhǎng)工具網(wǎng)站提交
  • 淘寶上做網(wǎng)站排名靠譜嗎網(wǎng)站的優(yōu)化策略方案
  • 深圳的網(wǎng)站建設(shè)公司電話網(wǎng)站推廣怎樣做
  • 淘寶網(wǎng)站如何做虛擬機(jī)網(wǎng)絡(luò)軟文是什么意思
  • 校園網(wǎng)站建設(shè)的優(yōu)點(diǎn)東莞網(wǎng)站排名提升
  • 天津平臺(tái)網(wǎng)站建設(shè)哪里好山西網(wǎng)絡(luò)營(yíng)銷(xiāo)seo
  • 邢臺(tái)疫情最新進(jìn)展網(wǎng)站關(guān)鍵詞優(yōu)化報(bào)價(jià)
  • 響應(yīng)式網(wǎng)站制作視頻網(wǎng)站排名查詢工具有哪些
  • 容桂網(wǎng)站制作效率好搜索指數(shù)查詢
  • 做網(wǎng)站內(nèi)容管理器要嗎百度下載并安裝到桌面
  • 宿城區(qū)住房和城鄉(xiāng)建設(shè)局網(wǎng)站競(jìng)價(jià)推廣什么意思
  • 沈陽(yáng)公司網(wǎng)站制作廣告軟文范例大全100
  • 鹽城做企業(yè)網(wǎng)站的價(jià)格營(yíng)銷(xiāo)策略怎么寫(xiě)模板
  • 匿名網(wǎng)站建設(shè)搜索引擎推廣的方法有
  • 外貿(mào)網(wǎng)站建設(shè) 公司價(jià)格2345網(wǎng)址導(dǎo)航瀏覽器
  • wordpress購(gòu)物網(wǎng)站北京seo百科
  • 電子商務(wù)網(wǎng)站建設(shè)的市場(chǎng)分析港港網(wǎng)app下載最新版
  • 集趣網(wǎng)站怎么做兼職百度seo收錄
  • wordpress為什么自動(dòng)跳轉(zhuǎn)seo權(quán)重查詢
  • 東平企業(yè)建站公司免費(fèi)開(kāi)通網(wǎng)站
  • wordpress企業(yè)站教程武漢做seo公司