Star Wars tema retro arkadspel (4 / 9 steg)
Steg 4: Processuella nivå design
Designa för oändligt rullande spel i förväg är naturligtvis omöjligt. Du har att komma med algoritm för att generera terräng.
Här är kraven på min algoritm jag kom med:
Skärmen måste börja tom (med bara spelaren på det) och hinder måste börja rulla från höger. Varje gång skärmen rullas, måste ett nytt hinder läggas. Det kan läggas antingen övre eller nedre raden men spelaren måste kunna undvika kollision så när hinder rad skiftar från en rad till en annan, en tom kolumn måste visas. Eftersom vi vill ha spelare att reagera omedelbart, får han alltid bara en cell för att flytta således inte mer än en tom kolumn måste visas efter varandra.
Jag kodade först denna algoritm i python som det är mycket lätt att felsöka och mycket lättare att förstå när jämfört med C-kod. Förutom om du förstår hur och varför det fungerar i python, kan ni skriva det i C också.
importera slumpmässiga
senast = 0
hoppade över = 0
sym = ["", "X"]
a = ""
b = ""
för i i range(100):
om hoppas över:
en += sym [sista]
b + = sym[not(last)]
hoppade över = 0
Elif random.randint (0,10) %2! = senast:
senast = not(last)
hoppade över = 1
a+=" "
b+=" "
annat:
en += sym [sista]
b + = sym[not(last)]
Print(a)
Print(b)
Om du inte vet vad ovan python skript gör, prova att köra det och se vad som händer. Det är enkelt och du bör kunna räkna ut snabbt.
Jag sedan översatt här koden till C och vissa lite operationer som optimering. Du behöver inte använda dem, kan du enkelt utelämna det och sticka med array operationer.
unsignedint senast = 0;
bool hoppat = 0;
unsignedint en = 0b0000000000000000;
unsignedint b = 0b0000000000000000;
en = en << 1.
b = b << 1.
Detta flyttar averything ett ställe till leftif(skipped) {
en = en | siste.
b = b |! senaste;
hoppade över = 0;
}
annat {
randomSeed(millis());
om (random(10) %2) {
senast =! senaste;
hoppade över = 1;
en = en << 1; //b = b << 1
}
annat {
en = en | siste.
b = b |! senaste;
}
Det är det när det gäller nivå generation. Denna funktion (utan variabeldeklaration) kallas varje gång skärmen rullas. Efter terräng ritas generation skärmen om.