簡單的Dos小遊戲
開始學習java,這周只簡單的學習了C++的基本語法:輸入輸出,判斷迴圈,因此用這些東西在java上瞎寫了一個DOS小遊戲。
import java。util。*;
public class Demo {
static int A=0,D=0,H=10,MONEY=0;
static int a1=1,d1=1,h1=5,lv1;
static String receive;//用來接收指令
public static void main(String[] args){
sop(“輸入star開始遊戲”);
receive=in();//呼叫命令列輸入方法
if(receive。equals(“star”)){
star(“”);
}else{
sop(“error:”+receive);
}
}
public static void star(String flag){//開始1
sop(“輸入1,2,3中的一個值領取物品”);
flag=in();
if(flag。equals(“1”)){
A+=4;
D++;
show();
}else if(flag。equals(“2”)){
A+=3;
D+=2;
show();
}else{
MONEY+=50;
show();
}
star2(“”);
}
public static void star2(String flag){//開始2
sop(“輸入f/S決定去戰鬥/商店”);
flag=in();
if(flag。equals(“f”)){
f(“”);
}else if(flag。equals(“s”)){
s(“”);
}else{
star2(“”);
}
}
public static void f(String flag){//戰鬥
//int key=0;
a1=1;//初始化bot
d1=1;
h1=5;
lv1=1;
do{
sop(“當前戰鬥等級為:”+lv1);
a1=2*lv1;
d1=2*lv1;
h1=5*lv1;
sop(“bot為:”);
showbot();
sop(“是否開始戰鬥?y/n”);
flag=in();
if(flag。equals(“y”)){//輸入y,繼續
H=fight(H);//進入fight模式
if(H>0){//判斷H
MONEY+=5*lv1;
lv1++;
sop(“win”);
show();
}else{
over();
}
}else{//輸入其他,退回到satr2
star2(“”);
}
if(lv1==9){
boss(“”);
}
sop(“繼續?\ny/n”);
flag=in();
}while(flag。equals(“y”));
star2(“”);
}
public static void s(String flag){//商店
sop(“輸入1/2/3選擇攻擊/防禦/生命,任意鍵退出”);
flag=in();
if(flag。equals(“1”)&&MONEY>=10){
A++;
MONEY-=10;
show();
s(“”);
}else if(flag。equals(“2”)&&MONEY>=10){
D++;
MONEY-=10;
show();
s(“”);
}else if(flag。equals(“3”)&&MONEY>=10){
H+=10;
MONEY-=10;
show();
s(“”);
}else if(flag。equals(“pay”)){
sop(“這位土豪選擇了充錢,攻擊+10,防禦+5”);
A+=50;
D+=25;
show();
s(“”);
}else if(MONEY<10){
sop(“你的錢不夠”);
star2(“”);
}else{
star2(“”);
}
}
public static void boss(String flag){//BOSS
flag=in();
if(flag。equals(“y”)){
h1=100;
d1=30;
h1=500;
fight(H);
}else{
sop(“你被抓到了,GG”);
try{
Thread。sleep(1000);
}catch(Exception e){}
over();
}
if(H>0){
win();
}else{
over();
}
}
public static int fight(int H){//fight模式
while(true){
if(A<=d1){
sop(“你被一招秒了”);
try{
Thread。sleep(1000);
}catch(Exception e){}
over();
}
h1=h1-(A-d1);
sop(“你對bot造成了”+(A-d1)+“點傷害”);
try{
Thread。sleep(1000);
}catch(Exception e){}
if(h1<=0){
sop(“bot被打敗了”);
try{
Thread。sleep(1000);
}catch(Exception e){}
h1=5;
//return H;
break;
}
H=H-(a1-D);//???????????????????????????
sop(“bot對你造成了”+(a1-D)+“點傷害”);
try{
Thread。sleep(1000);
}catch(Exception e){}
if(H<=0){
sop(“你死了”);
try{
Thread。sleep(1000);
}catch(Exception e){}
over();
break;
}
}
return H;
}
public static void show(){//顯示自己數值
sop(“A值為:”+A+“\nD值為:”+D+“\nH值為:”+H+“\nMONEY:”+MONEY);
}
public static void showbot(){//顯示bot數值
sop(“A值為:”+a1+“\nD值為:”+d1+“\nH值為:”+h1);
}
public static String in(){//命令列輸入方法
Scanner sc=new Scanner(System。in);
String str=sc。next();
return str;
}
public static void sop(Object obj){//輸出語句方法
System。out。println(obj);
}
public static void over(){//失敗,結束
sop(“飲恨,遊戲結束”);
System。exit(0);
}
public static void win(){//勝利
sop(“通關!遊戲結束”);
System。exit(0);
}
}
很多地方都是憑感覺寫的,有些地方不會寫就百度了一下。最後寫完,發現如下問題:
1,沒有了解靜態和非靜態的區別,因此只寫了一個類,方法都是靜態的。
2,註釋????的地方想了很久,為什麼我的H值在每次戰鬥後又會被重置為10,後來發現只寫了fight(H),應該寫為H=fight(H)。
3,商店部分“你的錢不夠”語句有點小問題,不想改了。
4,剛開始沒有在每次戰鬥後初始化bot的生命值h1,導致在攻擊過高時,h1會變為負值的BUG,後來在每次bot被打敗後添加了一條:h1=5;。
5,剛開始沒有在win(),over()方法中新增System。exit(0);,導致死亡後還會繼續執行戰鬥方法的尷尬場面。
學習到的知識:
1,靜態方法只能呼叫靜態成員,因為靜態成員是隨著類的載入而載入的,此時非靜態成員可能還未載入,因此不能呼叫非靜態成員。非靜態方法例項化之後,可以被靜態成員呼叫。
2,問題2我想了很久,最後發現原來是自己忘記了成員變數和區域性變數的區別。figth(H)中的H是區域性變數和成員變數H不是一回事,區域性變數和成員變數可以同名,在使用時,區域性變數具有更高的優先順序,直接使用同名訪問時,訪問的是區域性變數,如果要訪問成員變數,可以用this。變數名訪問。(this的用法並不是很清楚)
用javascript可以實現很多小遊戲。例如: http://down。51cto。com/zt/115這個網站裡有的。 這類百度上都是。