hilfestellung für ein kleines testprogramm c#


#1
bessere kohäsion/kopplung für ein kleines adventure c# ?

hi zusammen. wollte mal fragen, ob mir jemand von euch eine Hilfestellung geben kann, da ich noch nicht allzu lange programmiere und sehr viel Übung brauche.

Ich habe mal ein Bild angehängt, in dem mein Klassenentwurf zu sehen ist.

Vielleicht könntet ihr ja mal einen "Blick" drauf werden, und posten was man in Sachen Kohäsion / Kopplung besser machen muss, da ich wie bereits gesagt noch nicht allzu lange programmiere..

Ich wäre euch zumindest sehr dankbar.

hier mal die Hauptklasse Game zum besseren Verständnis:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace textAdventure2
{
    public class Game
    {
        private Spieler spieler;
        private EingabeVerarbeitung eingabeVerarbeitung;
        private Befehlswörter befehlswörter;
        private Raum aktuellerRaum, wohnungsausgang;
        private Boolean hilfsvariable;
        private CenterText consoleWrite = new CenterText();

        public static void Main()
        {
            Console.Title = "RABI's adventure";
            Console.SetWindowSize(72, 32);

            Game spiel = new Game();

            spiel.initialisiere();
            spiel.start();
        }
        private void initialisiere()
        {
            spieler = new Spieler();
            eingabeVerarbeitung = new EingabeVerarbeitung();
            befehlswörter = new Befehlswörter();
            initialisiereRäume();
            willkommensTextAusgeben();
            hilfsvariable = false;
        }
        private void initialisiereRäume()
        {
            Raum küche, flur, bad, wohnzimmer;

            //Räume erstellen
            küche = new Raum("Küche", "in der Küche", new List<Gegenstand>(new Gegenstand[] { new Gegenstand("eine ", "Couch", "Sieht schon ziemlich alt aus...", 65), new Gegenstand("einen ", "Tisch", "Bricht bald bestimmt auseinander...", 20) }));
            flur = new Raum("Flur", "im Flur", new List<Gegenstand>(new Gegenstand[] { new Gegenstand("eine ", "Komode", "Sie hat 2 Schubladen !", 5), new Gegenstand("ein ", "Telefon", "Es ist ein altes Schnurtelefon...", 1) }));
            bad = new Raum("Bad", "im Bad", new List<Gegenstand>(new Gegenstand[] { new Gegenstand("eine ", "Toilette", "Es liegt noch ******** drin,_jemand hat vergessen die Spülung zu betätigen !", 40) }));
            wohnzimmer = new Raum("Wohnzimmer","im Wohn-, und Schlafzimmer" , new List<Gegenstand>(new Gegenstand[] { new Gegenstand("ein ", "Bett", "Sieht noch so aus als wäre grade jemand aufgestanden...",40), new Gegenstand("einen ", "Schlüssel","Ahh...da sind ja meine Hausschlüssel !", 1) }));
            wohnungsausgang = new Raum( "Ausgang", "im Treppenhaus", new List<Gegenstand>(new Gegenstand[] { new Gegenstand("", "Treppen", "Ganz viele Treppen verteilt auf 4.Etagen !!",1000) }));

            //Durchgänge setzen
            küche.setzeDurchgänge(new List<Raum> { flur });
            bad.setzeDurchgänge(new List<Raum> { flur });
            flur.setzeDurchgänge(new List<Raum> { küche, bad, wohnzimmer, wohnungsausgang });
            wohnzimmer.setzeDurchgänge(new List<Raum> { flur });
            wohnungsausgang.setzeDurchgänge(new List<Raum> { flur });

            //Ausgang sperren
            wohnungsausgang.setzeTür (new Tür ());

            //aktuellen Raum setzen
            aktuellerRaum = bad; 
        } 
        private void start()
        {
            Boolean befehlswortGültig = false;

            while (hilfsvariable == false)
            {
                //Wenn der Ausgang bzw. die Wohnungstür verlassen wurde, das Spiel beenden
                if (aktuellerRaum == wohnungsausgang)
                {
                    hilfsvariable = true;
                    aktuellerRaum.beschreibeRaum();
                    gameOver();
                    break;
                } 

                aktuellerRaum.beschreibeRaum();
                aktuellerRaum.zeigeDurchgänge();
                eingabeVerarbeitung.inputEinlesen(spieler.erteiltBefehl());
                befehlswortGültig = eingabeVerarbeitung.prüfeBefehlswort(befehlswörter.gibEinträgeInListe());

                if (befehlswortGültig) 
                    befehlAusführen(eingabeVerarbeitung.gibBefehlswort());
                else
                    befehlsWortVerweigern();

                Console.Clear();
            }
        }
        private void befehlAusführen(String befehlswort)
        {
            Interaktion interaktion = new Interaktion();
            Gegenstand gegenstand, gegenstandInventar;
            Raum durchgang;
            Tür durchgangHatVersperrteTür;
          
            gegenstand = aktuellerRaum.gibGegenstandWennBekannt(eingabeVerarbeitung.gibWortliste());
            gegenstandInventar = spieler.gibGegenstandAusInventarWennBekannt(eingabeVerarbeitung.gibWortliste());   //wenn der Spieler den Gegenstand nicht besitzt wird NULL zurückgeliefert !
            durchgang = aktuellerRaum.gibDurchgangWennBekannt(eingabeVerarbeitung.gibWortliste());    //wenn der durchgang nicht existiert, wird NULL zurückgeliefert !

            if (durchgang == null)
                durchgangHatVersperrteTür = null;    //und wenns keinen Durchgang gibt, gibts auch keine verperrte Tür... 
            else
                durchgangHatVersperrteTür = durchgang.hatVersperrteTür();

            if ((befehlswort == "betrete") && (durchgang != null) && (durchgangHatVersperrteTür == null)) //wenn ein durchgang exisitert und keine versperrte Tür vorhanden ist
                aktuellerRaum = interaktion.wechsleRaum(durchgang);
            else if ((befehlswort == "betrete") && (durchgang != null) && (durchgangHatVersperrteTür != null) && (spieler.besitztSchlüssel()))//wenn ein durchgang existiert, eine verperrte Tür im Weg ist und der Spieler den Schlüssel besitzt
                aktuellerRaum = interaktion.wechsleRaum(durchgang);
            else if ((befehlswort == "untersuche") && (gegenstand != null) )
                interaktion.untersucheGegenstand(gegenstand);
            else if ((befehlswort == "nimm") && (gegenstand != null))
                interaktion.gegenstandAufnehmen(gegenstand, aktuellerRaum.gibListeGegenstände(), spieler.gibInventarliste());
            else if ((befehlswort == "verwerfe") && (gegenstandInventar != null))
                interaktion.gegenstandAblegen(gegenstandInventar, aktuellerRaum.gibListeGegenstände(), spieler.gibInventarliste());
            else if ((befehlswort == "inventar") && (eingabeVerarbeitung.gibWortliste().Count == 1))
                interaktion.zeigeInventar(spieler.gibInventarliste());
            else if ((befehlswort == "hilfe") && (eingabeVerarbeitung.gibWortliste().Count == 1))
                interaktion.hilfeAusgeben();
            else if ((befehlswort == "beende") && (eingabeVerarbeitung.gibWortliste().Count == 1))
                hilfsvariable = interaktion.spielBeenden(hilfsvariable);
            else
                //wenn der Durchgang versperrt ist
                if (durchgangHatVersperrteTür != null)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("\n\n");
                    consoleWrite.centerText("Und wie soll ich wieder reinkommen,_wenn ich meine Hausschlüssel nicht mitnehme ****_Soll ich dann etwa die Tür eintreten oder was ?!");
                    Console.ReadKey();
                    Console.ResetColor();
                }
                else
                    zweitesWortVerweigern(); // "durchgangHatVersperrteTür" besser an diese Methode übergeben ?
        }
        private void befehlsWortVerweigern()
        {
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.Write("\n\n\n");
            consoleWrite.centerText("Den Befehl versteh ich nicht ! Nochmal bitte...");
            Console.ResetColor();
            Console.ReadKey();
        }
        private void zweitesWortVerweigern()
        {
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.Write("\n\n");
            consoleWrite.centerText("Wie meinst du das ?");
            Console.ResetColor();
            Console.ReadKey();
        }
        private void willkommensTextAusgeben()
        {
            Console.Write("\n\n\n\n");
            consoleWrite.centerText("Ich begrüsse dich zu meinem kleinem Buden-Adventure...");
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.Write("\n\n\n\n");
            consoleWrite.centerText("Dieses kleine Programm ermöglicht es dir,");
            consoleWrite.centerText("verschiedene Räüme zu erkunden, ");
            consoleWrite.centerText("Gegenstände zu untersuchen und aufzusammeln.");
            Console.Write("\n");
            consoleWrite.centerText("Dein Ziel ist ganz einfach...");
            Console.Write("\n");
            consoleWrite.centerText("Du musst die Wohnung verlassen,");
            consoleWrite.centerText("ohne dabei deine Hausschlüssel zu vergessen ");
            consoleWrite.centerText("da du dich sonst aussperrst... ");
            Console.Write("\n\n\n\n");
            Console.ResetColor();
            Console.ForegroundColor = ConsoleColor.DarkMagenta;
            consoleWrite.centerText("Du kannst jederzeit den Befehl : HILFE benutzen,");
            consoleWrite.centerText("wenn du grade nicht weiterweisst."); 
            Console.ResetColor();
            Console.Write("\n\n\n\n");
            consoleWrite.centerText("Wenn alles klar ist, dann drücke eine Taste....");
            Console.ReadKey();
            Console.Clear();
        }
        private void gameOver()
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.Write("\n\n\n\n\n");
            consoleWrite.centerText ("Herzlichen Glückwunsch, du hast die Wohnung verlassen,_ohne dabei deinen Hausschlüssel zu vergessen !");
            Console.Write("\n");
            consoleWrite.centerText ("Somit hast du die Vorgabe von diesem kleinem_ Programm mit Bravur gemeistert.");
            Console.Write ("\n\n\n");
            Console.ForegroundColor = ConsoleColor.DarkCyan;
            consoleWrite.centerText("Übrigens: Nebenbei konntest du in diesem Programm Gegenstände_ untersuchen, diese aufsammeln und auch ablegen. Wahnsinn oder ****_Ausserdem hat dir das Programm ermöglicht_Räume zu wechseln und dein Inventar aufzurufen...");
            Console.ReadKey();
        }
    }
}
 

Anhänge

Zuletzt bearbeitet: