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 Next
Form_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 x
Eli 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 x
sain 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 Next
Lounas-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.