RuZleBIFf Skrevet 1. september 2004 Del Skrevet 1. september 2004 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 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. 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! (og en SINNSYKT lang kode! hehe) Så spørsmålet er da: kan noen hjelpe meg med koden for at man skal kunne vinne i mitt 3-på-rad-spill? Lenke til kommentar
Vain Skrevet 1. september 2004 Del Skrevet 1. september 2004 når det er bare 3 på rad (på et brett med 3x3 ruter) er det ikke så voldsomt mange ruter... og hvis du får en superavansert kode blir det kanskje avslørt som juks? jeg kan ingen superavanserte koder, men foreslår at du bare sjekker de 8 mulighetene en etter en. Lenke til kommentar
RuZleBIFf Skrevet 1. september 2004 Forfatter Del Skrevet 1. september 2004 (endret) om jeg blir avslørt eller ikke gjør ingen ring! og da må jeg altså legge inn de 8 mulighetene for alle kanppene! Endret 1. september 2004 av RuZleBIFf Lenke til kommentar
Vain Skrevet 1. september 2004 Del Skrevet 1. september 2004 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
Jonas Skrevet 1. september 2004 Del Skrevet 1. september 2004 (endret) 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 1. september 2004 av Jonas Lenke til kommentar
RuZleBIFf Skrevet 1. september 2004 Forfatter Del Skrevet 1. september 2004 oi! den var litt vannskelig! hehe... trur det er liksågreit å smøre seg med tålmodighet å vente på at vi lærer det jeg! å kopiere kode har jeg ikke noe imot! men når jeg ikke skjønner den, er det ikke no vits! Lenke til kommentar
Moskus Skrevet 1. september 2004 Del Skrevet 1. september 2004 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) Lenke til kommentar
Moskus Skrevet 1. september 2004 Del Skrevet 1. september 2004 (endret) En kjørbar versjon finnes i vedlegget. Du trenger ".Net Framework 1.1" for å kjøre spillet. Det finner du her. EDIT: Glemte jo det forb... vedlegget. TrippTrappTresko.zip Endret 1. september 2004 av moskus Lenke til kommentar
Jonas Skrevet 2. september 2004 Del Skrevet 2. september 2004 (endret) MWHUHAHA!! Jeg ble akkurat ferdi klokken 23.00 med min versjon Jeg lagde ikke 2-player, men jeg lagde med computer I vedlegget ligger vb6 kode, og for de som bruker .net har jeg også lagt til exe-fila. 3_p__rad.zip Endret 2. september 2004 av Jonas Lenke til kommentar
Kasp Skrevet 2. september 2004 Del Skrevet 2. september 2004 MWHUHAHA!! Jeg ble akkurat ferdi klokken 23.00 med min versjon Jeg lagde ikke 2-player, men jeg lagde med computer I vedlegget ligger vb6 kode, og for de som bruker .net har jeg også lagt til exe-fila. Kan ikke si at computer var så veldig smart Lenke til kommentar
Jonas Skrevet 2. september 2004 Del Skrevet 2. september 2004 (endret) Kan ikke si at computer var så veldig smart Fikk dårlig tid, og måtte være rask. Kan prøve å lage finere AI når jeg kommer hjem fra skole. Endret 2. september 2004 av Jonas Lenke til kommentar
Moskus Skrevet 2. september 2004 Del Skrevet 2. september 2004 MWHUHAHA!! Jeg ble akkurat ferdi klokken 23.00 med min versjon Kanskje det, men jeg så ikke denne posten før kl 23:10! Lenke til kommentar
Vain Skrevet 2. september 2004 Del Skrevet 2. september 2004 Masse IF's er dårlig kode. Kan komme med en litt bedre løsning om 3 sec Hvorfor er masse if's dårlig kode? Lenke til kommentar
Jonas Skrevet 2. september 2004 Del Skrevet 2. september 2004 Masse IF's er dårlig kode. Kan komme med en litt bedre løsning om 3 sec Hvorfor er masse if's dårlig kode? Det bare er sånn. Alt skal gjøres automatisk. Man skal ikke sjekke hver ting med forskjellige, men nesten like koder. Lenke til kommentar
Moskus Skrevet 2. september 2004 Del Skrevet 2. september 2004 (endret) Men av og til må 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 2. september 2004 av moskus Lenke til kommentar
Toddy Skrevet 2. september 2004 Del Skrevet 2. september 2004 bruk en forløkke så slipper du å skrive if setningene så mange ganger. Lenke til kommentar
GeirGrusom Skrevet 3. september 2004 Del Skrevet 3. september 2004 Bruk controll array, så slipper du alle CommandX_Click() Lenke til kommentar
aadnk Skrevet 4. september 2004 Del Skrevet 4. september 2004 Control arrays er ikke støttet i VB.NET, men det er imidlertid mulig å legge til kontroller og samtidig legge til "event handler". Til dette bruker man henholdsvis AddHandler og Controls.Add, som kan søkes etter på google for mer informasjon. Lenke til kommentar
Jonas Skrevet 5. september 2004 Del Skrevet 5. september 2004 (endret) MWHUHAHA!! Jeg ble akkurat ferdi klokken 23.00 med min versjon Kanskje det, men jeg så ikke denne posten før kl 23:10! 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 5. september 2004 av Jonas Lenke til kommentar
Vain Skrevet 6. september 2004 Del Skrevet 6. september 2004 Okey, du ble kansje ferdig med den før meg, men jeg ble ferdig først med lan-versjon av spillet! Kan du legge ut koden også? Man lærer ikke mye av en .exe-fil Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå