Avatar billede nitro_ Nybegynder
31. januar 2005 - 23:34 Der er 6 kommentarer

Mastermind - hjælp til sort/hvid afmærkning

Hej. Jeg er i gang med et mastermind spil, men er gået i stå hvor man i de små felter, skal markere hvis farven er rigtigt placeret (sort) eller farven er rigtig, men placeret forkert (hvid).
Indtil videre burde den gerne udskrive de rigtige antal 'sorte' og 'hvide' man har i en msgbox, men de skal som sagt farves ude i de små felter.
Kan lige komme med et eksempel, til dem der ikke er helt sikre med hvordan det skal gøres:
Computeren har valgt farverne grøn-grøn-sort-gul som skal gættes. Jeg gætter nu på grøn-sort-hvid-blå -> Jeg har altså en rigtigt placeret (grøn) og en rigtig farve som er forkert placeret (sort). Altså skal et af de små fire felter farves sort, og et andet skal farves hvidt.


Min kode ser således ud:
Option Explicit
Dim i, j, n, round, nowrand
Dim Udfyldt(3) As Boolean
Dim hvid As Integer
Dim Sort As Integer
Dim guessflag(3) As Boolean
Dim løsningflag(3) As Boolean

Public Function AntalSorte() As Integer
Dim sorte As Integer
For i = 0 To 3
    If løsning(i).BackColor = imgGuess(round * 4 + i).BackColor Then
    sorte = sorte + 1
    løsningflag(i) = True
    guessflag(i) = True
    End If
Next i
AntalSorte = sorte
End Function
Public Function AntalHvide() As Integer
Dim hvid As Integer
For i = 0 To 3
For j = 0 To 3
  If løsning(i).BackColor = imgGuess(round * 4 + j).BackColor And løsningflag(i) = False And guessflag(i) = False Then
      hvid = hvid + 1
      løsningflag(i) = True
      guessflag(j) = True
  End If
Next j
Next i
AntalHvide = hvid
End Function
Private Sub form1_load()
  For i = 0 To 3
  løsningflag(i) = False
  guessflag(i) = False
  Next i
End Sub
Private Sub cmdStart_click()
 
  løsning(0).Visible = True
  For i = 1 To 3
  Load løsning(i)
  løsning(i).Visible = True
  løsning(i).Left = løsning(i - 1).Left + løsning(0).Width
  Next i
 
  'Løsning dannes
  For i = 0 To 3
    Randomize: nowrand = Int(Rnd * 6)
    Select Case nowrand
    Case 0: løsning(i).BackColor = RGB(0, 200, 0)
    Case 1: løsning(i).BackColor = RGB(200, 0, 0)
    Case 2: løsning(i).BackColor = RGB(0, 0, 200)
    Case 3: løsning(i).BackColor = RGB(255, 255, 0)
    Case 4: løsning(i).BackColor = RGB(255, 255, 255)
    Case 5: løsning(i).BackColor = RGB(0, 0, 0)
    End Select
  Next i
  'start spil gøres usynlig
  cmdStart.Visible = False
 
  'imgguess dannes
    For i = 1 To 39
      Load imgGuess(i)
      imgGuess(i).Visible = True
      If i Mod 4 <> 0 Then
        imgGuess(i).Top = imgGuess(i - 1).Top
        imgGuess(i).Left = imgGuess(i - 1).Left + imgGuess(i - 1).Width + 135
      Else
        imgGuess(i).Top = imgGuess(i - 1).Top - imgGuess(0).Height - 135
        imgGuess(i).Left = imgGuess(0).Left
      End If
    Next i
    'imganswer dannes
    For n = 1 To 39
      Load imgAnswer(n)
      imgAnswer(n).Visible = True
      If n Mod 2 Then
        imgAnswer(n).Top = imgAnswer(n - 1).Top
        imgAnswer(n).Left = imgAnswer(n - 1).Left + imgAnswer(n - 1).Width + 119
      Else
        imgAnswer(n).Top = imgAnswer(n - 1).Top - imgAnswer(0).Height - 119
        imgAnswer(n).Left = imgAnswer(0).Left
      End If
    Next n
 
  'imgguess(0) og imganswer(0) gøres synlig
  imgGuess(0).Visible = True
  imgAnswer(0).Visible = True
 
  'første runde
  round = 0
 
  'Udfyldt nulstilles
  For i = 0 To 3
      Udfyldt(i) = False
  Next i
End Sub

Private Sub imgGuess_Click(Index As Integer)
  Dim flag As Boolean

  'farver sættes
  If 0 + 4 * round <= Index And Index <= 4 * round + 3 Then
    If optFar(0) Then imgGuess(Index).BackColor = RGB(0, 200, 0)
    If optFar(1) Then imgGuess(Index).BackColor = RGB(200, 0, 0)
    If optFar(2) Then imgGuess(Index).BackColor = RGB(0, 0, 200)
    If optFar(3) Then imgGuess(Index).BackColor = RGB(255, 255, 0)
    If optFar(4) Then imgGuess(Index).BackColor = RGB(255, 255, 255)
    If optFar(5) Then imgGuess(Index).BackColor = RGB(0, 0, 0)
    Udfyldt(Index Mod 4) = True
  End If
 
  'Undersøger om alle 4 på rækken er udfyldt
  flag = True
  For i = 0 To 3
    If Udfyldt(i) = False Then flag = False
  Next i
  'gør gæt knappen synlig
  If flag = True Then
    cmdGuess.Visible = True
  End If
End Sub
Private Sub cmdGuess_click()
'ny runde
'fjerner gæt knappen

  For i = 0 To 3
  Udfyldt(i) = False
  Next i
  cmdGuess.Visible = False
  Sort = AntalSorte
  MsgBox Sort
  hvid = AntalHvide
  MsgBox hvid
  round = round + 1
End Sub
Avatar billede martin_moth Mester
02. februar 2005 - 16:05 #1
Hvad er det du kalder for "felter"?
Og hvad er det du spørger om - har du selv kodet det så det virker med at den kan finde ud af hvor mange der er rigtige og forkerte, men mangler du kun at markere det grafisk?
Avatar billede nitro_ Nybegynder
02. februar 2005 - 16:36 #2
Ja, det var nok lidt dårligt forklaret.
De felter der skal farves enten sort eller hvid (alt efter om farven er rigtig), hedder imgAnswer.
Den burde selv kunne finde ud af hvor mange hvide og sorte der er (rigtigt placerede farve og rigtig farve, men forkert placeret) - og selvom den måske ikke kan, er det ikke det jeg skal have hjælp med.
Mit problem er, som du selv påpeger, at jeg skal markere grafisk hvor mange 'hvide' og 'sorte' der er, i stedet for den skriver det i en msgbox.

Her er et billede af programmet:
http://hvidkildehusene.dk/pics/mastermind.jpg
Avatar billede nitro_ Nybegynder
02. februar 2005 - 16:38 #3
Tilføjelse:
Det er altså de små felter (imAnswer) ude til højre for de større felter, som enten skal farves hvid eller sort. På billedet her skulle der gerne komme en sort (den blå er placeret korrekt) og en hvid (den røde er korrekt, men forkert placeret).
Felterne nederst, er det korrekte svar (det er til fejlfinding, bliver selvfølgelig fjernet, når programmet virker).
Avatar billede martin_moth Mester
03. februar 2005 - 08:46 #4
Jeg prøver lige igen - hvad er det du kalder for felter - er det imageboxes?

Hvis det er imagebox kan du jo loade et sort billede eller et hvidt billede med loadpicture. Hvis det altså er en imagebox.

Image1.Picture = loadpicture(App.Path & "\sort.jpg")
Avatar billede nitro_ Nybegynder
03. februar 2005 - 15:36 #5
Nåå på den måde. Du har misforstået mit spørgsmål (eller også har jeg ikke formuleret mig klart nok), men problemet er ikke at farve dem sorte/hvide.
Det er labels, og der går jeg bare således:
imgAnswer.BackColor = RGB(0, 0, 0)

Problemet er, at jeg ikke kan skrive en kode, der går, at når der er to rigtige (fx.), så skal to af de såkaldte imgAnswer (som er labels) farves sorte.
Jeg havde prøvet med noget der lød sådan her:
for i = 0 to Sort 'sort er det antal labels/felter der skal farves sorte
imgAnswer(i).BackColor = RGB(0, 0, 0)
Audfyldt = true 'markerer om den er farvet, så der ikke farves hvid oven i den sorte
Next i

Den virkede ikke ordentligt, men det er noget lign. det, som skal kodes, så labels'ne farves rigtigt.
Avatar billede martin_moth Mester
03. februar 2005 - 17:13 #6
tror ikke jeg forstår, hvad det er du ikke kan finde ud af. Andre kan måske.

har du selv regnet ud hvilke der skal være sorte, og hvilke der ikek skal - eller er det det du ikek kan finde ud af at regne ud?
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