Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-05-2008, 11:07   #1 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Trading Card Game ...

Halli Hallo, meine Freunde der gepflegten Progammierung ...

Ich brauch mal (was auch sonst) eure Hilfe.

Ich habe mir wiedermal in den Kopf gesetzt eines dieser Projekte anzufangen die
ich meistens nicht beende *g* ... Nichtsdestotrotz lerne ich bei diesen Sachen
immer relativ viel.

Im Speziellen möchte ich mich hier weiter mit Klassen auseinandersetzen. Nicht
der technische Aspekt von Klassen (den habe ich soweit drauf) sondern der logische
Aspekt interessiert mich hier.
Ich habe häufig noch das Problem das ich nicht genau differentieren kann wann eine
Klasse sinn macht und wie man die Klassen am besten Strukturiert, insbesondere was
die Vererbung angeht.

Also habe ich mir jetzt mal das (subjektiv) schwerste Rausgesucht was mir eingefallen
ist: Ein Trading Card Game (TCG) nach dem Vorbild von Magic the Gathering. Es geht nicht
um ein kommerzielles Projekt und ich will das auch nicht Veröffentlichen, darum habe
ich keine großen Gewissensbisse mich bei meinem Vorbild schamlos zu bedienen.

Wer Magic nicht kennt:

Die Spieler haben jeweils ein Set von min. 60 (glaube ich) Karten. Jeder Spieler beginnt
das Spiel mit 20 Lebenspunkten.
Ziel des Spiels ist es nun die Lebenspunkte seines Gegners auf 0 zu reduzieren. Um das zu
erreichen stehen den Spielern diverse Karten und Kartentypen zur Verfügung.

Ein Beispielkartentyp sind z.B. die Kreaturen:



Alle Karten haben folgende Informationen:
  • Name: Der Name der Karte, hier: "Ancestor´s Chosen"
  • Kosten: Die "Mana"kosten der Karte, hier: 2x Weißes Mana und 5x graues Mana
  • Kartentyp: Den Typ der Karte, hier: "Kreatur"
  • Kosten: Die "Mana"kosten der Karte, hier: 2x Weißes Mana und 5x graues Mana
  • Textfeld: Hier stehen die Fähigkeiten der Karte und manchmal zusätzlich noch ein Zitat

Kreaturen haben noch folgende Informationen:
  • Kraturen haben im Feld "Kartentyp" zusätzlich noch die Rasse und/oder Klasse der Kreatur, hier: Mensch, Kleriker
  • Kampfwerte: Spezielle Eigenschaft von Kreaturen die die Angriffs/Verteidigungswerte angibt

Als zusätzliches Beispiel nochmal eine Karte vom Typ "Hexerei":



Wie man sieht fehlen diesem Kartentyp einige der Informationen die eine Kreatur besitzt.

...

Um nun aber auch mal auf den Punkt zu kommen:

Mein größtes Problem in der Planung des Spielt ist gleichzeitig das was ein TCG so Faszinierend macht, und zwar die
goldene Regel: Die Karte hat immer Recht

Es ist nicht die Ausnahme sondern die Regel bei solchen Spielen das einzelne Karten das Grundregelwerk erweitern oder
sogar außer Kraft setzen.
Und diese speziellen Kartenregeln gibt es in diversen Variationen.

2 seht ihr oben ja schon:
Die Kreatur hat die Fähigkeit "First Strike" und gibt dem Spieler 1 Lebenspunkt wenn sie ins Spiel kommt.
Mit der Hexere kann ein Spieler einer Kreatur die Fähigkeit "Fliegen" und einen Bonus von +3/+3 auf Angriff/
Verteidigung bis zum Ende seines Zuges geben.

Ein paar andere Beispiele:

Angelic Chorus - Enchantment - Whenever a creature comes into play under your control, you gain life equal to its toughness.

Aura of Silence - Enchantment - Artifact and enchantement spells your opponent play cost 2 mode to play. Sacrifice Aura of Silence: Destroy target artifact or enchantment.

Aven Cloudchaser - Creature, Bird Soldier - Flying. When Aven Cloudchaser comes into play, destroy target enchantment.

Torture - Enchant Creature - Choose target creature: Pay 2 Mana, Put a -1/-1 on creature Torture enchants

Pyroclasm - Sorcery - Pyroclasm deals 2 damage to each creature.

Ambassador Laquatus - Legendary Creature, Merfolk Wizard - Pay 3 Mana: Target Player puts the top three Cards of his or her library into his or her graveyard.

So .. wie ihr vielleich erahnen könnt sind die Fähigkeiten extrem vielfältig. Und genau da liegt mein Problem. Ich hab
keine Idee wie man diese Fähigkeiten Programmiertechnisch umsetzen kann und dabei so flexibel bleibt das man:

1.: Nicht für jede Fähigkeit eine eigene Klasse schreiben muss (das wär Blöd- und Wahnsinn)

und 2.: Das ganze Verhältnissmässig flexibel bleibt so das man nicht das ganze Spiel "neu" bauen muss um eine neue
Fähigkeit einzubauen.


Grundlegend würde ich natürlich eine Klasse "Cards" erstellen und dann Unterklassen wie "Creature", "Enchantment" etc. erstellen die von
"Cards" erben.

Soweit so klar ... nur wie gesagt: Die Fähigkeiten. Das einzige was mir eingefallen ist, ist es irgendwie die Fähigkeiten in mehrere Segmente
zu spalten wie z.B. ZIEL - KOSTEN - WIRKUNG ... die man dann Individuell einstellen kann. Aber das funktioniert ja sogar bei den paar Beispielen oben
nicht immer.

Und selbt wenn, wüsste ich nicht genau wie ich das in Klassen verpacken könnte.

So ... genug geschrieben ... ich hoffe es ist halbwegs klar geworden was mein Problem ist und irgendjemand
der Analytischer als ich denken kann erbarmt sich meiner und hat eine Idee wie man sowas lösen kann.

Danke euch
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'

Geändert von readme.txt (08-05-2008 um 11:08 Uhr)
readme.txt ist offline   Mit Zitat antworten
Alt 08-05-2008, 12:47   #2 (permalink)
Banned
 
Registriert seit: May 2008
Beiträge: 514
Ich bin mir nicht sicher ob ich Dich verstanden habe.

Aber ich versuche mal analytich eine gewisse klassenstruktur in form eines xml aufzubauen.

erklädung findest du im xml

PHP-Code:
<root>

   <
eigenschaften>
     <
lebenskraft/>
     <
angriffsstärke/>
     <
kosten/>
     <
Angriff>
        <
Mensch>
            <
Normale eigenschaften>
                <
treten/>
                <
beissen/>
                 .....
            </
Normale eigenschaften>
            <
Sonder eigenschaften>
                <
karte blablub kann gegener fliegend machen/>
                  ......
            </
Sonder eigenschaften>
        <
gnom>
            ...........
     </
Angriff>
     <
Abwehr>
         <
struktur wie bei Angriff (eins höher), normale und sonder-fälledu brauchst ja dann nur den Datensatz der Karten für Sondereigenschaft eines Charakters zu bearbeiten und bei neuen Funktionen die Subklassen für Sondereigenschaften nicht Anrühren da diese als interface nur dem aufruf einer generellen klasse "Sonderffunktionen" dienen.>
    </
Abwehr>
      
   </
eigenschaften>

   <
Sonderfunktionen>
      <
Angriff/>
      <
Abwehr/>
   </
Sonderfunktionen>

   <
Aktionen>

     <
übliche runden aktionen (neuer morgenneuer lohn)/>
     <
übliche spieler aktionen (krankheiten -2fliegen beenden)/>

     <
Angriff>
       <
Auf eigenschaften zugreifen/>
       <
Auf sondereigenschaften zugreifen/>
     </
Angriff>

     <
Abwehr>//falls steuerbar
       
<Auf eigenschaften zugreifen/>
       <
Auf sondereigenschaften zugreifen/>

     </
Abwehr>
   </
Aktionen>
   <
datensätze für spielerkarten und settings einlesen/> 
stellst du dir das ungefähr so vor?

mfg
cc
ccode ist offline   Mit Zitat antworten
Alt 08-05-2008, 13:04   #3 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Genau dieser Punkt:

PHP-Code:
<Sonder eigenschaften>
  <
karte blablub kann gegener fliegend machen/>
   ......
</
Sonder eigenschaften
Macht mir solche Kopfschmerzen. Mann muss dazu sagen das es diese Besonderen Fähigkeiten in X Varianten gibt.

Und mir fällt einfach nix ein wie man die schiere Masse dieser Sonderfähigkeiten programmiertechnisch "Fassen" kann und dabei möglichst
dynamisch zu bleiben.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 08-05-2008, 13:05   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Klassen modellierst du am besten nach den Vorbildern der Karten. Am einfachsten sind natürlich die offensichtlichen Attribute:
ActionScript:
  1. package {
  2.  
  3.     public class Card {
  4.  
  5.         private var _abilities:IAbilties;
  6.         private var _cost:ICost;
  7.         private var _type:IType;
  8.  
  9.         public function Card() {
  10.         }
  11.  
  12.         public function get abilities():IAbilties {
  13.             return this._abilities;
  14.         }
  15.  
  16.         public function get cost():ICost {
  17.             return this._cost;
  18.         }
  19.  
  20.         public function get type():IType {
  21.             return this._type;
  22.         }
  23.  
  24.         public function set abilities(abilities:IAbilties):void {
  25.             this._abilities = abilities;
  26.         }
  27.  
  28.         public function set cost(cost:ICost):void {
  29.             this._cost = cost;
  30.         }
  31.  
  32.         public function set type(type:IType):void {
  33.             this._type = type;
  34.         }
  35.  
  36.         public function toString():String {
  37.             var asString:String = "Card";
  38.             asString += "\n\t- abilities: "+this._abilities.toString();
  39.             asString += "\n\t- cost: "+this._cost.toString();
  40.             asString += "\n\t- type: "+this._type.toString();
  41.             return asString;
  42.         }
  43.     }
  44. }
Warum sind type, abilities und cost keine primitiven Datentypen? Weil sich diese Werte auch aus weiteren Werten zusammensetzen. Als Beispiel ein Interface für die Kosten:
ActionScript:
  1. package {
  2.  
  3.     public interface ICost {
  4.  
  5.         public function get greyMana():int;
  6.  
  7.         public function get whiteMana():int;
  8.     }
  9. }
ActionScript:
  1. package {
  2.  
  3.     public class Costs implements ICost {
  4.  
  5.         private var _greyMana:int;
  6.         private var _whiteMana:int;
  7.  
  8.         public function Card(greyMana:int = 0, whiteMana:int = 0) {
  9.             _greyMana = greyMane;
  10.             _whiteMana = whiteMana;
  11.         }
  12.  
  13.         public function get greyMana():int {
  14.             return this._greyMana;
  15.         }
  16.  
  17.         public function get whiteMana():int {
  18.             return this._whiteMana;
  19.         }
  20.     }
  21. }
Bei den anderen Typen kannst du genauso verfahren. Das Regelwerk bekommt dann 2 Karten und wertet diese aus. Bei Sonderkarten treten dann besondere Regeln ein.
Omega Psi ist offline   Mit Zitat antworten
Alt 08-05-2008, 13:10   #5 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.649
So zu beginn ist das mal ein riesenklotz,
recht schwer da einen Anfang zu finden.

Ich kenne Magic jetzt nur vom Namen,
habe es selbst noch nie gespielt.
Aber wenn es moeglich ist die ganzen Charakter-Typen,
und deren Eigenschaften fest zu bestimmen dann ist es moeglich
fuer bestimmte Typen Ausnahmen mit einzubeziehen.

Im Prinzip werden ja pro Spielzug nur die Eigenschaften deines Gegners manipuliert.
__________________
[ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ]

devboy.org
b.asile ist offline   Mit Zitat antworten
Alt 08-05-2008, 15:17   #6 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
Evtl. mußt Du das ganze komplett anders rum angehen. Also nicht von der Karte aus, sondern vom Spieler/dem Spiel ansich aus.

Du formulierst alle Ereignisse eines Spielzugs:
1. Startphase
1.1 Enttappen
1.2 Versorgen
1.3 Ziehen
2. Hauptphase
3. Kampfphase
3.1 Beginn des Kampfes
3.2 ... usw

Und dann alles was betroffen werden kann:
1. Spieler
1.1 Lebenspunkte
1.2 ...
2. Kreatur
2.1 Stärke
2.2 Widerstand
2.3 Fliegen
2.4 Trampeln
2.5 ...
4. Deck
5. Friedhof
6. ... usw

dann kannst Du hinterher in den Karten definieren das zum Ereignis 3.1 Ziel ... verändert werden kann.

Ganz ausgereift ist der Gedankengang noch nicht, aber im Endeffekt definierst Du einmal im Spiel was alles wann verändert werden kann.

Bis dann,
querkopf

p.s.: würde mich freuen das fertige Spiel dann mal testen zu können
__________________
Alles ist wie immer. Nur schlimmer.
querkopf ist offline   Mit Zitat antworten
Alt 08-05-2008, 15:24   #7 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Ha! ... Wenn mit großem W ... Einen ähnlichen Gedankengang hatte ich auch schon, wobei ich wirklich von der Karte ausgegangen bin. Dein Ansatz ist aber deutlich besser.

Ich hab hier:

http://www.surge-oe.de/stuff/tow/karten.php

zusätzlich noch ein paar Karten hochgeschoben damit ihr mal einen Eindruck bekommt wie vielfältig diese Kartentexte/Fähigkeiten sind.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 08-05-2008, 15:32   #8 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
ohne deiner idee vorwegzugreifen, aber ein spielbare variante von mtg gibt es schon
für alle die es nicht kennen können sich hier infos und das spiel ziehen

ps: hast du keine karten aus der revised oder älteren edition?
ich hab bei ice age aufgehört zu sammeln
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 08-05-2008, 15:34   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Ich würde von der Karte und den Regeln ausgehen. Nicht um gegen Querkopfs Vorschlag anzustinken, sondern da du sowohl in den Regelanwendungen als auch in den zusätzlichen Spielphasen mit den Karten arbeitest. Die Spielphasen sind nur temporäre Zustande des Spieles.

Wichtig wäre für mich zuerst die Karten und Spieler zu modellieren. Danach die Regeln. Wenn gewisse Regeln Anwendung finden, entscheiden die einzelnen Spielphasen, die jedoch nichts anderes als temporäre Zustände des Spieles sind, die sequentiell abgearbeitet werden.
Omega Psi ist offline   Mit Zitat antworten
Alt 08-05-2008, 15:50   #10 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
@bloba: Ich weiss das es das schon gibt ... Wie oben geschrieben, gerade aufgrund der komplexen Kartenregeln ist das glaube ich eine super Sache um ein bisschen im Bereich strukturierte Programmierung zu lernen, das geht mir immer noch etwas ab. Ich lande immer wieder in blöden Sackgassen weil ich mir die Klassenstrukturen vorher nicht überlegt habe.

@Omega Psi: Ich werd mal sehen das ich eine grundlegende Struktur auf die Reihe bekomme, vielleicht hilft mir das selber auch weiter. Dein Vorschlag von oben ist dabei schon extrem hilfreich ...

danke euch schonmal ... über weiteres Philosophieren freue ich mich aber trotzdem.

Eine halb-Off Topic Sache noch: Wenn ihr sowas plant, wie regelt ihr das? Malt ihr euch da Struktugramme auf mit den Klassen die ihr plant? Oder Scriptet ihr sowas aus dem Bauch/Kopf heraus?

PS: @bloba: Ich hab noch deutlich mehr Karten auf dem Rechner, aber wenn ich die alle hochlade ist mein Webspace voll ^^
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'

Geändert von readme.txt (08-05-2008 um 15:52 Uhr)
readme.txt ist offline   Mit Zitat antworten
Alt 08-05-2008, 15:56   #11 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Ich arbeite gerne und auch relativ viel mit UML. Es hilft dir ungemein Strukturen zu erarbeiten und vor allen Dingen einen Überblick zu behalten.

Und wenn du kein UML kannst: mach dir einfach Diagramme für Klassen und den allgemeinen Programmfluss.

Mein favourisiertes Tool: Papier und Kuli.
Omega Psi ist offline   Mit Zitat antworten
Alt 08-05-2008, 16:00   #12 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Ich mach mir mittlerweile öfters vorab einen wohldurchdachten Plan mit ArgoUML.
Dann fang ich an mit dem Code.
Dann schmeiß ich den wohldurchdachten Plan weg und mach einen neuen.
Dann mach ich weiter mit dem Code.
Dann schmeiß ich...

Es wird langsam besser.
Aber das geht mir auch alles furchtbar zäh in den Kopf.
Selbst Skat hab ich schneller gelernt
SpecOps-12 ist offline   Mit Zitat antworten
Alt 08-05-2008, 16:03   #13 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
BITTE BLEISTIFFT + RADIERGUMMI!

sosnt verbauchst du zuviel blätter und wir wollen doch nicht
noch mehr unnötig bäume fällen
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi
_crypto_ ist offline   Mit Zitat antworten
Alt 08-05-2008, 16:07   #14 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Hi,

wenn Du Hilfe brauchst... Habe mehrere jahre Magic gespielt, sogar auf Turnieren.

Ich würde mich auf die aktuellen Editionen begrenzen, damit die Anzahl der Fähigkeiten im Rahmen bleibt. Ansonsten ist der Berg wohl zu gigantisch. (Was Karten und Fähigkeiten angeht)
Ich würde vom Aufbau her, "einfach" dem Ablauf des Spieles folgen. Sprich Karte ziehen, Länder legen, usw...
Für die Regeln: Erstmal Grundregeln bauen. Später die Sonderfähigkeiten.

lg, nico

Verdammt... jetzt habe ich wieder Lust auf Magic... (Bevor Damage auf den Stack ....)

Geändert von Nico B. (08-05-2008 um 16:12 Uhr)
Nico B. ist offline   Mit Zitat antworten
Alt 08-05-2008, 16:39   #15 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
hi,

komplexe Sache,
bzgl. Planung:
ich würd auch erstmal einfach anfangen.
Ich persönlich bin eigentlich überhaupt kein Planer in irgend einem Sinne.
Ich hab das zwar auch schon mit Diagrammen versucht, aber ich weiss nicht, mir bringt das irgendwie nicht so viel?
Wärend des Proggens kommen mir dann immer irgendwelche Einfälle und die will ich dann auch noch mit "einarbeiten".
Naja, Im Grunde ist es ja auch schnell gemacht, das man es alle etwas ummodelt, doch manchmal kommt man dann schon an eine Punkt, wo es zu Komplex wird und man einfach "im Sumpf" stecken bleibt und das Handtuch schmeisst .
Eine "grobe" Struktur im Kopf ist aber schon ganz gut,
evtl. so:

1) alles Lernen, Input, Diagramme, Struktur ect...
2) ruhe, rumwandern, vergessen, was anderes machen
3) anfangen
__________________
Say no to Internet Explorer 6!

Geändert von Circushund (08-05-2008 um 16:41 Uhr)
Circushund ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele