[英]Why doesnt my program know that enemy and Hero object exist? [on hold]
I am working on a dungeon crawler game. 我正在从事地下城爬行游戏。 One of the requirements were to make the Character and the Enemy classes derived classes from a common base class (or implement a common interface).
要求之一是使Character和Enemy类从一个公共基类派生类(或实现一个公共接口)。 This base class will contain the things both have in common, such as a position, being able to move and having some way of being displayed on the screen.
该基类将包含两者的共同点,例如位置,能够移动并具有某种在屏幕上显示的方式。 I did that by making a character class which is a parent class for enemy and hero.
我通过创建一个角色类来做到这一点,该角色类是敌人和英雄的父类。 Before I did inheritance requirement, my player could move and do all the things and now it doesnt do anything and just skips to the success message.
在执行继承要求之前,我的玩家可以移动并做所有事情,现在它什么也没做,只是跳到成功消息。 How can I fix this?
我怎样才能解决这个问题? In the bottom I am only going to post half the code please tell me if I did inheritance right.
在底部,我将只发布一半的代码,请告诉我是否正确进行了继承。 If not how can I fix it.
如果没有,我该如何解决。
Character class code: 人物类代码:
abstract class Character{
private String name;
private int health;
public Character(String name, int health){
this.name = name;
this.health = health;
}
public abstract void damage(int hit);
public abstract String getname();
public abstract boolean isAlive();
public abstract void girlTaunt();
public abstract void boyTaunt();
}
Enemy class code: 敌人的代码:
import java.util.*;
class Enemy extends Character {
String name;
int health;
Item weapon;
public Enemy(String name, int health, Item Weapon) {
super(name, health);
this.weapon = Weapon;
}
public int health(){
return this.health;
}
public boolean isAlive() {
if (this.health <= 0) {
return false;
}
return true;
}
public void damage(int hit){
this.health -= hit;
}
public int power(){
return this.weapon.getPower();
//return health - damage;
}
public String equippedWeapon(){
return this.weapon.toString();
}//ending bracket for equip
public void girlTaunt(){
Random rand = new Random();
int i = rand.nextInt()%3;
switch (i){
case 0:
System.out.println("ARI: ahhh booo wahh wahhh I don't know what to do!!");
break;
case 1:
System.out.println("ARI: i'll fake a pregnancy test...!");
break;
case 2:
System.out.println("ARI: I will CONSENSUALLY beat the cashews out of you.");
break;
default:
break;
}
}//end of girlTaunt
public void boyTaunt(){
Random rand = new Random();
int i = rand.nextInt()%3;
switch (i){
case 0:
System.out.println("GARRET: Oh no why don't you love me???????");
break;
case 1:
System.out.println("GARRET: You better watch yourself, i'll threaten you with a marriage propsal!!");
break;
case 2:
System.out.println( "GARRET: If I beat you up, my wife's boyfriend said that he'll buy me a nintendo switch");
break;
default:
break;
}
System.out.println(" ");
}
public String getname(){
return name;
}
}
Hero class: 英雄等级:
import java.util.Scanner;
import java.io.PrintWriter;
class Hero extends Character{
public int health;
public boolean isalive;
private String name;
private String Class;
Hero(String name, int health, String Class){
super(name, health);
this.Class = Class;
this.health = 100;
this.isalive = true;
}
public String getname(){
return name;
}
void save(PrintWriter pw){
pw.println(name);
// Hero.save(pw);
}
public void damage(int hit){
this.health -= hit;
}
public boolean isAlive(){// Check my parameters and the code in the method.
if(this.health > 0){
return true;
}
else{
return false;
}
}
public void kill(){
this.health = 0;
}
public void girlTaunt(){
System.out.println(this.name + ":YOU'RE SO BOGUS! YOU SHOULD BE LIKE ME, A STRONG INDEPDENT SEXY MAN");
}
public void boyTaunt(){
System.out.println(this.name + "I am SO glad I dumped you. Whew. Dodged a bullet with that one!");
}
public void Soy(){
for(int i = 0; i < 1; i++){
System.out.println("Lets do this");
}
}
}
Main Class: 主类:
import java.util.*;
import java.util.ArrayList;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
/**
* a main class that makes a scanner and a inventory object
* it prints out the options and then asks what the player wants to do
* each option utilizes the methods in the other classes, it quites if you press 6
* it's in a do while so it never stops unless you wnat to stop
*/
public class Main{
public static void main(String[] args){
Scanner bob = new Scanner(System.in);
Inventory stuff = new Inventory(100000000);
Room room = new Room(20,20);
Room room2 = new Room(20,20);
Room room3 = new Room(20,20);
System.out.println(" ");
System.out.println(" ~ WELCOME TO ONE ROOM DUNGEON GAME ~");
System.out.println(" ");
System.out.println(" YOU, THE HERO HAS ENTERED THE DEMON'S KINGS ");
System.out.println(" CASTLE. SADLY, HIS CASTLE ONLY HAS ONE ROOM");
System.out.println(" BECAUSE HE HAS A SMALL BRAIN AND GOT RIPPED OFF");
System.out.println(" BY THE MOST FAMOUS AND HANDSOME CON-ARTIST, SUAD PARVEZ.");
System.out.println(" YOU ARE HERE TO KILL THE DEMON KING, GARRETTE DAYKWON AND ARI.");
System.out.println(" BECAUSE THEY HAVE STOLEN ALL THE CURRY IN THE LAND OF 'SCHOP SCHOP' ");
System.out.println(" RESTORE THIS LANDS GLORY AND DEFEAT THE DEMON KING!");
System.out.println(" ");
System.out.println(" ");
System.out.println(" How to play:");
System.out.println(" You, the Hero, will be represented on the board by the '+' symbol.");
System.out.println(" Your enemy, the Demon King Garret, will be represented by the ':(' symbol.");
System.out.println(" He is known for being thirsty and pacing back and forth. Watch out, he is tough as fudge");
System.out.println(" Ari THE WOMAN will be represented by the '?' symbol.");
System.out.println(" She has gone crazy and roams aimlessly around the room, you may need to chase her.");
System.out.println(" ");
System.out.println(" Move throughout the board collecting as many items '<$>' as you can to defeat the game.");
System.out.println(" If you do happen to run into either enemy, you must dual it out to see who wins!");
System.out.println(" Preferably you please, bob already went in there and we have no idea where he is..");
System.out.println(" ");
System.out.println(" Press 'w' to move UP. ");
System.out.println(" Press 's' to move DOWN. ");
System.out.println(" Press 'a' to move LEFT. ");
System.out.println(" Press 'd' to move RIGHT. ");
System.out.println(" Press 'i' to access inventroy ");
System.out.println(" Press 'q' to activate not alive mode");
System.out.println(" ");
System.out.println(" ");
System.out.println(" WHAT IS YOUR NAME HERO??");
System.out.println(" ");
System.out.print(" ");
String Name = bob.next();
System.out.println(" ");
System.out.println(" WHAT IS YOUR CLASS??");
System.out.println(" (FratBoi) (JucciBoi) (NerdBoi) (Arsalan) ");
System.out.println(" ");
System.out.print(" ");
String Class = bob.next();
Hero bro = new Hero(Name, 100, Class);
stuff.noobGear();//to give the hero a default gear weapon and armour
System.out.println(" ");
System.out.println(" Remember " + bro.getname() + ", to see the instrucitons, press 'p'.");
System.out.println(" ");
System.out.println(" Now remember not to ask any questions becuase this is a video game");
System.out.println(" ");
System.out.println(" ");
Enemy Garret =new Enemy("Garret THE DEMON KING", 200, new Item(ItemType.weapon,"BasketBall", 4, 70, 70));//makes the enemy garret and gives him a weapon
Enemy Ari = new Enemy("Ari THE WOMAN", 200, new Item(ItemType.weapon,"Cellphone", 345,543,60));//creates the enemy ari and gives her a weapon
String input = " ";//declares and initializes the input variable
//fully creates the rooms
room.create();
room2.create2();
room3.create3();
while(bro.isAlive()){//keeps going until player is dead
System.out.println(" ");
//prints out board depending on location
if(room.isHere()){//if in the first room
room.print();//prints out the room
}//end of if
else if(room2.isHere()){//if in the second room
if(Ari.isAlive()){//checks to see if ari is alive
room2.printA();//if so print out room with her in it
}
else{
room2.print();//if not, print out room without her cuz she dead
}
}//end of else if
else if(room3.isHere()){//if in the third room
if(Garret.isAlive()){//check to see if garret is alive
room3.printG();//if so print out the room wit hhim in it
}
else{
room3.print();//if not print out room without him cuz he dead
}
}//end of else if
System.out.println(" ");
System.out.println(" ");
System.out.print(" ");
input = bob.next();//input from user
//if statment for movment
if(input.equals("w") || input.equals("a") || input.equals("s") || input.equals("d")){
room.MOVE(input);//to move the character in the room
if(room3.isHere() && room3.garretFight() && Garret.isAlive()){
System.out.println(" WHAT? YOUR FACING " + Garret.getname() + "!! YOU BETTER WATCH OUT.");
System.out.println(" HE WAS LOOKING AT YOU THROUGH HIS TELESCOPE BEFORE YOU CAME HERE!");
System.out.println(" AND HE LIKED WHAT HE SAW. PROBABLY ENOUGH TO WANT A BABY WITH YOU!");
System.out.println(" DON'T ASK HOW I KNOW THAT WE DON'T HAVE TIME");
System.out.println(" ");
while(bro.isAlive() && Garret.isAlive()){
//enemy damage - the armor is the damage the enemy can deal
int enemyhit = Garret.power() - stuff.protection();
//your weapons damage is the damage you can do
int brohit = stuff.power();
System.out.println("Press 'k' to attack");
String attack = bob.next();
if(attack.equals("k")){
//the enemy gets damaged by the hero's hit
Garret.damage(brohit);//the hero's hit is in the parameter
System.out.println(" ");
System.out.println("You attacked Garret with your " + stuff.currentWeapon() + ". You did " + brohit + " damage to him!");
System.out.println(" His health is now " + Garret.health());
System.out.println(" ");
}
else{
System.out.println(" ");
System.out.println("your so dumb that wasn't the letter k");
System.out.println("you deserve to perish!");
System.out.println(" ");
bro.kill();
}
if(Garret.isAlive() && bro.isAlive()){
bro.damage(enemyhit);
System.out.println(" ");
System.out.println("Garret hit you with his " + Garret.equippedWeapon() + ". It did " + enemyhit + " damage!");
System.out.println(" ");
}
}//end of while fight
if(!bro.isAlive()){
System.out.println(" ");
System.out.println(bro.getname() + "!?!?!?! YOU CAN'T DIE NOW!!!");
for(int i = 0 ; i < 6; i++){
System.out.println("AAAAAAHHHHHHHHHHHHHHH");
}
Garret.boyTaunt();
}//end of losing message
if(bro.isAlive()){
System.out.println(" ");
System.out.println(" You have defeated " + Garret.getname() + "!!!!!");
System.out.println(" ");
bro.boyTaunt();
}
}//end of if for garret interaction interaction
if(room2.isHere() && room2.ariFight() && Ari.isAlive()){
System.out.println(" ");
System.out.println(" HOLY COW IT'S " + Ari.getname() + "!! SHE IS WELL KNOWN FOR COMPLAINING");
System.out.println(" NO MAN CAN HANDLE THE PURE TEENAGE DRAMA SHE IS CAPABLE OF SUMMONING");
System.out.println(" IF YOU DON'T BEAT HER QUICK SHE'LL DROWN YOU IN BORING SPEECHES");
System.out.println(" ");
while(bro.isAlive() && Ari.isAlive()){
//enemy damage - the armor is the damage the enemy can deal
int enemyhit = Ari.power() - stuff.protection();
//your weapons damage is the damage you can do
int brohit = stuff.power();
System.out.println(" ");
System.out.println("Press 'k' to attack");
System.out.println(" ");
String attack = bob.next();
if(attack.equals("k")){
//the enemy gets damaged by the hero's hit
Ari.damage(brohit);//the hero's hit is in the parameter
System.out.println(" ");
System.out.println("You attacked " + Ari.getname() + " with your " + stuff.currentWeapon() + ". You did " + brohit + " damage to her!");
System.out.println(" Her health is now " + Ari.health());
System.out.println(" ");
}
else{
System.out.println(" ");
System.out.println("your so dumb that wasn't the letter k");
System.out.println("you deserve to perish");
System.out.println(" ");
bro.kill();
}
if(Ari.isAlive()&& bro.isAlive()){
bro.damage(enemyhit);
System.out.println(" ");
System.out.println("Ari hit you with her " + Ari.equippedWeapon() + ". It did " + enemyhit + " damage!");
Ari.girlTaunt();
System.out.println(" ");
}
System.out.println(" ");
bro.girlTaunt();
}//end of while fight
if(!bro.isAlive()){
System.out.println(" ");
System.out.println(bro.getname() + "!?!?!?! YOU CAN'T DIE NOW!!!");
for(int i = 0 ; i < 8; i++){
System.out.println("AAAAAAHHHHHHHHHHHHHHH");
}
}//end of losing message
if(bro.isAlive()){
System.out.println(" ");
System.out.println(" You have defeated " + Ari.getname() + "!!!!!");
System.out.println(" ");
bro.girlTaunt();
}
}//end of if for ari fight interaction
if(Garret.isAlive()){//if garret is alive, make him move
room3.enemymoveGarret();
}
if(Ari.isAlive()){//if ari is alive , make her move
room2.enemymoveAri();
}
}//end of if for movement
//if statment to see if there is a door or staris leading to other area
if(room.isHere()){//if the player is in the first room
if(room.onDoor()){//and they are at a door
System.out.println(" ");
System.out.println(" NANI?!?!? Your near a door, it leads to the next room..." );
System.out.println(" Want to go through it? 'yes' 'no' ");
System.out.println(" ");
//ask them if they want to enter and go to next room
String response = bob.next();
if(response.equals("yes")){
System.out.println(" ");
System.out.println(" What a brave person you are");
for(int i = 0; i < 300 ; i++){
System.out.println(" YYYYYYYYYYYYYYYYYYYYYYYYYYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
}
System.out.println(" ");
room.ghost();//clear out the players position in the current room
room2.ghost();//clear our the room leading up just in case
room2.teleportTo(1,1);//add the players position in the coming room
System.out.println(" ");
System.out.println(" Welcome to the second room");
System.out.println(" ");
}
else{
System.out.println(" um because you didn't say 'yes' i cannot consensually let you go through");
System.out.println(" ");
}
}//end of if
}
else if(room2.isHere()){
if(room2.onStairs()){//and they are at a door
System.out.println(" ");
System.out.println(" NANI?!?!? Your near somes stairs, it leads to the next room... up above...spoooooookyyyyyy" );
System.out.println(" Want to go up it? 'yes' 'no' ");
System.out.println(" ");
//ask them if they want to enter and go to next room
String response = bob.next();
if(response.equals("yes")){
System.out.println(" ");
System.out.println(" Get ready for a lot of walking");
for(int i = 0; i < 300 ; i++){
System.out.println(" YYYYYYYYYYYYYYYYYYYYYYYYYYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
}
System.out.println(" ");
room2.ghost();//clear the players position in the current room
room3.ghost();//clear the players position in the coming room just in case
room3.teleportTo(1,1);//put the player in the next room
System.out.println(" ");
System.out.println(" Welcome to the third room");
System.out.println(" ");
}
else{
System.out.println(" that doens't sound like a 'yes'");
System.out.println(" ");
}
}//end of if for if the player is at the stairs that lead up
else if(room2.onDoor()){//and they are at a door to go back down
System.out.println(" ");
System.out.println(" HHHHHHHHHHMMMMMMMMMMMMM that's the door that leads back to the other room." );
System.out.println(" Want to go through it? 'yes' 'no' ");
System.out.println(" ");
//ask them if they want to enter and go to next room
String response = bob.next();
if(response.equals("yes")){
System.out.println(" ");
System.out.println(" okaaayyyyy");
for(int i = 0; i < 300 ; i++){
System.out.println(" YYYYYYYYYYYYYYYYYYYYYYYYYYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
}
System.out.println(" ");
room.ghost();//clears the player's position in the current room
room2.ghost();//clears the player's position in the room they're going to just in case
room.teleportTo(9,13);//put the players position in the room down below
System.out.println(" ");
System.out.println(" Welcome to the first room");
System.out.println(" ");
}
else{
System.out.println(" Come back when your answer is 'yes'");
System.out.println(" ");
}
}//end of if
}
else if(room3.isHere()){//if they are in the third room
if(room2.onStairs()){//and they are at some stairs that leads back down
System.out.println(" ");
System.out.println(" These are the same stairs you went up from, taking these again will take you downy" );
System.out.println(" Want to go down it? 'yes' 'no' ");
System.out.println(" ");
//ask them if they want to enter and go to last room
String response = bob.next();
if(response.equals("yes")){
System.out.println(" ");
System.out.println(" Get ready for a lot of walking");
for(int i = 0; i < 300 ; i++){
System.out.println(" YYYYYYYYYYYYYYYYYYYYYYYYYYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
}
System.out.println(" ");
room2.ghost();//clears the players position in the room they are going to just in case
room3.ghost();//clears the players position in the room they are currently in
room2.teleportTo(18,18);//adds the players location in the laast room where the stairs end
System.out.println(" ");
System.out.println(" Welcome to the second room");
System.out.println(" ");
}
else{
System.out.println(" that doens't sound like a 'yes'");
System.out.println(" ");
}
}//end of if for if the player is at the stairs that lead down
}//end of if there is a door if statment
//for the input if you need to look at directions again
if(input.equals("p")){
System.out.println(" ");
System.out.println(" How to play:");
System.out.println(" You, the Hero, will be represented on the board by the '+' symbol.");
System.out.println(" Your enemy, the Demon King Garret, will be represented by the ':(' symbol. He is super sad so he walks in a path");
System.out.println(" Ari THE WOMAN will be represented by the '?' symbol. She is CRAZY so you need to chase her");
System.out.println(" ");
System.out.println(" Move throughout the board collecting as many items '<$>' as you can to find a powerful weapon.");
System.out.println(" If you do happen to run into either enemy, you must dual it out to see who wins!");
System.out.println(" ");
System.out.println(" Press 'w' to move UP. ");
System.out.println(" Press 's' to move DOWN. ");
System.out.println(" Press 'a' to move LEFT. ");
System.out.println(" Press 'd' to move RIGHT. ");
System.out.println(" Press 'i' to access inventroy ");
System.out.println(" Press 'q' to activate not alive mode");
System.out.println(" ");
}//end of if for printing controls
if(input.equals("q")){
bro.kill();
}//end of if for quit
//input for inventory
if(input.equals("i")){
boolean go = true;//variable to make loop go forever until it's false
do{
System.out.println(" ");
System.out.println("Your current weapon is " + stuff.currentWeapon());
System.out.println("Your current Armor is " + stuff.currentArmor());
System.out.println(" ");
System.out.println(" 1. Print the inventory");
System.out.println(" 2. Drop an item");
System.out.println(" 3. Equip weapon");
System.out.println(" 4. Equip armor");
System.out.println(" 5. quit");
System.out.println(" ");
int choice = bob.nextInt();
switch(choice){
case 1://print inventory
stuff.print();
break;
case 2://drop item
stuff.drop();
break;
case 3://equp weapon
stuff.equipWeapon();
break;
case 4://equp armor
stuff.equipArmor();
break;
case 5://exit
try{
FileOutputStream file = new FileOutputStream("data.txt");
PrintWriter pw = new PrintWriter(file);
bro.save(pw);
pw.close();
}catch(FileNotFoundException e){
System.out.println("not found");
}
go = false;
break;
}//end of swtich
}while(go);//end of do while
}//end of if of inventory choice
if(room.itemonfloor()){
stuff.add(room.pickup());
}//end of if for checking if item is on the floor.
if(!Garret.isAlive() && !Ari.isAlive()){
for(int i = 0 ; i < 5 ; i++){
System.out.println(" YYYYYYYYAAAAAAAAAAAAAAAAAAAAAAAAYYYYYYYYYYY");
System.out.println(" YOU HAVE WON ");
}
System.out.println(" ");
System.out.println(" YOU HAVE DONE IT, YOU HAVE KILLED THE DEMON KING AND HER QUEEN");
System.out.println(" The curry can now be restored to the land of 'SCHOP SCHOP'");
System.out.println(" Now you can finally rest in peace and die. ");
System.out.println(" Are you ready to die? ");
System.out.println(" ");
String response = bob.next();
System.out.println(" ");
System.out.println(" What's that?? I can't hear you because I am a virtual machine. Oh well.. lolz You probably said 'yes' ");
System.out.println(" Thank you for your service " + bro.getname() + ". Good game.");
System.out.println(" ");
bro.kill();
}//end of if for winning message
}//end of while alive check
}//end of main
}//end of Main
please tell me if I did inheritance right
请告诉我我继承权是否正确
You didn't. 你没有
You have private variables name
and health
in the base class with no getters or setters. 您在基类中有私有变量
name
和health
,没有getter或setter。 Then you have declared variables with the same names in the child classes. 然后,在子类中声明了具有相同名称的变量。
Those are different variables. 这些是不同的变量。
In addition the visibility of the variables is inconsistent. 另外,变量的可见性不一致。 In some cases they are
private
, in others package private, and others public
. 在某些情况下,它们是
private
,在其他情况下则是私有的,而其他则是public
。
You need to: 你需要:
private
private
public
or projected
) getters and setters for them as required. public
或projected
)吸气剂和吸气剂。 It is not clear if this will fix all of your problems, but it is a start. 目前尚不清楚这是否可以解决您的所有问题,但这只是一个开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.