Untitled
unknown
plain_text
a year ago
15 kB
4
Indexable
Never
/* * Created by SharpDevelop. * User: oantb * Date: 2022-04-28 * Time: 23:41 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using Microsoft.VisualBasic; using System; using System.Xml.Linq; namespace kodskal_programmering_23 { public abstract class animal //Bas-klassen? { /*För betyg E -------------------------------------------------------------- Ni ska lägga till två egna djur med lämpliga värden och beteenden alltså - två ytterligare djur utöver cat, dog och puppy ---------------------------------------------------------------------------*/ /*Vad noggranna med att läsa in er på vad det innebär att klassen är abstract" *Läs också studieguiden och titta på filmerna så vet ni varför vi använder åtkomstdirektivet protected"*/ protected int Age; protected string Name; protected bool Hungry; protected string Favourite_food; protected animal(int _Age, string _Name) //Konstruktor { /*I konstruktorn ska värden för "Age" och "Name" sättas. * "Hungry" ska sättas till false och "Favourite_food" sätter ni * till djurets favoritmat. Förslagsvis sätter ni det till "köttbullar".*/ this.Age = _Age; this.Name = _Name; Hungry = false; Favourite_food = "köttbullar"; } /* Var noggranna med att ni vet innebörden av virtual. */ //Virtual tillåter att man får lov att skriva över public virtual void eat(string food) { if (Favourite_food == food) { /* Lämplig text ska skrivas ut och djuret är mätt*/ Console.WriteLine("Djuret är mätt"); } else { /* Lämplig text ska skrivas ut och djuret är hungrigt */ Console.WriteLine("Djuret är hungrigt"); } } public string getname() { /*Retunera namnet*/ return Name; } public virtual void interact() { Console.WriteLine("Djuret viftar glatt på svansen"); } /*För betyget C ---------------------------------------------------------- För denna svårighetsgrad ska en överlagrad metod skapas för interact() metoden Den överlagrade metoden tar emot ett bool-värde Om värdet är true kommer du kasta en boll till djuret som ska reagera på ett lämpligt sätt. Exempelvis kan hundens ålder avgöra hur den beter sig. Är djuret hungrigt kommer det inte jaga efter bollen Om värdet false skickas med så kommer orginalmetoden för interact() att anropas från den överlagrade metoden --------------------------------------------------------------------------*/ public override string ToString() // Metod som förbereder utskrift av djur-information { /*Skapa en lämplig utskrift här för när vi skriver ut ett objekt.*/ return Favourite_food; // Osäker på vad som ska returneras här - la favourite_food så länge } } class cat : animal //":" = Katt ärver från Animal { public cat(int _Age, string _Name) : base(_Age, _Name) { /*I konstruktorn ska värden för "Age" och "Name" sättas. * "Hungry" ska sättas till false och "Favourite_food" sätter ni * till djurets favoritmat. Förslagsvis sätter ni det till "köttbullar".*/ Name = _Name; Age = _Age; Hungry = false; Favourite_food = "sill"; } /*Skapa en konstruktorn som har värden Age och String om argument*/ public override void interact() //skriver över metoden interact() i Animal/bas-klassen { Console.WriteLine("Katten spinner"); } public override void eat(string food) { /* För betyg C ----------------------------------------------------- Katten ger sig ut på jakt efter en mus Används slumptalet ovan som ger ett slumptal - 1 eller 2. Om det blir ett så lyckas katten fånga en mus och katten blir mätt Annars är katten fortfarande hungrig -------------------------------------------------------------------*/ if (food == Favourite_food) { Console.WriteLine("Kissen tuggar glatt i sig {0}", Favourite_food); base.eat(food); } else { Console.WriteLine("Katten jagar efter en mus"); } } } class dog : animal { public dog(int _Age, string _Name) : base(_Age, _Name) { /*Skapa en konstruktor som har värden Age och String om argument*/ Name = _Name; Age = _Age; //Lägga till favourite food? } public override void interact() //skriver över metoden interact() i Animal/bas-klassen { Console.WriteLine("Hunden viftar glatt på svansen"); } public override void eat(string food) //Dog ärver från metoden eat och skriver ut nedan? Trots override? { if (food == Favourite_food) { Console.WriteLine("Hunden smaskar i sig", Favourite_food); base.eat(food); } else { Console.WriteLine("Hunden leker med en boll"); } } } class puppy : dog // Puppy ärver från Dog { private int months; /*Skapa en konstruktorn som har värden Age och String om argument Dessutom ska ytterligare ett värde läggas till och skickas med när objektet skapas Det är värdet månader. Och det ska inte skickas till base eftersom det inte finns i basklassen. Värdet för age (i år) sätts till noll (0)*/ public puppy(int _Age, string _Name) : base(_Age, _Name) { Name = _Name; Age = _Age; months = 0; months++; } } /* Lägga till två egna djur med lämpliga värden och beteenden * alltså - två ytterligare djur utöver cat, dog och puppy*/ class bird : animal { public bird(int _Age, string _Name) : base(_Age, _Name) { /*Skapa en konstruktorn som har värden Age och String om argument*/ Name = _Name; Age = _Age; } public override void interact() //skriver över metoden interact() i Animal/bas-klassen { Console.WriteLine("Fågeln sjunger"); } public override void eat(string food) { if (food == Favourite_food) { Console.WriteLine("Fågeln pickar i sig maten", Favourite_food); base.eat(food); } else { Console.WriteLine("Fågeln flyger runt"); } } } class rabbit : animal { public rabbit(int _Age, string _Name) : base(_Age, _Name) { /*Skapa en konstruktorn som har värden Age och String om argument*/ Name = _Name; Age = _Age; } public override void interact() //skriver över metoden interact() i Animal/bas-klassen { Console.WriteLine("Kaninen skuttar glatt"); } public override void eat(string food) { if (food == Favourite_food) { Console.WriteLine("Kaninen tuggar glatt i sig", Favourite_food); base.eat(food); } else { Console.WriteLine("Kaninen hoppar runt"); } } } /*Petowner är den klass som "äger" djuren och att dessa lagras i en vektor * Petowner kan mata djuren via en metod som heter feed()*/ class petowner { private string name; //private animal[] djur = new animal[3]; //För E går det bra att ha tre separata variabler istället private List<animal> animal_List = new(); // I denna lista har vi sagt att vi vill lägga djur public petowner() { /*Skapa tre stycken djur-objekt Exempelvis djur[0] = new cat(4, "Pelle")*/ } public void Run() { /*Här skapar ni en meny där man kan välja att göra lite saker. Menyn kan man i princip lägga till sist Innan dess kan man köra metoder genom att koda detta direkt här i koden Exempel djur[0].interact(); */ // Skapa meny var cat = new cat(5, " Missy"); // Ett objekt: katt animal_List.Add(cat); // Lägga till djur var dog = new dog(4, " Bruno"); // Ett objekt: dog animal_List.Add(dog); // Lägga till djur var puppy = new puppy(2, " Peaches"); // Ett objekt: puppy animal_List.Add(puppy); // Lägga till djur var bird = new bird(6, " Pelle"); // Ett objekt: fågel animal_List.Add(bird); // Lägga till djur var rabbit = new rabbit(3, " Stampe"); // Ett objekt: kanin animal_List.Add(rabbit); // Lägga till djur Console.WriteLine("Vad vill du göra?"); Console.WriteLine("Välj 1 för feed och 2 för play. "); int val = int.Parse(Console.ReadLine()); if (val == 1) { //Console.WriteLine("feed"); // säger just nu bara feed - byt ut och gör feed feed(); //Hämtar metoden feed? } else if (val == 2) { //Console.WriteLine("play"); // säger just nu bara play - byt ut och gör play play(); //Hämtar metoden play? } //animal_List[0].interact(); /*for (int i = 0; i < animal_List.Count; i++) { animal_List[i].interact(); }*/ } /*public void print_animals() { Denna metod kan användas för att skriva ut alla djur med en loop }*/ public void feed() { /*I denna metod kan petowner mata djur genom att anropa ett djurs metod "eat" * Maten man skickar med som argument ska testas mot djurets favoritmat Man kan anropa en metod typ djur[1].eat("köttbullar"); */ Console.WriteLine("Vilket djur vill du mata?"); for (int i = 0;i < animal_List.Count; i++) { Console.WriteLine("Välj " + i + " för " + animal_List[i].GetType().Name + animal_List[i].getname()); //Gettype hämtar djurets ras } int valtDjur = int.Parse(Console.ReadLine()); //Lägga valtDjur i en variabel som siffra istället för string Console.WriteLine("Du valde: " + valtDjur + " " + animal_List[valtDjur].getname()); Console.WriteLine("Vad vill du mata djuret med?"); string svar = Console.ReadLine(); //sparar användarens svar animal_List[valtDjur].eat(svar); // skickar in variabeln svar i eat } public void play() { /*I denna metod kan petowner leka med djur genom att anropa ett djurs metod "interact"*/ /*Om djuret leker så blir det sedan hungrigt*/ //Är nedan verkligen rätt? Anropar ej metoden interact?? Ska kanske nedan kod in under metod interact? Console.WriteLine(); Console.WriteLine("Vilket djur vill du leka med?"); for (int i = 0; i < animal_List.Count; i++) { Console.WriteLine("Välj " + i + " för " + animal_List[i].getname()); } int valtDjur = int.Parse(Console.ReadLine()); //Lägga valtDjur i en variabel som siffra istället för string Console.WriteLine("Du valde att leka med: " + valtDjur + " " + animal_List[valtDjur].getname()); } } /* FÖr betyget A----------------------------------------------------- För denna svårighetsgrad så ska ni skapa en klass som heter boll. Denna boll ska ha lämpliga värden för att beskriva bollen och där color ska finnas. Bollen ska också ha ett värde för quality samt en metod som heter lower_quality() och som har ett heltal som argument. Den sistnämnda metoden innebär att olika djur skadar bollen om de tuggar på den. Djurägaren ska äga tre bollar med olika färg. Vilket innebär att klassen petowner har tre objekt av klassen ball. En ide här är att man låter djuren har en favoritfärg och bara jagar efter bollen med rätt färg Ni kan själva välja om dessa ska ligga i en vektor eller som tre separata värden. Metoden interact med ett bool-värde som argument ska nu ändras. Metoden ska istället ha ett objekt av klassen boll som argument. När vi sedan leker med ett djur kan djurägaren välja att skicka med en boll som djuret reagerar på. Om en hund tar emot en boll kan hunden tugga lite på bollen som sänker kvaliteten på bollen via metoden lower_quality. ----------------------------------------------------------------------*/ class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); petowner Jocke = new petowner(); Jocke.Run(); /*Via metoden Run som tillhör objektet Jocke så styrs hela programmet". * Objektet Jocke skapas av klassen petowner. * Från detta nya objekt körs metoden Run() som hela programmet utgår ifrån. * I denna metod ska en meny visas där man kan genomföra olika aktiviteter * När metoden Run är klar (om man väljer att avsluta menyn) så kommer inget mer att hända */ // TODO: Implement Functionality Here //Console.Write("Press any key to continue . . . "); //Console.ReadKey(true); } } } //kodskal djuren_C#.cs //Visar kodskal djuren_C#.cs.