Ankündigung

Einklappen
Keine Ankündigung bisher.

Spielfeld definieren und Positionen ausgeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Spielfeld definieren und Positionen ausgeben

    Hallo zusammen,

    Ich möchte gerne für ein keines Projekt folgendes Problem lösen:

    Gegeben soll sein:
    1. Ein Spielfeld mit einer gegebenen Breite und Länge in Metern
    2. 6 Spieler (3 pro Mannschaft), die sich auf diesem Spielfeld bewegen (jeweils mit X Metern pro Sekunde)
    3. Es soll möglich sein, zu bestimmen, welcher Spieler einem "aktiven" Spieler am nächsten stehen
    Mein Ansatz besteht nur aus grundsätzlichen Überlegungen:
    1. Wahrscheinlich wäre es sinnvoll, erst einmal ein Spielfeld zu definieren. Möglich wäre vielleicht ein Array, welches ein Koordinatensystem aufspannt
    2. Es muss ein Array mit Spielern geben. Jeder Spieler benötigt eine ID und die Angabe der Position im Koordinatensystem
    3. Die Position des "aktiven" Spielers würde dann mit der Position jedes einzelnen anderen Spielers verglichen. Die Abstände müssten dann über das Koordinatensystem errechnet werden

    Soweit, so gut. Mir fehlt nun allerdings ein Ansatz, dies in PHP umzusetzen - daher bin ich für jeden Impuls und Hinweis sehr dankbar

  • #2
    1. Spielfeld ist "virtuell", das muss nicht in Wirklichkeit existieren. Alles was du brauchst sind die Eckpunkte (0 ... X und 0 .. Y), die die Grenzen des Spielfelds definieren.
    2. Spieler hat eine Position (X/Y) innerhalb der Spielfeldkoordinaten (korrekt).
    3. Bestimmung des Abstands zweier Punkte (Spieler) kann man mit Hilfe des 1. Satzes des Pythargoras ermitteln.

    Hier ein bischen Code zum rumspielen
    PHP-Code:
    $players = [
        
    'Hansi' => ['x'=>1'y'=>5],
        
    'Peter' => ['x'=>7'y'=>12],
        
    'Franz' => ['x'=>3'y'=>22],
        
    'Bernd' => ['x'=>rand(1,20), 'y'=>rand(1,20)],
    ];


    function 
    calc_dist($p1$p2) {
        
    $d1 abs($p1['x'] - $p2['x']);
        
    $d2 abs($p1['y'] - $p2['y']);

        
    // Satz des Pythargoras: c² = a² + b²
        
    return sqrtpow($d12) + pow($d22));
    }

    function 
    calc_all($players) {
        foreach(
    $players as $n1 => $p1) {
            foreach(
    $players as $n2 => $p2) {
                if (
    $n1 != $n2) {
                    echo 
    $n1.' ('.$p1['x'].'/'.$p1['y'].') - '.$n2.' ('.$p2['x'].'/'.$p2['y'].'): '.number_format(calc_dist($p1$p2), 3).PHP_EOL;
                }
            }
        }
    }

    calc_all($players); 
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      zum 3en Punkt, fallst du Hindernisse zwischen den Spielern hast und diese umgehen musst, hab ich hier ein kleines Script

      https://github.com/BlackScorp/astar


      Aus performance Gründen nutze ich zb nicht pow https://github.com/BlackScorp/astar/.../Euclidean.php sondern $d1 * $d1
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

      Kommentar

      Lädt...
      X