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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-11-2006, 14:28   #1 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Wegfindung

Hi Leue ...

Ich steh bei einer Geschichte gerade ein bisschen auf dem Schlauch und hoffe einer von euch kann mir einen Tritt in die Richtige Richtung geben.

Folgendes:

Ein Tile-Basierendes Spiel, jede Tile hat einen Wert der die "Bewegungskosten" angibt die sie verbraucht.

Bsp: ein Tile des Typs "Wiese" verbraucht 2 Bewegungspunkte, ein Tile des Typs "Wald" verbraucht 3 Punkte.

Auf der Map steht nun eine Spielfigur. Die Figur hat einen Wert der angibt wie Viele Bewegungspunkte ihr zur Verfügung stehen.

Problem:
Bei Klick auf die Figur soll jedes Tile makiert werden das die Figur mit ihren Bewegungspunkten erreichen kann.

Bei dem Algorithmus hacks bei mir im Moment. Hat einer eine Idee wie man sowas am Performantesten angeht?
__________________
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 01-11-2006, 15:04   #2 (permalink)
Flashbitch
 
Benutzerbild von X-Tender
 
Registriert seit: Oct 2003
Ort: Hannover
Beiträge: 279
Vielleicht findest du im TonyPa TUT ja ein paar Anregungen.

http://www.tonypa.pri.ee/tbw/tut22.html
__________________
Fuchtelworld
X-Tender ist offline   Mit Zitat antworten
Alt 01-11-2006, 15:06   #3 (permalink)
think tank
 
Benutzerbild von wayfinder
 
Registriert seit: Jul 2005
Ort: Berlin
Beiträge: 21
kann leider trotz meines namens nicht weiter helfen






(preis für den nutzlosesten post des monats.)
wayfinder ist offline   Mit Zitat antworten
Alt 01-11-2006, 15:19   #4 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Zitat:
Zitat von X-Tender Beitrag anzeigen
Vielleicht findest du im TonyPa TUT ja ein paar Anregungen.

http://www.tonypa.pri.ee/tbw/tut22.html
Das Tut kenn ich ... ich fürchte mein Threadtitel war etwas verwirrend. Ich muss nicht den kürzesten Weg für die Figur von Tile A nach Tile B finden sondern ich brauche alle Felder die die Figur theoretisch erreichen kann.
__________________
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 01-11-2006, 15:34   #5 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
xervus readme!

dein stichworte sind graphentheorie und kantengewichteter graph.
hab leider grade nicht die zeit, aber there you go...

cheers, thomas.
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 01-11-2006, 15:48   #6 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Rekursiv würde ich sagen.

Fängst am Startpunkt an, und machst für jeden Nachbarpunkt folgende Überlegungen:

1) kann der Punkt mit den Reserven erreicht werden?
2) wieviel Reserven bleiben?
3) wurde der Punkt schon mit mehr verbleibenden Reserven erreicht?
4) wenn ja, vergiss es
5) wenn nein, speichere den Punkt mit den verbleibenden Reserven in ein Array

mit allen Punkten im Array gehts wieder bei 1) los.

Sicher nicht optimal von der Performance, aber sollte bei mittleren Reichweiten ausreichen
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 01-11-2006, 16:05   #7 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
@elysian: Uff ... harter Tobak ... ich werd mal versuchen mich da reinzulesen.

@Janoscharlipp: So ähnlich hab ichs schon versucht ... aber irgendwo hatte ich da noch einen Fehler.

Ich bring das Beispiel morgen mal mit vieleicht hilft das ja.
__________________
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 02-11-2006, 10:08   #8 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Ich bins nochmal.

Ich habs gestern nicht mehr auf die Reihe bekommen. Ich hab hier:

http://www.surge-oe.de/develop/tile/

mal das Beispiel hochgeladen. Die Voraussetzungen sind das ein Feld des Typs "Ebene" 1 Bewegungspunkt verbraucht und ein Feld des Typs "Wald" 2 Punkte.

Die Spielfigur hat 5 Bewegungspunkte zur Verfügung.

Das ist der Code der die Felder auswählt:

PHP-Code:
// -> move_tank() -> Berechnet die Reichweite einer Spielfigur 
function move_tank(tile,tank) {
  var 
map    tile._parent;
  var 
felder = new Array([tile.col,(tile.row-1)],[tile.col,(tile.row+1)],[(tile.col-1),tile.row],[(tile.col-1),(tile.row-1)],[(tile.col+1),tile.row],[(tile.col+1),(tile.row-1)]);
  
  for(var 
i=0i<felder.lengthi++) {
    var 
akt_tile map["tile_"+felder[i][0]+"_"+felder[i][1]];
    
    if(
akt_tile && akt_tile != tank.tile && (tile.move_points-akt_tile.move_cost) >= && !isNaN((tile.move_points-akt_tile.move_cost))) {
      var 
hex map.createEmptyMovieClip("hex_"+felder[i][0]+"_"+felder[i][1],map.getNextHighestDepth());
          
hex.draw_hex(akt_tile);
          
      
akt_tile.move_points = (tile.move_points-akt_tile.move_cost);
      
      
move_tank(akt_tile,tank);
    }
  }
  
  
tank.swapDepths(tank._parent.getNextHighestDepth());
}
// <- move_tank() 
Im groben übergebe ich an die Funktion die Tile die sie BErechnen soll. Dann stelle ich ein Array zusammen das alle Tiles um diese Tile enthält (jeweils 6 Stück)

Für jede der Tiles überprüfe ich dann ob sie existiert, ob sie nicht die tle ist auf der die spielfigur steht und ob die aktuelle der aktuelle Bewegungspunktvorrat - die Kosten für diese tile >= 0 ist. Ist das der Fall zeichne ich ein hexfeld als Markierung ein, übergebe den Bewegungspunktvorrat - die Kosten für diese Tile an die Tile und starte die Funktion mit dieser Tile neu.

Mehr ist das eigendlich nicht, aber funktionieren tut es trotzdem nicht ^^ ... Ich muss vieleicht noch dazu sagen das ich nicht der begnadetste Programmierer unter der Sonne bin. Ich krieg eigendlich immer alles hin was ich will aber nicht zwangsläufig besonders Elegant.

Wenn jemand Ideen/Tips hat oder einen Denkfehler bei mir bemerkt würd ich mich freuen.
__________________
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 02-11-2006, 10:24   #9 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
ich glaube dein problem kannst du auch mit dem a*-algorithmus lösen.
hier is der mal schön erklärt und unten gibts auch gleich das beispiel skript.

http://www.policyalmanac.org/games/aStarTutorial.htm

gruß mad
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 02-11-2006, 12:40   #10 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Ich denke, das Problem ist, dass du im Kreis laufen kannst, mit deiner Rekursion, und damit die move_points von Feldern verringerst, die eigentlich später erst in der Rekursion abgearbeitet werden.
(s. Punkt 3 in meinem Gedankengang)
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 03-11-2006, 09:11   #11 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Danke nochmal für eure Hilfe ... Ich habs gestern Abend dann doch noch hinbekommen.

Der Knackpunkt war dan am Ende tatsächlich zu überprüfen ob jedes gegebene Feld aus einer anderen Richtung mit mehr verbleibenden "Bewegungspunkten" erreicht werden kann.

Danke nochmal
__________________
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 (03-11-2006 um 09:15 Uhr)
readme.txt ist offline   Mit Zitat antworten
Alt 03-11-2006, 10:31   #12 (permalink)
Flashbitch
 
Benutzerbild von X-Tender
 
Registriert seit: Oct 2003
Ort: Hannover
Beiträge: 279
Du meinst es wurde dir auf flashkit gezeigt
__________________
Fuchtelworld
X-Tender ist offline   Mit Zitat antworten
Alt 03-11-2006, 10:58   #13 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Hehe ... es war eine Kombination aus Tips von Flashkit und vom Flashforum
__________________
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
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:06 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele