Inventar programmieren (Kommandozeilenprogramm)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

Hey Leute, ich möchte ein Inventar programmieren aber finde einfach keinen guten Programmier-Ansatz, vielleicht könnt ihr mir weiterhelfen.

Ich habe mir das wie folgt überlegt:
Man hat 20 Inventarplätze, und alle Items vom gleichem Typ sind Stapelbar
Man kriegt zum Beispiel durch das Lösen von Rechenaufgaben einen Gegenstand, zum Beispiel Brot, der dem Inventar automatisch hinzugefügt wird.
Wenn man sich das Inventar mit den gesammelten Gegenstaenden anzeigen lassen will, soll die Ausgabe ungefähr so aussehen:

Brot: 1
Eier: 20
Eier: 4 #(weil anderer Stapel voll ist)
Schwert des Was weiß ich: 1
Bogen der Macht oder so: 2

Könnt ihr mir bitte sagen wie sich so ein Inventar möglichst gut und fehlerfrei Programmieren lässt? Ich danke für Antworten!
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie wär's denn mit einem Dictionary? Oder, wenn du Persistenz brauchst, einer der einfachen Key-Value Stores, welche Python an Bord hat. Das ist ja echt keine komplizierte oder komplexe Datenstruktur (wenn ich das alles richtig verstanden habe ;-) ).

Gruß, noisefloor
BlackJack

@Dexter1997: Das könnte man in einer `Inventory`-Klasse kapseln die intern Gegenstandsbezeichner auf `Packs`-Objekte abbildet, die ihrerseits den Gegenstandsbezeichner und die Menge kennen und sagen können wie viele Stapel für diese Menge benötigt werden. Daraus können die `Inventory`-Objekte dann berechnen wieviele Stapel schon verwendet werden und auch die Daten für die gewünschte Ausgabe generieren. Bei dem Entwurfsansatz gehe ich jetzt davon aus, dass die Stapel immer versucht werden so gut wie möglich zu füllen, also dass es niemals drei Stapel für 22 Eier gibt, weil man die zu einem mit 20 und einem mit 2 zusammen fassen könnte.

@noisefloor: Das mit den mehreren Stapeln für eine Gegenstandsart weil ein Stapel ein maximales Fassungsvermögen hat ist IMHO für Anfänger schon ein wenig komplexer. Und bei erfahrenen Programmierern geht dann das Abwägen zwischen verschiedenen Entwürfen los. Modelliert man einzelne Stapel als Objekte, oder Gegenstand/Menge als ein Objekt und erzeugt die Stapelaufteilung für die Ausgabe „on the fly”, oder… :-)
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

und was sind packs-objekte und wie sollten die klassen heißen, die ich für mein projekt anlegen muss? :)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Klassen sollten Namen haben, die genau das ausdrücken, wofür sie da sind. Je einfacher Du einen Namen dafür findest, desto eindeutiger ist auch die Aufgabe der Klasse festgelegt.
In Deinem Beispiel also die Klasse Inventar mit einer maximalen Anzahl an Plätzen, einer Methode um einen Gegenstand hinzuzufügen und um einen zu entnehmen, usw.
Eine Packs-Klasse ist dann für eine Gegenstandsart und deren Menge da.

Ich persönlich würde ja eher jedem Gegenstand ein Gewicht und eine Größe geben und dann nach
Maximalgewicht/-größe entscheiden, ob der Gegenstand noch mitgenommen werden kann oder nicht.
Antworten