5 svar
335 visningar
Ahmad94 37
Postad: 25 feb 2023 18:38

programmering 2, joppes family

Hej 

1. jag har en uppgift och har löst en stor del av den, men nu fastnade på att hur man kan veta den aktuella kvalitet av bollen. För example om man kör metoden interact i class dog kvalitet minskar 2, och sedan det finns i meny en metod för att check on ball, när jag denna metod jag får alltid 10, men det måste skrivas ut 8 om man hunden lekte med bollen en gång eller 6 om två gånger. hur kan göra det .

2. Och jag lyckades inte hitta ett sätt att om man vill leka med något  djur av listan så det finns chans 50 procent att djuret är hungrig och det funkar bra, men det är inte kopplat till att om man matar djuren så denna mening att djuret är hungrig försvinner, utan om vill leka med djuren det fortfarande att kanske 50 procent är hungrig. 

 

den här är min kod  :

namespace Project116
{
    internal class Class1
    {
        public static void Main(string[] args)
        {
            Petowner petowner = new Petowner();
            petowner.Menu();
        }
    }
    class Petowner
    {

        private int age_joppe { get; set; }

        private List<Animal> pets_list = new List<Animal>();
        private BALL ball;
        public Petowner() {

            ball =new  BALL ();
        }
    
    
        public Petowner(int age = 0)
        {
            age = age_joppe;

            pets_list.Add(new Cat());
            pets_list.Add(new Dog());
            pets_list.Add(new Puppy());
        }
      private BALL Ball { get { return ball; } }

        public void Fetch()
        {
            BALL ball = new BALL("", 10);
            int meny2 = 0;

            do
            {

                Console.WriteLine("********************************");
                Console.WriteLine("1. För att leka katten ");
                Console.WriteLine("2. För att lrka med hundem ");
                Console.WriteLine("3. För att leka puupy");
                Console.WriteLine("0. to meny");

                do
                {
                    if (!int.TryParse(Console.ReadLine(), out meny2))
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Snälla bara siffror");
                        Console.ResetColor();
                        meny2 = -1;
                    }
                } while (meny2 < 0);

               
                switch (meny2)

                {
                    case 1:
                        Console.Clear();
                        Cat cat = new Cat();
                        cat.interact(ball);
                        break;
                    case 2:
                        Console.Clear();
                       
                        Dog dog = new Dog();
                        dog.interact(ball);
                       
                        break;
                    case 3:
                        Console.Clear();
                      
                        Puppy puppy = new Puppy("Puppy", 11);
                        puppy.interact(ball);
                        break;
                    default:
                        Console.WriteLine(" ");
                        Console.Clear();
                        break;
                }
                if (meny2 > 3)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Snälla välj bara en av dessa alternativ");
                    Console.ResetColor();


                }
            }
            while (meny2 != 0);


        }
        public void Feed()
        {
            Console.Clear();
            int meny3 = 0;
            do
            {
                Console.WriteLine("Välj djur som du vill mata ");
                Console.WriteLine("");
                Console.WriteLine("1. För att mata katten ");
                Console.WriteLine("2. För att mata hunden");
                Console.WriteLine("3. För att mata puppy");
                Console.WriteLine("0. För exit");
                do
                {
                    if (!int.TryParse(Console.ReadLine(), out meny3))
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Snälla bara siffror");
                        Console.ResetColor();
                        meny3--;
                    }
                }while(meny3<0);
              
                
                switch (meny3)
                {
                    case 1:
                        Console.Clear();
                        Cat cat = new Cat();
                        cat.Hungrig_animal();
                        break;
                    case 2:
                        Console.Clear();
                        Dog dog = new Dog();
                        
                        dog.Eat("");
                        Console.WriteLine();
                        break;
                    case 3:
                        Console.Clear();
                     Dog puppy = new Puppy();
                        puppy.Eat("");
                        break;
                    default:
                        Console.Clear();
                        break;
                }
                if (meny3> 3)
                {
                    Console.WriteLine("");
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Välj bara av alternativ nedan som är mellan 0-3");
                    meny3--;
                    Console.ResetColor();
                    Console.WriteLine("************************************");

                }
            } while (meny3 != 0);
           
        }

        public void List_animals()
        {


            Console.WriteLine("");
            Console.WriteLine("Djuren som finns i detta program som Joppe har är");
            Console.WriteLine("");

            foreach (var pet in pets_list)
            {
                Console.WriteLine("\n" + pet);
            }
            Console.WriteLine("");
            Console.WriteLine("Tryck på random för att tillbaka meny...");
            Console.ReadLine();
            Console.Clear();
        }
               
        public void Check_ball()
        {
            int quality =ball.Quality;
            Console.WriteLine($"den {ball.Color} bollen har nu : {quality} för kvalitet");


        }
        public void Menu()
        {
            int meny = 0;
            do
            {

              
                Console.WriteLine("______________________________________________________");
                Console.WriteLine("");
                Console.WriteLine("Vällkommen till Joppes djur");
                Console.WriteLine("");
                Console.WriteLine("Du kan välja ett djur av listan nedan");
                Console.WriteLine("----------------------------------------------------------");
                Console.WriteLine("\n1. Lek med djuren ");
                Console.WriteLine("\n2. Mata djuren");
                Console.WriteLine("\n3. Lista alla djuren");
                Console.WriteLine("\n4. check on ball");
                Console.WriteLine("\n0. Tryck på noll för att logga ut av programmet");

                do
                {
                    if (!int.TryParse(Console.ReadLine(), out meny))
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Snälla bara siffror");
                        Console.ResetColor();
                        meny = -1;
                    }
                } while (meny < 0);

                if (meny > 4)
                {
                    Console.Clear();
                    Console.WriteLine("");
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Snälla välj bara alternativen som nedan");
                    Console.ResetColor();


                }
                switch (meny)
                {
                    case 1:
                        Console.Clear();

                        Fetch();
                        break;
                    case 2:
                        Feed();
                        break;
                    case 3:
                        Console.Clear();
                        List_animals();
                        break;
                        case 4:
                            Console.Clear();
                      
                        Check_ball();
                       
                        break; 
                    case 0:
                        Console.WriteLine();
                        break;

                }
            } while (meny != 0);
        }

        //public virtuall string ToString()
        //{
        //    return;
        //

    }

    class BALL
    {
        public string Color { get; set; }
        public int Quality { get; set; }

        public BALL(string color = "Röda", int quality = 10)
        {
            Color = color;
            Quality = quality;
        }

        public void LowerQuality(int timesplayed)
        {
          
            if (Quality > 0)
            {
                Console.WriteLine($" Doggy leker och biter den {Color} bollen ");
            }
           
            if (Quality <= 0)
            {
                Console.WriteLine("Bollen är trasig och kan inte leka med längre");

            }
       
          
           
      

        }

        public override string ToString()
        {
            return $"  {Color} {Quality}";
        }


    }
    abstract class Animal
    {
        protected int age { get; set; }
        protected string name { get; set; }
        protected string fav_food { get; set; }
        protected string breed { get; set; }
      
        protected bool hungry { get; set; }
       
        //public int GetAge() { return age; }
        //public string GetName() { return name; }
        //public string GetFavFood() { return fav_food; }
        //public string GetBreed() { return breed; }
        public Animal(string Name = "", int Age = 0, string Fav_food = "", string Breed = "")
        {
            name = Name;
            age = Age;
            fav_food = Fav_food;
            breed = Breed;
           
        }
        public abstract void interact( BALL ball);
       
        public  void Eat(string food)
        {
            int svaret;

            food = "Kött";
            fav_food= food;

            Console.WriteLine($"{name}, Vad vill du mata den ? ");
            Console.Write($"\n1. {fav_food}");
            Console.Write($"\n2. Bröd");
            Console.WriteLine("\n0. Tryck noll för att tillbaka mats meny...");


            do
            {
                if (!int.TryParse(Console.ReadLine(), out svaret))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Snälla bara siffror");
                    Console.ResetColor();
                    svaret--;
                }
            } while (svaret < 0);

           
          
            
           
            if (svaret == 1)
            {
                Console.WriteLine("");
                Console.WriteLine($"{name} åt upp hela telleriken, och är full och tacksam för maten ");
                Console.WriteLine("*********************************************************************");
                hungry = false;

            }
            if (svaret == 2)
            {
                /* Jag har lämnat de tre raderna, för att visa att man kan hantera utskriften 
                 * om djuret får inte sin mat, utan behov till en till metod ( Hungry_animal)*/

                //Console.WriteLine("");
                //Console.WriteLine($"{name} är ledsen och hungrig");
                //Console.WriteLine("*****************************************************");
                Hungrig_animal();
                hungry= true;
            }



            if (svaret > 2)
            {
                Console.WriteLine("");
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Välj bara av alternativ som är mellan 0-2");
                svaret--;
                Console.ResetColor();
                Console.WriteLine("************************************************");
            }

            if (svaret == 0)
            {
                Console.WriteLine("");
                Console.Clear();
            }



        }


        public virtual void Hungrig_animal()
        {

            Console.WriteLine("");
            Console.WriteLine($"{name} är ledsen och hungrig");
            Console.WriteLine("*****************************************************");
        }






        //jag vet inte värför man har denna metod?
        public abstract override string ToString();
    }

   

    class Cat : Animal
    {

        public Cat(string Name="Katty", int Age = 2, string Fav_food = "Tonfisk", string Breed = "Japanese Bobtail") : base(Name, Age, Fav_food, Breed)
        {
            fav_food = Fav_food;
            breed = Breed;
            age = Age;
            name = Name;
           
         
        }
        public override void Hungrig_animal()
        {
            fav_food = "Tonfisk";
            int svaret;
            Console.WriteLine($"{name}, Vad vill du mata den ? ");
            Console.Write($"\n1. {fav_food}");
            Console.Write($"\n2. Kött");
            Console.Write($"\n3. fixa själv ");
            Console.WriteLine("\n0. Tryck noll för att tillbaka mats meny...");


            do
            {
                if (!int.TryParse(Console.ReadLine(), out svaret))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Snälla bara siffror");
                    Console.ResetColor();
                    svaret--;
                }
            } while (svaret < 0);

            if (svaret > 3)
            {
                Console.WriteLine("");
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Välj bara av alternativ som är mellan 0-3");
                svaret--;
                Console.ResetColor();
                Console.WriteLine("*****************************************************");
               

            }



            if (svaret == 1)
            {
                Console.WriteLine("");
                Console.WriteLine($"{name} åt upp hela telleriken, och är full och tacksam för maten ");
                Console.WriteLine("*********************************************************************");
                hungry = true;

            }
            if (svaret == 2)
            {
                Console.WriteLine("");
                Console.WriteLine($"{name} är ledsen och hungrig");
                Console.WriteLine("*****************************************************");

            }
            if (svaret == 3)
            {
                Random random = new Random();
                int hunting = random.Next(0, 2);
                if (hunting == 1)
                {
                
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("");
                    Console.WriteLine("Katten lyckades hitta en mus ");
                    Console.WriteLine("*************************************************");
                    Console.ResetColor();
                    Console.WriteLine("");
                    hungry = false;
                }
                if (hunting == 0)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("");
                    Console.WriteLine("Katten lyckades inte hitta en mus och fortfarande hungrig ");
                    Console.WriteLine("*************************************************************");
                    Console.ResetColor();
                    Console.WriteLine("");
                    hungry = true;

                }
            }

            if (svaret == 0)
            {
                Console.WriteLine("");
                Console.Clear();
            }



        }
        public override void interact( BALL ball)
        {
            Random random = new Random();
            int hunting = random.Next(0, 2);
            Console.Clear();
            if (hunting == 0)
            {
                Console.WriteLine($"{name} är Hungrig, mata henne först");
                hungry = true;
            }
            if (hunting == 1)
            {
                Console.WriteLine($" {name} som är {age} år gamal leker rund om dig");
                hungry = false;
            }
            
            

           
               
        }
        public override string ToString()
        {
            return string.Format($"1. {name} som är {age} år gammal. Sin favorit mat är {fav_food},{name} kommer från {breed} ras");
        }
    }
    class Dog : Animal
    {

        public Dog(string Name = "Doggy", int Age = 7, string Fav_food = "Kött", string Breed = "Alaskan Klee Kai") : base(Name, Age, Fav_food, Breed)
        {
            fav_food = Fav_food;
            breed = Breed;
            age = Age;
            name = Name;
        }

        public override void interact(BALL ball)
        {


            Random random = new Random();
            int hunting = random.Next(0, 2);
            Console.Clear();
            if (hunting == 0)
            {
                Console.WriteLine($"{name} är Hungrig, mata henne först");
                hungry = true;
            }
            if (hunting == 1)
            {

                ball.LowerQuality(0);
                ball.Quality -= 2;
                

                hungry = false;
            }
         

        }

          
anders_k 237
Postad: 25 feb 2023 20:01

Du borde ändra din "interact" till att acceptera en parameter by reference istället. Då kommer du att märka av ändringen utanför metoden också. Annars modifierar du bara kopian.

public abstract void interact( ref BALL ball);
Ahmad94 37
Postad: 26 feb 2023 05:20

Hej

Jag har försökt göra det men det fixade inget, problemet är i metoden check on ball i class petowner och i metoden lowerquality i class ball. För varje gång hunden leker med bollen måste quality av bollen minska 2 och det funkade bra, men jag måste få resten av  quality i metoden check on ball, men jag får alltid 10, för example om hunden  lekte med bollen 2 gånger då kommer quality vara 6, men när jag kör metoden check on ball alltid ger 10. 

Tack på förhand för hjälpen

anders_k 237
Postad: 26 feb 2023 07:22 Redigerad: 26 feb 2023 07:23

Du har flera instanser av Ball.

Du kanske skulle ta och skriva in en WriteLine in din konstruktor så ser du när den skapas.

Eller ännu bättre, använda debuggern.

Ahmad94 37
Postad: 26 feb 2023 17:44

Vilken konstruktor, menar du den konstruktor som jag skapat o början av koden

och kan du snälla ge mig ett sökord som kan hjälpa mig lära hur gör man debuggern

 class Petowner
    {

        private int age_joppe { get; set; }

        private List<Animal> pets_list = new List<Animal>();
        private BALL ball;
        public Petowner() {

            ball =new  BALL ();
        }
    
    
        public Petowner(int age = 0)
        {
            age = age_joppe;

            pets_list.Add(new Cat());
            pets_list.Add(new Dog());
            pets_list.Add(new Puppy());
        }
      private BALL Ball { get { return ball; } }
anders_k 237
Postad: 26 feb 2023 19:00 Redigerad: 26 feb 2023 19:02

Vad jag menar

public BALL(string color = "Röda", int quality = 10)
{
  Color = color;
  Quality = quality;
  Console.WriteLine("New Ball");
}

Du har en BALL instans i Petowner klassen, och du har en deklarerad i Fetch() så istället skapa en BALL och skicka med den överallt så skall se att det löser sig. 

Svara
Close