Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Démonstration de CARDS.DLL | |
|
+3Ouf_ca_passe Klaus papydall 7 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Démonstration de CARDS.DLL Lun 28 Nov 2016 - 9: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 ). 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Démonstration de CARDS.DLL Lun 28 Nov 2016 - 22: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... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Démonstration de CARDS.DLL Jeu 1 Déc 2016 - 1: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:
- 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
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é: - Spoiler:
- 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_call5("MyCardsCardStackOptions",ST1%,dragLast%,DropLast%,0,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 ' les 5 premières cartes sont cachées res% = dll_call5("MyCardsCardStackOptions",ST1%,dragAll%,DropLast%,5,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_call5("MyCardsCardStackOptions",ST2%,dragLast%,DropLast%,0,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_call5("MyCardsCardStackOptions",ST3%,dragAll%,dropNone%,0,adr(nom$)) ' première option: ' on peut tirer toutes les cartes de stack 3 ' on ne peut déposer aucune carte ' res% = dll_call5("MyCardsCardStackOptions",ST3%,dragAll%,dropLast%,0,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 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 non utilisée d'une pile message "clic - "+text$(99) end_if return
test:
return
Voici la Bataille adaptée: - Spoiler:
- 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_call5("MyCardsCardStackOptions",ST1%,dragLast%,dropNone%,0,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_call5("MyCardsCardStackOptions",ST3%,dragNone%,dropLast%,0,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_call5("MyCardsCardStackOptions",ST3%,dragNone%,dropNone%,0,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_call5("MyCardsCardStackOptions",ST4%,dragNone%,dropNone%,0,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_call5("MyCardsCardStackOptions",ST5%,dragNone%,dropNone%,0,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
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 | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 1 Déc 2016 - 12:23 | |
| Oups... Panoramic a cessé de fonctionné... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Démonstration de CARDS.DLL Jeu 1 Déc 2016 - 12:26 | |
| Il est peut-être trop fatigué et il a besoin de se reposer ! N'a-t-il pas le droit de se plaindre | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 1 Déc 2016 - 12:32 | |
| Au lancement du programme, quel fainéant ! ou alors..., il fait une indigestion de kgf.dll. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Démonstration de CARDS.DLL Jeu 1 Déc 2016 - 12: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:
- 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 soAscendantOnDrop% : soAscendantOnDrop% = 3 dim soDescendantOnDrop% : soDescendantOnDrop% = 4 dim soStrictlyAscendantOnDrop% : soStrictlyAscendantOnDrop% = 5 dim soStrictlyDescendantOnDrop% : soStrictlyDescendantOnDrop% = 6
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 siSpade% : siSpade% = 2 dim siDiamond% : siDiamond% = 3 dim siClub% : siClub% = 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
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
dim acNormal% : acNormal% = 0 dim acAlways% : acAlways% = 1
Le programme de démo adapté: - Spoiler:
- 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_call5("MyCardsCardStackOptions",ST1%,dragLast%,DropLast%,0,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 ' les 5 premières cartes sont cachées res% = dll_call5("MyCardsCardStackOptions",ST1%,dragAll%,DropLast%,5,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_call5("MyCardsCardStackOptions",ST2%,dragLast%,DropLast%,0,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_call5("MyCardsCardStackOptions",ST3%,dragAll%,dropNone%,0,adr(nom$)) ' première option: ' on peut tirer toutes les cartes de stack 3 ' on ne peut déposer aucune carte ' res% = dll_call5("MyCardsCardStackOptions",ST3%,dragAll%,dropLast%,0,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_call4("MoveMyCardsCardToStack",CD%(k%,i%),ST1%,0,acNormal%) 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_call4("MoveMyCardsCardToStack",JK1%,ST1%,0,acNormal%) 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_call4("MoveMyCardsCardToStack",JK2%,ST1%,0,acNormal%) 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 CDdos%(i%)<>0 then ncd%(3) = ncd%(3) + 1 if debug%=1 then message "CreateMyCardsCard="+str$(CDdos%(i%)) res% = dll_call4("MoveMyCardsCardToStack",CDdos%(i%),ST3%,0,acNormal%) 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 non utilisée d'une pile message "clic - "+text$(99) end_if return
test:
return
La Bataille adaptée: - Spoiler:
- 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_call5("MyCardsCardStackOptions",ST1%,dragLast%,dropNone%,0,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_call5("MyCardsCardStackOptions",ST3%,dragNone%,dropLast%,0,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_call5("MyCardsCardStackOptions",ST3%,dragNone%,dropNone%,0,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_call5("MyCardsCardStackOptions",ST4%,dragNone%,dropNone%,0,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_call5("MyCardsCardStackOptions",ST5%,dragNone%,dropNone%,0,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_call4("MoveMyCardsCardToStack",CD%(couleur%*13+n%),ST5%,caAddCardAtEnd%,acNormal%) 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 text 96,"" for n%=1 to 26 res% = dll_call4("MoveMyCardsCardToStack",ST5%,ST1%,caAddCardAtEnd%,acNormal%) : ' main du joueur res% = dll_call4("MoveMyCardsCardToStack",ST5%,ST3%,caAddCardAtEnd%,acNormal%) : ' 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 text 96,"" 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 ' *********************** affichage visuel des messages, à la place d'une commande Message edit 96 : top 96,640 : left 96,720 : width 96,350 : inactive 96 font_size 96,12 : font_bold 96 : font_color 96,255,100,100 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 inactive 1 text 96,"" CDjoueur% = dll_call4("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%,acNormal%) : ' joueur CDprogramme% = dll_call4("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%,acNormal%) : ' 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 !" text 96,"Bataille !" exit_sub end_if if ValeurProgramme%>ValeurJoueur% : ' le programme emporte la mise ? ' message "Dommage ! Vous avez perdu la mise." text 96,"Dommage ! Vous avez perdu la mise." : pause 2000 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." text 96,"Super ! Vous avez gagné la mise." : pause 2000 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 active 1 end_sub
sub faire_la_bataille() dim_local CDjoueur%, CDprogramme%, ValeurJoueur%, ValeurProgramme%, v% inactive 2 text 96,"" ' chacun joue une carte cachée CDjoueur% = dll_call4("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%,acNormal%) : ' joueur CDprogramme% = dll_call4("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%,acNormal%) : ' 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_call4("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%,acNormal%) : ' joueur CDprogramme% = dll_call4("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%,acNormal%) : ' 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 !" text 96,"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." text 96,"Dommage ! Vous avez perdu la mise avec bataille." : pause 2000 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." text 96,"Super ! Vous avez gagné la mise avec bataille." : pause 2000 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 !" text 96,"Bataille !" exit_sub end_if if text$(83)="0" message "BRAVO - vous avez gagné !" inactive 1 inactive 2 exit_sub end_if active 1 end_sub
Et, la cerise dur le gâteau, la Patience: - Spoiler:
- 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%, s$, s1$, sc$, xST%
creer_objets_speciaux() creer_terrain() creer_piles() Creer_cartes() Donne_initiale() end
event: off_change 99 s$ = text$(99) if left$(s$,2)="CC" sc$ = mid$(s$,3,8) s1$ = mid$(s$,21,8) s$ = mid$(s$,12,8) xST% = hex(s$) if xST%=ST%(0) une_donne() on_change 99,event return end_if ' message sc$+" "+s$+" "+s1$ if s$=s1$ n% = hex(sc$) ' message hex$(n%)+" "+sc$ res% = dll_call2("ManageMyCardsCard",n%,mcShowCardFace%) end_if end_if ' message text$(99) on_change 99,event 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%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,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%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,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%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scDiamonds%,0,siDiamond%) res% = dll_call3("LocateMyCardsStack",STas%(3),250,10) nom$ = "Caro Rouge" res% = dll_call5("MyCardsCardStackOptions",STas%(3),dragLast%,dropLast%,0,adr(nom$)) STas%(4) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scDiamonds%,0,siDiamond%) res% = dll_call3("LocateMyCardsStack",STas%(4),330,10) nom$ = "Caro Noir" res% = dll_call5("MyCardsCardStackOptions",STas%(4),dragLast%,dropLast%,0,adr(nom$))
STas%(5) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scClubs%,0,siClub%) res% = dll_call3("LocateMyCardsStack",STas%(5),410,10) nom$ = "Trèfle Rouge" res% = dll_call5("MyCardsCardStackOptions",STas%(5),dragLast%,dropLast%,0,adr(nom$)) STas%(6) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scClubs%,0,siClub%) res% = dll_call3("LocateMyCardsStack",STas%(6),490,10) nom$ = "Trèfle Noir" res% = dll_call5("MyCardsCardStackOptions",STas%(6),dragLast%,dropLast%,0,adr(nom$))
STas%(7) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scHearts%,0,siHeart%) res% = dll_call3("LocateMyCardsStack",STas%(7),570,10) nom$ = "Coeur Rouge" res% = dll_call5("MyCardsCardStackOptions",STas%(7),dragLast%,dropLast%,0,adr(nom$)) STas%(8) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scHearts%,0,siHeart%) res% = dll_call3("LocateMyCardsStack",STas%(8),650,10) nom$ = "Coeur 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%,soStrictlyDescendantOnDrop%,scAlternateBlackRed%,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_call4("MoveMyCardsCardToStack",CD%,ST%(0),caAddCardAtEnd%,acAlways%) 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_call4("MoveMyCardsCardToStack",CD%,ST%(0),caAddCardAtEnd%,acAlways%) 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_call4("MoveMyCardsCardToStack",ST%(0),ST%(n%),caAddCardAtEnd%,acAlways%) ' message str$(n%)+": "+str$(res%) next n% end_sub
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 - 15:30, édité 2 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 1 Déc 2016 - 13:09 | |
| Ca y est un peu d' huile de foie de kgf et Panoramic re fonctionne. 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... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Démonstration de CARDS.DLL Jeu 1 Déc 2016 - 13:34 | |
| C'est fait et mis à jour dans le post précédent. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 1 Déc 2016 - 14:53 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Démonstration de CARDS.DLL Jeu 1 Déc 2016 - 15: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 ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 1 Déc 2016 - 18:32 | |
| C' est beaucoup mieux comme çà. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Démonstration de CARDS.DLL Jeu 1 Déc 2016 - 18: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... | |
| | | Contenu sponsorisé
| Sujet: Re: Démonstration de CARDS.DLL | |
| |
| | | | Démonstration de CARDS.DLL | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |