Folge von Werten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Folge von Werten

    Hey, Leute!

    Ich versuche gerade ein ein Spiel zu machen, bei dem man, wie bei Zela: Ocarina of Time, Melodien spielen kann, die das Programm erkennen soll.

    Dazu habe ich eine Klaviatur auf die tasten gelegt und eine globale Variable erstellt, die immer dem gespielten Ton entspricht.

    Nun versuche ich dem Programm zu sagen, es soll sich die gespielte Tonfolge merken. Hat jemand eine Idee, wie ich das anstelle?
  • Moinmoin,
    sowas kannst du erreichen, indem du die Keycodes, die der User eingetippt hat, in einem Array zwischenspeicherst - entweder über die arraynotation foo[i] wenn die Länge der Sequenz sich nicht ändert, oder mit der Datenstruktur ds_list, falls doch.
    Dann musst du den Inhalt des Arrays nur noch Element für Element mit den gültigen Songs im Spiel vergleichen, die du z.B. beim Start des Spiels initialisieren kannst.

    Ein Pseudocodebeispiel für diesen Vergleich könnte etwa so aussehen:

    GML-Quellcode

    1. // Vordefinierter, gültiger Song
    2. validSong = ds_list_create();
    3. ds_list_add(validSong,vk_left);
    4. ds_list_add(validSong,vk_right);
    5. ds_list_add(validSong,vk_left);
    6. ds_list_add(validSong,vk_right);
    7. // Ein Skript, der true zurückgibt, wenn der User den vordefinierten Song gespielt hat,
    8. // und ansonsten false
    9. {
    10. /* Der Song, den du vorher als ds_list zwischengespeichert hast, heißt hier mal userSong. */
    11. if (ds_list_size(userSong) != ds_list_size(validSong))
    12. {
    13. //Länge passt nicht
    14. return false;
    15. }
    16. for(i=0; i<ds_list_size(userSong); ++i)
    17. {
    18. if (ds_list_find_value(userSong,i) != ds_list_find_value(validSong,i))
    19. {
    20. // i-tes Element passt nicht.
    21. return false;
    22. }
    23. }
    24. return true;
    25. }
    Alles anzeigen


    So könnte man prüfen, ob der User gerade die Pfeiltasten in der Reihenfolge links,rechts,links,rechts gedrückt hat.

    Wichtig ist dabei auch, dass du das userSong-Array regelmäßig mit ds_list_clear aufräumst, wenn man den Musik-spiel-Modus aktiviert oder deaktiviert (sonst gibt's Bugs bezüglich dem Zeug, das noch drin liegt) - und dass du auch diese Abfragelogik nicht unbedingt außerhalb dieses Modus ausführst (das frisst Performance).