FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Problème de math
par papydall Aujourd'hui à 1:53

» A propos des attributs de fichier
par papydall Hier à 14:33

» Problème de math
par Marc37 Sam 21 Oct 2017 - 23:04

» I Love You
par papydall Sam 21 Oct 2017 - 19:22

» Un petit "coucou" à tous les Panoramiciens !
par mindstorm Sam 21 Oct 2017 - 17:06

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Démonstration de CARDS.DLL

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4, 5
AuteurMessage
Klaus

avatar

Nombre de messages : 10075
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Démonstration de CARDS.DLL   Lun 28 Nov 2016 - 11:53

Nouvelle version:
- le jeu de 52 cartes est maintenant complété de 2 Jokers différents

Techniquement, les deux jokers sont réalisés sous forme d'une cinquième suite ayant seulement deuc cartes. Ceci est donc la preuve qu'on peut avoir plus de 4 suites ( en fait, la seule limitation est le travail de les implémenter Very Happy  ).

Pour simplifier l'écriture des jeux, j'ai sorti toutes les définitions dans un fichier MyCards.inc:
Code:
' MyCards.inc
dim sSpades%             : sSpades%             = 0
dim sDiamonds%           : sDiamonds%           = 1
dim sClubs%              : sClubs%              = 2
dim sHearts%             : sHearts%             = 3
dim sJokers%             : sJokers%             = 4

dim sgStockTopBackUp%    : sgStockTopBackUp%    = 0
dim sgStockTopFaceUp%    : sgStockTopFaceUp%    = 1
dim sgTopDown%           : sgTopDown%           = 2
dim sgLeftRight%         : sgLeftRight%         = 3
dim sgDownTop%           : sgDownTop%           = 4
dim sgRightLeft%         : sgRightLeft%         = 5

dim soNone%              : soNone%              = 0
dim soAscendant%         : soAscendant%         = 1
dim soDescendant%        : soDescendant%        = 2

dim scAll%               : scAll%               = 0
dim scSpades%            : scSpades%            = 1
dim scDiamonds%          : scDiamonds%          = 2
dim scClubs%             : scClubs%             = 3
dim scHearts%            : scHearts%            = 4
dim scBlack%             : scBlack%             = 5
dim scRed%               : scRed%               = 6
dim scAlternateBlackRed% : scAlternateBlackRed% = 7

dim dragNone%            : dragNone%            = 0
dim dragAll%             : dragAll%             = 1
dim dragFaceUp%          : dragFaceUp%          = 2
dim dragFaceDown%        : dragFaceDown%        = 3
dim dragLast%            : dragLast%            = 4

dim dropNone%            : dropNone%            = 0
dim DropAny%             : DropAny%             = 1
dim DropLast%            : DropLast%            = 2

dim siNone%              : siNone%              = 0
dim siWaste%             : siWaste%             = 1
dim siClub%              : siClub%              = 2
dim siDiamond%           : siDiamond%           = 3
dim siSpade%             : siSpade%             = 4
dim siHeart%             : siHeart%             = 5

dim saByValue%           : saByValue%           = 0
dim saByColorValue%      : saByColorValue%      = 1

dim poStandard%          : poStandard%          = 0
dim poExtended%          : poExtended%          = 1

dim ciGetPlaygroundStacks% : ciGetPlaygroundStacks% = 1
dim ciGetPlaygroundCards%  : ciGetPlaygroundCards%  = 2
dim GetStackCards%         : GetStackCards%         = 3
dim GetStackName%          : GetStackName%          = 4
dim ciGetObjectHandle%     : ciGetObjectHandle%     = 5
dim ciGetCardSuitValue%    : ciGetCardSuitValue%    = 6
dim ciStackCardCount%      : ciStackCardCount%      = 7
' 1 = liste des piles dans un terrain de jeu (obj% est identifiant d'un terrain de jeu)
' 2 = liste des cartes dans un terrain de jeu (obj% est identifiant d'un terrain de jeu)
' 3 = liste des cartes dans une pile (obj% est identifiant d'une pile)
' 4 = retourner le nom d'une pile
' 5 = retourner le handle de l'objet (PG, ST, CD
' 6 = retourner couleur et valeur d'une carte (hexa CCCCVVVV)
' 7 = retourner le nombre de cartes dans une pile

dim mcHideCard%          : mcHideCard%          = 1
dim mcShowCard%          : mcShowCard%          = 2
dim mcTurnCard%          : mcTurnCard%          = 3
dim mcDeleteCard%        : mcDeleteCard%        = 4
dim mcShowCardDeck%      : mcShowCardDeck%      = 5
dim mcShowCardFace%      : mcShowCardFace%      = 6
' 1 = cacher la carte
' 2 = montrer la carte
' 3 = retourner la carte
' 4 = supprimer la carte (pas encore implémenté)
' 5 = cacher la face de la carte
' 6 = montrer la face de la carte


dim caAddCardAtEnd%      : caAddCardAtEnd%      = 0
dim caAddCardAtFront%    : caAddCardAtFront%    = 1
' 0 = ajouter en fin de pile
' 1 = insérer eu début de la pile

dim caPreserveStack%     : caPreserveStack%     = 0
dim caClearStack%        : caClearStack%        = 1
' 0 = ne pas vider avant l'action
' 1 = vider avant l'action

dim cdStandard1%         : cdStandard1%         = 0
dim cdStandard2%         : cdStandard2%         = 1
dim cdFishes1%           : cdFishes1%           = 2
dim cdFishes2%           : cdFishes2%           = 3
dim cdBeach%             : cdBeach%             = 4
dim cdLeaves1%           : cdLeaves1%           = 5
dim cdLeaves2%           : cdLeaves2%           = 6
dim cdRobot%             : cdRobot%             = 7
dim cdRoses%             : cdRoses%             = 8
dim cdShell%             : cdShell%             = 9
dim cdCastle%            : cdCastle%            = 10
dim cdHand%              : cdHand%              = 11
' Standard1, Standard2, Fishes1, Fishes2, Beach,
' Leaves1, Leaves2, Robot, Roses, Shell, Castle, Hand

Voici le programme de démo avec l'ajout des deux jokers et l'utilisation du INCLUDE:
Code:
' test_MyCards.bas

label creer, supprimer, ramasser, distribuer, event, test

dim PG%, ST1%, ST2%, ST3%, CD%(13,3), CDdos%(11), JK1%, JK2%
dim ncd%(3), fond$
dim res%, i%, k%, n%, s$, xcd%, nom$, ils$

dim debug%               : debug%               = 0

#INCLUDE "MyCards.inc"


full_space 0
dll_on "KGF.dll"

button 1 : top 1,10 : left 1,10 : caption 1,"Créer" : on_click 1,creer
button 2 : top 2,10 : left 2,90 : caption 2,"Supprimer" : on_click 2,supprimer : inactive 2
button 6 : top 6,10 : left 6,410 : caption 6,"Ramasser" : on_click 6,ramasser : inactive 6
button 7 : top 7,10 : left 7,490 : caption 7,"Distribuer" : on_click 7,distribuer : inactive 7

button 8 : top 8,10 : left 8,570 : caption 8,"Test" : on_click 8,test : ' hide 8

open_dialog 97
memo 98 : hide 98 : bar_both 98
edit 99 : left 99,700 : width 99,300 : on_change 99,event : ' hide 99

end

creer:
  ' créer le terrain de jeu
  filter 97,"Fchiers *.BMP |*.bmp"
  fond$ = file_name$(97)
  if fond$="_"
    fond$ = ""
  else
    if file_exists(fond$)=0 then fond$ = ""
  end_if
  ils$ = ""
  PG% = dll_call6("CreateMyCardsPlayground",handle(0),handle(99),10,40,adr(fond$),adr(ils$))
  if debug%=1 then message "CreateMyCardsPlayground="+hex$(PG%)
  ' première option:
  '   on ne peut "accrocher" que les cartes ouvertes dans le terrain de jeu
  '   on peut déposer n'importe où
  '   identification de la pile en fonction de la position du curseur
'  res% = dll_call4("MyCardsPlaygroundOptions",PG%,dragFaceUp%,DropAny%,poStandard%)
  ' deuxième option:
  '   on ne peut "accrocher" que les cartes ouvertes dans le terrain de jeu
  '   on peut déposer n'importe où
  '   identification de la pile en fonction d'un contact avec un des 4 coins de la carte
  res% = dll_call4("MyCardsPlaygroundOptions",PG%,dragFaceUp%,DropAny%,poExtended%)

  ' dimensionner le terrain de jeu
  res% = dll_call5("MyCardsPlaygroundGeometry",PG%,0,40,1200,650)
  if debug%=1 then message "MyCardsPlaygroundGeometry="+str$(res%)

  ' créer les 3 piles - une de gauche à droite
  '                   - une empilée les unes sur les autres
  '                   - une à gauche avec cartes détachées
  
  ' pile 1:
  ST1% = dll_call6("CreateMyCardsStack",PG%,sgLeftRight%,soNone%,scAll%,15,siNone%)
  ' <========== dans la ligne précédente, essayez scHearts% à la place de scAll% !!!!!
  if debug%=1 then message "CreateMyCardsStack="+str$(ST1%)
  res% = dll_call3("LocateMyCardsStack",ST1%,10,40)
  if debug%=1 then message "LocateMyCardsStack="+str$(res%)
  nom$ = "Jeu complet mélangé"
  ' première option:
  '   on peut déposer des cartes - elles se mettront automatiquement en dernière position
  '   on peut déposer des cartes - elles se mettront automatiquement en dernière position
'  res% = dll_call4("MyCardsCardStackOptions",ST1%,dragLast%,DropLast%,adr(nom$)) : ' dropNone%)
  ' seconde option:
  '   on peut "accrocher"toutes les cartes de stack 1
  '   peut déposer des cartes - elles se mettront automatiquement en dernière position
  res% = dll_call4("MyCardsCardStackOptions",ST1%,dragAll%,DropLast%,adr(nom$)) : ' dropNone%)

  ' pile 2:
  ST2% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siHeart%)
  if debug%=1 then message "CreateMyCardsStack="+str$(ST2%)
  res% = dll_call3("LocateMyCardsStack",ST2%,1100,40)
  if debug%=1 then message "LocateMyCardsStack="+str$(res%)
  nom$ = "Défausse"
  ' première option:
  '   on ne peut "accrocher" que la dernière carte
  '   on peut déposer des cartes - elles se mettront automatiquement en dernière position
  res% = dll_call4("MyCardsCardStackOptions",ST2%,dragLast%,DropLast%,adr(nom$)) : ' dropNone%)
  if debug%=1 then message "MyCardsCardStackOptions="+str$(res%)

  ' pile 3:
  ST3% = dll_call6("CreateMyCardsStack",PG%,sgLeftRight%,soNone%,scAll%,85,siNone%)
  if debug%=1 then message "CreateMyCardsStack="+str$(ST2%)
  res% = dll_call3("LocateMyCardsStack",ST3%,10,200)
  if debug%=1 then message "LocateMyCardsStack="+str$(res%)
  nom$ = "Dos de cartes"
  ' première option:
  '   on peut tirer toutes les cartes de stack 3
  '   on ne peut déposer aucune carte
  res% = dll_call4("MyCardsCardStackOptions",ST3%,dragAll%,dropNone%,adr(nom$))
  ' première option:
  '   on peut tirer toutes les cartes de stack 3
  '   on ne peut déposer aucune carte
'  res% = dll_call4("MyCardsCardStackOptions",ST3%,dragAll%,dropLast%,adr(nom$))

  ' créer les 52 cartes et les envoyer dans la pile horizontale
  ncd%(1)= 0
  for i%=0 to 3
    for k%=1 to 13
      CD%(k%,i%) = dll_call6("CreateMyCardsCard",PG%,i%,k%,cdBeach%,0,0)
      if CD%(k%,i%)=0 then message "oups - carte "+str$(k%)+","+str$(i%)
      if CD%(k%,i%)<>0 then ncd%(1) = ncd%(1) + 1
      if debug%=1 then message "CreateMyCardsCard="+str$(CD%(k%,i%))
      res% = dll_call3("MoveMyCardsCardToStack",CD%(k%,i%),ST1%,0)
      if debug%=1 then message "MoveMyCardsCardToStack="+str$(res%)
    next k%
  next i%

  ' créer les 2 jokers
  JK1% = dll_call6("CreateMyCardsCard",PG%,sJokers%,1,cdBeach%,0,0)
  if JK1%<>0 then ncd%(1) = ncd%(1) + 1
  if debug%=1 then message "CreateMyCardsCard Joker1="+str$(JK1%)
  res% = dll_call3("MoveMyCardsCardToStack",JK1%,ST1%,0)
  if debug%=1 then message "MoveMyCardsCardToStack="+str$(res%)
  JK2% = dll_call6("CreateMyCardsCard",PG%,sJokers%,2,cdBeach%,0,0)
  if JK2%<>0 then ncd%(1) = ncd%(1) + 1
  if debug%=1 then message "CreateMyCardsCard Joker2="+str$(JK2%)
  res% = dll_call3("MoveMyCardsCardToStack",JK2%,ST1%,0)
  if debug%=1 then message "MoveMyCardsCardToStack="+str$(res%)

  message str$(ncd%(1))+" cartes ont été créées."

  ' mélanger les 52 cartes
  res% = dll_call1("ShuffleMyCardsStack",ST1%)
  if debug%=1 then message "ShuffleMyCardsStack="+str$(res%)
  message "Les cartes ont été battues"

  res% = dll_call2("SortMyCardsStack",ST1%,saByValue%)
  if debug%=1 then message "SortMyCardsStack="+str$(res%)
  message "Les cartes sont triées par valeur"
  
  res% = dll_call2("SortMyCardsStack",ST1%,saByColorValue%)
  if debug%=1 then message "SortMyCardsStack="+str$(res%)
  message "Les cartes sont triées par couleur et valeur"

  ' mélanger les 52 cartes
  res% = dll_call1("ShuffleMyCardsStack",ST1%)
  if debug%=1 then message "ShuffleMyCardsStack="+str$(res%)
  message "Les cartes ont été battues"
  
  ' créer les 12 dos de cartes et les envoyer dans l'autre pile horizontale
  ncd%(3)= 0
  for i%=0 to 11
      CDdos%(i%) = dll_call6("CreateMyCardsCard",PG%,0,1,i%,0,0)
      if CDdos%(i%)=0 then message "oups - dos "+str$(i%)
      if CDdos%(i%)<>0 then ncd%(3) = ncd%(3) + 1
      if debug%=1 then message "CreateMyCardsCard="+str$(CDdos%(i%))
      res% = dll_call3("MoveMyCardsCardToStack",CDdos%(i%),ST3%,0)
      if debug%=1 then message "MoveMyCardsCardToStack="+str$(res%)
      res% = dll_call2("ManageMyCardsCard",CDdos%(i%),3)  : ' retourner la carte !
  next i%
  message str$(ncd%(3))+" dos de cartes ont été créées."
  inactive 1
  active 2
  active 6
  return
  
supprimer:
  PG% = dll_call1("DeleteMyCardsPlayground",PG%)
  if debug%=1 then message "DeleteMyCardsPlayground="+str$(PG%)
  active 1
  inactive 2
  inactive 6
  inactive 7
  return
  
ramasser:
  res% = dll_call4("MoveMyCardsStackToStack",ST1%,ST2%,1,0)
  ncd%(1) = ncd%(1) - res%
  ncd%(2) = res%
  if debug%=1 then message "MoveMyCardsStackToStack="+str$(res%)
  message str$(ncd%(2))+" cartes ont été ramassées."
  inactive 6
  active 7
  return
  
distribuer:
  res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST1%,1,0)
  ncd%(2) = ncd%(2) - res%
  ncd%(1) = res%
  if debug%=1 then message "MoveMyCardsStackToStack="+str$(res%)
  message str$(ncd%(1))+" cartes ont été distribuées."
  inactive 7
  active 6
  return
  
event:
  s$ = trim$(text$(99))
  if left$(s$,2)="CC"      : ' clic sur carte
    message "clic - "+text$(99)
    if instr(s$,"Trèfle")>0     : ' carte de trèfle ?
      xcd% = hex(mid$(s$,3,8))
      res% = dll_call2("ManageMyCardsCard",xcd%,3)  : ' retourner la carte !
    end_if
  end_if
  if left$(s$,2)="CP"      : ' clic sur terrain de jeu
    message "clic - "+text$(99)
  end_if
  if left$(s$,2)="CS"      : ' clic sur une partie noon utilisée d'une pile
    message "clic - "+text$(99)
  end_if
  return


test:

  return

et voici la Bataille adaptée (seul endroit: utilisation du INCLUDE):
Code:
' Bataille.bas

' Ce programme est une première version du jeu de bataille.
' Le joueur joue contre l'ordinateur.

' Les règles (origine: Wikipedia):

' On distribue l'ensemble d'un (ou plusieurs) jeu de cartes (54 ou 32) aux joueurs,
' qui n'en prennent pas connaissance. À chaque tour, chaque joueur retourne la carte
' du haut de sa main (ou son tas). Celui qui a la carte de la plus haute valeur -
' selon la hiérarchie du bridge : As, Roi, Dame, Valet, dix… jusqu'au deux - fait
' la levée, qu'il place sous son tas.

' En cas d'égalité de valeurs - cas appelé bataille - les joueurs en ballotage
' disent « bataille ! », et commencent par placer une première carte face cachée
' puis une seconde carte face visible pour décider qui fera la levée.
' En cas de nouvelle égalité, la procédure est répétée. La bataille est
' parfois l'occasion d'acquérir une grosse carte et c'est l'unique manière
' de gagner un as. Sans bataille et à moins qu'un joueur ne possède tous les as,
' il serait impossible de terminer une partie de bataille. La partie se termine
' et le gagnant est déterminé lorsque ce dernier a en sa possession toutes les
' cartes du jeu.

' Technique:
' le programme prépare un terrain de jeu, avec 5 piles:
'   pile 1: tas du joueur - pile non triée, face cachée
'   pile 2: enjeu du joueur : pile non triée, face cachée et ouverte, cartes non glissables
'   pile 3: tas du programme - pile non triée, face cachée, cartes non glissables
'   pile 4: enjeu du programme : pile non triée, face cachée et ouverte, cartes non glissables
'   pile 5: talon initial pour dustribuer les cartes, puis outil technique pour des manipulations

label event, close0, jouer, bataille, distribuer, ramasser

full_space 0 : caption 0,"Jeu de Bataille" : on_close 0,close0
dll_on "KGF.dll"

#INCLUDE "MyCards.inc"


dim ImageDeFond$ : ImageDeFond$ = ""
dim ImageList$   : ImageList$   = ""

dim PG%, ST1%, ST2%, ST3%, ST4%, ST5%, CD%(52), hPG%
dim res%, nom$, n%, couleur%


creer_objets_speciaux()
creer_terrain()
creer_objets_visuels()
creer_tas_joueur()
creer_enjeu_joueur()
creer_tas_programme()
creer_enjeu_programme()
creer_talon()
creer_jeu_52_cartes()

end

close0:
  PG% = dll_call1("DeleteMyCardsPlayground",PG%)
  return

event:
  return
  
jouer:
  jouer_une_carte()
  return
  
bataille:
  faire_la_bataille()
  return
  
distribuer:
  distribuer_les_cartes()
  return
  
ramasser:
  ramasser_les_cartes()
  return
  
  
sub creer_terrain()
' *********************** terrain de jeu
  ' création du terrain de jeu
  PG% = dll_call6("CreateMyCardsPlayground",handle(0),handle(99),10,40,adr(ImageDeFond$),adr(ImageList$))

  ' on ne peut "accrocher" aucune carte dans le terrain de jeu
  ' on ne peut déposer nulle part
  ' identification de la pile en fonction d'un contact avec un des 4 coins de la carte
  res% = dll_call4("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%)

  ' dimensionner le terrain de jeu
  res% = dll_call5("MyCardsPlaygroundGeometry",PG%,0,40,1200,650)

  ' récupérer le handle du terrain de jeu
  hPG% = dll_call3("GetMyCardsInfo",PG%,ciGetObjectHandle%,0)
end_sub
  
  
  
sub creer_tas_joueur()
  ' *********************** pile 1: tas du joueur
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST1% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en bas au milieu
  res% = dll_call3("LocateMyCardsStack",ST1%,600,500)

  nom$ = "Tas du joueur"
  '   on ne peut "accrocher" que la dernière carte de la pile 1
  '   peut ne déposer aucune carte
  res% = dll_call4("MyCardsCardStackOptions",ST1%,dragLast%,dropNone%,adr(nom$))
end_sub



sub creer_enjeu_joueur()
  ' *********************** pile 2: enjeu du joueur
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST2% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile au-dessus de la pile 1
  res% = dll_call3("LocateMyCardsStack",ST2%,600,350)

  nom$ = "Enjeu du joueur"
  '   on ne peut "accrocher" aucune carte de la pile 2
  '   les cartes déposées se placent automatiquement sur le dessus de la pile (à la fin)
  res% = dll_call4("MyCardsCardStackOptions",ST3%,dragNone%,dropLast%,adr(nom$))
end_sub
  
  
  
sub creer_tas_programme()
  ' *********************** pile 3: tas du programme
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST3% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en haut au milieu
  res% = dll_call3("LocateMyCardsStack",ST3%,600,10)

  nom$ = "Tas du programme"
  '   on ne peut "accrocher" aucune carte de la pile 3
  '   peut ne déposer aucune carte
  res% = dll_call4("MyCardsCardStackOptions",ST3%,dragNone%,dropNone%,adr(nom$))
end_sub



sub creer_enjeu_programme()
  ' *********************** pile 4: enjeu du programme
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST4% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en-dessous de la pile 3
  res% = dll_call3("LocateMyCardsStack",ST4%,600,160)

  nom$ = "Enjeu du programme"
  '   on ne peut "accrocher" aucune carte de la pile 4
  '   on ne peut déposer aucune carte sur cette pile
  res% = dll_call4("MyCardsCardStackOptions",ST4%,dragNone%,dropNone%,adr(nom$))
end_sub



sub creer_talon()
  ' *********************** créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST5% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile au milieu à gauche
  res% = dll_call3("LocateMyCardsStack",ST5%,300,250)
  
  nom$ = "Talon"
  '   on ne peut "accrocher" aucune carte de la pile 5
  '   on ne peut déposer aucune carte sur cette pile
  res% = dll_call4("MyCardsCardStackOptions",ST5%,dragNone%,dropNone%,adr(nom$))
end_sub



sub creer_jeu_52_cartes()
    ' *********************** créer le jeu de 52 cartes (invisibles)
  for couleur%=0 to 3
    for n%=1 to 13
      CD%(couleur%*13+n%) = dll_call6("CreateMyCardsCard",PG%,couleur%,n%,cdFishes2%,0,0)
      res% = dll_call3("MoveMyCardsCardToStack",CD%(couleur%*13+n%),ST5%,caAddCardAtEnd%)
    next n%
  next couleur%
  ' battre le jeu
  res% = dll_call1("ShuffleMyCardsStack",ST5%)
  text 85,"52"
end_sub



sub distribuer_les_cartes()
  dim_local i%, res%
' *********************** copier alternativement le jeu dans la main du joueur et du programme
  for n%=1 to 26
    res% = dll_call3("MoveMyCardsCardToStack",ST5%,ST1%,caAddCardAtEnd%)  : ' main du joueur
    res% = dll_call3("MoveMyCardsCardToStack",ST5%,ST3%,caAddCardAtEnd%)  : ' main du programme
  next n%
  comptage()
  inactive 3
  active 1
  active 4
end_sub



sub ramasser_les_cartes()
  ' *********************** ramasser les cartes de toutes les piles
  res% = dll_call4("MoveMyCardsStackToStack",ST1%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST3%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  comptage()
  ' battre le jeu
  res% = dll_call1("ShuffleMyCardsStack",ST5%)
  inactive 1
  inactive 2
  inactive 4
  active 3
end_sub



sub creer_objets_speciaux()
  ' *********************** objets spéciaux
  form 97 : hide 97
  memo 98 : parent 98,97 : bar_both 98 : ' hide 98
  edit 99 : left 99,700 : width 99,300 : on_change 99,event : hide 99
end_sub



sub creer_objets_visuels()
  ' *********************** boutons techiques
  button 1 : top 1,570 : left 1,480 : caption 1,"Jouer" : on_click 1,jouer : inactive 1
  button 2 : top 2,570 : left 2,720 : caption 2,"Bataille !" : on_click 2,bataille : inactive 2
  button 3 : top 3,300 : left 3,380 : caption 3,"Distribuer" : on_click 3,distribuer
  button 4 : top 4,360 : left 4,380 : caption 4,"Ramasser" : on_click 4,ramasser : inactive 4
  ' *********************** affichage du nombre de cartes par pile
  edit 81 : top 81,640 : left 81,620 : width 81,25 : text 81,"0" : inactive 81
  edit 82 : top 82,490 : left 82,620 : width 82,25 : text 82,"0" : inactive 82
  edit 83 : top 83,150 : left 83,620 : width 83,25 : text 83,"0" : inactive 83
  edit 84 : top 84,300 : left 84,620 : width 84,25 : text 84,"0" : inactive 84
  edit 85 : top 85,390 : left 85,320 : width 85,25 : text 85,"0" : inactive 85
end_sub



sub comptage()
  dim_local v%
  v% = dll_call3("GetMyCardsInfo",ST1%,ciStackCardCount%,0)
  text 81,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST2%,ciStackCardCount%,0)
  text 82,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST3%,ciStackCardCount%,0)
  text 83,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST4%,ciStackCardCount%,0)
  text 84,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST5%,ciStackCardCount%,0)
  text 85,str$(v%)
end_sub


sub jouer_une_carte()
  dim_local CDjoueur%, CDprogramme%, ValeurJoueur%, ValeurProgramme%, v%
  inactive 2
  CDjoueur%    = dll_call3("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%)  : ' joueur
  CDprogramme% = dll_call3("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%)  : ' programme
  comptage()

  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcTurnCard%)     : ' retourner la carte !
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcTurnCard%)  : ' retourner la carte !
  v% = dll_call3("GetMyCardsInfo",CDjoueur%,ciGetCardSuitValue%,0)
  ValeurJoueur% = bin_and(v%,65535)                     : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurJoueur% = 14         : ' As est le plus fort !
  v% = dll_call3("GetMyCardsInfo",CDprogramme%,ciGetCardSuitValue%,0)
  ValeurProgramme% = bin_and(v%,65535)                  : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurProgramme% = 14      : ' As est le plus fort !
  if ValeurProgramme%=ValeurJoueur%                     : ' bataille ?
    inactive 1
    active 2
    message "Bataille !"
    exit_sub
  end_if
  if ValeurProgramme%>ValeurJoueur%                     : ' le programme emporte la mise ?
    message "Dommage ! Vous avez perdu la mise."
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)   : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST3%,caPreserveStack%,caAddCardAtFront%)  : ' placer les cartes de ma mise du joueur sous les cartes du tas du programme
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST3%,caPreserveStack%,caAddCardAtFront%)
  else                                                   : ' le joueur emporte la mise !
    message "Super ! Vous avez gagné la mise."
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)   : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST1%,caPreserveStack%,caAddCardAtFront%)  : ' placer les cartes de ma mise du programme sous les cartes du tas du joueur
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST1%,caPreserveStack%,caAddCardAtFront%)
  end_if
  comptage()
  if text$(81)="0"
    message "Oups - vous avez perdu !"
    inactive 1
    inactive 2
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if
end_sub



sub faire_la_bataille()
  dim_local CDjoueur%, CDprogramme%, ValeurJoueur%, ValeurProgramme%, v%

  ' chacun joue une carte cachée
  CDjoueur%    = dll_call3("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%)  : ' joueur
  CDprogramme% = dll_call3("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%)  : ' programme
  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
  comptage()
  if text$(81)="0"
    message "Oups - vous avez perdu !"
    inactive 1
    inactive 2
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if

  ' et une carte ouverte
  CDjoueur%    = dll_call3("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%)  : ' joueur
  CDprogramme% = dll_call3("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%)  : ' programme
  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardFace%)
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardFace%)
  comptage()

  v% = dll_call3("GetMyCardsInfo",CDjoueur%,ciGetCardSuitValue%,0)
  ValeurJoueur% = bin_and(v%,65535)                     : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurJoueur% = 14         : ' As est le plus fort !
  v% = dll_call3("GetMyCardsInfo",CDprogramme%,ciGetCardSuitValue%,0)
  ValeurProgramme% = bin_and(v%,65535)                  : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurProgramme% = 14      : ' As est le plus fort !
  if ValeurProgramme%=ValeurJoueur%                     : ' bataille ?
    inactive 1
    active 2
    message "Bataille !"
    exit_sub
  end_if
  inactive 2
  active 1
  if ValeurProgramme%>ValeurJoueur%                     : ' le programme emporte la mise ?
    message "Dommage ! Vous avez perdu la mise avec bataille."
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)   : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST3%,caPreserveStack%,caAddCardAtEnd%)  : ' placer les cartes de ma mise du joueur sous les cartes du tas du programme
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST3%,caPreserveStack%,caAddCardAtEnd%)
  else                                                   : ' le joueur emporte la mise !
    message "Super ! Vous avez gagné la mise avec bataille."
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)   : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST1%,caPreserveStack%,caAddCardAtEnd%)  : ' placer les cartes de ma mise du programme sous les cartes du tas du joueur
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST1%,caPreserveStack%,caAddCardAtEnd%)
  end_if
  comptage()
  if text$(81)="0"
    inactive 1
    active 2
    message "Bataille !"
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if
end_sub


Ceci étant fait, je vais maintenant travailler sur la gestion d'une ImageList externe, grâce à celle fournie par Ygeronimi.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10075
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Démonstration de CARDS.DLL   Mar 29 Nov 2016 - 0:28

Nouvelle version:
- réglage de la vitesse des déplacements automatiques

La fonction MyCardsPlaygroundOptions a maintenant un 5ème paramètre: speed% avec les valeurs suivantes:
Code:
dim tsNone%              : tsNone%              = 0  : ' immédiat
dim tsVeryHigh%          : tsVeryHigh%          = 1
dim tsHigh%              : tsHigh%              = 2
dim tsMedium%            : tsMedium%            = 3
dim tsLow%              : tsLow%              = 4
dim tsVeryLow%          : tsVeryLow%          = 5

Voici le programme de démo adapté à cela (avec l'option tsVeryHigh%):
Code:
' test_MyCards.bas

label creer, supprimer, ramasser, distribuer, event, test

dim PG%, ST1%, ST2%, ST3%, CD%(13,3), CDdos%(11), JK1%, JK2%
dim ncd%(3), fond$
dim res%, i%, k%, n%, s$, xcd%, nom$, ils$

dim debug%              : debug%              = 0

#INCLUDE "MyCards.inc"

full_space 0
dll_on "KGF.dll"

button 1 : top 1,10 : left 1,10 : caption 1,"Créer" : on_click 1,creer
button 2 : top 2,10 : left 2,90 : caption 2,"Supprimer" : on_click 2,supprimer : inactive 2
button 6 : top 6,10 : left 6,410 : caption 6,"Ramasser" : on_click 6,ramasser : inactive 6
button 7 : top 7,10 : left 7,490 : caption 7,"Distribuer" : on_click 7,distribuer : inactive 7

button 8 : top 8,10 : left 8,570 : caption 8,"Test" : on_click 8,test : ' hide 8

open_dialog 97
memo 98 : hide 98 : bar_both 98
edit 99 : left 99,700 : width 99,300 : on_change 99,event : ' hide 99

end

creer:
  ' créer le terrain de jeu
  filter 97,"Fchiers *.BMP |*.bmp"
  fond$ = file_name$(97)
  if fond$="_"
    fond$ = ""
  else
    if file_exists(fond$)=0 then fond$ = ""
  end_if
  ils$ = ""
  PG% = dll_call6("CreateMyCardsPlayground",handle(0),handle(99),10,40,adr(fond$),adr(ils$))
  if debug%=1 then message "CreateMyCardsPlayground="+hex$(PG%)

  ' première option:
  '  on ne peut "accrocher" que les cartes ouvertes dans le terrain de jeu
  '  on peut déposer n'importe où
  '  identification de la pile en fonction de la position du curseur
  '  vitesse de déplacement immédiate (possibilités: tsNone, tsVeryHigh, tsHigh, tsMedium, tsLow, tsVeryLow)
'  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragFaceUp%,DropAny%,poStandard%,tsNone)
  ' deuxième option:
  '  on ne peut "accrocher" que les cartes ouvertes dans le terrain de jeu
  '  on peut déposer n'importe où
  '  identification de la pile en fonction d'un contact avec un des 4 coins de la carte
  '  vitesse de déplacement très rapide (possibilités: tsNone, tsVeryHigh, tsHigh, tsMedium, tsLow, tsVeryLow)
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragFaceUp%,DropAny%,poExtended%,tsVeryHigh%)

  ' dimensionner le terrain de jeu
  res% = dll_call5("MyCardsPlaygroundGeometry",PG%,0,40,1200,650)
  if debug%=1 then message "MyCardsPlaygroundGeometry="+str$(res%)

  ' créer les 3 piles - une de gauche à droite
  '                  - une empilée les unes sur les autres
  '                  - une à gauche avec cartes détachées
 
  ' pile 1:
  ST1% = dll_call6("CreateMyCardsStack",PG%,sgLeftRight%,soNone%,scAll%,15,siNone%)
  ' <========== dans la ligne précédente, essayez scHearts% à la place de scAll% !!!!!
  if debug%=1 then message "CreateMyCardsStack="+str$(ST1%)
  res% = dll_call3("LocateMyCardsStack",ST1%,10,40)
  if debug%=1 then message "LocateMyCardsStack="+str$(res%)
  nom$ = "Jeu complet mélangé"
  ' première option:
  '  on peut déposer des cartes - elles se mettront automatiquement en dernière position
  '  on peut déposer des cartes - elles se mettront automatiquement en dernière position
'  res% = dll_call4("MyCardsCardStackOptions",ST1%,dragLast%,DropLast%,adr(nom$)) : ' dropNone%)
  ' seconde option:
  '  on peut "accrocher"toutes les cartes de stack 1
  '  peut déposer des cartes - elles se mettront automatiquement en dernière position
  res% = dll_call4("MyCardsCardStackOptions",ST1%,dragAll%,DropLast%,adr(nom$)) : ' dropNone%)
' message "a"

  ' pile 2:
  ST2% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siHeart%)
  if debug%=1 then message "CreateMyCardsStack="+str$(ST2%)
  res% = dll_call3("LocateMyCardsStack",ST2%,1100,40)
  if debug%=1 then message "LocateMyCardsStack="+str$(res%)
  nom$ = "Défausse"
  ' première option:
  '  on ne peut "accrocher" que la dernière carte
  '  on peut déposer des cartes - elles se mettront automatiquement en dernière position
  res% = dll_call4("MyCardsCardStackOptions",ST2%,dragLast%,DropLast%,adr(nom$)) : ' dropNone%)
  if debug%=1 then message "MyCardsCardStackOptions="+str$(res%)

  ' pile 3:
  ST3% = dll_call6("CreateMyCardsStack",PG%,sgLeftRight%,soNone%,scAll%,85,siNone%)
  if debug%=1 then message "CreateMyCardsStack="+str$(ST2%)
  res% = dll_call3("LocateMyCardsStack",ST3%,10,200)
  if debug%=1 then message "LocateMyCardsStack="+str$(res%)
  nom$ = "Dos de cartes"
  ' première option:
  '  on peut tirer toutes les cartes de stack 3
  '  on ne peut déposer aucune carte
  res% = dll_call4("MyCardsCardStackOptions",ST3%,dragAll%,dropNone%,adr(nom$))
  ' première option:
  '  on peut tirer toutes les cartes de stack 3
  '  on ne peut déposer aucune carte
'  res% = dll_call4("MyCardsCardStackOptions",ST3%,dragAll%,dropLast%,adr(nom$))

  ' créer les 52 cartes et les envoyer dans la pile horizontale
  ncd%(1)= 0
  for i%=0 to 3
    for k%=1 to 13
      CD%(k%,i%) = dll_call6("CreateMyCardsCard",PG%,i%,k%,cdBeach%,0,0)
      if CD%(k%,i%)=0 then message "oups - carte "+str$(k%)+","+str$(i%)
      if CD%(k%,i%)<>0 then ncd%(1) = ncd%(1) + 1
      if debug%=1 then message "CreateMyCardsCard="+str$(CD%(k%,i%))
      res% = dll_call3("MoveMyCardsCardToStack",CD%(k%,i%),ST1%,0)
      if debug%=1 then message "MoveMyCardsCardToStack="+str$(res%)
    next k%
  next i%

  ' créer les 2 jokers
  JK1% = dll_call6("CreateMyCardsCard",PG%,sJokers%,1,cdBeach%,0,0)
  if JK1%<>0 then ncd%(1) = ncd%(1) + 1
  if debug%=1 then message "CreateMyCardsCard Joker1="+str$(JK1%)
  res% = dll_call3("MoveMyCardsCardToStack",JK1%,ST1%,0)
  if debug%=1 then message "MoveMyCardsCardToStack="+str$(res%)
  JK2% = dll_call6("CreateMyCardsCard",PG%,sJokers%,2,cdBeach%,0,0)
  if JK2%<>0 then ncd%(1) = ncd%(1) + 1
  if debug%=1 then message "CreateMyCardsCard Joker2="+str$(JK2%)
  res% = dll_call3("MoveMyCardsCardToStack",JK2%,ST1%,0)
  if debug%=1 then message "MoveMyCardsCardToStack="+str$(res%)

  message str$(ncd%(1))+" cartes ont été créées."

  ' mélanger les 52 cartes
  res% = dll_call1("ShuffleMyCardsStack",ST1%)
  if debug%=1 then message "ShuffleMyCardsStack="+str$(res%)
  message "Les cartes ont été battues"

  res% = dll_call2("SortMyCardsStack",ST1%,saByValue%)
  if debug%=1 then message "SortMyCardsStack="+str$(res%)
  message "Les cartes sont triées par valeur"
 
  res% = dll_call2("SortMyCardsStack",ST1%,saByColorValue%)
  if debug%=1 then message "SortMyCardsStack="+str$(res%)
  message "Les cartes sont triées par couleur et valeur"

  ' mélanger les 52 cartes
  res% = dll_call1("ShuffleMyCardsStack",ST1%)
  if debug%=1 then message "ShuffleMyCardsStack="+str$(res%)
  message "Les cartes ont été battues"

  ' créer les 12 dos de cartes et les envoyer dans l'autre pile horizontale
  ncd%(3)= 0
  for i%=0 to 11
      CDdos%(i%) = dll_call6("CreateMyCardsCard",PG%,0,1,i%,0,0)
      if CDdos%(i%)=0 then CDdos%(i%)<>0 then ncd%(3) = ncd%(3) + 1
      if debug%=1 then message "CreateMyCardsCard="+str$(CDdos%(i%))
      res% = dll_call3("MoveMyCardsCardToStack",CDdos%(i%),ST3%,0)
      if debug%=1 then message "MoveMyCardsCardToStack="+str$(res%)
      res% = dll_call2("ManageMyCardsCard",CDdos%(i%),3)  : ' retourner la carte !
  next i%
  message str$(ncd%(3))+" dos de cartes ont été créées."
  inactive 1
  active 2
  active 6
  return
 
supprimer:
  PG% = dll_call1("DeleteMyCardsPlayground",PG%)
  if debug%=1 then message "DeleteMyCardsPlayground="+str$(PG%)
  active 1
  inactive 2
  inactive 6
  inactive 7
  return
 
ramasser:
  res% = dll_call4("MoveMyCardsStackToStack",ST1%,ST2%,1,0)
  ncd%(1) = ncd%(1) - res%
  ncd%(2) = res%
  if debug%=1 then message "MoveMyCardsStackToStack="+str$(res%)
  message str$(ncd%(2))+" cartes ont été ramassées."
  inactive 6
  active 7
  return
 
distribuer:
  res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST1%,1,0)
  ncd%(2) = ncd%(2) - res%
  ncd%(1) = res%
  if debug%=1 then message "MoveMyCardsStackToStack="+str$(res%)
  message str$(ncd%(1))+" cartes ont été distribuées."
  inactive 7
  active 6
  return
 
event:
  s$ = trim$(text$(99))
  if left$(s$,2)="CC"      : ' clic sur carte
    message "clic - "+text$(99)
    if instr(s$,"Trèfle")>0    : ' carte de trèfle ?
      xcd% = hex(mid$(s$,3,8))
      res% = dll_call2("ManageMyCardsCard",xcd%,3)  : ' retourner la carte !
    end_if
  end_if
  if left$(s$,2)="CP"      : ' clic sur terrain de jeu
    message "clic - "+text$(99)
  end_if
  if left$(s$,2)="CS"      : ' clic sur une partie noon utilisée d'une pile
    message "clic - "+text$(99)
  end_if
  return


test:

  return

et la Bataille:
Code:
' Bataille.bas

' Ce programme est une première version du jeu de bataille.
' Le joueur joue contre l'ordinateur.

' Les règles (origine: Wikipedia):

' On distribue l'ensemble d'un (ou plusieurs) jeu de cartes (54 ou 32) aux joueurs,
' qui n'en prennent pas connaissance. À chaque tour, chaque joueur retourne la carte
' du haut de sa main (ou son tas). Celui qui a la carte de la plus haute valeur -
' selon la hiérarchie du bridge : As, Roi, Dame, Valet, dix… jusqu'au deux - fait
' la levée, qu'il place sous son tas.

' En cas d'égalité de valeurs - cas appelé bataille - les joueurs en ballotage
' disent « bataille ! », et commencent par placer une première carte face cachée
' puis une seconde carte face visible pour décider qui fera la levée.
' En cas de nouvelle égalité, la procédure est répétée. La bataille est
' parfois l'occasion d'acquérir une grosse carte et c'est l'unique manière
' de gagner un as. Sans bataille et à moins qu'un joueur ne possède tous les as,
' il serait impossible de terminer une partie de bataille. La partie se termine
' et le gagnant est déterminé lorsque ce dernier a en sa possession toutes les
' cartes du jeu.

' Technique:
' le programme prépare un terrain de jeu, avec 5 piles:
'  pile 1: tas du joueur - pile non triée, face cachée
'  pile 2: enjeu du joueur : pile non triée, face cachée et ouverte, cartes non glissables
'  pile 3: tas du programme - pile non triée, face cachée, cartes non glissables
'  pile 4: enjeu du programme : pile non triée, face cachée et ouverte, cartes non glissables
'  pile 5: talon initial pour dustribuer les cartes, puis outil technique pour des manipulations

label event, close0, jouer, bataille, distribuer, ramasser

full_space 0 : caption 0,"Jeu de Bataille" : on_close 0,close0
dll_on "KGF.dll"

#INCLUDE "MyCards.inc"

dim ImageDeFond$ : ImageDeFond$ = ""
dim ImageList$  : ImageList$  = ""

dim PG%, ST1%, ST2%, ST3%, ST4%, ST5%, CD%(52), hPG%
dim res%, nom$, n%, couleur%


creer_objets_speciaux()
creer_terrain()
creer_objets_visuels()
creer_tas_joueur()
creer_enjeu_joueur()
creer_tas_programme()
creer_enjeu_programme()
creer_talon()
creer_jeu_52_cartes()

end

close0:
  PG% = dll_call1("DeleteMyCardsPlayground",PG%)
  return

event:
  return
 
jouer:
  jouer_une_carte()
  return
 
bataille:
  faire_la_bataille()
  return
 
distribuer:
  distribuer_les_cartes()
  return
 
ramasser:
  ramasser_les_cartes()
  return
 
 
sub creer_terrain()
' *********************** terrain de jeu
  ' création du terrain de jeu
  PG% = dll_call6("CreateMyCardsPlayground",handle(0),handle(99),10,40,adr(ImageDeFond$),adr(ImageList$))

  ' on ne peut "accrocher" aucune carte dans le terrain de jeu
  ' on ne peut déposer nulle part
  ' identification de la pile en fonction d'un contact avec un des 4 coins de la carte
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%,tsVeryHigh%)

  ' dimensionner le terrain de jeu
  res% = dll_call5("MyCardsPlaygroundGeometry",PG%,0,40,1200,650)

  ' récupérer le handle du terrain de jeu
  hPG% = dll_call3("GetMyCardsInfo",PG%,ciGetObjectHandle%,0)
end_sub
 
 
 
sub creer_tas_joueur()
  ' *********************** pile 1: tas du joueur
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST1% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en bas au milieu
  res% = dll_call3("LocateMyCardsStack",ST1%,600,500)

  nom$ = "Tas du joueur"
  '  on ne peut "accrocher" que la dernière carte de la pile 1
  '  peut ne déposer aucune carte
  res% = dll_call4("MyCardsCardStackOptions",ST1%,dragLast%,dropNone%,adr(nom$))
end_sub



sub creer_enjeu_joueur()
  ' *********************** pile 2: enjeu du joueur
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST2% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile au-dessus de la pile 1
  res% = dll_call3("LocateMyCardsStack",ST2%,600,350)

  nom$ = "Enjeu du joueur"
  '  on ne peut "accrocher" aucune carte de la pile 2
  '  les cartes déposées se placent automatiquement sur le dessus de la pile (à la fin)
  res% = dll_call4("MyCardsCardStackOptions",ST3%,dragNone%,dropLast%,adr(nom$))
end_sub
 
 
 
sub creer_tas_programme()
  ' *********************** pile 3: tas du programme
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST3% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en haut au milieu
  res% = dll_call3("LocateMyCardsStack",ST3%,600,10)

  nom$ = "Tas du programme"
  '  on ne peut "accrocher" aucune carte de la pile 3
  '  peut ne déposer aucune carte
  res% = dll_call4("MyCardsCardStackOptions",ST3%,dragNone%,dropNone%,adr(nom$))
end_sub



sub creer_enjeu_programme()
  ' *********************** pile 4: enjeu du programme
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST4% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en-dessous de la pile 3
  res% = dll_call3("LocateMyCardsStack",ST4%,600,160)

  nom$ = "Enjeu du programme"
  '  on ne peut "accrocher" aucune carte de la pile 4
  '  on ne peut déposer aucune carte sur cette pile
  res% = dll_call4("MyCardsCardStackOptions",ST4%,dragNone%,dropNone%,adr(nom$))
end_sub



sub creer_talon()
  ' *********************** créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST5% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile au milieu à gauche
  res% = dll_call3("LocateMyCardsStack",ST5%,300,250)
 
  nom$ = "Talon"
  '  on ne peut "accrocher" aucune carte de la pile 5
  '  on ne peut déposer aucune carte sur cette pile
  res% = dll_call4("MyCardsCardStackOptions",ST5%,dragNone%,dropNone%,adr(nom$))
end_sub



sub creer_jeu_52_cartes()
    ' *********************** créer le jeu de 52 cartes (invisibles)
  for couleur%=0 to 3
    for n%=1 to 13
      CD%(couleur%*13+n%) = dll_call6("CreateMyCardsCard",PG%,couleur%,n%,cdFishes2%,0,0)
      res% = dll_call3("MoveMyCardsCardToStack",CD%(couleur%*13+n%),ST5%,caAddCardAtEnd%)
    next n%
  next couleur%
  ' battre le jeu
  res% = dll_call1("ShuffleMyCardsStack",ST5%)
  text 85,"52"
end_sub



sub distribuer_les_cartes()
  dim_local i%, res%
' *********************** copier alternativement le jeu dans la main du joueur et du programme
  for n%=1 to 26
    res% = dll_call3("MoveMyCardsCardToStack",ST5%,ST1%,caAddCardAtEnd%)  : ' main du joueur
    res% = dll_call3("MoveMyCardsCardToStack",ST5%,ST3%,caAddCardAtEnd%)  : ' main du programme
  next n%
  comptage()
  inactive 3
  active 1
  active 4
end_sub



sub ramasser_les_cartes()
  ' *********************** ramasser les cartes de toutes les piles
  res% = dll_call4("MoveMyCardsStackToStack",ST1%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST3%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  comptage()
  ' battre le jeu
  res% = dll_call1("ShuffleMyCardsStack",ST5%)
  inactive 1
  inactive 2
  inactive 4
  active 3
end_sub



sub creer_objets_speciaux()
  ' *********************** objets spéciaux
  form 97 : hide 97
  memo 98 : parent 98,97 : bar_both 98 : ' hide 98
  edit 99 : left 99,700 : width 99,300 : on_change 99,event : hide 99
end_sub



sub creer_objets_visuels()
  ' *********************** boutons techiques
  button 1 : top 1,570 : left 1,480 : caption 1,"Jouer" : on_click 1,jouer : inactive 1
  button 2 : top 2,570 : left 2,720 : caption 2,"Bataille !" : on_click 2,bataille : inactive 2
  button 3 : top 3,300 : left 3,380 : caption 3,"Distribuer" : on_click 3,distribuer
  button 4 : top 4,360 : left 4,380 : caption 4,"Ramasser" : on_click 4,ramasser : inactive 4
  ' *********************** affichage du nombre de cartes par pile
  edit 81 : top 81,640 : left 81,620 : width 81,25 : text 81,"0" : inactive 81
  edit 82 : top 82,490 : left 82,620 : width 82,25 : text 82,"0" : inactive 82
  edit 83 : top 83,150 : left 83,620 : width 83,25 : text 83,"0" : inactive 83
  edit 84 : top 84,300 : left 84,620 : width 84,25 : text 84,"0" : inactive 84
  edit 85 : top 85,390 : left 85,320 : width 85,25 : text 85,"0" : inactive 85
end_sub



sub comptage()
  dim_local v%
  v% = dll_call3("GetMyCardsInfo",ST1%,ciStackCardCount%,0)
  text 81,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST2%,ciStackCardCount%,0)
  text 82,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST3%,ciStackCardCount%,0)
  text 83,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST4%,ciStackCardCount%,0)
  text 84,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST5%,ciStackCardCount%,0)
  text 85,str$(v%)
end_sub


sub jouer_une_carte()
  dim_local CDjoueur%, CDprogramme%, ValeurJoueur%, ValeurProgramme%, v%
  inactive 2
  CDjoueur%    = dll_call3("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%)  : ' joueur
  CDprogramme% = dll_call3("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%)  : ' programme
  comptage()

  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcTurnCard%)    : ' retourner la carte !
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcTurnCard%)  : ' retourner la carte !
  v% = dll_call3("GetMyCardsInfo",CDjoueur%,ciGetCardSuitValue%,0)
  ValeurJoueur% = bin_and(v%,65535)                    : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurJoueur% = 14        : ' As est le plus fort !
  v% = dll_call3("GetMyCardsInfo",CDprogramme%,ciGetCardSuitValue%,0)
  ValeurProgramme% = bin_and(v%,65535)                  : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurProgramme% = 14      : ' As est le plus fort !
  if ValeurProgramme%=ValeurJoueur%                    : ' bataille ?
    inactive 1
    active 2
    message "Bataille !"
    exit_sub
  end_if
  if ValeurProgramme%>ValeurJoueur%                    : ' le programme emporte la mise ?
    message "Dommage ! Vous avez perdu la mise."
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)  : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST3%,caPreserveStack%,caAddCardAtFront%)  : ' placer les cartes de ma mise du joueur sous les cartes du tas du programme
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST3%,caPreserveStack%,caAddCardAtFront%)
  else                                                  : ' le joueur emporte la mise !
    message "Super ! Vous avez gagné la mise."
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)  : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST1%,caPreserveStack%,caAddCardAtFront%)  : ' placer les cartes de ma mise du programme sous les cartes du tas du joueur
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST1%,caPreserveStack%,caAddCardAtFront%)
  end_if
  comptage()
  if text$(81)="0"
    message "Oups - vous avez perdu !"
    inactive 1
    inactive 2
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if
end_sub



sub faire_la_bataille()
  dim_local CDjoueur%, CDprogramme%, ValeurJoueur%, ValeurProgramme%, v%

  ' chacun joue une carte cachée
  CDjoueur%    = dll_call3("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%)  : ' joueur
  CDprogramme% = dll_call3("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%)  : ' programme
  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
  comptage()
  if text$(81)="0"
    message "Oups - vous avez perdu !"
    inactive 1
    inactive 2
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if

  ' et une carte ouverte
  CDjoueur%    = dll_call3("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%)  : ' joueur
  CDprogramme% = dll_call3("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%)  : ' programme
  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardFace%)
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardFace%)
  comptage()

  v% = dll_call3("GetMyCardsInfo",CDjoueur%,ciGetCardSuitValue%,0)
  ValeurJoueur% = bin_and(v%,65535)                    : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurJoueur% = 14        : ' As est le plus fort !
  v% = dll_call3("GetMyCardsInfo",CDprogramme%,ciGetCardSuitValue%,0)
  ValeurProgramme% = bin_and(v%,65535)                  : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurProgramme% = 14      : ' As est le plus fort !
  if ValeurProgramme%=ValeurJoueur%                    : ' bataille ?
    inactive 1
    active 2
    message "Bataille !"
    exit_sub
  end_if
  inactive 2
  active 1
  if ValeurProgramme%>ValeurJoueur%                    : ' le programme emporte la mise ?
    message "Dommage ! Vous avez perdu la mise avec bataille."
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)  : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST3%,caPreserveStack%,caAddCardAtEnd%)  : ' placer les cartes de ma mise du joueur sous les cartes du tas du programme
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST3%,caPreserveStack%,caAddCardAtEnd%)
  else                                                  : ' le joueur emporte la mise !
    message "Super ! Vous avez gagné la mise avec bataille."
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)  : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST1%,caPreserveStack%,caAddCardAtEnd%)  : ' placer les cartes de ma mise du programme sous les cartes du tas du joueur
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST1%,caPreserveStack%,caAddCardAtEnd%)
  end_if
  comptage()
  if text$(81)="0"
    inactive 1
    active 2
    message "Bataille !"
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if
end_sub


Joli, non ? En particulier, pour la Bataille...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10075
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Démonstration de CARDS.DLL   Jeu 1 Déc 2016 - 3:46

Nouvelle version:
- un clic sur une carte (ou un glisser/déposer d'une carte) retourne maintenant également l'ID de la pile d'origine
- nouveau paramètre pour MyCardsCardStackOptions pour indiquer combien de cartes sont initialement face cachée sur la pile, devant les cartes faces visible

Ainsi, en comparant l'ID actuel et l'ID d'origine, on peut savoir si la carte a été déplacée ou non.
- en cas d'égalité, c'est juste un clic sur la carte
- en cas de différence, la carte a été déplacée vers une autre pile
- un identtifiant 0 signifie "terrain de jeu"
- un identifiant non 0 est l'ID de la pile retournée par CreateMyCardsStack

Pour information, voici MyCards.inc:
Spoiler:
 

Voici le programme de démo adapté:
Spoiler:
 

Voici la Bataille adaptée:
Spoiler:
 

Et enfin voici le début de ralisation d'un jeu de Patience. On a déjà la création du pla de jeu avec tous les talons et piles, la création de deux jeux de 52 cartes, ainsi que la donne initiale de 3 rangs cachés et 1 rang ouvert. On peut glisser/déposer des cartes. Il n'y a pas encore vraiment de contrôle sur la validité des dépôts des cartes, mais on voit déjà bien la structure du jeu ainsi que la performance des graphismes, le tout en 187 lignes:
Code:
' Patience.bas

' Ce programme est une permière tentative d'implémenter un jeu de patience
' à l'aide des fonctions MyCards.
'
' Ce jeu se joue avec 104 cartes (2 jeux de 52 cartes), sans jokers.
' On crée les piles suivantes:
'  pile ST(0): le talon, contenant initialement les 104 cartes mélangées
'  piles ST(1) ... ST(10): les colonnes de cartes, toutes de définitions identiques:
'    groupe:        sgTopDown          - organisée de haut vers le bas
'    organisation:  soDescendant        - triée par valeurs descendentes
'    couleurs:      scAlternateBlackRed - noir/rouge en alternance
'    image de pile: siNone              - place vide
'    glisser:      dragLast            - la dernière carte seulement
'                                          (plus tard, tout mais seulement les fins de pile triées)
'    déposer:      DropLast            - déposer en fin de pile
'    vitesse:      tsVeryHigh          - trés élevée
'    3 rangs couverts
'    les autres rangs découverts
'  STas(1) ... STas(8): les piles recevant les cartes retirées du jeu, avec les définitions suivantes:
'    groupe:        sgStockTopFaceUp    - organisée en un talon cartes visibles
'    organisation:  soAscendant        - triée par valeurs ascendentes
'    couleurs:      scSpades, scDiamonds, scClubs, scHearts (2x)
'    image de pile: siClub, siDiamond, siSpade, siHeart (2x)
'    glisser:      dragLast            - la dernière carte seulement
'    déposer:      DropLast            - déposer en fin de pile
'    vitesse:      tsVeryHigh          - trés élevée

label event, close0

full_space 0 : caption 0,"Jeu de Patience" : on_close 0,close0
dll_on "KGF.dll"

#INCLUDE "MyCards.inc"

dim ImageDeFond$ : ImageDeFond$ = ""
dim ImageList$  : ImageList$  = ""

dim PG%, ST%(10), STas%(8)
dim res%, nom$, n%, couleur%

creer_objets_speciaux()
creer_terrain()
creer_piles()
Creer_cartes()
Donne_initiale()
end

event:
message text$(99)
  return
 
close0:
  PG% = dll_call1("DeleteMyCardsPlayground",PG%)
  return
 
sub creer_objets_speciaux()
  ' *********************** objets spéciaux
  form 97 : hide 97
  memo 98 : parent 98,97 : bar_both 98 : ' hide 98
  edit 99 : left 99,700 : width 99,300 : on_change 99,event : hide 99
end_sub

sub creer_terrain()
' *********************** terrain de jeu
  ' création du terrain de jeu
  PG% = dll_call6("CreateMyCardsPlayground",handle(0),handle(99),10,40,adr(ImageDeFond$),adr(ImageList$))

  ' on ne peut "accrocher" aucune carte dans le terrain de jeu
  ' on ne peut déposer nulle part
  ' identification de la pile en fonction d'un contact avec un des 4 coins de la carte
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%,tsVeryHigh%)

  ' dimensionner le terrain de jeu
  res% = dll_call5("MyCardsPlaygroundGeometry",PG%,0,40,1200,650)
end_sub

sub creer_piles()
' *********************** créer toutes les piles
  creer_talon()
  creer_talons_as()
  creer_talons_jeu()
end_sub

sub creer_talon()
  ' *********************** créer le talon
  ST%(0) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en haut à gauche
  res% = dll_call3("LocateMyCardsStack",ST%(0),10,10)

  nom$ = "Talon"
  '  on ne peut "accrocher" que la dernière carte de la pile 5
  '  on ne peut déposer aucune carte
  res% = dll_call5("MyCardsCardStackOptions",ST%(0),dragLast%,dropNone%,0,adr(nom$))
end_sub

sub creer_talons_as()
  ' *********************** créer les 8 talons des As
  STas%(1) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soAscendant%,scSpades%,0,siSpade%)
  res% = dll_call3("LocateMyCardsStack",STas%(1),90,10)
  nom$ = "Pique Rouge"
  res% = dll_call5("MyCardsCardStackOptions",STas%(1),dragLast%,dropLast%,0,adr(nom$))
  STas%(2) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soAscendant%,scSpades%,0,siSpade%)
  res% = dll_call3("LocateMyCardsStack",STas%(2),170,10)
  nom$ = "Pique Noir"
  res% = dll_call5("MyCardsCardStackOptions",STas%(2),dragLast%,dropLast%,0,adr(nom$))

  STas%(3) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soAscendant%,scDiamonds%,0,siDiamond%)
  res% = dll_call3("LocateMyCardsStack",STas%(3),250,10)
  nom$ = "Pique Rouge"
  res% = dll_call5("MyCardsCardStackOptions",STas%(3),dragLast%,dropLast%,0,adr(nom$))
  STas%(4) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soAscendant%,scDiamonds%,0,siDiamond%)
  res% = dll_call3("LocateMyCardsStack",STas%(4),330,10)
  nom$ = "Pique Noir"
  res% = dll_call5("MyCardsCardStackOptions",STas%(4),dragLast%,dropLast%,0,adr(nom$))

  STas%(5) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soAscendant%,scClubs%,0,siClub%)
  res% = dll_call3("LocateMyCardsStack",STas%(5),410,10)
  nom$ = "Pique Rouge"
  res% = dll_call5("MyCardsCardStackOptions",STas%(5),dragLast%,dropLast%,0,adr(nom$))
  STas%(6) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soAscendant%,scClubs%,0,siClub%)
  res% = dll_call3("LocateMyCardsStack",STas%(6),490,10)
  nom$ = "Pique Noir"
  res% = dll_call5("MyCardsCardStackOptions",STas%(6),dragLast%,dropLast%,0,adr(nom$))

  STas%(7) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soAscendant%,scHearts%,0,siHeart%)
  res% = dll_call3("LocateMyCardsStack",STas%(7),570,10)
  nom$ = "Pique Rouge"
  res% = dll_call5("MyCardsCardStackOptions",STas%(7),dragLast%,dropLast%,0,adr(nom$))
  STas%(8) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soAscendant%,scHearts%,0,siHeart%)
  res% = dll_call3("LocateMyCardsStack",STas%(8),650,10)
  nom$ = "Pique Noir"
  res% = dll_call5("MyCardsCardStackOptions",STas%(8),dragLast%,dropLast%,0,adr(nom$))
end_sub

sub creer_talons_jeu()
  ' *********************** créer les 10 talons de jeu  soNone% ==> soDescendant%
  dim_local i%
  for i%=1 to 10
    ST%(i%) = dll_call6("CreateMyCardsStack",PG%,sgTopDown%,soNone%,scAll%,20,siNone%)
    res% = dll_call3("LocateMyCardsStack",ST%(i%),10+i%*80,130)
    nom$ = "Pique Rouge"
    res% = dll_call5("MyCardsCardStackOptions",ST%(i%),dragLast%,dropLast%,3,adr(nom$))
  next i%
end_sub

sub creer_cartes()
  dim_local couleur%, n%, CD%
  ' mettre la vitesse "immédiat"
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%,tsNone%)
  ' *********************** créer le premier jeu de 52 cartes (invisibles)
  for couleur%=0 to 3
    for n%=1 to 13
      CD% = dll_call6("CreateMyCardsCard",PG%,couleur%,n%,cdFishes1%,0,0)
      res% = dll_call3("MoveMyCardsCardToStack",CD%,ST%(0),caAddCardAtEnd%)
    next n%
  next couleur%
  ' *********************** créer le deuxième  jeu de 52 cartes (invisibles)
  for couleur%=0 to 3
    for n%=1 to 13
      CD% = dll_call6("CreateMyCardsCard",PG%,couleur%,n%,cdFishes2%,0,0)
      res% = dll_call3("MoveMyCardsCardToStack",CD%,ST%(0),caAddCardAtEnd%)
    next n%
  next couleur%
  ' battre le jeu
  res% = dll_call1("ShuffleMyCardsStack",ST%(0))
  ' remetre la vitesse "très rapide"
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%,tsVeryHigh%)
end_sub

sub donne_initiale()
' *********************** effectuer la donne initiale (4 rangs)
  dim_local i%
  for i%=1 to 4
    une_donne()
  next i%
end_sub

sub une_donne()
' *********************** effectuer une donne (1 rang)
  dim_local n%
  for n%=1 to 10
    res% = dll_call3("MoveMyCardsCardToStack",ST%(0),ST%(n%),caAddCardAtEnd%)
'    message str$(n%)+": "+str$(res%)
  next n%
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 1 Déc 2016 - 14:23

Oups... Panoramic a cessé de fonctionné...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5551
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Démonstration de CARDS.DLL   Jeu 1 Déc 2016 - 14:26

Il est peut-être trop fatigué et il a besoin de se reposer ! tongue
N'a-t-il pas le droit de se plaindre Question
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 1 Déc 2016 - 14:32

Au lancement du programme, quel fainéant !
Laughing
ou alors..., il fait une indigestion de kgf.dll.
lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10075
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Démonstration de CARDS.DLL   Jeu 1 Déc 2016 - 14:49

Nouvelle version:
- progression de la jouabilité
- adaptation de MyCards.inc
- adaptation du programme de démo et de la Bataille
- progression de la Partience

La partience commence à devenir jouable. Il manque seulement le fait de pouvoir déplacer une "queue" de pile, à condition qu'elle soit triée correctement selon les paramètres de la pile.

Voici MyCards.inc:
Spoiler:
 

Le programme de démo adapté:
Spoiler:
 

La Bataille adaptée:
Spoiler:
 

Et, la cerise dur le gâteau, la Patience:
Spoiler:
 

On peut "monter" des cartes sur la pile des As (dans l'ordre: As, 2, 3, ..., Roi
On peur déplacer la dernière carte d'une pile vers une autre, à condition de respecter l'alternance des couleurs rouge/noir et l'ordre strictement décroissant des cartes
On peut glisser une carte d'une des piles des As dans le jeu normal, à condition de respecter l'alternance des couleurs rouge/noir et l'ordre strictement décroissant des cartes
Un clic sur le talon en haut à gauche distribue une nouvelle rangée de cartes

Ceci montre la faisabilité de création de jeux de cartes avec ces fonctions. Je m'attaque maintenant au déplacement d'une "queue" de pile.

PS.

Convernant vos diverses difficultés, sachez que j'avais fait la mise à jour du WebDav et du site, puis j'ai dû interrompre avant de pouvoir poster finalement le texte ci-dessus. Ceci explique vos déboires avec vos essais, ce matin. Par sécurité, reprenez tout -DLL et les modules INC et BAS, et réessayez.


Dernière édition par Klaus le Jeu 1 Déc 2016 - 17:30, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 1 Déc 2016 - 15:09

Ca y est un peu d' huile de foie de kgf et Panoramic re fonctionne.
lol!

Une petite suggestion.
Jeu Bataille :
Au lieu de "Message", il est préférable d' utiliser un "Alpha" ou le "caption 0"
cliquer sur ok à chaque main...c' est usant...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10075
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Démonstration de CARDS.DLL   Jeu 1 Déc 2016 - 15:34

C'est fait et mis à jour dans le post précédent.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 1 Déc 2016 - 16:53

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10075
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Démonstration de CARDS.DLL   Jeu 1 Déc 2016 - 17:25

Tu as cliqué trop vite ! Après l'affichage de chaque message dans la boite à droite, il y a un délai de 2 secondes. Si tu cliques avant, tu retournes dans la même routine évènement que celle qui est en cours d'exécution, et c'est ce qui provoque le plantage.

Attends en peu plus longtemps... De mon côté, je vais déactiver et réactiver le bouton, pour éviter cela.

EDIT

C'est modifié ci-dessus !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 1 Déc 2016 - 20:32

C' est beaucoup mieux comme çà.
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10075
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Démonstration de CARDS.DLL   Jeu 1 Déc 2016 - 20:57

En même temps, c'est juste une preuve de faisabilité, pas une vraie implémentation d'un jeu. Les règles gérées sont les bonnes, mais la présentation est largement perfectible. Ce n'est pas ça qui comptait, pour moi, mais surtout démontrer que c'est faisable avec les fonctions MyCards.

Pour la patience (et donc, généralement pour tous les jeux de cartes !), je peux maintenant cliquer n'importe où dans une des piles de jeu (les 10 piles verticales). Et si les cartes qui suivent jusqu'à la fin de la pile, sont dans la correcte alternance rouge/noir et avec des valeurs strictement décressives avec des cartes dont les valeurs se suivent immédiatement, alors je peux maintenant déplacer toute cette "queue" de pile en tirant la carte ciblée (la racine de la queue) et la balader à travers le terrain de jeu. Spectaculaire. Je travaille maintenant sur le raccrochage...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Démonstration de CARDS.DLL   

Revenir en haut Aller en bas
 
Démonstration de CARDS.DLL
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 5 sur 5Aller à la page : Précédent  1, 2, 3, 4, 5
 Sujets similaires
-
» démonstration d'accordéon Roland sons bk7m
» Démonstration n°1 de TOONIC: un simple paysage
» Démos BK-7m
» ou d'ecouter les differents registres du fr18
» Explosif démo BK5 Roland

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: