kartenspiel programmieren

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
BK
Foriker
Beiträge: 48
Registriert: Do 13. Jul 2006, 11:53
Kontaktdaten:

Beitrag von BK » Sa 2. Sep 2006, 13:40

Das sieht alles richtig aus. Ich sehe keinen Grund warum das Programm nicht laufen sollte.

KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

Beitrag von KarlKoch » Sa 2. Sep 2006, 16:36

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

KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

Beitrag von KarlKoch » Sa 2. Sep 2006, 17:05

ich werd das projekt nochmal neu schreiben vielleicht geht es ja dann :s

BK
Foriker
Beiträge: 48
Registriert: Do 13. Jul 2006, 11:53
Kontaktdaten:

Beitrag von BK » Sa 2. Sep 2006, 18:18

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
Bei mir funktioniert es problemlos.

Vieleicht ist hier im Forum eine dritte Person bereit, den Code zu testen?

Grüße,
BK

KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

Beitrag von KarlKoch » Sa 2. Sep 2006, 18:56

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

BK
Foriker
Beiträge: 48
Registriert: Do 13. Jul 2006, 11:53
Kontaktdaten:

Beitrag von BK » Sa 2. Sep 2006, 19:19

KarlKoch hat geschrieben:can not load class data view
can not load parent class user controll
Das sind schon ziemlich schwerwiegende Fehler innerhalb von Gambas selbst. Da muss beim Kompilieren und/oder Installieren einiges schiefgegangen sein.

Vieleicht suchst Du doch besser nach fertigen RPMs für Deine Distribution?

KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

Beitrag von KarlKoch » Sa 2. Sep 2006, 19:24

nur wo finden? ich habe zwar ein gambas gefunden als rpm aber da taucht der error 2 auf wenn ich das installiere

BK
Foriker
Beiträge: 48
Registriert: Do 13. Jul 2006, 11:53
Kontaktdaten:

Beitrag von BK » Sa 2. Sep 2006, 19:33

KarlKoch hat geschrieben:nur wo finden? ich habe zwar ein gambas gefunden als rpm aber da taucht der error 2 auf wenn ich das installiere
Welche Distribution verwendest Du? Möglicherweise kann Dir dann jemand weiterhelfen, der die Gleiche verwendet.

KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

Beitrag von KarlKoch » So 3. Sep 2006, 16:56

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

BK
Foriker
Beiträge: 48
Registriert: Do 13. Jul 2006, 11:53
Kontaktdaten:

Beitrag von BK » Mo 4. Sep 2006, 14:00

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
Ich habe eine entsprechende Funktion in meinen Programmcode ganz am Anfang eingebaut. Benötigt wird die Komponente gb.Image.

KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

Beitrag von KarlKoch » Mo 4. Sep 2006, 14:37

ich habe versucht die zoomfunktion zu übernehmen bekomme aber als meldung out of bounds
was hat das zu bedeuten? habe ich wo etwas vergessen einzugeben?

BK
Foriker
Beiträge: 48
Registriert: Do 13. Jul 2006, 11:53
Kontaktdaten:

Beitrag von BK » Mo 4. Sep 2006, 18:54

KarlKoch hat geschrieben:ich habe versucht die zoomfunktion zu übernehmen bekomme aber als meldung out of bounds
was hat das zu bedeuten?
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:habe ich wo etwas vergessen einzugeben?
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.

Nachtrag:

Ich hab den Zoomteil nochmal überarbeitet, um die Auswirkungen der Rundungsfehler beim Zoomen zu verringern.

KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

Beitrag von KarlKoch » Mo 4. Sep 2006, 21:03

'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
Zuletzt geändert von KarlKoch am Di 5. Sep 2006, 17:18, insgesamt 1-mal geändert.

BK
Foriker
Beiträge: 48
Registriert: Do 13. Jul 2006, 11:53
Kontaktdaten:

Beitrag von BK » Di 5. Sep 2006, 11:29

In der Funktion KarteAufdecken() muss die Zeile

$aKartenDeck[Karte].Picture = Picture[sFile]

durch

$aKartenDeck[Karte].Picture = Picture[sFile].Image.Stretch($iKartenBreite, $iKartenHoehe).Picture

ersetzt werden. Alles andere funktioniert bei mir.

KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

Beitrag von KarlKoch » Di 5. Sep 2006, 15:20

$aKartenDeck[Karte].Width = $iKartenBreite
$aKartenDeck[Karte].Height = $iKartenHoehe
das bringt bei mir auch
out of bounds was habe ich da falsch gemacht bei PUBLIC SUB sbZoom_Change()

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast