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

歡迎訪問 生活随笔!

生活随笔

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

java

JavaFX:太空侵略者在175 LOC以下

發布時間:2023/12/3 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaFX:太空侵略者在175 LOC以下 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用當前版本的API,我對太空侵略者的評價不到175個LOC。 我的API中有很多“功能接口”,可以使用JavaFX 8(例如SpriteProvider和CollisionHandler)將其轉換為Lambda表達式。 這將使代碼更好,更短。 我可能還可以通過捆綁資源(例如TileSets)并創建更多工廠和構建器(SpriteBuilder)來減少行數。 但是我越來越接近我想要的……

package de.eppleton.fx2d.samples.spaceinvaders;import de.eppleton.fx2d.collision.*; import de.eppleton.fx2d.*; import de.eppleton.fx2d.action.*; import de.eppleton.fx2d.tileengine.*; import java.util.Collection; import java.util.logging.*; import javafx.beans.property.DoubleProperty; import javafx.beans.property.SimpleDoubleProperty; import javafx.scene.canvas.*; import javafx.scene.input.*; import javafx.scene.media.*; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javax.xml.bind.JAXBException; import org.openide.util.Lookup; import org.openide.util.lookup.Lookups;public class SpaceInvaders extends Game {Points TEN = new Points(10);Points TWENTY = new Points(30);Points THIRTY = new Points(40);DoubleProperty invaderXVelocity = new SimpleDoubleProperty(0.3);AudioClip shootSound = new AudioClip(SpaceInvaders.class.getResource('/assets/sound/shoot.wav').toString());AudioClip invaderKilledSound = new AudioClip(SpaceInvaders.class.getResource('/assets/sound/invaderkilled.wav').toString());MediaPlayer mediaPlayer = new MediaPlayer(new Media(SpaceInvaders.class.getResource('/assets/sound/invader_loop1.mp3').toString()));int score = 0;String message;int[][] enemies = new int[][]{{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30},{20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20},{20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20},{10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},{10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}};@Overrideprotected void initGame() {final GameCanvas canvas = getCanvas();try {TileSet invaders = TileMapReader.readSet('/assets/graphics/invaders1.tsx');TileSet playerTiles = TileMapReader.readSet('/assets/graphics/player.tsx');final TileSetAnimation animation30 = new TileSetAnimation(invaders, new int[]{0, 1}, 2);final TileSetAnimation animation10 = new TileSetAnimation(invaders, new int[]{4, 5}, 2);final TileSetAnimation animation20 = new TileSetAnimation(invaders, new int[]{2, 3}, 2);final TileSetAnimation playerAnimation = new TileSetAnimation(playerTiles, new int[]{0}, 100_000);for (int i = 0; i < enemies.length; i++) {int[] is = enemies[i];for (int j = 0; j < is.length; j++) {Points points = is[j] == 30 ? THIRTY : is[j] == 20 ? TWENTY : TEN;Sprite sprite = new Sprite(canvas, '' + ((j * 11) + i), 50 + (40 * j), 140 + (40 * i), 30, 20, Lookups.fixed(points));sprite.setAnimation(is[j] == 30 ? animation30 : is[j] == 20 ? animation20 : animation10);sprite.setVelocityXProperty(invaderXVelocity);}}Sprite player = new Sprite(canvas, playerAnimation, 'Player', 350, 620, 40, 30, Lookup.EMPTY);player.setAnimation(playerAnimation);player.addAction(KeyCode.LEFT, ActionFactory.createMoveAction(playerAnimation, 'left', -4, 0, 0, 0));player.addAction(KeyCode.RIGHT, ActionFactory.createMoveAction(playerAnimation, 'right', 4, 0, 0, 0));player.addAction(KeyCode.UP, new ShootAction(playerAnimation, 'fire', new BulletProvider(), new HitHandler(), shootSound));} catch (JAXBException ex) {Logger.getLogger(SpaceInvaders.class.getName()).log(Level.SEVERE, null, ex);}canvas.addLayer(new Background());canvas.addBehaviour(new MoveInvadersBehavior());mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);mediaPlayer.play();canvas.addLayer(new SpriteLayer());canvas.start();}@Overrideprotected double getViewPortWidth() {return 700;}@Overrideprotected double getViewPortHeight() {return 700;}public static void main(String[] args) {launch(args);}private class Points {int points;public Points(int points) {this.points = points;}public int getPoints() {return points;}}static class BulletProvider implements SpriteProvider {@Overridepublic Sprite getSprite(GameCanvas parent, double x, double y) {return new Sprite(parent, 'bullet', x, y + 10, 10, 20, Lookup.EMPTY);}}class HitHandler implements CollisionHandler {@Overridepublic void handleCollision(Collision collision) {Points points = collision.getSpriteTwo().getLookup().lookup(Points.class);if (points != null) {score += points.getPoints();invaderKilledSound.play();collision.getSpriteOne().remove();collision.getSpriteTwo().remove();}}}class MoveInvadersBehavior extends Behavior {@Overridepublic boolean perform(GameCanvas canvas, long nanos) {Collection<Sprite> sprites = canvas.getSprites();boolean stop = false;boolean win = true;for (Sprite sprite1 : sprites) {if (sprite1.getLookup().lookup(Points.class) != null) {win = false;if (sprite1.getX() > 650 || sprite1.getX() < 50) {invaderXVelocity.set(-invaderXVelocity.doubleValue() * (stop ? 0 : 1.3));if (sprite1.getY() >= 600) {message = 'Game Over!';stop = true;mediaPlayer.stop();}for (Sprite sprite2 : sprites) {if (sprite2.getLookup().lookup(Points.class) != null) {sprite2.setY(sprite2.getY() + (stop ? 0 : 20));}}break;}}}if (win) {message = 'You win!';canvas.stop();mediaPlayer.stop();}return true;}}class Background extends Layer { @Overridepublic void draw(GraphicsContext graphicsContext, double x, double y, double width, double height) {graphicsContext.setFill(Color.BLACK);graphicsContext.fillRect(0, 0, width, height);graphicsContext.setFill(Color.WHITE);graphicsContext.setFont(Font.font('OCR A Std', 20));graphicsContext.fillText('SCORE<1> HI-SCORE SCORE<2>', 30, 30);graphicsContext.fillText('' + score + ' 9990 ', 30, 60);graphicsContext.fillText(message, 300, 400);graphicsContext.fillText('' + 3 + ' CREDIT ' + 1, 30, 680);graphicsContext.setFill(Color.GREEN);graphicsContext.fillRect(30, 650, 640, 4);}} }

這是游戲的視頻:


參考: JavaFX:我們的JCG合作伙伴 Toni Epple在Eppleton博客上以不到175 LOC的價格入侵了太空 。

翻譯自: https://www.javacodegeeks.com/2013/02/javafx-space-invaders-in-less-than-175-loc.html

總結

以上是生活随笔為你收集整理的JavaFX:太空侵略者在175 LOC以下的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91挑色| 日韩av色图 | 99在线观看免费 | 亚洲啪啪网 | 国产在线视频卡一卡二 | ass日本 | 久久亚洲精少妇毛片午夜无码 | 亚洲国产精品成人无久久精品 | 国产精品无码电影 | 亚洲激情网 | 五月天色网站 | 免费av一级片 | 福利电影一区二区 | 中文字幕人妻一区二区三区在线视频 | 制服丝袜av在线播放 | 9久久精品 | 一级黄色性生活视频 | 亚洲v国产v欧美v久久久久久 | 久久国产精品99久久人人澡 | 亚洲成人午夜在线 | 欧美在线精品一区二区三区 | 亚洲视频 中文字幕 | 男女aa视频 | 久久免费视频网站 | 中文字幕在线免费看线人 | 91伊人| 中文字幕在线播放av | 免费看污片的网站 | 少妇特黄a一区二区三区 | 人妻换人妻仑乱 | 精品一区二区精品 | 正在播放国产精品 | 日韩一区二区av | 一卡二卡三卡四卡五卡 | 黄免费在线观看 | 欧美日韩中日 | 精品成人国产 | 亚洲精品无码永久在线观看 | 亚洲一级黄色 | 成人伊人 | 一区二区国产精品视频 | 91在线观看网站 | 国模叶桐尿喷337p人体 | 福利视频免费 | 亚洲色图影院 | 色xxxx| 国产在线一级片 | 91视频三区 | 97一级片| 亚洲欧美日韩成人 | 免费成人在线看 | 国产剧情一区二区 | 亚洲热久久 | 热99在线观看 | 中文字幕免费高清在线观看 | 99久久精 | 欧美色图12p| 国产91边播边对白在线 | 成人导航网站 | 亚洲综合网在线 | 国产一区二区 | 成人你懂的 | 国产视频一二三区 | 国产一区色 | 日韩久久久久久久久 | 亚洲天堂一区二区三区四区 | 91视频专区 | 神马伦理视频 | 久久人妻精品白浆国产 | 一级片久久久久 | 黄色网页网站 | 奇米狠狠 | 高清视频在线播放 | 日韩免费网站 | 国产香蕉视频在线 | 欧美视频免费看欧美视频 | 黄网站在线观 | 2019最新中文字幕 | 少妇太爽了在线观看 | 国产精品人成在线观看免费 | 国产精品久久久久久久久久久久久久久久久久 | 私拍在线 | 精品国产三级片在线观看 | 亚洲国产精品无码久久 | 性大片潘金莲裸体 | 国内毛片毛片 | 美女三级网站 | 日韩高清二区 | 日韩第四页 | 成人午夜av在线 | 69福利区 | 国产男女猛烈无遮挡免费观看网站 | 麻豆人妻少妇精品无码专区 | 色网站视频 | 国产男女猛烈无遮挡a片漫画 | 99久久99久久免费精品蜜臀 | 色窝av| 亚洲欧美日本韩国 | 天天躁日日躁狠狠躁av |