Java基础--用程序模拟打怪游戏
模擬回合制打怪游戲
文章目錄
- 一、問題具體描述
- 二、分析
- 三、代碼編寫
注:這是隨機數的提升練習,不會生成隨機數的 點這里。
一、問題具體描述
打怪游戲:玩家、怪物
玩家:血量值315
怪物:血量值500
玩家和怪物互砍。
玩家每次攻擊怪物產生5~8點傷害,怪物每次攻擊玩家產生3~5點傷害。
采用回合制(玩家和怪物互砍一刀為一個回合)。
一方掛掉,游戲結束。
要求:用程序模擬戰斗過程。
二、分析
(1)可以定義兩個變量,分別代表玩家(315)和怪物(500)。
(2)打斗過程是反復執行的,就要用到循環。
循環成立的條件:玩家和怪物都活著。
循環里面執行:玩家和怪物互砍。
(3)玩家攻擊怪物
①生成玩家攻擊力(5~8)。
②怪物血量值對應減少。
③輸出:玩家攻擊怪物,怪物掉了多少血量,還剩多少血量。
(4)怪物攻擊玩家
①生成怪物攻擊力(3~5)。
②玩家血量值對應減少。
③輸出:怪物攻擊玩家,玩家掉了多少血量,還剩多少血量。
(5)循環之后,判斷玩家和怪物是否都活著,若都活著,就再循環,否則結束循環。
(6)游戲結束。
三、代碼編寫
(1)根據上面的分析,我們不難寫出代碼:
package Test1;public class demo2 {public static void main(String[] args) {/* 打怪游戲 *///1、定義兩個變量,分別賦值相應的血量值int w=315; //玩家int g=500; //怪物int i=1;//回合計數變量//2、用循環模擬打斗回合while(w>0 && g>0){ //循環條件是兩者都活著//循環里面執行兩者互砍System.out.println("----------第"+i+"回合----------");i++;//每一次回合之后,讓回合計數變量加一//3、玩家攻擊怪物//生成玩家攻擊力(5~8)int wg=(int)(Math.random()*4)+5;//減少怪物血量值g-=wg;//輸出結果System.out.println("玩家攻擊怪物,怪物掉了"+wg+"點血量值,"+"還剩"+g+"點血量值");//4、怪物攻擊玩家//生成怪物攻擊力(3~5)int gw=(int)(Math.random()*3+3);//減少玩家血量值w-=gw;//輸出結果System.out.println("怪物攻擊玩家,玩家掉了"+gw+"點血量值,"+"還剩"+w+"點血量值");}} }看一下執行結果,會出一點小意外:
我們會發現,最后一個回合中,怪物血量已經減少為負值了,即已經掛掉了。
但是最后還是攻擊了玩家,“詐尸”了?
按照道理,本不應該再攻擊玩家了。
(2)那剛才編寫的代碼究竟哪里出錯了呢?
🌩 當我們減少怪物血量值之后,如果怪物已經掛了,此時,若并沒有讓循環停止,下面**“怪物攻擊玩家”**的代碼將繼續執行。
我們可以在**“玩家攻擊怪物”之后的代碼添加一個判斷“怪物是否已經掛掉”**。
//判斷怪物是否已經掛掉if(g<=0){//讓循環停止,并輸出結果System.out.println("怪物掛掉,玩家勝利!");break; //可以在循環中使用哦。在此處作用:停止循環繼續執行}同理,在**“怪物攻擊玩家”之后的代碼添加一個判斷“玩家是否已經掛掉”**。
//判斷玩家是否已經掛掉if(w<=0){//讓循環停止,并輸出結果System.out.println("玩家掛掉,怪物勝利!");break; }整體代碼:
package Test1;public class demo2 {public static void main(String[] args) {/* 打怪游戲 *///1、定義兩個變量,分別賦值相應的血量值int w=315; //玩家int g=500; //怪物int i=1;//回合計數變量//2、用循環模擬打斗回合while(w>0 && g>0){ //循環條件是兩者都活著//循環里面執行兩者互砍System.out.println("----------第"+i+"回合----------");i++;//每一次回合之后,讓回合計數變量加一//3、玩家攻擊怪物//生成玩家攻擊力(5~8)int wg=(int)(Math.random()*4)+5;//減少怪物血量值g-=wg;//輸出結果System.out.println("玩家攻擊怪物,怪物掉了"+wg+"點血量值,"+"還剩"+g+"點血量值");//判斷怪物是否已經掛掉if(g<=0){//讓循環停止,并輸出結果System.out.println("怪物掛掉,玩家勝利!");break; //可以在循環中使用哦。在此處作用:停止循環繼續執行}//4、怪物攻擊玩家//生成怪物攻擊力(3~5)int gw=(int)(Math.random()*3+3);//減少玩家血量值w-=gw;//輸出結果System.out.println("怪物攻擊玩家,玩家掉了"+gw+"點血量值,"+"還剩"+w+"點血量值");//判斷玩家是否已經掛掉if(w<=0){//讓循環停止,并輸出結果System.out.println("玩家掛掉,怪物勝利!");break;}}} }運行結果:
可以看到,怪物沒有“詐尸”了!
顯示結果正常。
(3)代碼調整。
此時**“break”**有調整循環的作用。
當怪物或玩家的血量值<=0的時候,循環就會停止。
那么此時while中的條件判斷就沒有意義了。
可以寫一個恒成立的條件:true。
最終代碼:
package Test1;public class demo2 {public static void main(String[] args) {/* 打怪游戲 *///1、定義兩個變量,分別賦值相應的血量值int w=315; //玩家int g=500; //怪物int i=1;//回合計數變量//2、用循環模擬打斗回合while(true){ //循環條件是兩者都活著//循環里面執行兩者互砍System.out.println("----------第"+i+"回合----------");i++;//每一次回合之后,讓回合計數變量加一//3、玩家攻擊怪物//生成玩家攻擊力(5~8)int wg=(int)(Math.random()*4)+5;//減少怪物血量值g-=wg;//輸出結果System.out.println("玩家攻擊怪物,怪物掉了"+wg+"點血量值,"+"還剩"+g+"點血量值");//判斷怪物是否已經掛掉if(g<=0){//讓循環停止,并輸出結果System.out.println("怪物掛掉,玩家勝利!");break; //可以在循環中使用哦。在此處作用:停止循環繼續執行}//4、怪物攻擊玩家//生成怪物攻擊力(3~5)int gw=(int)(Math.random()*3+3);//減少玩家血量值w-=gw;//輸出結果System.out.println("怪物攻擊玩家,玩家掉了"+gw+"點血量值,"+"還剩"+w+"點血量值");//判斷玩家是否已經掛掉if(w<=0){//讓循環停止,并輸出結果System.out.println("玩家掛掉,怪物勝利!");break;}}} }運行結果展示(每個人每次運行結果不同很正常,因為是隨機生成):
總結
以上是生活随笔為你收集整理的Java基础--用程序模拟打怪游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7 mysql集群
- 下一篇: 我踩过的那些坑