kartenspiel programmieren

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
KarlKoch
Foriker
Beiträge: 39
Registriert: Di 29. Aug 2006, 20:33
Kontaktdaten:

kartenspiel programmieren

Beitrag von KarlKoch » Di 29. Aug 2006, 20:46

ich bin auf dem gebiet des programmierens total neu, da ich gambas sehr gut finde habe ich dazu auch mal eine frage (einige werden es wohl werden)
wie kann ich ein kartendeck programmieren welches aus 78 karten besteht die karten habe ich als jpg numeriert von 0 - 77 wie kann ich dieses deck mit randomized mischen lassen(ein button mit einer funktion)? die karten sollen dann auf einem virtuellen tisch mit der rückseite zu sehen sein (frei beweglich mit der mouse zu bewegen/vom stapel nehmen usw.)wenn man mit doppelclick draufklickt soll sich die karte umdrehen ich sitze schon seit 3 ganzen tagen daran und bekomme es nicht hin, da ich noch neuling bin.......
kann mir hier jemand einen sourcecode schreiben oder eine anleitung geben? im netz habe ich schon gesucht doch leider nicht alles passende bzw. nur das nicht funktionierende gefunden

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

Re: kartenspiel programmieren

Beitrag von BK » Mi 30. Aug 2006, 15:12

KarlKoch hat geschrieben:wie kann ich ein kartendeck programmieren welches aus 78 karten besteht die karten habe ich als jpg numeriert von 0 - 77 wie kann ich dieses deck mit randomized mischen lassen(ein button mit einer funktion)? die karten sollen dann auf einem virtuellen tisch mit der rückseite zu sehen sein (frei beweglich mit der mouse zu bewegen/vom stapel nehmen usw.)wenn man mit doppelclick draufklickt soll sich die karte umdrehen


Mit einer leeren Form sollte der folgende Code einen einfachen Kartentisch mit beweglichen, umdrehbaren Karten ergeben.

(Das cards-default am Ende der fünften Zeile kleinschreiben, die Forumsoftware erzeugt die Großbuchtaben.)

Code: Alles auswählen

CONST KARTEN_ANZAHL AS Integer = 52
' 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 (0.png -> 0.txt, ...)
CONST KARTEN_PFAD AS String = "cards-default/"
CONST KARTEN_EXT AS String = ".png"
CONST KARTEN_RUECKSEITE AS String = "/usr/share/apps/carddecks/decks/deck0.png"

$hRueckseite AS NEW Picture
$hKartenTisch AS Object
$hKarteInfo AS Object
$hZoom 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
$iZoomX AS NEW Integer[]
$iZoomY AS NEW Integer[]


PUBLIC SUB _new()
  DIM i AS Integer
  DIM p AS NEW Picture
 
  $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[i] = NEW Integer[]
  NEXT
 
  $aKartenDeck.Resize(KARTEN_ANZAHL)
  FOR i = 0 TO KARTEN_ANZAHL - 1
    $aKartenDeck[i] = NEW PictureBox($hKartenTisch) AS "Karte"
    $aKartenDeck[i].Tag = i
  NEXT

  $iZoomX.Resize(KARTEN_ANZAHL)
  $iZoomY.Resize(KARTEN_ANZAHL)
  $hZoom = NEW SpinBox(ME) AS "sbZoom"
  $hZoom.MinValue = 1
  $hZoom.MaxValue = 999
  $hZoom.Value = 100
  $hZoom.Suffix = " %"
END

PUBLIC SUB Form_Open()
  ME.Width = 700
  ME.Height = 500
  ME.Center
 
  sbZoom_Change
  KartenGeben
END

PUBLIC SUB Form_Resize()
  $hKartenTisch.Move(8, 56, ME.ClientWidth - 16, ME.ClientHeight - 64)
  $hZoom.Move(8, 8, 75, 32)
END

PUBLIC SUB KartenMischen()
  DIM i AS Integer
  DIM r AS Integer
 
  Randomize
 
  FOR i = 0 TO KARTEN_ANZAHL - 1
    $aKarten[i] = i + 1
  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[i].Clear
  NEXT
 
  FOR i = 0 TO KARTEN_ANZAHL - 1
    $aKartenSeite[i] = 0
    $aKartenDeck[i].Picture = $hRueckseite
    $aKartenDeck[i].Raise
    $aKartenDeck[i].Move(i * $hZoom.Value / 10, 0)
    $iZoomX[i] = i * 10
    $iZoomY[i] = 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
    IF NOT Exist(KARTEN_RUECKSEITE) THEN Error.Raise("Datei <b>" & KARTEN_RUECKSEITE & "</b> nicht gefunden")
    $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)
  $iZoomX[LAST.Tag] = $aKartenDeck[LAST.Tag].X * 100 / $hZoom.Value
  $iZoomY[LAST.Tag] = $aKartenDeck[LAST.Tag].Y * 100 / $hZoom.Value
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 * 1.1
'         Y = $iKartenHoehe * 1.1 + j * $iKartenHoehe * 0.2
'         $iZoomX[$aKartenReihe[i][j]] = X * 100 / $hZoom.Value
'         $iZoomY[$aKartenReihe[i][j]] = Y * 100 / $hZoom.Value
'         $aKartenDeck[$aKartenReihe[i][j]].Move(X, Y)
'       NEXT
'     NEXT
  ENDIF
END

PUBLIC SUB Karte_DblClick()
  KarteAufdecken(LAST.Tag)
END

PUBLIC SUB KartenTisch_DblClick()
  'ein Menü oder Button ist natürlich besser...
  KartenGeben
END

PUBLIC SUB KartenTisch_MouseUp()
  $hKarteInfo.Visible = FALSE
END

PUBLIC SUB KarteInfo_MouseUp()
  $hKarteInfo.Visible = FALSE
END

PUBLIC SUB sbZoom_Change()
  DIM Karte AS Integer
  DIM sFile AS String
 
  IF NOT Exist(KARTEN_RUECKSEITE) THEN Error.Raise("Datei <b>" & KARTEN_RUECKSEITE & "</b> nicht gefunden")
  $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 = $iZoomX[Karte] * $hZoom.Value / 100
    $aKartenDeck[Karte].Y = $iZoomY[Karte] * $hZoom.Value / 100
   
    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
END


Grüße,
BK
Zuletzt geändert von BK am Mi 6. Sep 2006, 10:27, insgesamt 12-mal geändert.

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

Beitrag von KarlKoch » Mi 30. Aug 2006, 17:16

habs hinbekommen
Zuletzt geändert von KarlKoch am Mi 30. Aug 2006, 17:40, insgesamt 2-mal geändert.

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

Beitrag von KarlKoch » Mi 30. Aug 2006, 17:33

noch eine frage wo kann ich die kartengröße einstellen? damit meine bilder ganz auf der karte erscheinen?

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

Beitrag von BK » Mi 30. Aug 2006, 18:17

Ich habe das Beispiel oben so geändert, dass eine Fehlermeldung ausgegeben wird, wenn eine der Kartendateien nicht existiert.

KarlKoch hat geschrieben:noch eine frage wo kann ich die kartengröße einstellen? damit meine bilder ganz auf der karte erscheinen?


In der Funktion KartenGeben() die Zeile $hKartenDeck[i].Move(i * 10, 0, 72, 96) entsprechend ändern. Drittes Argument = Breite, viertes Argument = Höhe.

Grüße,
BK

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

Beitrag von BK » Mi 30. Aug 2006, 20:56

Hab das Programm nochmal geändert. Höhe und Breite der Karten können jetzt einfach am Anfang eingestellt werden.

Grüße,
BK

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

Beitrag von KarlKoch » Mi 30. Aug 2006, 21:13

können sie mir vielleicht noch einmal weiterhelfen?
ich habe in form 1 eine textbox und das eingegebene soll in einem sichtbaren label (in form2) wo sich die karten befinden dargestellt werden außerdem sollte man das fenster mit den karten scrollen können
es sollte per rechtsklick an der maus zu jeder karte ein text erscheinen den man wiederum scrollen kann wenn er zu lang ist
klasse wäre es wenn man die karten nicht wie bei einem raster bewegen müsste sondern sie so legen könnte wie man will und wohin man will ohne das sie an eine "magnetische linie oder ä. springen)(vielleicht geht das, dass man die karten auch wieder zurückdrehen kann sodass man immer auf und zu decken kann)

ich möchte gerne ein spiel machen und das dann vielleicht als tutorial reinstellen für gambas wenn es fertig wird

außerdem ist mir ein kleiner bug aufgefallen (kann aber auch an gambas liegen) denn ab und an verschwinden karten beim doppelklick die anzahl der karten ist 78, 0-77 also müsste das ja stimmen

wie kann ich den source code des gesamten programmes lesen?? oder drucken? geht sowas?
außerdem bräuchte ich einen button der auf eine html seite verweißt darin steht dann die anleitung (offline)

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

Beitrag von BK » Do 31. Aug 2006, 11:50

KarlKoch hat geschrieben:ich habe in form 1 eine textbox und das eingegebene soll in einem sichtbaren label (in form2) wo sich die karten befinden dargestellt werden


Definiere in der Form2 eine Funktion der Art:

PUBLIC SUB SetLabel(sText AS String)
Label1.Text = sText
END

In Form1 rufst Du dann Form2.SetLabel(TextBox1.Text) auf, bevor Du Form2.Show aufrufst.

KarlKoch hat geschrieben:außerdem sollte man das fenster mit den karten scrollen können


Ändere in der Funktion _new() die Zeile

$hKartenTisch = New Panel(ME) AS "KartenTisch"

zu

$hKartenTisch = NEW ScrollView(ME) AS "KartenTisch"

KarlKoch hat geschrieben:es sollte per rechtsklick an der maus zu jeder karte ein text erscheinen den man wiederum scrollen kann wenn er zu lang ist


Wenn PictureBox.ToolTip ungeeignet ist, würde ich an dieser Stelle eine weitere Form mit einer TextArea anzeigen lassen und die Border-Eigenschaft dieser Form auf None stellen.

KarlKoch hat geschrieben:klasse wäre es wenn man die karten nicht wie bei einem raster bewegen müsste sondern sie so legen könnte wie man will und wohin man will ohne das sie an eine "magnetische linie oder ä. springen)


Das war auch nur als Beispiel gedacht. Die Funkton Karte_MouseUp() sorgt für die Anordnung. Wenn Du sie auskommentierst oder entfernst, kann man die Karten frei bewegen.

KarlKoch hat geschrieben:(vielleicht geht das, dass man die karten auch wieder zurückdrehen kann sodass man immer auf und zu decken kann)


Definiere am Anfang eine neue Variable

$aKartenSeite AS NEW Integer[]

Ergänze KartenGeben() um ein

$aKartenSeite.Fill(0)

und ersetze die Funktion KarteAufdecken() durch

Code: Alles auswählen

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")
    $hKartenDeck[Karte].Picture = Picture[sFile]
    $aKartenSeite[Karte] = 1
  ELSE
    $hKartenDeck[Karte].Picture = Picture[KARTEN_RUECKSEITE]
    $aKartenSeite[Karte] = 0
  ENDIF
END


KarlKoch hat geschrieben:außerdem ist mir ein kleiner bug aufgefallen (kann aber auch an gambas liegen) denn ab und an verschwinden karten beim doppelklick die anzahl der karten ist 78, 0-77 also müsste das ja stimmen


In meinem Beispiel sind die Karten von 1 bis 52 nummeriert. Ändere in der Funktion KartenMischen() den Teil

FOR i = 0 TO KARTEN_ANZAHL - 1
$aKarten[i] = i + 1
NEXT

zu

FOR i = 0 TO KARTEN_ANZAHL - 1
$aKarten[i] = i
NEXT

dann sollte es funktionieren.

KarlKoch hat geschrieben:außerdem bräuchte ich einen button der auf eine html seite verweißt darin steht dann die anleitung (offline)


EXEC ["konqueror", "--profile", "webbrowsing", "/pfad/zur/datei.html"] sollte die Seite anzeigen.

Grüße,
BK

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

Beitrag von KarlKoch » Do 31. Aug 2006, 12:25

irgendwas bringt bei mir eine fehler meldung habe ich das falsch eingesetzt?
bzw kann keine karten mehr aufdecken
out of bounds meldung
ich setze das vorerst wieder zurück damit ich keine fehlermeldung bekomme

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

Beitrag von BK » Do 31. Aug 2006, 13:29

KarlKoch hat geschrieben:irgendwas bringt bei mir eine fehler meldung habe ich das falsch eingesetzt?
bzw kann keine karten mehr aufdecken
out of bounds meldung
ich setze das vorerst wieder zurück damit ich keine fehlermeldung bekomme


Mein Fehler, Du musst in der _new() Funktion noch ein

$aKartenSeite.Resize(KARTEN_ANZAHL)

ergänzen.

Grüße,
BK

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

Beitrag von KarlKoch » Do 31. Aug 2006, 14:01

danke nun geht das
könnten sie mir bei den übrigen fragen auch weiterhelfen?
- wie bekomme ich einen scrollbalken in das feld mit den karten?
- geht es, dass die karten egal wo man sie hinlegt liegen bleiben nicht wie bei einer magnetischen hilfslinie an eine stelle springen?
- wie kann ich den text einer textbox in form 1 auf ein label in form2 anzeigen lassen nachdem er in der textbox eingegeben wurde und man den bestätigungsbutton drückt? (die erste form schließt sich dadurch)
- zu jeder karte sollte es ein feld mit text geben was erscheint bei rechter maustaste geht sowas?

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

Beitrag von BK » Do 31. Aug 2006, 14:13

KarlKoch hat geschrieben:- wie bekomme ich einen scrollbalken in das feld mit den karten?
- geht es, dass die karten egal wo man sie hinlegt liegen bleiben nicht wie bei einer magnetischen hilfslinie an eine stelle springen?
- wie kann ich den text einer textbox in form 1 auf ein label in form2 anzeigen lassen nachdem er in der textbox eingegeben wurde und man den bestätigungsbutton drückt? (die erste form schließt sich dadurch)
- zu jeder karte sollte es ein feld mit text geben was erscheint bei rechter maustaste geht sowas?


Alles in der Antwort von 11:50 Uhr beschrieben.

Grüße,
BK

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

Beitrag von BK » Do 31. Aug 2006, 14:42

KarlKoch hat geschrieben:- zu jeder karte sollte es ein feld mit text geben was erscheint bei rechter maustaste geht sowas?


Ich hab das Beispiel ganz oben nochmal aktualisiert, inklusive eines Textfensters für die rechte Maustaste.

Grüße,
BK

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

Beitrag von KarlKoch » Do 31. Aug 2006, 14:58

danke bis auf das mit der rechten maustaste habe ich alles verstanden
die karten haben alle einen anderen namen bzw eine andere nummer wie kann ich durch eine tabelle oder ähnliches den text eingeben?

editiert jede karte soll einen anderen text haben

kann man den kartentisch auch ein und auszoomen? geht sowas? :O)
vielleicht mit 2 kleinen buttons rein und rauszoomen oder mit mausrad

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

der zwischenstand des programmes sieht so aus als qc

Beitrag von KarlKoch » Do 31. Aug 2006, 16:17

Code: Alles auswählen

'form1 ist Frage man braucht ein textfeld ein button ein label
PUBLIC SUB Button1_Click()
KartenTisch.SetLabel(TextBox1.Text)
KartenTisch.Show

Frage.Hide

END

'form2 ist KartenTisch man braucht 2 buttons und 1 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 ="" ' geben Sie den Pfad zum Karten- und Textverzeichnis an
CONST KARTEN_EXT AS String = ".jpg"
CONST KARTEN_RUECKSEITE AS String = "" 'geben Sie den Pfad zur Kartenrueckseite an


$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

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[i] = NEW Integer[]
  NEXT

  $aKartenDeck.Resize(KARTEN_ANZAHL)
  FOR i = 0 TO KARTEN_ANZAHL - 1
    $aKartenDeck[i] = NEW PictureBox($hKartenTisch) AS "Karte"
    $aKartenDeck[i].Tag = i
    $aKartenDeck[i].Width = $iKartenBreite
    $aKartenDeck[i].Height = $iKartenHoehe
  NEXT

  KartenGeben
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] = 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[i].Clear
  NEXT

  FOR i = 0 TO KARTEN_ANZAHL - 1
    $aKartenSeite[i] = 0
    $aKartenDeck[i].Picture = $hRueckseite
    $aKartenDeck[i].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]
    $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


'forma3 ist Anleitung man braucht eine TextArea  read only
geben sie ihre anleitung ein z.b Dies ist ein kleines Linuxprogramm. Legearten und Legesysteme finden Sie im Internet oder in "Tarot"büchern"



Zuletzt geändert von KarlKoch am So 3. Sep 2006, 17:26, insgesamt 3-mal geändert.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste