Java版推箱子(搬箱子)遊戲開發入門示例及原始碼
推(搬)箱子,又名Sokoban,倉庫番等,是一款堪稱古玩級的電腦遊戲。提起它,筆者相信沒什麼人會感覺到陌生,更沒什麼生物會連聽都沒聽說過。它的發展歷史之久遠,甚至超越了俄羅斯方塊(1988年電腦遊戲化)。這款遊戲最初起源於日本,是個很難爭辯的事實(我知道有人反對,但筆者確實找不到什麼有力的反對證據)。他由日本人(哎……)今川巨集行在1981年創立遊戲規則,並於1982年經日本軟體公司Thinking Rabbit正式釋出。比較遺憾的是,早期的推箱子並沒有PC版,筆者在網路上搜索到的老版遊戲也大多為90年以前的Mac OS下程式。但說起真正令推箱子風靡於PC機的,卻該感謝我們的臺灣同胞李果兆先生。是他在1994年開發的倉庫世家,才真正令推箱子游戲在世界各地大受推崇;仔細說來,推箱子這款小遊戲之所以能有今時今日的聲望與地位,固然有今川巨集行的開創之功,但若說到貢獻最大,承前啟後的,則非中國臺灣的李果兆先生莫屬。推箱子游戲的規則非常簡單,就是用盡量少的推動或移動把所有箱子都推到目標點上。箱子只能推動而不能拉動;一次只能推動一個箱子。然而,儘管它的規則是很簡單的,但對於不同難度的關卡,所需要的腦力卻是截然不同的,有些關卡可能會花費您幾個小時、幾天甚至幾個月的時間,也正是這種簡單性和複雜性的結合,最終令推箱子類遊戲風靡全球!本回筆者在Blog中提供的,就是一款Java版推箱子游戲的簡單實現。筆者設定[上、下、左、右]為方向控制 ,[S]鍵為後退到上一步操作,[ESC]為重新開始當前關卡,點選鍵盤上對應關卡的數字鍵可以直接選關,需要注意的是筆者以HP限制了角色的移動次數,HP歸0則挑戰失敗。目前版本僅提供有5關,有需要者可參考同類遊戲自行擴充,遊戲原始碼在jar內。
遊戲截圖:
核心程式碼:
Sokoban.java
[java] view plain copy print?- package org.loon.game.simple.sokoban.control;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.event.KeyEvent;
- import org.loon.game.simple.sokoban.GraphicsUtils;
- import org.loon.game.simple.sokoban.LSystem;
- import org.loon.game.simple.sokoban.SimpleControl;
- /**
- * Copyright 2008 - 2009
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- *
- * @project loonframework
- * @author chenpeng
- * @email <a title="" href="http://hi.baidu.com/ceponline" mce_href="http://hi.baidu.com/ceponline" target="_blank">ceponline</a>@yahoo.com.cn
- * @version 0.1
- */
- publicclass Sokoban extends SimpleControl {
- /**
- *
- */
- privatestaticfinallong serialVersionUID = 1L;
- private Image backImage = GraphicsUtils.loadImage("image/back1.jpg");
- private Image screenImage;
- // 牆壁圖
- private Image floorImage[];
- // 角色精靈
- private RpgSprite sprite;
- // 窗體顯示圖
- private Graphics screen;
- private String message = "按下 [Enter] 開始進行遊戲";
- private String m_stageName[] = { "關卡1", "關卡2", "關卡3", "關卡4", "關卡5", "關卡6",
- "關卡7" };
- privateint CS = 32;
- privateint maxX, maxY, comps;
- privateint stageNo;
- privateboolean complete[];
- privateboolean boxMove[][];
- privateint hp[];
- privateint stageStates[][][];
- privateint ons[][];
- privateint role[];
- privateint rolex[];
- privateint roley[];
- privateint mapx[];
- privateint mapy[];
- privateint sleep = 0;
- privateboolean succeed = false;
- private Stage stage;
- public Sokoban(Stage stage) {
- this.stage = stage;
- this.floorImage = new Image[4];
- this.sprite = new RpgSprite("image/role1.gif");
- this.maxX = 16;
- this.maxY = 13;
- this.comps = 0;
- this.complete = newboolean[stage.getMaxStageNo()];
- this.boxMove = newboolean[stage.getMaxStageNo()][1500];
- this.ons = newint[stage.getMaxStageNo()][1500];
- this.hp = newint[stage.getMaxStageNo()];
- this.stageStates = newint[stage.getMaxStageNo()][maxY][maxX];
- this.role = newint[stage.getMaxStageNo()];
- this.rolex = newint[stage.getMaxStageNo()];
- this.roley = newint[stage.getMaxStageNo()];
- this.mapx = newint[stage.getMaxStageNo()];
- this.mapy = newint[stage.getMaxStageNo()];
- for (int j = 0; j < 4; j++) {
- floorImage[j] = GraphicsUtils.loadImage("image/back" + (j + 1)
- + ".gif");
- }
- this.screenImage = GraphicsUtils.createImage(CS * maxX + CS, CS
- * (maxY + 1) + 32, true);
- this.screen = screenImage.getGraphics();
- for (stageNo = 0; stageNo < stage.getMaxStageNo(); stageNo++) {
- this.setupStage();
- }
- this.stageNo = -1;
- // 開場介面
- this.openDraw();
- }
- /**
- * 重新整理關卡
- *
- */
- publicsynchronizedvoid reset(int stageNo) {
- this.stageNo = stageNo;
- this.stage.getMode()[stageNo] = 1;
- this.message = null;
- // 設定關卡
- this.setupStage();
- // 重繪背景
- this.background();
- // 重繪遊戲螢幕
- this.drawScreen();
- }
- /**
- * 繪製螢幕背景
- *
- */
- publicsynchronizedvoid background() {
- screen.drawImage(backImage, 0, 0, null);
- screen.setColor(Color.black);
- screen.fillRect(0, LSystem.HEIGHT - 40, LSystem.WIDTH, 40);
- }
- /**
- * 繪製螢幕影象
- *
- */
- publicsynchronizedvoid drawScreen() {
- if (stageNo >= stage.getMaxStageNo()) {
- stageNo = 0;
- }
- for (int i = 0; i < mapy[stageNo]; i++) {
- for (int j = 0; j < mapx[stageNo];) {
- switch (stageStates[stageNo][i][j]) {
- case2:
- case3:
- case4:
- case5:
- screen.drawImage(floorImage[1], moveX(j), moveY(i), null);
- default:
- j++;
- break;
- }
- }
- }
- for (int n = 0; n < mapy[stageNo]; n++) {
- for (int l = 0; l < mapx[stageNo]; l++)
- switch (stageStates[stageNo][n][l]) {
- case1:
- screen.drawImage(floorImage[0], moveX(l), moveY(n), null);
- screen.setColor(new Color(32, 0, 0));
- screen.drawLine(moveX(l), moveY(n + 1), moveX(l) + CS - 1,
- moveY(n + 1));
- if (l == 0 || l > 0 && stageStates[stageNo][n][l - 1] != 1) {
- screen.setColor(new Color(160, 128, 96));
- screen.drawLine(moveX(l), moveY(n) + 1, moveX(l),
- moveY(n) + CS - 2);
- }
- if (l == mapx[stageNo] - 1 || l < mapx[stageNo] - 1
- && stageStates[stageNo][n][l + 1] != 1) {
- screen.setColor(new Color(72, 64, 64));
- screen.drawLine(moveX(l) + CS - 1, moveY(n), moveX(l)
- + CS - 1, moveY(n) + CS - 2);
- }
- break;
- case2:
- case3:
- case4:
- switch (stageStates[stageNo][n][l]) {
- default:
- break;
- case2:
- case3:
- screen.drawImage(floorImage[3], moveX(l), moveY(n),
- null);
- break;
- case4:
- break;
- }
- if (stageStates[stageNo][n][l] != 3)
- screen.drawImage(floorImage[2], moveX(l), moveY(n),
- null);
- break;
- default:
- break;
- }
- }
- // System.out.println(role[stageNo]);
- screen.drawImage(sprite.getOnlyMove(role[stageNo]),
- moveX(rolex[stageNo]), moveY(roley[stageNo]), null);
- if (stageStates[stageNo][roley[stageNo]][rolex[stageNo]] == 4) {
- screen.drawImage(floorImage[2], moveX(rolex[stageNo]),
- moveY(roley[stageNo]), null);
- }
- setupDisplay();
- }
- /**
- * 定位到實際的X座標
- *
- * @param i
- * @return
- */
- publicint moveX(int i) {
- return (CS * ((maxX - mapx[stageNo]) + 1)) / 2 + CS * i;
- }
- /**
- * 定位到實際的Y座標
- *
- * @param i
- * @return
- */
- publicint moveY(int i) {
- return (CS * ((maxY - mapy[stageNo]) + 1)) / 2 + CS * i;
- }
- /**
- * 執行操作
- *
- */
- publicsynchronizedvoid execute() {
- boolean flag = true;
- for (int i = 0; i < mapy[stageNo]; i++) {
- for (int j = 0; j < mapx[stageNo]; j++) {
- if (stageStates[stageNo][i][j] == 4) {
- flag = false;
- }
- }
- }
- if (flag) {
- stage.getMode()[stageNo] = 3;
- complete[stageNo] = true;
- } elseif (hp[stageNo] == 0) {
- stage.getMode()[stageNo] = 2;
- }
- comps = 0;
- for (int n = 0; n < stage.getMaxStageNo(); n++) {
- if (complete[n]) {
- comps++;
- }
- }
- }
- /**
- * 鍵盤事件處理
- */
- publicvoid keyPressed(KeyEvent e) {
- if (e.getKeyCode() == 10 && stageNo == -1) {
- // 開始關卡1
- reset(0);
- } elseif (stageNo < 0) {
- return;
- }
- // 選關(預設為最大支援7關,更多請自行設定)
- if (e.getKeyCode() == 97 || e.getKeyCode() == 49) {
- stageNo = 0;
- } elseif (e.getKeyCode() == 98 || e.getKeyCode() == 50) {
- stageNo = 1;
- } elseif (e.getKeyCode() == 99 || e.getKeyCode() == 51) {
- stageNo = 2;
- } elseif (e.getKeyCode() == 100 || e.getKeyCode() == 52) {
- stageNo = 3;
- } elseif (e.getKeyCode() == 101 || e.getKeyCode() == 53) {
- stageNo = 4;
- } elseif (e.getKeyCode() == 102 || e.getKeyCode() == 54) {
- stageNo = 5;
- } elseif (e.getKeyCode() == 103 || e.getKeyCode() == 55) {
- stageNo = 6;
- // ESC,重新開始
- } elseif (e.getKeyCode() == 27) {
- reset(stageNo);
- } elseif (stage.getMode()[stageNo] == 1) {
- // 退步
- if (e.getKeyCode() == 83) {
- nextStep(-1);
- }
- // 移動角色
- elseif (e.getKeyCode() == 40) {
- nextStep(0);
- } elseif (e.getKeyCode() == 37) {
- nextStep(1);
- } elseif (e.getKeyCode() == 39) {
- nextStep(2);
- } elseif (e.getKeyCode() == 38) {
- nextStep(3);
- } else {
- return;
- }
- } else {
- return;
- }
- // 繪製背景
- background();
- // 繪製遊戲畫面
- drawScreen();
- }
- /**
- * 切換動作
- *
- * @param i
- */
- publicsynchronizedvoid nextStep(finalint i) {
- boxMove[stageNo][hp[stageNo] - 1] = false;
- switch (i) {
- case0:
- if (stageStates[stageNo][roley[stageNo] + 1][rolex[stageNo]] < 2) {
- return;
- }
- if (stageStates[stageNo][roley[stageNo] + 1][rolex[stageNo]] < 4) {
- if (stageStates[stageNo][roley[stageNo] + 2][rolex[stageNo]] < 4) {
- return;
- }
- stageStates[stageNo][roley[stageNo] + 1][rolex[stageNo]] += 2;
- stageStates[stageNo][roley[stageNo] + 2][rolex[stageNo]] -= 2;
- boxMove[stageNo][hp[stageNo] - 1] = true;
- }
- roley[stageNo]++;
- break;
- case1:
- if (stageStates[stageNo][roley[stageNo]][rolex[stageNo] - 1] < 2) {
- return;
- }
- if (stageStates[stageNo][roley[stageNo]][rolex[stageNo] - 1] < 4) {
- if (stageStates[stageNo][roley[stageNo]][rolex[stageNo] - 2] < 4) {
- return;
- }
- stageStates[stageNo][roley[stageNo]][rolex[stageNo] - 1] += 2;
- stageStates[stageNo][roley[stageNo]][rolex[stageNo] - 2] -= 2;
- boxMove[stageNo][hp[stageNo] - 1] = true;
- }
- rolex[stageNo]--;
- break;
- case2:
- if (stageStates[stageNo][roley[stageNo]][rolex[stageNo] + 1] < 2) {
- return;
- }
- if (stageStates[stageNo][roley[stageNo]][rolex[stageNo] + 1] < 4) {
- if (stageStates[stageNo][roley[stageNo]][rolex[stageNo] + 2] < 4) {
- return;
- }
- stageStates[stageNo][roley[stageNo]][rolex[stageNo] + 1] += 2;
- stageStates[stageNo][roley[stageNo]][rolex[stageNo] + 2] -= 2;
- boxMove[stageNo][hp[stageNo] - 1] = true;
- }
- rolex[stageNo]++;
- break;
- case3:
- if (stageStates[stageNo][roley[stageNo] - 1][rolex[stageNo]] < 2) {
- return;
- }
- if (stageStates[stageNo][roley[stageNo] - 1][rolex[stageNo]] < 4) {
- if (stageStates[stageNo][roley[stageNo] - 2][rolex[stageNo]] < 4) {
- return;
- }
- stageStates[stageNo][roley[stageNo] - 1][rolex[stageNo]] += 2;
- stageStates[stageNo][roley[stageNo] - 2][rolex[stageNo]] -= 2;
- boxMove[stageNo][hp[stageNo] - 1] = true;
- }
- roley[stageNo]--;
- break;
- default:
- if (hp[stageNo] == stage.getMaxHp()[stageNo]) {
- return;
- }
- switch (ons[stageNo][hp[stageNo]]) {
- case0:
- if (boxMove[stageNo][hp[stageNo]]) {
- stageStates[stageNo][roley[stageNo] + 1][rolex[stageNo]] += 2;
- stageStates[stageNo][roley[stageNo]][rolex[stageNo]] -= 2;
- }
- roley[stageNo]--;
- break;
- case1:
- if (boxMove[stageNo][hp[stageNo]]) {
- stageStates[stageNo][roley[stageNo]][rolex[stageNo] - 1] += 2;
- stageStates[stageNo][roley[stageNo]][rolex[stageNo]] -= 2;
- }
- rolex[stageNo]++;
- break;
- case2:
- if (boxMove[stageNo][hp[stageNo]]) {
- stageStates[stageNo][roley[stageNo]][rolex[stageNo] + 1] += 2;
- stageStates[stageNo][roley[stageNo]][rolex[stageNo]] -= 2;
- }
- rolex[stageNo]--;
- break;
- default:
- if (boxMove[stageNo][hp[stageNo]]) {
- stageStates[stageNo][roley[stageNo] - 1][rolex[stageNo]] += 2;
- stageStates[stageNo][roley[stageNo]][rolex[stageNo]] -= 2;
- }
- roley[stageNo]++;
- break;
- }
- break;
- }
- if (i != -1) {
- hp[stageNo]--;
- ons[stageNo][hp[stageNo]] = i;
- }
- role[stageNo] = ons[stageNo][hp[stageNo]];
- if (i == -1) {
- hp[stageNo]++;
- }
- execute();
- }
- /**
- * 開場畫面
- *
- */
- publicsynchronizedvoid openDraw() {
- background();
- for (int i = 0; i < 5; i++) {
- for (int j = 0; j < maxX + 1; j++) {
- screen.drawImage(floorImage[0], CS * j,
- (CS * i + CS / 2 * maxY) - CS * 2, null);
- }
- }
- GraphicsUtils.setAntialias(screen, true);
- String mes = "怪蜀黍傳說 - 勇者推魔王";
- screen.setFont(new Font("華文新魏", 1, 35));
- GraphicsUtils.drawStyleString(screen, mes, (CS * maxX - screen
- .getFontMetrics().stringWidth(mes)) / 2 + 13,
- (CS * maxY) / 2 + 25, Color.black, Color.orange);
- mes = "Java版搬箱子游戲開發入門示例 - 0.1.0";
- screen.setFont(new Font("華文新魏", 0, 30));
- GraphicsUtils.drawStyleString(screen, mes, (CS * maxX - screen
- .getFontMetrics().stringWidth(mes)) / 2 + 13,
- (CS * (maxY + 2)) / 2 - 55, Color.black, Color.white);
- GraphicsUtils.setAntialias(screen, false);
- setupDisplay();
- }
- /**
- * 繪圖介面實現
- */
- publicsynchronizedvoid draw(Graphics g) {
- g.drawImage(screenImage, 0, 0, null);
- if (succeed) {
- if (sleep == 100) {
- // 進入下一關
- reset(++stageNo);
- succeed = false;
- sleep = 0;
- }
- sleep++;
- }
- }
- /**
- * 設定基本資料
- *
- */
- publicvoid setupStage() {
- for (int i = 0; i < maxY; i++) {
- for (int j = 0; j < maxX; j++) {
- stageStates[stageNo][i][j] = 0;
- }
- }
- mapx[stageNo] = stage.getConf()[stageNo][0];
- mapy[stageNo] = stage.getConf()[stageNo][1];
- rolex[stageNo] = stage.getConf()[stageNo][2];
- roley[stageNo] = stage.getConf()[stageNo][3];
- for (int n = 0; n < mapy[stageNo]; n++) {
- for (int l = 0; l < mapx[stageNo]; l++) {
- stageStates[stageNo][n][l] = stage.getMapData()[stageNo][n][l];
- }
- }
- hp[stageNo] = stage.getMaxHp()[stageNo];
- role[stageNo] = 0;
- for (int i1 = 0; i1 < stage.getMaxHp()[stageNo]; i1++) {
- ons[stageNo][i1] = 0;
- }
- for (int j1 = 0; j1 < stage.getMaxHp()[stageNo]; j1++) {
- boxMove[stageNo][j1] = false;
- }
- }
- /**
- * 設定顯示
- *
- */
- publicvoid setupDisplay() {
- if (message ==
相關推薦
Java版推箱子(搬箱子)遊戲開發入門示例及原始碼
推(搬)箱子,又名Sokoban,倉庫番等,是一款堪稱古玩級的電腦遊戲。提起它,筆者相信沒什麼人會感覺到陌生,更沒什麼生物會連聽都沒聽說過。它的發展歷史之久遠,甚至超越了俄羅斯方塊(1988年電腦遊戲化)。這款遊戲最初起源於日本,是個很難爭辯的事實(我知道有人反對,但筆者確實找
cocos2d-x實現一個PopStar(消滅星星)遊戲的邏輯分析及原始碼
前言 說起PopStar這個遊戲,或許很多人都不知道是啥,但是如果說起消滅星星的話,可能就會有很多人恍然大悟,原來是它。那麼,這個消滅星星長得什麼樣子呢?我們用一張圖來看看: emmm,是的,具體來說,長得就是這樣,我們通過點選圖片上某一個顏色的星星塊,如果,這個顏色塊周圍存在和他相
【劍指offer】Java版代碼(完整版)
從尾到頭打印鏈表 .net 字符串 刪除 ron 代碼下載 逆序 鏈表 撲克 原文地址:https://blog.csdn.net/baiye_xing/article/details/78428561 一、引言 《劍指offer》可謂是程序猿面試的神書了,在面試中幫了我很
Java版快排(遞迴)
public class Test { private static int Partition(int[] arr, int start, int end) { int key = arr[start]; while (start < end) {
資料結構Java版 多項式相加(簽到題)
題目描述 一條單鏈表可以表示一個一元多項式,每個節點包含三個域:指數、係數和後繼節點(指標或引用)。 表示多項式3X4-6X2+5X-10的單鏈表如圖所示。給定兩個多項式,實現兩個多項式相加演算法。 輸入 第一行輸入包含兩個整數m,n 後續為m行和n行資料
遊戲開發入門(十二)遊戲開發全總結
通過遊戲開發入門系列的學習,是不是對遊戲開發有了一個比較清晰的認識? 在最後一篇裡面,博主試著概括性的對遊戲開發做一個總結,歡迎各位提出意見來完善這篇部落格~ 遊戲模組總結: 遊戲邏輯模組系統:各種武器,狀態,技能,揹包,戰鬥等邏輯系統 動畫模組系
Java版AVG遊戲開發入門示例[3]——指令碼引擎的製作及應用
根據wikipedia的解釋:指令碼語言(Script language,scripting language,scripting programming language),是為了縮短傳統的編寫-編譯-連結-執行(edit-compile-link-run)過程而建立
1254 】推箱子 (雙bfs)
題幹: 推箱子是一個很經典的遊戲.今天我們來玩一個簡單版本.在一個M*N的房間裡有一個箱子和一個搬運工,搬運工的工作就是把箱子推到指定的位置,注意,搬運工只能推箱子而不能拉箱子,因此如果箱子被推到一個角上(如圖2)那麼箱子就不能再被移動了,如果箱子被推到一面牆上,那麼箱子只
hdu1254 推箱子(bfs+bfs)
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6386 Accepted Submission(s): 18
java版雲筆記(二)
blank app mar emc mt4 雲筆記 shu cmm ndt qC50f曬06渙hx厙咆2http://www.docin.com/nwghs11486 評z謁64a癡嘶06棵自暮0http://jz.docin.com/zdng396 5crl71也
Effective Java 第二版 中文版 筆記(8-12)避免使用終結方法
我對此部分沒有什麼興趣,因為誰會閒的沒事覆蓋java自身的方法。 八、覆蓋equals ; 這裡最重要的就是遵守約定; 自反性(reflexive)—>x != null && x.equals(x) == true 對稱性(symmetric)
Effective Java 第二版 中文版 筆記(十八)介面優於抽象類
這裡主要就是介面和抽象類的區別 : 使用一個例子直接進行說明; 理解:抽象類:抽象類是對一種事物的抽象,即對類抽象 介面:是對行為進行抽象; 從網上看了個例子感覺不錯: interface Alram { void alarm(); }
Effective Java 第二版 中文版 筆記(二十三)請不要在新程式碼中使用原生態型別
泛型:宣告一個或多個型別的引數的類和介面; 原生態型別如 List:不帶任何型別引數的泛型名稱; public class Primordial{ //原生態例子 public void primordialTest(){ List&l
Java記憶體回收知識(讀書筆記)--深入理解Java虛擬機器——JVM高階特性與最佳實踐(第2版)2.2~2.3
1.哪些地方的記憶體要回收? Java程式運時的記憶體包括以下幾部分:程式計數器,Java虛擬機器棧,本地方法棧,Java堆,方法區(執行時常量池是方法區的一部分)。 程式計數器,Java虛擬機器棧,本地方法棧是隨執行緒而生,隨執行緒而亡,它們的分配的記憶體大小已知,因此不
Java版運算元彙總(包括filter,collect,take,first,sample等)【Java純程式碼】
package com.bjsxt; import java.util.List; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache
java核心技術 卷一 第十版 中文版勘誤(更新ing)
本文主要是閱讀java核心技術 卷一 第十版時發現的錯誤,整理下來。本人小白,如果整理有誤,還望指出。如果有的錯誤沒有指出,還望補充。謝謝! 官方勘誤表可以參考這個英文官方勘誤表 第34頁最下方 警告部分 換行符的Unicode值為\u000a,把\u00A
我在生產專案裡是如何使用Redis釋出訂閱的?(二)Java版程式碼實現(含原始碼)
上篇文章講了在實際專案裡的哪些業務場景用到Redis釋出訂閱,這篇文章就講一下,在Java中如何實現的。 圖解程式碼結構 釋出訂閱的理論以及使用場景大家都已經有了大致瞭解了,但是怎麼用程式碼實現釋出訂閱呢?在這裡給大家分享一下實現方式。 我們以上篇文章的第三種使用場景為例
java基本類型(數值範圍):浮點的底層表示定義,float計算快一些
方法 -1 att ieee754 符號位 無法 字符類 數值計算 小數 Java八種基本類型: 六種數字類型(四個整數型,兩個浮點型), 一種字符類型, 一種布爾型。 詳細例如以下 1、整數:包含int,short,byte,long
Java基礎部分回顧(為自己)
.cn logs -1 繼續 分享 9.png 沒有 理解 開始 最近,學到集合框架。感覺有些蒙圈兒。知道這一塊很重要很重要,不敢疏忽。自學遇到的攔路虎,想著是不是前面的基礎知道還沒有夯實,對一些概念沒有真正的理解到位呢?!所以,停下來。開始找一些視頻,做一下回顧。 再次鞏
JAVA 8 新特性 (值得學習)
java 8 新特性JAVA 8 已經出現好長時間了,大的互聯網公司很多都已經使用了,甚至很多知名互聯網公司踩過很多坑,也有一些大牛分享出了他們的實戰經驗。去很多知名的互聯網公司經常會被面試官問,你了解java 8嗎?你知道它的一些新特性嗎?好像似乎成了一面面試官必問的一道題目。這篇博文,只是簡答的介紹了一下