c#从第三个类

时间:2016-05-19 08:57:44

标签: c#

我一直试图从第三类游戏访问我的班级的实例 lykkesHest 。但它告诉我,当前上下文中不存在实例,因为当 lykkesHest hest时,它不会被制作为公共类。但是,当我尝试将 lykkesHest 改为公共类时,它给了我很多奇怪的错误。我为输出给用户的文字道歉,因为它是丹麦语。

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 个答案:

答案 0 :(得分: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);
    }
}

游戏可以创建它自己的马实例,或者你必须马实例传递给Game的构造函数。 如果游戏管理一个马,并且游戏总是具有一个马,那么在构造函数中分配它是一个很好的做法,这样你甚至不能拥有游戏没有马。

我稍微翻译(并改变了)你的游戏以使例子更清晰。

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);
     }
}