Funktion kopiert Daten doppelt ins Array - Hilfe



  • Guten Abend,

    ich hoffe ihr könnt mir bei meinem, zugegebenermaßen etwas komischen Problem helfen, wahrscheinlich hab ich auch nur einen Denkfehler, jedoch überlege ich jetzt schon seit über vier Stunden wie ich das Problem lösen kann.
    Wir sollen für die Schule ein Programm für Win32Konsole schreiben, ich habe mich für Tetris entschieden. Soweit so gut alles schön runterprogrammiert, allerdings stoße ich auf einen ziemlich merkwürdigen Fehler:

    In meinem Programm wird sobald ein Stein den Boden erreicht hat in einem Array eingetragen das dieser Stein dort vorhanden ist. Das ganze geschieht auf Boolscher Logik, also eine eins im Array heißt, dass dieser Pixel belegt ist, eine Null das er frei ist. Dies wird ja zu Kollisionsabfrage benötigt.

    Soweit so gut in meiner Funktion schreibe ich:

    for(int y=0;y<4;y++)
    {
    for(int x=0;x<4;x++)
    {
    if((*stone).court[y][x]==1)
    {
    court[yPos-3+y][xPos+x]=1;
    }
    
    }
    }
    

    stone.court ist das Array von dem Stein, wo beschrieben ist, wie der Stein aufgebaut ist.
    court ist das Array vom Interface, welches speichert welche Pixel belegt sind, und welche nicht.
    xPos und yPos geben an, wo sich der Stein im Spielfeld befindet(untere linke Ecke des Steins)

    Das ganze befindet sich in einer Funktion von der Klasse Interface.

    Wenn ich nun einen Stein in der Mitte des Feldes herunterfallen lasse, ist alles so wie es sein soll. Sobald ich den Stein allerdings nach links oder rechts verschiebe wird in dem Array plötzlich an der richtigen Stelle der Stein eingetragen, aber gleichzeitig auch ncoh 18 Pixel weiter links/rechts. Das heißt die Daten sind quasi redundant vorhanden.

    Mein Problem: Ich weiß nicht wieso dies so ist. Die Folge davon ist, dass Steine wild in der Luft rumhängen.

    court ist ein 3019 langes Spielfeld
    Ein Stein hat die Maße 4
    4

    Compiler: Visual Studio 2008

    Ich hoffe ihr könnt mir helfen, auch wenn hier jetzt ne Menge zu lesen ist. Gehe daran ncoh kaputt.

    Danke 😉



  • Bin jetzt nicht der Code-Snipsel-Spezialist.

    Ich denke dein gezeigter Code ist nicht für den Fehler zuständig.
    Konsole - 18 Pixel oder 18 Zeichen?

    Nachdem was du hier schreibst, vermute ich da das Spielfeld 30*19 gross ist und 18 nah bei 19 ist, das die Abfrage, was soll der Code machen, wenn der Rand erreicht ist, einen Fehler aufweist. Obwohl ein 30*19 Spielfeld auf Konsole, ist auf jeden Fall optisch anders als das Qriginal. Da kann auch noch was anderes für den Fehler zuständig sein. Wie viel Zeichen fasst denn deine Konsole horizontal und vertikal? Hast du da etwas geändert im Vergleich zum üblichen.

    Je eingehender ich deinen Beitrag lese, desto mehr Fragen stellen sich mir. Aber, wenn du die ersten 20 bis 30 Zeilen deines Quellcodes hier einstellen kannst, werden sich hoffentlich ein paar davon beantworten.

    MfG



  • Danke für deine Antwort. Mittlerweile hat sich das Problem gelöst. Ich kann leider nicht sagen, woran das liegt, ich habe das komplette Programm nocheinmal neu geschrieben und aus irgendeinem grund funktioniert's jetzt. Ich vermute das irgendwo ein Index oder so vertauscht war. Naja jetzt funktionierts ja.


Anmelden zum Antworten