Gå til innhold

Anbefalte innlegg

Mornings :)

 

På skolen har vi begynt med 1B-datafaget, hvor vi lærer litt programering.

Noe av det første vi lærte var Tripp Trapp Tresko (3 på rad). Er ikke alle som har fått til detta enda men :p men neon har kommet litt lenger, men jeg skjønner faan ikke hva koden blir for at man skal kunne vinne ett spill! da altså få 3 på rad. :blush: 1 bitte-liten mulighet er jo å skrive at "hvis jeg trykker på denne knappen, og den og den ruta allerede inneholder X vinner spiller 1" men det blir lixom litt for dumt! :p (og en SINNSYKT lang kode! hehe) :thumbdown:

Så spørsmålet er da: kan noen hjelpe meg med koden for at man skal kunne vinne i mitt 3-på-rad-spill? :yes:

Lenke til kommentar
Videoannonse
Annonse

jeg ville sjekket de 8 mulighetene hver gang ja.

 

hvis du bruker knapper (commandbuttons) trenger du ikke legge samme kode på hver av knappene:

 

du bare setter navnet på alle knappene til det samme

 

Private Sub cmdKnapp_Click(Index As Integer)

select case index
case 0
cmdknapp(0).caption = "X"
case 1
cmdknapp(1).caption = "X"
end select

if cmdknapp(0).caption = "X" and cmdknapp(1).caption ="X" and cmdknapp(2).caption ="X" then
msgbox "x vinner!"

'gjenta for alle 8 ulike mulighetene

end if

End Sub

Lenke til kommentar

Masse IF's er dårlig kode. Kan komme med en litt bedre løsning om 3 sec

 

Edit:

Sleng inn en "CommandButton" og sett index-verdien til 0

    Private Type win
       first As Double
       second As Double
       third As Double
   End Type
Dim win(1 To 9) As win
Dim anntall_win As Double

Private Sub Command1_Click(Index As Integer)

Command1(Index).Caption = "X"

check_ifwin

End Sub

Private Sub Form_Load()

Dim x, y, i

x = 3
y = 3

For i = 1 To x * y
   
   Load Command1(i)
   
   Command1(i).Top = Val((i - 0.5) / y) * Command1(0).Height
   Command1(i).Left = (i - (Val((i - 0.5) / x) * 3)) * Command1(0).Width
   
   Command1(i).Visible = True

Next i

anntall_win = 0

anntall_win = anntall_win + 1 'første mulighet
win(anntall_win).first = 1
win(anntall_win).second = 2
win(anntall_win).third = 3

anntall_win = anntall_win + 1 'andre mulighet
win(anntall_win).first = 4
win(anntall_win).second = 5
win(anntall_win).third = 6

anntall_win = anntall_win + 1 'tredje mulighet
win(anntall_win).first = 7
win(anntall_win).second = 8
win(anntall_win).third = 9

anntall_win = anntall_win + 1 'fjerde mulighet
win(anntall_win).first = 1
win(anntall_win).second = 4
win(anntall_win).third = 7

anntall_win = anntall_win + 1 'femte mulighet
win(anntall_win).first = 2
win(anntall_win).second = 5
win(anntall_win).third = 8

anntall_win = anntall_win + 1 'sjette mulighet
win(anntall_win).first = 3
win(anntall_win).second = 6
win(anntall_win).third = 9

anntall_win = anntall_win + 1 'syvende mulighet
win(anntall_win).first = 1
win(anntall_win).second = 5
win(anntall_win).third = 9

anntall_win = anntall_win + 1 'åttende mulighet
win(anntall_win).first = 3
win(anntall_win).second = 5
win(anntall_win).third = 7

End Sub

Private Sub check_ifwin()

Dim i, o
For i = 1 To anntall_win

   If Command1(win(i).first).Caption = "X" And Command1(win(i).second).Caption = "X" And Command1(win(i).third).Caption = "X" Then

       Command1(win(i).first).BackColor = &HFF&
       Command1(win(i).second).BackColor = &HFF&
       Command1(win(i).third).BackColor = &HFF&
       
       MsgBox "You win!"
       
           For o = 1 To Command1.UBound
           
               Unload Command1(o)
               
           Next o
           
           Form_Load
           
   End If
   
Next i

End Sub

Endret av Jonas
Lenke til kommentar

Jeg ble litt inspirert, så jeg måtte lage en kjapp versjon. Jeg la ut noen knapper som vist på vedlegget.

 

Dette er .Net kode, men egentlig innebærer at du bare kan stryke det som heter "(Byval sender" og så videre og ut resten av den linja (hvis jeg husker riktig).

 

 

   Public i, j As Integer            'Jeg er lat, så jeg dim'er tellerparametre som public
   Public strTurn As String          'Definerer hvem sin tur det er
   Public aPlass(,) As String = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}} 'Matrise som holder alle X'er og O'er i riktige plasser

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Button1.Text = ""
       Button2.Text = ""
       Button3.Text = ""
       Button4.Text = ""
       Button5.Text = ""
       Button6.Text = ""
       Button7.Text = ""
       Button8.Text = ""
       Button9.Text = ""

       strTurn = "X"       'Førstemann får begynne med X

   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Button1.Text = strTurn
       aPlass(0, 0) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub


   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Button2.Text = strTurn
       aPlass(1, 0) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub

   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
       Button3.Text = strTurn
       aPlass(2, 0) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub

   Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
       Button4.Text = strTurn
       aPlass(0, 1) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub

   Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
       Button5.Text = strTurn
       aPlass(1, 1) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub

   Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
       Button6.Text = strTurn
       aPlass(2, 1) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub

   Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
       Button7.Text = strTurn
       aPlass(0, 2) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub

   Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
       Button8.Text = strTurn
       aPlass(1, 2) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub

   Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
       Button9.Text = strTurn
       aPlass(2, 2) = strTurn

       HarNoenVunnet()         'Kaller funksjonen som endrer spiller og sjekker om noen har vunnet

   End Sub

   Private Sub HarNoenVunnet()

       'Endrer spilleren fra X til O og omvent
       If strTurn = "X" Then
           strTurn = "O"
       ElseIf strTurn = "O" Then
           strTurn = "X"
       End If

       'Denne for-løkka går igjennom en rad og en kolonne hver gang
       For i = 0 To 2
           'Kontrollerer for alle rader
           If aPlass(i, 0) = aPlass(i, 1) And aPlass(i, 1) = aPlass(i, 2) Then
               MsgBox("Vinneren er " & aPlass(i, 0))
           End If

           'Kontrollerer for for alle kolonner
           If aPlass(0, i) = aPlass(1, i) And aPlass(1, i) = aPlass(2, i) Then
               MsgBox("Vinneren er " & aPlass(0, i))
           End If
       Next

       'Men man kan vinne på diagonalene også
       If aPlass(0, 0) = aPlass(1, 1) And aPlass(1, 1) = aPlass(2, 2) Then
           MsgBox("Vinneren er " & aPlass(0, 0))
       End If

       If aPlass(0, 2) = aPlass(1, 1) And aPlass(1, 1) = aPlass(2, 0) Then
           MsgBox("Vinneren er " & aPlass(2, 0))
       End If

   End Sub

 

La meg først få presentere en ARRAY! Dette er en matrise, og du kan se på den som et regneark i Excel. Vi har et regnerark og kaller det aPlass. En referanse til en celle i Excel kan f.eks. være "C2". Dette betyr rolonne 3 og rad 2. For å referere til den samme plasseringen i matrisen vår, kan vi bruke referansen "aPlass(2,3)". Man refererer med andre ord slik Matrise(rad, kolonne)

 

(Men se bort fra at jeg i koden har rotet med min egen logikk, dette var prinsippet).

 

 

Det gjør skrivearbeidet for å teste om en spiller har vunnet mye enklere (synes jeg)

 

:)

post-32-1094074510_thumb.jpg

Lenke til kommentar

Men av og til man jo bruke flere if-setninger etter hverandre...

 

 

Men unødvendig bruk av if-setninger gjør koden verre å lese både for deg selv og andre. I eksempelet kunne jeg testet hver rad og kolonne for seg noe som ville blitt 8 if-setninger, men dette ble halvert med bruk av en for-løkke.

Endret av moskus
Lenke til kommentar
MWHUHAHA!! Jeg ble akkurat ferdi klokken 23.00 med min versjon :devil:

Kanskje det, men jeg så ikke denne posten før kl 23:10! :p

Okey, du ble kansje ferdig med den før meg, men jeg ble ferdig først med lan-versjon av spillet!

 

Er på lan nå og jeg har ikke to pc'en hele tiden som jeg kan bruke til å teste, så det er nok et par feil enda.

 

Edit: Fikk testa det nå, og det funka fett!

3_p__rad.exe

Endret av Jonas
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...