Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Ristinollan tarkistus (vb)

Sivun loppuun

zigilii [24.11.2004 17:15:14]

#

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

hunajavohveli [24.11.2004 17:26:47]

#

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.

zigilii [24.11.2004 18:01:43]

#

mikähän on, en saa toimiin (Subscript out of range) ja valitti tosta rivistä
If merkki(X, Y) = "X" Then

hunajavohveli [24.11.2004 18:07:08]

#

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

zigilii [24.11.2004 19:27:19]

#

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

sqwiik [24.11.2004 19:33:41]

#

Lounas-koillinen-suunnassa vastaavsti pienennetään Y-muuttujaa, joka alkaa max. y arvosta (9). Muuten samalla tavalla.

zigilii [24.11.2004 20:00:53]

#

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

hunajavohveli [24.11.2004 20:27:51]

#

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
...

zigilii [24.11.2004 20:40:57]

#

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.

sqwiik [24.11.2004 20:43:54]

#

Tietenkin i-muuttujaa kuitenkin kasvatetaan, ei vähennetä. Tai sitten vertaat sitä arvoon -5 (viisi peräkkäin)

zigilii [24.11.2004 21:07:49]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta