4 svar
158 visningar
lurkopurko 19
Postad: 21 okt 2019 17:50

Ormen, problem att utmata kroppen korrekt!

Hej, mitt problem är vid rad 104 där jag vill använda en for för att skriva ut kroppen på ormen, men när oavsett hur jag gör när jag använder for blir det helt fel när jag kör programmet. 

Någon som kan hjälpa mig i rätt riktning?

 

https://pastebin.com/qUzsWCzW

Laguna 30471
Postad: 21 okt 2019 22:53

Jag har inte läst koden så noga, men jag har ju implementerat maskspelet nån gång eller två, fast i andra språk.

Det här ser fel ut:

for(int i = 1; i > maskSize; i++)

Den loopen gås nog inte igenom en enda gång, för i > maskSize är falsk när i = 1.

lurkopurko 19
Postad: 21 okt 2019 23:01
Laguna skrev:

Jag har inte läst koden så noga, men jag har ju implementerat maskspelet nån gång eller två, fast i andra språk.

Det här ser fel ut:

for(int i = 1; i > maskSize; i++)

Den loopen gås nog inte igenom en enda gång, för i > maskSize är falsk när i = 1.

Precis det jag kommit fram til :)

Har försökt med denna for loopen på alla möjliga olika sätt, kopierade bara den som jag hade just när jag skrev detta inlägg. Vet inte riktigt hur jag ska lösa det.. Just nu har jag det här:

for (int i = 1; i < maskSize; i++)
{
if (prevMaskX[prevMaskX.Count - i] == x && prevMaskY[prevMaskX.Count - i] == y)
{
colorBlock(1);
y++;
}
}
Console.Write(map[x, y]);

Problemet är att det ser helt knas ut när jag kör programmet, ibland funkar det inte ibland funkar det. Vissa håll funkar bättre än andra osv. Vet inte riktigt hur jag ska beskriva problemet så bifogar en bild.

https://imgur.com/a/51SJXBR

lurkopurko 19
Postad: 22 okt 2019 08:34

Okej... efter ännu mera klurande har jag nu kommit fram till denna kod.

for (int i = 1; i < maskSize; i++)
{
if (prevMaskX[prevMaskX.Count - i] == x && prevMaskY[prevMaskX.Count - i] == y)
{
if(maskDirX == 1)
{
colorBlock(1);

} else
{
colorBlock(1);
y++;
}
}
}

Detta funkar dock endast mot vänster, upp, ner men så fort jag rör mig åt höger så blir det helt buggat och det skapas flera rutor än vad det ska :/. Utöver höger funkar det precis som det ska, tror detta har med i vilken ordning jag matar ut punkterna.

jek7 35 – Fd. Medlem
Postad: 23 okt 2019 13:36

Hej.

Två saker som ser ut att vara fel när jag kolla lite snabbt (jag kodar inte C# kan ju kanske tilläggas);

I början lägger du till startpunkten MaskX=5,maskY=5 tre gånger i prevMask, så när du ritar ut spelplanen, och kommer till 5,5 så kommer den förmodligen att rita ut en färgad ruta tre gånger, sedan fortsätta med resten av spelplanen, vilket gör att rad 5 på spelplanen blir 12 rutor bred istället för 10.

I loopen kollas ifall översta biten av masken är på koordinaten man ritar, och isåfall går den igenom hela masken och ritar om koordinaten stämmer. Men den kollar aldrig på resterande delar av masken om inte första rutan matchat, så om t.ex resten av masken är ovanför så är ju den delen av spelplanen redan ritad.

En lösning (kanske inte är mest effektiva sättet dock) är att ändra nedersta "else if" till bara "else" och köra loopen med masken som nu (med i<maskSize) och sen ha någon flagg-variabel som sätts ifall en del av masken ritades. Efter loopen kollar man om flaggan inte satts, och ritar isåfall tomma rutan i map.

(En helt annan lösning skulle kunna vara att skriva över posterna i map när man går förbi där med masken.)

Svara
Close