Ist es effizienter, eine „Standort prüfen“-Funktion in eine „Bewegungsfunktion“ für ein Spiel einzubinden oder außerhalb als externe Funktion?

StackOverflow https://stackoverflow.com/questions/958060

Frage

Ich erstelle ein Spiel in C++ (Apropos: Spielt der Code, den ich verwende, eine Rolle?), das man locker als Brettspiel bezeichnen könnte, und ich frage mich, welches dieser beiden „Überprüfen Sie, ob der Charakter außerhalb der Grenzen liegt“ ist. Funktionen ist effizienter:

EINS:

int main()
{
    //display board
    //get player input
    //move player
    //if player is out of bounds,
      //force player back into bounds
}

ZWEI

//int main()
{
    //same thing, except without last two lines.
}
void move(char input)
{
    //if input does not place player out of bounds
      //move player according to input
}

Im Wesentlichen bewegt der erste Schritt jede Entität, überprüft dann alle Positionen der Entitäten und setzt sie entsprechend zurück, und der zweite Schritt stellt sicher, dass die Bewegung des Spielers ihn nicht aus dem Spielfeld bringt, anstatt bis zum Ende der Schleife zu warten.

Ich würde gerne wissen, welches dieser beiden (Systeme?) effizienter oder schneller als das andere ist, oder, wenn beide gleich sind, welches davon ein besserer Codierungsstil wäre?

War es hilfreich?

Lösung

Ich würde sicherstellen, dass jeder Umzug legal ist, bevor ich ihn verschiebe.Auf diese Weise bewahren Sie einen gesunden Zustand, anstatt etwas auszuprobieren und das „Board“ in einem ungültigen Zustand zu belassen.Es macht auch objektorientiert mehr Sinn.Das Objekt kann keine ungültige Bewegung ausführen, daher kann der Bewegung vertraut werden.

Andere Tipps

Letzteres ist schneller (nicht ausführen UND rückgängig machen).Ich würde auch denken, dass es der Reiniger ist, aber das ist Ansichtssache.

Eine Überprüfung vor dem Bewegen wäre schneller, abgesehen davon, dass die Wahrscheinlichkeit, dass jemand ins Aus geht, bemerkenswert gering ist.

Was den Stil betrifft, empfehle ich nicht Überprüfen der Grenzen innerhalb der move()-Methode, auch wenn diese Prüfung in eine eigene Methode extrahiert wird, da dies Ihnen zwei „Gründe gibt, die move()-Methode später zu ändern“ (und somit kaputt geht). Einzelverantwortung;Manche Leute erzwingen dies nur auf Klassenebene, aber ich empfehle es für Methoden, bei denen man damit durchkommt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top