Eli kun minulla on tällainen koodi joka tarkistaa onko ristinollassa rivejä. kohta-taulukko kertoo mikä merkki on missäkin.
for i := 1 to 3 do begin
if (kohta[i,1] = kohta[i,2]) and (kohta[i,1] = kohta[i,3]) then
voittaja := kohta[i,1] else
if (kohta[1,i] = kohta[2,i]) and (kohta[1,i] = kohta[3,i]) then
voittaja := kohta[1,i]
else
end;
if (kohta[1,1] = kohta[2,2]) and (kohta[1,1] = kohta[3,3]) then
voittaja := kohta[1,1] else
if (kohta[3,1] = kohta[2,2]) and (kohta[3,1] = kohta[1,3]) then
voittaja := kohta[3,1];Mutta jostain syystä se vaatii, että merkkejä on vähintään yksi joka rivillä ja sarakkeella. Mikä vikana?
...Outoa. Kirjoitin saman itse hieman eri muotoon, toimiiko tämä? Tuota viimeistä else-sanaa ei tarvita.
for i := 1 to 3 do begin
{Onko vaakarivillä voittoa?}
if (kohta[i,1] = kohta[i,2]) and (kohta[i,1] = kohta[i,3]) then begin
voittaja := kohta[i,1];
{Jos ei tuolla, niin entäs sitten pystyrivillä?}
end else if (kohta[1,i] = kohta[2,i]) and (kohta[1,i] = kohta[3,i]) then begin
voittaja := kohta[1,i];
end;
end;
if (kohta[1,1] = kohta[2,2]) and (kohta[1,1] = kohta[3,3]) then begin
voittaja := kohta[1,1];
end else if (kohta[3,1] = kohta[2,2]) and (kohta[3,1] = kohta[1,3]) then begin
voittaja := kohta[3,1];
end;Eikun ahaa... Löysin vian, kun mietin vähän. Voitto tulee tuolla koodilla myös, jos on rivi tyhjiä...
Eli tarkista myös, että jokaisessa tarkistettavassa kohdassa on merkki.
lainaus:
Eikun ahaa... Löysin vian, kun mietin vähän. Voitto tulee tuolla koodilla myös, jos on rivi tyhjiä...
Eli tarkista myös, että jokaisessa tarkistettavassa kohdassa on merkki.
Siis kyllä minulla löytyy tämmönenkin.
Loogisesti ajatellen kaiken pitäisi olla kunnossa, ja ainoa mahdollinen vika on tuossa tarkistus koodissa.
if voittaja = 1 then begin
{nolla voittaa}
end else
if voittaja = 2 then begin
{risti voittaa}
end else begin
end;Niin ja olisi varmaan pitänyt mainita heti alussa, että
ohjelma toimi ihan hyvin sisäkkäisillä if-lauseilla. Se oli kuitenkin niin sekavan näköistä koodia, joten ajattelin muokata sen tämmöiseen muotoon. Eli ongelmaa ei periaatteessa ole, mutta ihmetyttää miksi se ei toimi tuolla lailla.
Ei vaan katsos - jos jollain rivillä/sarakkella on voitto, niin myöhemmin tulevat mahdolliset tyhjät rivit nollaavat voittajan. Laita siis tarkistuskoodiin noiden voitta := ... - rivien perään komento break;, joka keskeyttää tarkastuksen (silmukan suorituksen, siis)
Kiitos!
En ollut kyllä ikinä kuullutkaan silmukan katkasemisesta (johtuen siitä, että en ole varsinaisesti opiskellut ohjelmointia, vaan opetellut ne asiat mitä olen tarvinnut)
Se alkoi heti toimia kun lisäsin tämän viimeiseksi silmukkaan:
if voittaja <> 0 then break;
Aihe on jo aika vanha, joten et voi enää vastata siihen.