2016-05-19 4 views
0

私が第3のクラスゲームから私のクラスのlykkesHestインスタンスにアクセスしようとしてきました。しかし、現在の文脈でインスタンスが存在しないことを私に伝えます。lykkesHest hestが公開クラスとして作成されていないためです。しかし、私が試してみるとlykkesHest公然のクラスではなく、それは私に奇妙なエラーをたくさん与えます。私はそれがデンマーク語であるので、ユーザーに出力されるテキストをお詫び申し上げます。第三のクラスからの第二のクラスで行われたC#のアクセスクラスのインスタンス

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Lykkes_Hest 
{ 
    // The class with the main game hidden inside it! 
    class game 
    { 
     public static int money; 
     public static double fodder; 
     public game() 
     { 
      money = 1000; 
      fodder = 1; 
     } 
     public static void help() 
     { 
      Console.WriteLine("#######################"); 
      Console.WriteLine("###### - HJÆLP - ######"); 
      Console.WriteLine("#######################"); 
      Console.WriteLine(); 
      Console.WriteLine("Kommandoer du kan bruge:"); 
      Console.WriteLine("Hjælp - viser dig denne skærm"); 
      Console.WriteLine("fodre hesten - giver din hest mad hvis du har noget"); 
     } 
     public static void exitSafely() 
     { 
      Console.WriteLine("Er du sikker på at du vil forlade spillet?"); 
      Console.WriteLine("(Ja eller nej)"); 
      if(Program.getBool()) 
      { 
       Environment.Exit(0); 
      } 
     } 
     public void RegisterCommand() 
     { 
      string command = Console.ReadLine(); 
      switch(command) 
      { 
       case "exit": 
        exitSafely(); 
        break; 
       case "vent": 
        lykkesHest.PassDay(); 
        break; 
       default: 
        Console.WriteLine("Ikke genkendt kommando."); 
        break; 
      } 
     } 
    } 
    // A class for making a horse 
    class horse 
    { 
     public string name; 
     public double age = 0; 
     public string color; 
     public double hunger = 50; 
     public double boredom = 50; 

     public horse() 
     { 
      Console.WriteLine("Hvad skal din hest hedde?"); 
      name = Console.ReadLine(); 

      Console.WriteLine("Hvor mange år er din hest?"); 
      while (age == 0) { 
       try 
       { 
        age = Convert.ToInt32(Console.ReadLine()); 
       } catch { 
        Console.WriteLine("Do skal skrive et tal."); 
       } 
      } 

      Console.WriteLine("Hvilken farve har din hest?"); 
      color = Console.ReadLine(); 
     } 
     public void Print() 
     { 
      Console.WriteLine("Din hest heder {0} er {1} år gammel og har farven {2}", name, age, color); 
     } 
     public static void Die(string cause) 
     { 
      Console.WriteLine("Din hest døde af {0}........", cause); 
      Console.WriteLine("Du burde passe bedre på den en anden gang!"); 
      Console.WriteLine(); 
      Console.WriteLine("Klik på en knap for at afslutte."); 
      Console.ReadKey(); 
      Environment.Exit(0); 
     } 
     public void PassDay() 
     { 
      hunger =+ 10; 
      boredom =+ 10; 
      if(hunger >= 100 || boredom >= 100) 
      { 
       horse.Die("sult"); 
      } else if(boredom >= 100) 
      { 
       horse.Die("Kedsomhed"); 
      } 
     } 
    } 
    class Program 
    { 
     public static bool getBool() 
     { 
      while (true) 
      { 
       string answer = Console.ReadLine(); 
       if (answer.ToLower() == "ja") 
       { 
        return true; 
       } 
       else if (answer.ToLower() == "nej") 
       { 
        return false; 
       } 
       Console.WriteLine("Du må kun skrive ja eller nej"); 
      } 
     } 
     static void Main(string[] args) 
     { 
      // Get passowrd 
      Console.WriteLine("HVAD ER KODEORDET FOR AT MÅ SPILLE DET HER AMAZING SPIL?"); 
      if (Console.ReadLine().ToLower() != "what is password?") 
      { 
       Environment.Exit(0); 
      } 

      // Initialize the game 
      game Spil = new game(); 

      Console.WriteLine("###############################"); 
      Console.WriteLine("######## -Lykkes Hest- ########"); 
      Console.WriteLine("###############################"); 
      Console.WriteLine(); 
      Console.WriteLine("Velommen, du spiller version 001"); 
      Console.WriteLine(); 

      // Create a basic horse 
      horse lykkesHest = new horse(); 
      lykkesHest.Print(); 
      Console.WriteLine("Er dette korrekt?"); 
      while(getBool() == false) 
      { 
       lykkesHest = new horse(); 
      } 

      // Optional tutorial 
      Console.WriteLine(); 
      Console.WriteLine("Vil du gerne lære de kommandoer du kan bruge?"); 
      Console.WriteLine("(Ja eller nej)"); 
      if (getBool()) 
      { 
       Console.WriteLine(); 
       Console.WriteLine("Lykkes hest er et interaktivt sandbox spil hvor du styrer EN FUCKING HEST!!"); 
       Console.WriteLine("Du bestemmer selv om du vil have din hest til at en flotter præmie hest eller en sy' hurtig ræcer!"); 
       Console.WriteLine(); 
       Console.WriteLine("Du spiller ved at skrive nogle få kommandoer ind i kommando linjen (Den du læser fra lige nu)."); 
       Console.WriteLine(); 
       Console.WriteLine("Hvis du nogensinde glemmer en kommando eller vil lære nogle nye kan du altid skrive 'Hjælp' for at få dem vist."); 
       Console.WriteLine("Og hvis du nogensinde vil stoppe spillet kan du gøre det ved at skrive 'exit'"); 
      } 

      Console.WriteLine(); 
      Console.WriteLine(); 

      // Loop the rest of the game 
      while (true) 
      { 
       Console.WriteLine("#####################################################"); 
       Console.WriteLine("Penge: {0} - Foder: {1}", game.money, game.fodder); 
       Console.WriteLine("Hestens sult: {0} - Hestens kedsomhed: {1}", lykkesHest.hunger, lykkesHest.boredom); 
       Console.WriteLine("#####################################################"); 
       game.RegisterCommand(); 
       Console.WriteLine(); 
      } 
     } 
    } 
} 
+1

エラーが発生した行をマークできますか? – Sean

答えて

3

ゲームは馬の管理についてであれば、(あなたが通常の命名規則に従うようにゲームを呼ぶべきである)ゲームクラスは、タイプの馬のフィールドを含める必要がありますが:

class Horse 
{ 
    public int Age{ get; private set }; 
    public int Hunger { get; private set; } 
    public string Name { get; private set; } 

    public Horse(string name) 
    { 
     Name = name; 
     Age = 0; 
     Hunger = 0; 
    }  

    public bool IsDead() 
    { 
     return Hunger >= 100 || Age > 3650; 
    } 

    void PassDay() 
    { 
     Age = Age + 1; 
     Hunger = Hunger + 1; 
    } 

    void Feed() 
    { 
     Hunger = 0; 
    } 

    // etc. 

    public override string ToString() 
    { 
     return string.Format("{0} Age {1}", Name, Age); 
    } 
} 

どちらかゲームを作成するそれは自分の馬のインスタンス、またはゲームのコンストラクタに馬のインスタンスを渡す必要があります。 ゲームがの1つを馬で管理していて、ゲームが常に正確にの1つの馬を持っている場合は、それをコンストラクタに割り当てて馬のないゲームさえできないようにすることをお勧めします。

例をもっと明瞭にするために、ゲームをある程度翻訳(および変更)しました。

class Game 
{ 
    private readonly Horse horse; 
    private int money; 
    // more things 

    public Game(Horse horse, int money) 
    {    
     this.horse = horse; 
     this.money = money; 
    } 

    public bool IsOver 
    { 
     get { return horse.IsDead(); } 
    } 

} 

メインプログラムクラスは非常に異なります。これは静的クラスであり、静的メソッドのみを含みます。他のクラス(馬、ゲーム)は、オブジェクトを作成するクラスです。あなたは馬などがあるゲームを持っています。

public static class Program 
{ 
    private static Game game; 

    public static void Main() 
    { 
     game = CreateNewGame(); 
     do 
     { 
      // get input 
      // update game state 
     } while (!game.IsOver); 
    } 

    private static Game CreateNewGame() 
    { 
     Horse horse; 
     do 
     { 
      horse = CreateRandomHorse(); 
      Console.WriteLine("Is this ok? : " + horse); // Calls horse.ToString() 
     } while (!GetBoolInput()); 

     // have a horse, can make a game 
     return new Game(horse, 100); 
    } 
} 
+0

ありがとう!これは本当に便利でした。 –

+0

コーディングを始めたばかりのときに、誰かに正しいことを伝えてヒントを与えるのが最も役に立ちます。 –

+0

'do'ブロックで' horse'を宣言しています。このブロックの外では使用できません。私はこれもオリジナルの著者の問題だと思います。 –

関連する問題