Oon tässä yrittäny tehä ristinollaa (10x10), ihan hyvin se onnistui siihen asti kunnes piti tarkistaa vino-sarjoja. Elikkäs mulla on tämmönen tarkistus (X) pysty-palkkeihin:
lukux = 0
For a = 0 To 9
For i = 0 To 9
If merkki(a, i) = "X" Then
lukux = lukux + 1
Else
lukux = 0
End If
If lukux = 5 Then
MsgBox "Pelaaja X voitti!"
ohi = True
Exit Sub
End If
Next
NextForm_Click kohdassa tallennetaan muistiin (merkki(9,9)) kumpi merkeistä on kyseessä (X vai O).
Koodi toimii muuten, mutta miten onnistuu vino-sarjojen tarkistus?
PS. En jaksanut kommentoida koodia -> siinä ei ole mitään muuta kuin iffejä ja for-nextejä, mutta on kyllä vähän sekavaa koodia
Vaikkapa näin:
For x = 1 To 10
y = y + 1
If merkki(x, y) = "X" Then
lukux = lukux + 1
Else
lukux = 0
End If
Next xEli samaan aikaan kun For-luuppi kasvattaa x:ää, kasvatetaan rinnalla myös yytä. Tuo on siis "kaakkoon", mutta osaat varmaan soveltaa muihinkin suuntiin.
mikähän on, en saa toimiin (Subscript out of range) ja valitti tosta rivistä
If merkki(X, Y) = "X" Then
No joo, tuossa koodissa käytin kohtia 1-10, voit tietysti muokata sen niin, että se vastaa sinun koodiasi eli 0-9. Ja jos Subscript-ongelmia tulee, voit aina tarkistaa muuttujan arvon viemällä hiiren sen päälle.
Eli toimisiko tämä:
y = 0
For x = 0 To 9
If merkki(x, y) = "X" Then
lukux = lukux + 1
Else
lukux = 0
End If
y = y + 1
Next xsain toimiin puoliks (kaakko-luode) mutta toisinpäin en saanu toimiin
tässä kaakko-luode koodi
lukux = 0
For i = 0 To 9
For a = 0 To 9 'etsii alku pisteen
If merkki(a, i) = "X" Then
lukux = lukux + 1
i = i + 1 'lisätään Y:tä
Else
lukux = 0 'nolla x:ää peräkkäin
End If
If lukux = 5 Then 'viiden suora
MsgBox "Pelaaja X voitti!"
ohi = True 'peli ohi
Exit Sub
End If
Next
NextLounas-koillinen-suunnassa vastaavsti pienennetään Y-muuttujaa, joka alkaa max. y arvosta (9). Muuten samalla tavalla.
eli siis tälleen
lukux = 0
For i = 9 To 0
For a = 9 To 0 'etsii alku pisteen
If merkki(a, i) = "X" Then
lukux = lukux + 1
i = i - 1
Else
lukux = 0 'nolla x:ää peräkkäin
End If
...mutta ei toimi -> ei tee mitään
Johtuu siitä, että For-luupin normaalikasvatusmäärä on 1. Ja 9:stä on vaikea enää kasvattaa eteenpäin, kun päätepisteeksi on valittu 0. Tarkoitus on siis kasvataa luupin indeksimuuttujaa negatiivisesti, joten joudut käyttämään Steppiä:
lukux = 0
For i = 9 To 0 Step -1 'yksi pykälä taaksepäin
For a = 9 To 0 Step -1'etsii alku pisteen
If merkki(a, i) = "X" Then
lukux = lukux + 1
i = i - 1
Else
lukux = 0 'nolla x:ää peräkkäin
End If
...Saatan olla väärässä, mutta muistin että se laskee automaattisesti jos jälkimmäinen luku on pienempi. Ei sillä ole enään mitään välia.
En saa edelleenkän toimiin, ei vieläkään tee mitään.
Tietenkin i-muuttujaa kuitenkin kasvatetaan, ei vähennetä. Tai sitten vertaat sitä arvoon -5 (viisi peräkkäin)
niinpä, nonii nyt toimii
iso kiitos teille molemmile
ja seuraavaksi pitää korjata kaikki bugit jos (ja kun) semmosia siellä on ja tehdä lisäasetuksia (enemmän ruutuja...) lisää bugi korjausta ja haastaa kaikki kaverit
PS. kiitos vielä kerran
Aihe on jo aika vanha, joten et voi enää vastata siihen.