gpt4 book ai didi

java - 变量可能尚未初始化,使用 2 个类

转载 作者:行者123 更新时间:2023-12-01 10:34:22 25 4
gpt4 key购买 nike

我是 Stackoverflow(以及编码)的新手,我真的希望你能在这里帮助我。我正在 BlueJ 上制作一个基于文本的蝴蝶效应游戏。我首先有我的主要“RPG”代码,然后是我的“Level1ZombieClass”。我的问题是我的用户类变量不断出现初始化错误(因为我需要将它放在我的僵尸类中才能进行“if”语句/战斗工作,而且我不知道如何修复它。在第一个中我想添加我的僵尸类的一组代码,这样我就没有可以轻松地用几行替换的大量代码。同样,问题是用户类变量是用户定义的东西,而不是我定义的东西在代码中定义。Just a screenshot here。非常感谢你们,非常感谢你们的帮助。

import java.util.Random;
import java.util.Scanner;
public class RPG
{
public static void main (String [] args)
{
Scanner in = new Scanner(System.in);
String name;
int playerClass;
int wincount=0;
int userhealth=100+(wincount)*3;
int comphealth=100;
int hc;
int userChoice=1;
int killcount;
int regularAttackD;
int regularAttackHC;
int powerAttackD;
int powerAttackHC;
int shield;
int quickAttackHC;
int quickAttackD;
int compChoice=1;
int playerchoice;

Random a = new Random ();
Random b = new Random ();
Random c = new Random ();
Random d = new Random ();
Random e = new Random ();
Random f = new Random ();
Random g = new Random ();
Random h = new Random ();

System.out.println ("Welcome to the zombie apocalypse...\nIn this text-driven game you will need to make decisions based on game prompts.\nYour decisions will determine your own fate.");
System.out.println ("What would you like to be called?");
name = in.next();
System.out.println (name + ",in this game you may need to fight enemies in a turn-based combat style.\nYou will now enter a number for the class you want.\n(1)Scout: Increased hit chance for all attacks.\n(2)Brute: Increased damage for all attacks\n(3)Medic:Increased health during combat.");
playerClass = in.nextInt();

switch (playerClass)
{
case 1:
System.out.println ("You have selected to be a scout! Hit chance increased!");
break;

case 2:
System.out.println ("You have selected to be a brute! Power increased!");
powerAttackD=b.nextInt(15)+28;
regularAttackD=d.nextInt(8)+18;
quickAttackD=f.nextInt (4)+4;
break;

case 3:
System.out.println ("You have selected to be a medic! Health increased!");
userhealth=115;
break;
}

System.out.println ("You now find yourself in an deserted town center. Pharmacy to your left (Looks to be completely ravaged), restaurant to your right, town hall is a couple hundred feet ahead of you.\nWhere do you want to go?\nPharmacy:1\nRestaurant:2\nTown Hall:3");
playerchoice=in.nextInt();

switch (playerchoice)
{
case 1:
System.out.println ("Nothing of use seems to be apparent when you walk in the door. There is a dead body slouched against the far wall to your right.\nYou make your way down the 5th and middle aisle. Still nothing of use. You get to the end of the store and hit a glass jar of a shelf.\nStill silence in the store. You walk to the entrance of the store empty-handed, and the presumed dead body grabs a hold of you!");
//BEGINNING OF COMBAT
Level1ZombieClass Level1ZombieClassObject = new Level1ZombieClass ();
Level1ZombieClassObject.ZombieLevel1Class();

}

} }

然后我的僵尸类:

//回合制战斗,用户输入他们想要的攻击方式。

import java.util.Random;
import java.util.Scanner;
public class Level1ZombieClass
{
public void ZombieLevel1Class()
{
Scanner in = new Scanner(System.in);
int userhealth=100;
int comphealth=100;
int playerClass;
int hc;
int userChoice=1;
int critdamage;
int regularAttackD;
int regularAttackHC;
int powerAttackD;
int powerAttackHC;
int shield;
int quickAttackHC;
int quickAttackD;
int compChoice=1;
int wincount=0;
boolean winCondition = true;
Random a = new Random ();
Random b = new Random ();
Random c = new Random ();
Random d = new Random ();
Random e = new Random ();
Random f = new Random ();
Random g = new Random ();
Random h = new Random ();

do {
hc=a.nextInt(99)+1;
powerAttackD=b.nextInt(15)+25;
regularAttackD=d.nextInt(8)+15;
quickAttackD=f.nextInt (4)+3;
shield=g.nextInt(15)+10;

System.out.println ("What move would you like to use?");
System.out.println ("1:Regular Attack");
System.out.println ("2:Power Attack: Higher damage at a lower hit chance.");
System.out.println ("3:Quick attacks: 3 weaker attacks at a higher hit chance.");
System.out.println ("4:Shield: 100% chance to work and you do not attack, but the damage you receive is reduced for the next incoming attack.");
userChoice=in.nextInt();
if (userChoice==1){
if (playerClass==2){
powerAttackD=b.nextInt(15)+28;
regularAttackD=d.nextInt(8)+18;
quickAttackD=f.nextInt (4)+4;
}
if (compChoice==4){
regularAttackD=regularAttackD-shield;
System.out.println ("Level 1 zombie used a shield! Damage reduced by " + shield + ".");
}

if (playerClass==1){
if (hc>=14){
if(regularAttackD<0){
regularAttackD=0;
}
System.out.println ("Attack successful for " + regularAttackD + " damage.");
comphealth=comphealth-regularAttackD;
}else{
System.out.println ("Attack failed!");}
}else{
if (hc>=18){
if (regularAttackD<0){
regularAttackD=0;
}
System.out.println ("Attack successful for " + regularAttackD + " damage.");
comphealth=comphealth-regularAttackD;

}else{
System.out.println ("Attack failed.");
}
}

if (comphealth <=0) {
System.out.println ("Level 1 zombie health is critically low! You win!");
wincount++;
winCondition = false;
break;
}
System.out.println ("Level 1 zombie health now at " + comphealth + ".");
}

if (userChoice==2){

if (compChoice==4){
powerAttackD=powerAttackD-shield;
System.out.println ("Level 1 zombie used a shield! Damage reduced by " + shield + ".");
}

if (playerClass==1){
if (hc>=26){
if(powerAttackD<0){
regularAttackD=0;
}
System.out.println ("Attack successful for " + powerAttackD + " damage.");
comphealth=comphealth-powerAttackD;
}else{
System.out.println ("Attack failed!");}
}else{
if (hc>=30){
if (powerAttackD<0){
powerAttackD=0;
}
System.out.println ("Attack successful for " + powerAttackD + " damage.");
comphealth=comphealth-powerAttackD;

}else{
System.out.println ("Attack failed.");
}
}

if (comphealth <=0) {
System.out.println ("Level 1 zombie health is critically low! You win!");
wincount++;
winCondition = false;
break;
}
System.out.println ("Level 1 zombie health is now at " + comphealth + ".");
}

if (userChoice==3)
{
quickAttackD=quickAttackD*3;
if (compChoice==4){
quickAttackD=quickAttackD-shield;
System.out.println ("Level 1 zombie used a shield! Damage reduced by " + shield + ".");
}

if (playerClass==1){
if (hc>=14){
if(quickAttackD<0){
quickAttackD=0;
}
System.out.println ("Attack successful for " + quickAttackD + " damage.");
comphealth=comphealth-quickAttackD;
}else{
System.out.println ("Attack failed!");}
}else{
if (hc>=18){
if (quickAttackD<0){
quickAttackD=0;
}
System.out.println ("Attack successful for " + quickAttackD + " damage.");
comphealth=comphealth-quickAttackD;

}else{
System.out.println ("Attack failed.");
}
}

if (comphealth <=0) {
System.out.println ("Level 1 zombie health is critically low! You win!");
wincount++;
winCondition = false;
break;
}

System.out.println ("Level 1 zombie health is now at " + comphealth + ".");
}

//BEGINNING OF COMPUTER'S TURN
compChoice=h.nextInt(3)+1; //the computer's choice of attack.Placed after user turn to prevent a first turn mess up

hc=a.nextInt(99)+1;
powerAttackD=b.nextInt(15)+20;
regularAttackD=d.nextInt(8)+10;
quickAttackD=f.nextInt(4)+1;
shield=g.nextInt(15)+6;

if (userhealth<15)
{
compChoice=h.nextInt(2)+1;
}

if (compChoice==1){

if (userChoice==4){
regularAttackD=regularAttackD-shield;
System.out.println ("You have used a shield! Damage reduced by " + shield + ".");
}

if (hc>=20){
if (regularAttackD<0){
regularAttackD=0;
}
System.out.println ("Level 1 zombie's attack successful for " + regularAttackD + " damage.");
userhealth=userhealth-regularAttackD;
}else{
System.out.println ("Level 1 zombie's attack failed.");
}

if (userhealth <=0) {
System.out.println ("You have died.");
winCondition = false;
break;
}
System.out.println ("Your health now at " + userhealth + ".");
}

if (compChoice==2){

if (userChoice==4){
powerAttackD=powerAttackD-shield;
System.out.println ("You have used a shield! Damage reduced by " + shield + ".");
}

if (hc>=40){
if (powerAttackD<0){
powerAttackD=0;
}

System.out.println ("Level 1 zombie's power attack hits successfully for " + powerAttackD + " damage!");
userhealth=userhealth-powerAttackD;
}else{
System.out.println ("Oppenent's attack failed!");
}

if (userhealth <=0) {
System.out.println ("You have died.");
winCondition = false;
break;
}
System.out.println ("Your health is now at " + userhealth + ".");
}

if (compChoice==3)
{
quickAttackD=quickAttackD*3;
if (userChoice==4){
quickAttackD=quickAttackD-shield;
System.out.println ("You have used a shield! Damage reduced by " + shield + ".");
}

if (hc>=10){
if (quickAttackD<0){
quickAttackD=0;
}
System.out.println ("Level 1 zombie's quick attacks hit for a total of " + quickAttackD + " damage!");
userhealth=userhealth-quickAttackD;
}else{
System.out.println ("Level 1 zombie's attack missed!");
}

if (userhealth <=0) {
System.out.println ("You have died.");
winCondition = false;
break;
}

System.out.println ("Your health is now at " + userhealth + ".");
}


} while (winCondition); //don't define winCondition, IT IS ALREADY TRUE

}}

最佳答案

由于您有一个类,因此您应该向其添加一个构造函数,该构造函数包含用户输入的所有参数,并在创建游戏实例时传递这些参数。

例如,如果您需要将 playerClass 传递给 Level1ZombieClass,请在 Level1ZombieClass 中添加:

public Level1ZombieClass (int playerClass, int userhealth, <type> otherParam ...){
this.playerClass = playerClass;
this.userhealth = userhealth;
this.otherParam = otherParam;
...
}

并在创建关卡实例时添加需要传递的变量

Level1ZombieClass Level1ZombieClassObject = new Level1ZombieClass (playerClass,userhealth,otherParam,...);

您必须(并且应该)将这些变量放在类的方法(函数)之外。你的代码应该是这样的

public class Level1ZombieClass
{
int playerClass;
int userhealth;
<type> otherParam;
...

public Level1ZombieClass (int playerClass){
this.playerClass = playerClass;
this.userhealth = userhealth;
this.otherParam = otherParam;
...
}

public void ZombieLevel1Class()
{
Scanner in = new Scanner(System.in);
//Variables that are not user-dependent
int comphealth=100;
int hc;
int userChoice=1;
int critdamage;

//rest of code

关于java - 变量可能尚未初始化,使用 2 个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34867266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com