满意答案
sylvia1017
2019.01.20
采纳率:48% 等级:7
已帮助:460人
简单的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的用法并不是很清楚)
10分享举报