Java教程專欄:https://blog.csdn.net/qq_41806966/category_9929686.html
這節內容爲完成上一節的練習和 學習類 與認識對象.
目錄
上節遊戲(練習)製作過程和思路
上一節博客鏈接: https://blog.csdn.net/qq_41806966/article/details/106201402
題目
遊戲開始,主角可以輕鬆看到自己的 金額 信息(使用輸出 + 變量),默認有 100 金幣.
主角可以擲骰子,並進行對應功能.
主角擲骰子後,人機開始擲骰子(回合制)
勝利條件
- 簡單的
- 玩家和人機 哪個金幣先超過1000就算勝利
- 增加趣味性的(對於新手難度比較大,下面的骰子功能自己思考添加)
- 玩家和人機都有對應血量,擲骰子有功能可以消耗金幣攻擊對方,或者直接攻擊,誰血量先少於0則誰輸
骰子有 1,2,3,4,5,6 六個點數,每一個點數對應一個功能.
- 增加80金幣
- 交給對方30金幣(金幣 - 30)
- 休息(不做操作)
- 這個實現其實就是沒有這個選項(不需要判斷隨機數是否爲3,或者隨機數爲3裏面不寫代碼)
- 挖對方牆角(金幣持續三回合減少,每回合-20)
- 這個實現 使用一個變量用來計數,在每回合執行操作前判斷這個變量是否不爲0(爲0則代表沒有這個效果),不爲0則減少金幣,並提示.(執行完後記得將變量的值 - 1)
- 都增加 50 金幣
- 都減少 50 金幣
整理思路
我提供了兩種玩法,第一種比較簡單
- 根據上面的題目我們可以獲取主角只有一個屬性(金幣),以及一個人機的金幣數量
- 利用之前所學的隨機數,製作擲骰子事件,並通過 if...else(或者switch)來執行對應操作.
- 每次執行完操作後判斷玩家金幣 或者 人機金幣是否大於1000來執行操作
我們要做的是第二種,
- 相比第一種,增加了兩個屬性,玩家和人機的血量
- 擲骰子的功能會有一些改變(這裏爲了能夠對應第一種玩法,所以我就直接在原來玩法上進行增加)
- 勝利的條件改變了,從誰錢多誰贏變爲了 誰把對方血搞沒誰贏.
開始製作
我們製作的是第二種玩法
在之前的文件夾內新建一個文件夾,並新建一個java文件.
首先,我們把屬性都定義好(玩家和人機金幣,玩家和人機血量)
遊戲邏輯.
玩家可以執行擲骰子操作(也就是簡單地輸入 1 我們用隨機數執行擲骰子)
玩家執行了擲骰子操作後,進行對應處理,然後人機執行擲骰子操作,進行對應處理
(感覺有點重複對不對? 玩家和人機都可以擲骰子,並且都可以處理操作,而且都是相同的代碼(後面學習到面向對象,就可以很好的處理這些重複部分了.))
我們的遊戲有結束條件--誰先把對方血量弄沒就贏,應該在哪判斷呢?
在遊戲中,能減少血量的地方就只有 擲骰子 部分了,我們只需要在 玩家和人機擲骰子完後判斷一下就可以了.
因爲有遊戲勝利條件,所以我們的遊戲是一個死循環(通過勝利來進行跳出)li
創建程序核心,遊戲結束條件判斷
代碼如下
提示用戶輸入
使用到了 Scanner(相信各位對Scanner的使用已經非常熟悉了),別忘了導入
爲了好一點的體驗感我們需要在開頭顯示用戶和人機的血量,金幣信息
代碼如下
完成擲骰子部分(生成隨機數)
使用 Random,與Scanner一樣,Random也只需要一個
骰子只有六個點數,所以我們只需要生成六個數字即可(nextInt(6))
代碼如下
處理操作
剩下的就是對應的操作了
- 增加80金幣
- 交給對方30金幣(金幣 - 30),並減少對方10生命值
- 休息(不做操作)
- 花費現有所有金幣來對對方造成對應傷害(除以10) 注: 金幣爲負數就是給對方加血了66
- 都增加 50 金幣,恢復20點生命值
- 都減少 50 金幣 減少10生命值
代碼如下
所有代碼
import java.util.Scanner;
import java.util.Random;
public class Game {
public static void main(String[] args) {
//定義玩家和人機的屬性
//可以一次定義多個變量,使用逗號隔開
//第一個爲玩家金幣,第二個爲人機金幣 默認有100金幣
int money = 100,robotMoney = 100;
//玩家血量和人機血量,默認血量也是 100
int health = 100,robotHealth = 100;
//創建 Scanner 不要在循環裏創建,我們只需要用到一個Scanner就行
Scanner sc= new Scanner(System.in);
//創建隨機器 Random(別忘了導入)
Random r = new Random();
//程序核心
while (true) {
//提示用戶
System.out.println("-------人機大戰--------");
System.out.println("*****玩家信息*****");
System.out.println("血量: " + health);
System.out.println("金幣: " + money);
System.out.println("*****人機信息*****");
System.out.println("血量: " + robotHealth);
System.out.println("金幣: " + robotMoney);
System.out.println("******************");
System.out.println("請輸入編號:");
System.out.println("1.擲骰子");
System.out.println("0.退出");
System.out.println("-----------------------");
//獲取玩家要執行的操作 擲骰子/退出
int operation = sc.nextInt();
if (operation == 1) {
//擲骰子,這裏就不執行操作,不然要把下面的代碼複製到這裏
//會顯得很亂 所以執行完這個就會自動往下執行
//退出和亂輸入都不會執行下面的代碼
} else if (operation == 0) {
System.out.println("下次再見~");
break;
} else {
System.out.println("你輸入的是啥?重新輸入吧!");
continue;
}
//玩家擲骰子
int num = r.nextInt(6);
//玩家的操作
switch (num) {
case 0:
//增加80金幣 這裏的+=其實就是 money = money + 80
money += 80;
break;
case 1:
//交給對方30金幣,減少對方10生命值
money -= 30;
robotMoney += 30;
//-=和+=一致 這裏等於 robotHealth = robotHealth - 10
robotHealth -= 10;
break;
case 2:
//休息
break;
case 3:
//花費所有金幣對對方造成傷害(負數則是增加血量)
robotHealth += money / 10;
money = 0;
break;
case 4:
//都增加50金幣 恢復20生命值
money += 50; robotMoney += 50;
health += 20; robotHealth += 20;
break;
case 5:
//都減少50金幣,減少10生命值
money -= 50; robotMoney -= 50;
health -= 10; robotHealth -= 10;
break;
}
//操作完成判斷結果
if (health <= 0) {
//玩家失敗
System.out.println("你居然被機器人打敗了!");
break;
} else if (robotHealth <= 0) {
//玩家勝利
System.out.println("恭喜你 勝利!");
break;
}
//人機擲骰子
num = r.nextInt(6);
//人機的操作
switch (num) {
case 0:
//增加80金幣 這裏的+=其實就是 robotMoney = robotMoney + 80
robotMoney += 80;
break;
case 1:
//交給對方30金幣,減少對方10生命值
robotMoney -= 30;
money += 30;
//-=和+=一致 這裏等於 health = health - 10
health -= 10;
break;
case 2:
//休息
break;
case 3:
//花費所有金幣對對方造成傷害(負數則是增加血量)
health += robotMoney / 10;
money = 0;
break;
case 4:
//都增加50金幣 恢復20生命值
money += 50; robotMoney += 50;
health += 20; robotHealth += 20;
break;
case 5:
//都減少50金幣,減少10生命值
money -= 50; robotMoney -= 50;
health -= 10; robotHealth -= 10;
break;
}
//操作完成判斷結果
if (health <= 0) {
//玩家失敗
System.out.println("你居然被機器人打敗了!");
break;
} else if (robotHealth <= 0) {
//玩家勝利
System.out.println("恭喜你 勝利!");
break;
}
}
}
}
測試結果
本節正題-註釋
在之前我們接觸過註釋,也就是我經常在代碼裏寫的文字信息
爲什麼需要註釋呢? 如果我不加註釋的話,你們能看懂我代碼嗎?(如果你不懂的話)
這就是需要註釋的原因,註釋,不是給計算機用的,是給程序員看的.
註釋會被編譯器過濾掉,所以不用擔心性能什麼的問題.
當然,一個好的註釋可以讓別人快速理解(注意 是好的註釋),請勿濫用
註釋有幾種,在Java中有以下幾種註釋
- 單行註釋 (我之前用的大多都是單行註釋)
- 多行註釋
- 文檔註釋
單行註釋
註釋某一行,也就是這一行的內容被編譯器不管直接跳過
語法: // 在雙斜槓後面的都是註釋 必須是雙斜槓 像 /*/ /1/ 都是無效的
這個我們之前接觸的挺多的.就不過多講述了
多行註釋
有的時候我們需要註釋的文字是很多行(而不是單行),如果我們用單行註釋雖然可以實現效果,
但是每一行你都要寫上雙斜槓,這時就可以用到多行註釋.
語法: /* 斜槓加星號開頭,星號加斜槓結尾,包含在這個裏面的爲多行註釋,可以隨便多少行,只要在這個裏面 */
例子
/*
我是多行註釋.
下面這一個代碼作用是調用系統輸出(廢話)
我們最終結果會在控制檯打印 [哈哈](廢話)
*/
System.out.println("哈哈");
文檔註釋
我們寫的註釋更多的時候希望生成一個文檔,而不是僅僅在java代碼中,我們可以把文檔給別人看,別人可以輕鬆知道我們幹了什麼...
語法: /** 文檔註釋的開頭比多行註釋多了一個星號 與多行註釋一致 可以多行 */
文檔註釋包含很多內容,我們後面詳細講解.
總結
註釋可以讓別人快速理解我們的代碼.
Java中的註釋分爲單行註釋,多行註釋,文檔註釋
文檔註釋可以把註釋的內容生成爲文檔給別人觀看
--------------------
思想的昇華.
下一節學習類與對象.