Avatar billede doomstone-dk- Nybegynder
02. marts 2005 - 11:05 Der er 2 kommentarer og
1 løsning

Ai til et spil

Jeg er igang med et projekt i vb, det handler om at man skal tage nogle tændstikker, og så den der tager den sidste har vundet!

Mit projekt skal også indholde en ai så man kan spillet mod en computer, den skal også lære når man spiller mod den.

Til at gøre dette har jeg lavet 2 arrays

'De 4 er spiller antallet i spillet
'47 er antallet af tændstikker der er tilbage
'1 to 3 er det tal der blev trukker
'Dette vil så retunere hvormange gange spillet er blevet vundet med det træk
Dim ai(4, 47, 1 To 3) As Integer
'4 er spiller id'et ellers er resten det samme som ai()
Dim ai_temp(4, 47) As Integer


Så hvær gang en bruge slutter sin tur bliver denne kørt

taget = 3 - i
//man kan max tage 3 tændstikker pr. tur og i er det total antal tændstikker man kunne tage mere i den tur
ai_temp(spillerid, tilbage - 1 + taget) = taget
//spillerid = spillerns id
//tilbage er hvormange total tændstikker der er tilbage når turen er slut! derfor lægger den hvormang man tog til dog -1 da arrayet køre fra 0 til 47 men tilbage køre fra 1 til 48

//Dette over virker fint! det er når den skal gemme det i ai() at det ikke virker som det skal! for der kommer nemlig ikke al informationene ned i den.
//Så når hele spillet er slut gemmer den det hele i ai arrayet
Private Sub save_ai()
    Dim c As Integer
    Dim q As Integer
    For c = 0 To (spillerantal - 1)
        Dim won As Integer
'Spillerid er id'et på den tabne spiller
        If spillerid = c Then
            won = 0
        Else
            won = 1
        End If
        For q = 0 To antal
            If (ai_temp(c, q) > 0) Then
                ai(spillerantal - 1, q, ai_temp(c, q)) = won
            End If
        Next q
    Next c
End Sub

Er der en der kan hjælpe mig med dette?

//MIN HELE KODE
Option Explicit
Dim i As Integer
Dim antal As Integer
Dim spillerid As Integer
Dim spillerantal As Integer
Dim spiller(4) As String
Dim temp As Integer
Dim spil_run As Integer
Dim u As Integer
Dim tilbage As Integer
Dim taget As Integer
'De 4 er spiller antallet i spillet
'47 er antallet af tendstikker der er tilbage
'1 to 3 er det tal der blev trukker
'Dette vil så retunere hvormange gange spillet er blevet vundet med det træk
Dim ai(4, 47, 1 To 3) As Integer
'5 er spiller id'et ellers er resten det samme som ai()
Dim ai_temp(4, 47) As Integer

Private Sub Command1_Click()
    save_ai
    array2clip3d ai
End Sub

Private Sub Form_Load()
    spillerantal = 2
    antal = 47
    Label1.Caption = antal
'Skjuler alle tændstikker
    For u = 0 To 47
        match(u).Visible = False
        match(u).Enabled = False
    Next u
    'Starter et nyt spil
    nyt_spil
End Sub

Private Sub nyt_spil()
'Viser alle tændstikker
    For u = 0 To antal
        match(u).Visible = True
        match(u).Enabled = True
    Next u
   
'Sætter start variabler
    spil_run = 1
    tilbage = antal + 1
    i = 3
    lblpinde.Caption = i
    spiller(0) = "Spiller 1"
    spiller(1) = "Spiller 2"
    spiller(2) = "Spiller 3"
    spiller(3) = "Spiller 4"
    spiller(4) = "Spiller 5"
    spillerid = 0
    lblSpiller.Caption = spiller(spillerid)
   
'Deaktiverer næste tur knappen
    cmdNaestetur.Enabled = False
End Sub

Private Sub match_Click(Index As Integer)
'kører pind
    pind (Index)
End Sub

Private Sub pind(Index)
'Deaktivere billedet med (Index = Index)
    match(Index).Visible = False
    match(Index).Enabled = False
   
'Trækker en fra det resterende antal pinde
    tilbage = tilbage - 1
    Label1.Caption = tilbage
   
'Trækker en fra hvor mange tændstikker man mere kan trække
    i = i - 1
    lblpinde.Caption = i
    If (i = 0) Then
        sluttur
    ElseIf (i > 0 And i < 3) Then
'Aktiverer næste tur knappen
        cmdNaestetur.Enabled = True
    End If
     
    If (tilbage = 1) Then
'Deaktiverer næste tur knappen
        cmdNaestetur.Enabled = False
        slutspil
    End If
   
End Sub

Private Sub slutspil()
    spil_run = 0
'Viser besked boksen
'Da der kun er en der kan tage den sidste tændstik kan der kun være en taber, uafhængig af spiller antal
    naeste_bruger
    MsgBox ("Spillet er slut! " & spiller(spillerid) & " har tabt!")

'Skjuler alle tændstikker
    For u = 0 To antal
        match(u).Visible = False
        match(u).Enabled = False
    Next u

'Deaktiverer næste tur knappen
    cmdNaestetur.Enabled = False
End Sub

Private Sub cmdNaestetur_Click()
    sluttur
End Sub

Private Sub sluttur()
'Ai stuff
taget = 3 - i
        Clipboard.Clear
        Clipboard.SetText "[" & spillerid & "] " & tilbage & " --> " & taget
ai_temp(spillerid, tilbage - 1 + taget) = taget

'Gælder kun hvis hvis antallet af resterende pinde er over 1
    If (tilbage > 1) Then
        naeste_bruger
       
        lblSpiller.Caption = spiller(spillerid)
'Sætter i til 3 og viser "i" i labelen
        i = 3
        lblpinde.Caption = i
'Deaktiverer næste tur knappen
        cmdNaestetur.Enabled = False
    End If
End Sub



Private Sub menu_afslut_Click()
'Afslutter spillet og lukker
    If MsgBox("Er du sikker på at du vil afslutte spillet?", vbYesNo) = vbYes Then
        sluttur
        End
    End If
End Sub

Private Sub menu_nyt_spil_Click()
'Viser kun besked boksen hvis der er et spil igang
    If (spil_run = 1) Then
        If MsgBox("Er du sikker på at du vil starte et nyt spil?", vbYesNo) = vbYes Then
'Starter et nyt spil
            nyt_spil
        End If
    Else
'Starter et nyt spil
            nyt_spil
    End If
End Sub

'Denne sub finder den næste bruger
Private Sub naeste_bruger()
        spillerid = spillerid + 1
'Hvis spiller id er lig spiller antal sæt spiller id til 0
        If (spillerid = spillerantal) Then
            spillerid = 0
        End If
End Sub

Private Sub save_ai()
    Dim c As Integer
    Dim q As Integer
    For c = 0 To (spillerantal - 1)
        Dim won As Integer
        If spillerid = c Then
            won = 1
        Else
            won = 0
        End If
        For q = 0 To antal
            If (ai_temp(c, q) > 0) Then
                ai(spillerantal - 1, q, ai_temp(c, q)) = won
            End If
        Next q
    Next c
End Sub

Private Sub array2clip(arr() As Integer)

    Dim s As String
    Dim ix As Integer
    Dim iy As Integer
       
    For ix = 0 To 4
        For iy = 0 To 47
            s$ = s$ & "[" & ix & "," & iy & "] " & arr(ix, iy) & vbCrLf$
        Next iy
    Next ix
 
    If (Len(s$) > 0) Then
        Clipboard.Clear
        Clipboard.SetText s$
    End If

End Sub

Private Sub array2clip3d(arr() As Integer)

    Dim s As String
    Dim ix As Integer
    Dim iy As Integer
    Dim iz As Integer
       
    For ix = 0 To 4
        For iy = 0 To 47
            For iz = 1 To 3
                s$ = s$ & "[" & ix & "," & iy & "] " & arr(ix, iy, iz) & vbCrLf$
            Next iz
        Next iy
    Next ix
 
    If (Len(s$) > 0) Then
        Clipboard.Clear
        Clipboard.SetText s$
    End If

End Sub
Avatar billede doomstone-dk- Nybegynder
02. marts 2005 - 11:09 #1
Ups den save_ai() var ikke helt up to date... her er den rigtige
Private Sub save_ai()
    Dim c As Integer
    Dim q As Integer
    For c = 0 To (spillerantal - 1)
        Dim won As Integer
'Spillerid her er taberns id!
        If spillerid = c Then
            won = 0
        Else
            won = 1
        End If
        For q = 0 To antal
'Lægger den gamle antal ned i temp
                temp = ai(spillerantal - 1, q, ai_temp(c, q))
'Gemmer det gamle antal + nye i ai()
                ai(spillerantal - 1, q, ai_temp(c, q)) = temp + won
        Next q
    Next c
End Sub
Avatar billede doomstone-dk- Nybegynder
03. marts 2005 - 16:13 #2
Har jeg ikke forklaret mit problem godt nok?
Avatar billede doomstone-dk- Nybegynder
04. marts 2005 - 13:15 #3
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester