kartenspiel programmieren
Bei mir funktioniert es problemlos.KarlKoch hat geschrieben:ich habe ihren code mal zum testen genommen und auch da wird file or directory doesn't exist angezeigt also kann das bei ihnen doch auch nicht richtig funktionieren
Vieleicht ist hier im Forum eine dritte Person bereit, den Code zu testen?
Grüße,
BK
ich gaube ja, dass der code funktioniert nur warum bei mir nicht?
bei mir kommt nun immer die meldung
can not load class data view
can not load parent class user controll
was hat das zu bedeuten? wie kann ich das beheben, dass ich mein projekt wieder durchlaufen lassen kann?
habe die neuste version von gambas
bei mir kommt nun immer die meldung
can not load class data view
can not load parent class user controll
was hat das zu bedeuten? wie kann ich das beheben, dass ich mein projekt wieder durchlaufen lassen kann?
habe die neuste version von gambas
Das sind schon ziemlich schwerwiegende Fehler innerhalb von Gambas selbst. Da muss beim Kompilieren und/oder Installieren einiges schiefgegangen sein.KarlKoch hat geschrieben:can not load class data view
can not load parent class user controll
Vieleicht suchst Du doch besser nach fertigen RPMs für Deine Distribution?
Ich habe eine entsprechende Funktion in meinen Programmcode ganz am Anfang eingebaut. Benötigt wird die Komponente gb.Image.KarlKoch hat geschrieben:hat sich schon erledigt nun läuft der code bei mir auch
haben Sie ahnung wie man nun eine zoomfunktion angeben kann am besten, dass dies mit 2 kleinen buttons oder dem mausrad funktioniert
auszoomen und einzoomen
Out of bounds bedeutet, dass Du auf ein Arrayelement zugreifen willst, das es nicht gibt. (Wenn Du z.B. bei einem Array mit 20 Elementen auf das 25. Element zugreifen willlst.)KarlKoch hat geschrieben:ich habe versucht die zoomfunktion zu übernehmen bekomme aber als meldung out of bounds
was hat das zu bedeuten?
Ich würde vermuten, Du greifst zu früh auf eines der Arrays zu, die erhalten erst innerhalb der _new()-Funktion ihre notwendige Größe.KarlKoch hat geschrieben:habe ich wo etwas vergessen einzugeben?
Nachtrag:
Ich hab den Zoomteil nochmal überarbeitet, um die Auswirkungen der Rundungsfehler beim Zoomen zu verringern.
'form2 2 buttons ein label
CONST KARTEN_ANZAHL AS Integer = 78
' Die Karten aus /usr/share/apps/carddecks/cards-default/ in das
' Projektverzeichnis nach cards-default/ kopieren, danach zu jeder
' Datei eine Textdatei mit beliebigem Inhalt erzeugen (1.png -> 1.txt, ...)
CONST KARTEN_PFAD AS String = ""
CONST KARTEN_EXT AS String = ".jpg"
CONST KARTEN_RUECKSEITE AS String = ""
CONST KartenBreite AS Integer = 180
CONST KartenHoehe AS Integer = 260
$hRueckseite AS NEW Picture
$hKartenTisch AS Object
$hKarteInfo AS Object
$aKartenDeck AS NEW Object[]
$aKartenReihe AS NEW Object[]
$aKartenSeite AS NEW Integer[]
$aKarten AS NEW Integer[]
$iKartenBreite AS Integer
$iKartenHoehe AS Integer
$iMouseStartX AS Integer
$iMouseStartY AS Integer
$iZoom AS Integer
$hZoom AS Object
PUBLIC SUB _new()
DIM i AS Integer
DIM p AS NEW Picture
IF NOT Exist(KARTEN_RUECKSEITE) THEN ERROR.RAISE("Datei <b>" & KARTEN_RUECKSEITE & "</b> nicht gefunden")
$hRueckseite = Picture[KARTEN_RUECKSEITE]
$iKartenBreite = $hRueckseite.Width
$iKartenHoehe = $hRueckseite.Height
$hKartenTisch = NEW ScrollView(ME) AS "KartenTisch"
$hKarteInfo = NEW TextArea($hKartenTisch) AS "KarteInfo"
$hKarteInfo.Visible = FALSE
$hKarteInfo.ReadOnly = TRUE
$hKarteInfo.Wrap = TRUE
$hKarteInfo.Border = FALSE
$aKarten.Resize(KARTEN_ANZAHL)
$aKartenSeite.Resize(KARTEN_ANZAHL)
$aKartenReihe.Resize(8)
FOR i = 0 TO 7
$aKartenReihe = NEW Integer[]
NEXT
$aKartenDeck.Resize(KARTEN_ANZAHL)
FOR i = 0 TO KARTEN_ANZAHL - 1
$aKartenDeck = NEW PictureBox($hKartenTisch) AS "Karte"
$aKartenDeck.Tag = i
$aKartenDeck.Width = $iKartenBreite
$aKartenDeck.Height = $iKartenHoehe
NEXT
$hZoom = NEW SpinBox(ME) AS "sbZoom"
$iZoom = 100
$hZoom.MinValue = 1
$hZoom.MaxValue = 999
$hZoom.Value = 100
$hZoom.Suffix = " %"
KartenGeben
sbZoom_Change
END
PUBLIC SUB Form_Open()
ME.Width = 1024
ME.Height = 768
ME.Center
END
PUBLIC SUB Form_Resize()
$hKartenTisch.Move(8, 50, ME.ClientWidth - 180, ME.ClientHeight - 80)
END
PUBLIC SUB KartenMischen()
DIM i AS Integer
DIM r AS Integer
Randomize
FOR i = 0 TO KARTEN_ANZAHL - 1
$aKarten = i
NEXT
FOR i = 0 TO 1000
r = CInt(Rnd(0, KARTEN_ANZAHL))
$aKarten.Add($aKarten[r])
$aKarten.Remove(r)
NEXT
END
PUBLIC SUB KartenGeben()
DIM i AS Integer
KartenMischen
FOR i = 0 TO 7
$aKartenReihe.Clear
NEXT
FOR i = 0 TO KARTEN_ANZAHL - 1
$aKartenSeite = 0
$aKartenDeck.Picture = $hRueckseite
$aKartenDeck.RAISE
$aKartenDeck[i].Move(i * 10, 0)
'KarteAufdecken(i)
NEXT
END
PUBLIC SUB KarteAufdecken(Karte AS Integer)
DIM sFile AS String
IF $aKartenSeite[Karte] = 0 THEN
sFile = KARTEN_PFAD &/ Str$($aKarten[Karte]) & KARTEN_EXT
IF NOT Exist(sFile) THEN ERROR.RAISE("Datei <b>" & sFile & "</b> nicht gefunden")
$aKartenDeck[Karte].Picture = Picture[sFile].Image.Stretch($iKartenBreite, $iKartenHoehe).Picture
$aKartenSeite[Karte] = 1
ELSE
$aKartenDeck[Karte].Picture = $hRueckseite
$aKartenSeite[Karte] = 0
ENDIF
END
PUBLIC SUB Karte_MouseDown()
$iMouseStartX = Mouse.X
$iMouseStartY = Mouse.Y
$aKartenDeck[LAST.Tag].RAISE
END
PUBLIC SUB Karte_MouseMove()
$aKartenDeck[LAST.Tag].Move($aKartenDeck[LAST.Tag].X + Mouse.X - $iMouseStartX, $aKartenDeck[LAST.Tag].Y + Mouse.Y - $iMouseStartY)
END
PUBLIC SUB Karte_MouseUp()
DIM i AS Integer
DIM j AS Integer
DIM X AS Integer
DIM Y AS Integer
DIM iReihe AS Integer
$hKarteInfo.Visible = FALSE
IF Mouse.Right THEN
$hKarteInfo.Move(LAST.X + Mouse.X, LAST.Y + Mouse.Y, 150, 200)
'$hKarteInfo.Text = String$(10, "Infotext für Karte Nr: " & LAST.Tag & "\n")
$hKarteInfo.Text = File.Load(KARTEN_PFAD &/ Str$($aKarten[LAST.Tag]) & ".txt")
$hKarteInfo.RAISE
$hKarteInfo.Visible = TRUE
' ELSE
' $aKartenDeck[LAST.Tag].Raise
'
' 'als Beispiel eine einfache solitaire-ähnliche Anordnung
' iReihe = Min(7, CInt(Max(Mouse.ScreenX - $hKartenTisch.ScreenX, 10) / ($iKartenBreite + 8)))
'
' FOR i = 0 TO 7
' IF $aKartenReihe[i].Find(LAST.Tag) > -1 THEN
' $aKartenReihe[i].Remove($aKartenReihe[i].Find(LAST.Tag))
' ENDIF
' NEXT
' $aKartenReihe[iReihe].Add(LAST.Tag)
'
' FOR i = 0 TO 7
' FOR j = 0 TO $aKartenReihe[i].Max
' X = i * ($iKartenBreite + 8)
' Y = 120 + j * 20
' $aKartenDeck[$aKartenReihe[i][j]].Move(X, Y)
' NEXT
' NEXT
ENDIF
END
PUBLIC SUB Karte_DblClick()
KarteAufdecken(LAST.Tag)
END
PUBLIC SUB KartenTisch_MouseUp()
$hKarteInfo.Visible = FALSE
END
PUBLIC SUB KarteInfo_MouseUp()
$hKarteInfo.Visible = FALSE
END
PUBLIC SUB SetLabel(sText AS String)
Label1.Text = sText
END
PUBLIC SUB Button1_Click()
KartenGeben
Frage.Show
END
PUBLIC SUB Button2_Click()
Anleitung.Show
END
PUBLIC SUB sbZoom_Change()
DIM Karte AS Integer
DIM sFile AS String
$hRueckseite = Picture[KARTEN_RUECKSEITE]
$hRueckseite = Picture[KARTEN_RUECKSEITE].Image.Stretch(CInt($hRueckseite.Width * $hZoom.Value / 100), CInt($hRueckseite.Height * $hZoom.Value / 100)).Picture
$iKartenBreite = $hRueckseite.Width
$iKartenHoehe = $hRueckseite.Height
FOR Karte = 0 TO KARTEN_ANZAHL - 1
$aKartenDeck[Karte].Width = $iKartenBreite
$aKartenDeck[Karte].Height = $iKartenHoehe
$aKartenDeck[Karte].X = $aKartenDeck[Karte].X * $hZoom.Value / $iZoom
$aKartenDeck[Karte].Y = $aKartenDeck[Karte].Y * $hZoom.Value / $iZoom
IF $aKartenSeite[Karte] = 1 THEN
sFile = KARTEN_PFAD &/ Str$($aKarten[Karte]) & KARTEN_EXT
IF NOT Exist(sFile) THEN ERROR.RAISE("Datei <b>" & sFile & "</b> nicht gefunden")
$aKartenDeck[Karte].Picture = Picture[sFile].Image.Stretch($iKartenBreite, $iKartenHoehe).Picture
ELSE
$aKartenDeck[Karte].Picture = $hRueckseite
ENDIF
NEXT
$iZoom = $hZoom.Value
END
CONST KARTEN_ANZAHL AS Integer = 78
' Die Karten aus /usr/share/apps/carddecks/cards-default/ in das
' Projektverzeichnis nach cards-default/ kopieren, danach zu jeder
' Datei eine Textdatei mit beliebigem Inhalt erzeugen (1.png -> 1.txt, ...)
CONST KARTEN_PFAD AS String = ""
CONST KARTEN_EXT AS String = ".jpg"
CONST KARTEN_RUECKSEITE AS String = ""
CONST KartenBreite AS Integer = 180
CONST KartenHoehe AS Integer = 260
$hRueckseite AS NEW Picture
$hKartenTisch AS Object
$hKarteInfo AS Object
$aKartenDeck AS NEW Object[]
$aKartenReihe AS NEW Object[]
$aKartenSeite AS NEW Integer[]
$aKarten AS NEW Integer[]
$iKartenBreite AS Integer
$iKartenHoehe AS Integer
$iMouseStartX AS Integer
$iMouseStartY AS Integer
$iZoom AS Integer
$hZoom AS Object
PUBLIC SUB _new()
DIM i AS Integer
DIM p AS NEW Picture
IF NOT Exist(KARTEN_RUECKSEITE) THEN ERROR.RAISE("Datei <b>" & KARTEN_RUECKSEITE & "</b> nicht gefunden")
$hRueckseite = Picture[KARTEN_RUECKSEITE]
$iKartenBreite = $hRueckseite.Width
$iKartenHoehe = $hRueckseite.Height
$hKartenTisch = NEW ScrollView(ME) AS "KartenTisch"
$hKarteInfo = NEW TextArea($hKartenTisch) AS "KarteInfo"
$hKarteInfo.Visible = FALSE
$hKarteInfo.ReadOnly = TRUE
$hKarteInfo.Wrap = TRUE
$hKarteInfo.Border = FALSE
$aKarten.Resize(KARTEN_ANZAHL)
$aKartenSeite.Resize(KARTEN_ANZAHL)
$aKartenReihe.Resize(8)
FOR i = 0 TO 7
$aKartenReihe = NEW Integer[]
NEXT
$aKartenDeck.Resize(KARTEN_ANZAHL)
FOR i = 0 TO KARTEN_ANZAHL - 1
$aKartenDeck = NEW PictureBox($hKartenTisch) AS "Karte"
$aKartenDeck.Tag = i
$aKartenDeck.Width = $iKartenBreite
$aKartenDeck.Height = $iKartenHoehe
NEXT
$hZoom = NEW SpinBox(ME) AS "sbZoom"
$iZoom = 100
$hZoom.MinValue = 1
$hZoom.MaxValue = 999
$hZoom.Value = 100
$hZoom.Suffix = " %"
KartenGeben
sbZoom_Change
END
PUBLIC SUB Form_Open()
ME.Width = 1024
ME.Height = 768
ME.Center
END
PUBLIC SUB Form_Resize()
$hKartenTisch.Move(8, 50, ME.ClientWidth - 180, ME.ClientHeight - 80)
END
PUBLIC SUB KartenMischen()
DIM i AS Integer
DIM r AS Integer
Randomize
FOR i = 0 TO KARTEN_ANZAHL - 1
$aKarten = i
NEXT
FOR i = 0 TO 1000
r = CInt(Rnd(0, KARTEN_ANZAHL))
$aKarten.Add($aKarten[r])
$aKarten.Remove(r)
NEXT
END
PUBLIC SUB KartenGeben()
DIM i AS Integer
KartenMischen
FOR i = 0 TO 7
$aKartenReihe.Clear
NEXT
FOR i = 0 TO KARTEN_ANZAHL - 1
$aKartenSeite = 0
$aKartenDeck.Picture = $hRueckseite
$aKartenDeck.RAISE
$aKartenDeck[i].Move(i * 10, 0)
'KarteAufdecken(i)
NEXT
END
PUBLIC SUB KarteAufdecken(Karte AS Integer)
DIM sFile AS String
IF $aKartenSeite[Karte] = 0 THEN
sFile = KARTEN_PFAD &/ Str$($aKarten[Karte]) & KARTEN_EXT
IF NOT Exist(sFile) THEN ERROR.RAISE("Datei <b>" & sFile & "</b> nicht gefunden")
$aKartenDeck[Karte].Picture = Picture[sFile].Image.Stretch($iKartenBreite, $iKartenHoehe).Picture
$aKartenSeite[Karte] = 1
ELSE
$aKartenDeck[Karte].Picture = $hRueckseite
$aKartenSeite[Karte] = 0
ENDIF
END
PUBLIC SUB Karte_MouseDown()
$iMouseStartX = Mouse.X
$iMouseStartY = Mouse.Y
$aKartenDeck[LAST.Tag].RAISE
END
PUBLIC SUB Karte_MouseMove()
$aKartenDeck[LAST.Tag].Move($aKartenDeck[LAST.Tag].X + Mouse.X - $iMouseStartX, $aKartenDeck[LAST.Tag].Y + Mouse.Y - $iMouseStartY)
END
PUBLIC SUB Karte_MouseUp()
DIM i AS Integer
DIM j AS Integer
DIM X AS Integer
DIM Y AS Integer
DIM iReihe AS Integer
$hKarteInfo.Visible = FALSE
IF Mouse.Right THEN
$hKarteInfo.Move(LAST.X + Mouse.X, LAST.Y + Mouse.Y, 150, 200)
'$hKarteInfo.Text = String$(10, "Infotext für Karte Nr: " & LAST.Tag & "\n")
$hKarteInfo.Text = File.Load(KARTEN_PFAD &/ Str$($aKarten[LAST.Tag]) & ".txt")
$hKarteInfo.RAISE
$hKarteInfo.Visible = TRUE
' ELSE
' $aKartenDeck[LAST.Tag].Raise
'
' 'als Beispiel eine einfache solitaire-ähnliche Anordnung
' iReihe = Min(7, CInt(Max(Mouse.ScreenX - $hKartenTisch.ScreenX, 10) / ($iKartenBreite + 8)))
'
' FOR i = 0 TO 7
' IF $aKartenReihe[i].Find(LAST.Tag) > -1 THEN
' $aKartenReihe[i].Remove($aKartenReihe[i].Find(LAST.Tag))
' ENDIF
' NEXT
' $aKartenReihe[iReihe].Add(LAST.Tag)
'
' FOR i = 0 TO 7
' FOR j = 0 TO $aKartenReihe[i].Max
' X = i * ($iKartenBreite + 8)
' Y = 120 + j * 20
' $aKartenDeck[$aKartenReihe[i][j]].Move(X, Y)
' NEXT
' NEXT
ENDIF
END
PUBLIC SUB Karte_DblClick()
KarteAufdecken(LAST.Tag)
END
PUBLIC SUB KartenTisch_MouseUp()
$hKarteInfo.Visible = FALSE
END
PUBLIC SUB KarteInfo_MouseUp()
$hKarteInfo.Visible = FALSE
END
PUBLIC SUB SetLabel(sText AS String)
Label1.Text = sText
END
PUBLIC SUB Button1_Click()
KartenGeben
Frage.Show
END
PUBLIC SUB Button2_Click()
Anleitung.Show
END
PUBLIC SUB sbZoom_Change()
DIM Karte AS Integer
DIM sFile AS String
$hRueckseite = Picture[KARTEN_RUECKSEITE]
$hRueckseite = Picture[KARTEN_RUECKSEITE].Image.Stretch(CInt($hRueckseite.Width * $hZoom.Value / 100), CInt($hRueckseite.Height * $hZoom.Value / 100)).Picture
$iKartenBreite = $hRueckseite.Width
$iKartenHoehe = $hRueckseite.Height
FOR Karte = 0 TO KARTEN_ANZAHL - 1
$aKartenDeck[Karte].Width = $iKartenBreite
$aKartenDeck[Karte].Height = $iKartenHoehe
$aKartenDeck[Karte].X = $aKartenDeck[Karte].X * $hZoom.Value / $iZoom
$aKartenDeck[Karte].Y = $aKartenDeck[Karte].Y * $hZoom.Value / $iZoom
IF $aKartenSeite[Karte] = 1 THEN
sFile = KARTEN_PFAD &/ Str$($aKarten[Karte]) & KARTEN_EXT
IF NOT Exist(sFile) THEN ERROR.RAISE("Datei <b>" & sFile & "</b> nicht gefunden")
$aKartenDeck[Karte].Picture = Picture[sFile].Image.Stretch($iKartenBreite, $iKartenHoehe).Picture
ELSE
$aKartenDeck[Karte].Picture = $hRueckseite
ENDIF
NEXT
$iZoom = $hZoom.Value
END
Zuletzt geändert von KarlKoch am Di 5. Sep 2006, 18:18, insgesamt 1-mal geändert.
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast