Début d'un code de jeu de belote

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Début d'un code de jeu de belote

Message par SPH »

Salut,

je vous propose un code très court des points d'un jeu de belote. Je ne sais plus trop mais quelqu'un (peut etre toi : micoute) a parlé de belote il y a quelques mois.
J'ai bien décidé de coder un jeu.
:wink:

Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;

Dim carte.w(32)
Dim Points.w(32)
Dim carte$(3)
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

atout=Random(3) ;;; (de -1 à 3)

For i=1 To 4
  For u=0 To 3
    carte(i+u*8)=i+6
  Next
  For u=0 To 3
    carte(i+4+u*8)=i
  Next
Next
;;;

For u=0 To 3
  For i=1 To 3
    points(i+u*8)=0
  Next
  points(4+u*8)=10
  points(5+u*8)=11
  points(6+u*8)=2
  points(7+u*8)=3
  points(8+u*8)=4
  
  If atout=u
    Points(3+u*8)=14
    Points(6+u*8)=20
  EndIf
  
Next

;;;;;;;;;;;;;;;;;;;;;;;;;
For u=0 To 3
  If atout=u
    Debug carte$(u)+" (atout)"    
  Else
    Debug carte$(u)
  EndIf
  
  For i=1 To 8
    Debug Str(carte(i+u*8))+" : "+Str(points(i+u*8))
  Next
  Debug"---"
Next

;;;;;;;;;;;;;;;


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

Amelioration : mélange des cartes (mais bon, ce sera plus concret dans 1 ou 2 posts)

Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;

Dim carte.w(32)
Dim carte_melange.w(32)
Dim Points.w(32)
Dim carte$(3)
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

atout=Random(3) ;;; (de -1 à 3)

For i=1 To 4
  For u=0 To 3
    carte(i+u*8)=i+6
  Next
  For u=0 To 3
    carte(i+4+u*8)=i
  Next
Next
;;;

For u=0 To 3
  For i=1 To 3
    points(i+u*8)=0
  Next
  points(4+u*8)=10
  points(5+u*8)=11
  points(6+u*8)=2
  points(7+u*8)=3
  points(8+u*8)=4
  
  If atout=u
    Points(3+u*8)=14
    Points(6+u*8)=20
  EndIf
  
Next

;;;;;;;;;;;;;;;;;;;;;;;;;
For u=0 To 3
  If atout=u
    Debug carte$(u)+" (atout)"    
  Else
    Debug carte$(u)
  EndIf
  
  For i=1 To 8
    Debug Str(carte(i+u*8))+" : "+Str(points(i+u*8))
  Next
  Debug"---"
Next

;;;;;;;;;;;;;;;
Debug "=== Exemple de carte ==="
carte=Random(31)+1
Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)
Debug Str(carte(carte))+" : "+Str(points(carte))
Debug "-"
Debug " "
Debug " "
;;;;;;;;;;;;;;;

For i=1 To 32
carte_melange(i)=i  
Next

For i=1 To 32
Swap carte_melange(i),carte_melange(Random(31)+1)  
Next

For i=1 To 3
;Debug carte_melange(i)  
Next
;;End:End

;;;;;;;;;;;;;;;
Debug "=== Liste des cartes mélangées ==="
For i=1 To 32
Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
; Debug "-"
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Début d'un code de jeu de belote

Message par threedslider »

Hello SPH

Sympa ton jeu et hâte de voir la suite de ta progression :D

Garde bien et bon courage :wink:
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

threedslider a écrit : ven. 27/juin/2025 18:01 Hello SPH

Sympa ton jeu et hâte de voir la suite de ta progression :D

Garde bien et bon courage :wink:
Merci

Le plus dur sera l'IA des 3 autres joueurs. Mais j'ai confiance : je suis plus intelligent qu'il y a 15 ans. :D

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;

Global Dim carte.w(32)
Global Dim carte_melange.w(32)
Global Dim carte_coupe.w(32)
Global Dim Points.w(32)
Global Dim carte$(3)
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

Global atout=Random(3) ;;; (de -1 à 3)

Procedure creation_cartes()
  For i=1 To 4
    For u=0 To 3
      carte(i+u*8)=i+6
    Next
    For u=0 To 3
      carte(i+4+u*8)=i
    Next
  Next
EndProcedure
creation_cartes()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;
Procedure les_points()
  For u=0 To 3
    For i=1 To 3
      points(i+u*8)=0
    Next
    points(4+u*8)=10
    points(5+u*8)=11
    points(6+u*8)=2
    points(7+u*8)=3
    points(8+u*8)=4
    
    If atout=u
      Points(3+u*8)=14
      Points(6+u*8)=20
    EndIf
    
  Next
EndProcedure
les_points()

For u=0 To 3
  If atout=u
    Debug carte$(u)+" (atout)"    
  Else
    Debug carte$(u)
  EndIf
  
  For i=1 To 8
    Debug Str(carte(i+u*8))+" : "+Str(points(i+u*8))
  Next
  Debug"---"
Next

;;;;;;;;;;;;;;;
Debug "=== Exemple de carte ==="
carte=Random(31)+1
Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)
Debug Str(carte(carte))+" : "+Str(points(carte))
Debug "-"
Debug " "
Debug " "
;;;;;;;;;;;;;;;

Procedure melange_cartes()
  For i=1 To 32
    carte_melange(i)=i  
  Next
  For i=1 To 32
    Swap carte_melange(i),carte_melange(Random(31)+1)  
  Next
EndProcedure
melange_cartes()


For i=1 To 3
  ; Debug carte_melange(i)  
Next
;;End:End

;;;;;;;;;;;;;;;
Debug "=== Liste des cartes mélangées ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
  ; Debug "-"
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
Procedure coupe_cartes()
  coupe=5+Random(22)
  For i=1 To 32
    carte_coupe(i)=carte_melange(coupe)
    coupe+1
    If coupe=33
      coupe=1
    EndIf  
  Next
  For i=1 To 32
    carte_melange(i)=carte_coupe(i)
  Next
EndProcedure
coupe_cartes()


;;;;;;;;;;;;;;;
Debug "=== Liste des cartes coupées ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
  ; Debug "-"
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;

atout=Random(3) ;;; (de -1 à 3)
les_points()

;;;;;;;;;;;;;;;
Debug "=== Changement de points ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
  ; Debug "-"
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;



!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

Je suis content de moi.
Voici où j'en suis :

Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;

Global Dim carte.w(32)
Global Dim carte_melange.w(32)
Global Dim carte_coupe.w(32)
Global Dim Points.w(32)
Global Dim carte$(3)
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

Global atout=Random(3) ;;; (de -1 à 3)
atout=-1

Procedure creation_cartes()
  For i=1 To 4
    For u=0 To 3
      carte(i+u*8)=i+6
    Next
    For u=0 To 3
      carte(i+4+u*8)=i
    Next
  Next
EndProcedure
creation_cartes() ;;; crée un jeu de cartes
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;
Procedure les_points()
  For u=0 To 3
    For i=1 To 3
      points(i+u*8)=0
    Next
    points(4+u*8)=10
    points(5+u*8)=11
    points(6+u*8)=2
    points(7+u*8)=3
    points(8+u*8)=4
    
    If atout=u
      Points(3+u*8)=14
      Points(6+u*8)=20
    EndIf
    
  Next
EndProcedure
les_points() ;;; attribut les points selon l'atout

For u=0 To 3
  If atout=u
    Debug carte$(u)+" (atout)"    
  Else
    Debug carte$(u)
  EndIf
  
  For i=1 To 8
    Debug Str(carte(i+u*8))+" : "+Str(points(i+u*8))
  Next
  Debug"---"
Next

;;;;;;;;;;;;;;;
Debug "=== Exemple de carte ==="
carte=Random(31)+1
Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)
Debug Str(carte(carte))+" : "+Str(points(carte))
Debug "-"
Debug " "
Debug " "
;;;;;;;;;;;;;;;

Procedure melange_cartes()
  For i=1 To 32
    carte_melange(i)=i  
  Next
  For i=1 To 32
    Swap carte_melange(i),carte_melange(Random(31)+1)  
  Next
EndProcedure
melange_cartes() ;;; melange


; For i=1 To 3
; Debug carte_melange(i)  
; Next
;;End:End

;;;;;;;;;;;;;;;
Debug "=== Liste des cartes mélangées ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
  ; Debug "-"
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
Procedure coupe_cartes()
  coupe=6+Random(20)
  For i=1 To 32
    carte_coupe(i)=carte_melange(coupe)
    coupe+1
    If coupe=33
      coupe=1
    EndIf  
  Next
  For i=1 To 32
    carte_melange(i)=carte_coupe(i)
  Next
EndProcedure
coupe_cartes() ;;; coupe


;;;;;;;;;;;;;;;
Debug "=== Liste des cartes coupées ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
  ; Debug "-"
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
; 
; atout=Random(3) ;;; (de -1 à 3)
; les_points()
; ; 
; ;;;;;;;;;;;;;;;
; Debug "=== Changement de points ==="
; For i=1 To 32
;   Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
;   ; Debug "-"
; Next
; 
; Debug " "
; Debug " "
;;;;;;;;;;;;;;;

Dim joueur.w(3,7)
donneur=Random(3)

receveur=donneur+1
receveur%4

carte_propose=-1

;;;;;;;;;;;;;;;;  distribution des cartes
la=1
For u=0 To 3
  For i=0 To 2
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next
;;;
For u=0 To 3
  For i=3 To 4
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next

Debug "***"
Debug "le donneur est le joueur "+Str(donneur+1)
Debug "*"

receveur=donneur+1
receveur%4

For u=0 To 3
  Debug "Joueur "+Str(receveur+1)
  Debug joueur(receveur,0)
  Debug joueur(receveur,1)
  Debug joueur(receveur,2)
  Debug joueur(receveur,3)
  Debug joueur(receveur,4)
  Debug ""
  receveur+1
  receveur%4
Next

Debug "-"
carte_propose=carte_melange(la)
Debug "Carte proposée : "+Str(carte_propose)
Debug "---"
Debug "-"

joueur_prise=Random(3)

For i=0 To 3
  If joueur_prise=i
    Debug "Le joueur "+Str(receveur+1)+" prend"
    Break
  Else
    Debug "Le joueur "+Str(receveur+1)+" passe..."
  EndIf
  receveur+1
  receveur%4
Next

Debug "---"
Debug "Distribution du reste des cartes :"
Debug "A suivre..."
La distribution des cartes est presque achevée. Et l'IA n'est pas du tout codé pour le moment (mais ça va venir) :wink:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

Voilà !
La partie "distribution des cartes" est finie.
J'ai maintenant 2 IA a faire :
- une, pour décider de prendre ou non la carte retournée (c'est facile)
- une, pour jouer les bonnes cartes durant la partie (c'est un peu complexe)

Et bien sûr, quand tout sera fini au niveau du calcul, il faudra faire la partie graphique...


Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;

Global Dim carte.w(32)
Global Dim carte_melange.w(32)
Global Dim carte_coupe.w(32)
Global Dim Points.w(32)
Global Dim carte$(3)
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

Global atout=Random(3) ;;; (de -1 à 3)
atout=-1

Procedure creation_cartes()
  For i=1 To 4
    For u=0 To 3
      carte(i+u*8)=i+6
    Next
    For u=0 To 3
      carte(i+4+u*8)=i
    Next
  Next
EndProcedure
creation_cartes() ;;; crée un jeu de cartes
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;
Procedure les_points()
  For u=0 To 3
    For i=1 To 3
      points(i+u*8)=0
    Next
    points(4+u*8)=10
    points(5+u*8)=11
    points(6+u*8)=2
    points(7+u*8)=3
    points(8+u*8)=4
    
    If atout=u
      Points(3+u*8)=14
      Points(6+u*8)=20
    EndIf
    
  Next
EndProcedure
les_points() ;;; attribut les points selon l'atout

For u=0 To 3
  If atout=u
    Debug carte$(u)+" (atout)"    
  Else
    Debug carte$(u)
  EndIf
  
  For i=1 To 8
    Debug Str(carte(i+u*8))+" : "+Str(points(i+u*8))
  Next
  Debug"---"
Next

;;;;;;;;;;;;;;;
Debug "=== Exemple de carte ==="
carte=Random(31)+1
Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)
Debug Str(carte(carte))+" : "+Str(points(carte))
Debug "-"
Debug " "
Debug " "
;;;;;;;;;;;;;;;

Procedure melange_cartes()
  For i=1 To 32
    carte_melange(i)=i  
  Next
  For i=1 To 32
    Swap carte_melange(i),carte_melange(Random(31)+1)  
  Next
EndProcedure
melange_cartes() ;;; melange


; For i=1 To 3
; Debug carte_melange(i)  
; Next
;;End:End

;;;;;;;;;;;;;;;
Debug "=== Liste des cartes mélangées ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
Procedure coupe_cartes()
  coupe=6+Random(20)
  For i=1 To 32
    carte_coupe(i)=carte_melange(coupe)
    coupe+1
    If coupe=33
      coupe=1
    EndIf  
  Next
  For i=1 To 32
    carte_melange(i)=carte_coupe(i)
  Next
EndProcedure
coupe_cartes() ;;; coupe


;;;;;;;;;;;;;;;
Debug "=== Liste des cartes coupées ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
; 

Dim joueur.w(3,7)
donneur=Random(3)

receveur=donneur+1
receveur%4

carte_propose=-1

;;;;;;;;;;;;;;;;  distribution des cartes
la=1
For u=0 To 3
  For i=0 To 2
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next
;;;
For u=0 To 3
  For i=3 To 4
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next

Debug "***"
Debug "le donneur est le joueur "+Str(donneur+1)
Debug "*"

receveur=donneur+1
receveur%4

For u=0 To 3
  Debug "Joueur "+Str(receveur+1)
  Debug joueur(receveur,0)
  Debug joueur(receveur,1)
  Debug joueur(receveur,2)
  Debug joueur(receveur,3)
  Debug joueur(receveur,4)
  Debug ""
  receveur+1
  receveur%4
Next

Debug "-"
carte_propose=carte_melange(la)
Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))

Debug "---"
Debug "-"

joueur_prise=1;-joueur_prise=
joueur_prise=Random(3)

receveur=donneur+1
receveur%4

For i=0 To 3
  If joueur_prise=receveur
    Debug "Le joueur "+Str(receveur+1)+" prend"
    Break
  Else
    Debug "Le joueur "+Str(receveur+1)+" passe..."
  EndIf
  receveur+1
  receveur%4
Next

Debug "---"
Debug "Distribution du reste des cartes :"
;Debug "A suivre..."

receveur=donneur+1
receveur%4

; Debug "(Le joueur "+Str(receveur+1)+" reçois les 3 prochaines cartes)"
Debug "-"

; Dim joueur.w(3,7)
; donneur=Random(3)
; joueur_prise=Random(3)

Debug "================"
Debug "donneur = joueur "+Str(donneur+1)
Debug "joueur_prise = joueur "+Str(joueur_prise+1)
Debug "================"
la+1
flag.b=0


For u=0 To 3
  For i=5 To 7
    If joueur_prise=receveur And flag=0
      flag=1
      joueur(receveur,i)=carte_propose
    Else
      joueur(receveur,i)=carte_melange(la)
      la+1
    EndIf
  Next
  receveur+1
  receveur%4
Next

Debug "***"

receveur=donneur+1
receveur%4

atout=(carte_propose-1)/8
les_points()

For u=0 To 3
  Debug "Joueur "+Str(receveur+1)
  For i=0 To 7
    ii= joueur(receveur,i)
    If (ii-1)/8 = atout
      a$="  -  Atout"
    Else
      a$=""
    EndIf
    
    Debug "carte("+Str(ii)+") "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+a$
  Next
  Debug ""
  receveur+1
  receveur%4
Next


atout=Random(3) ;;; (de -1 à 3)
les_points()

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Début d'un code de jeu de belote

Message par venom »

Pas testé mais je vois que ça boss malgré la chaleur 8) Sph a encore abusé de la monster :lol:

Bonne continuation






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

L'IA de la décision de prendre ou non est codée :

Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;
;RandomSeed(Random(2))

Global Dim carte.w(32)
Global Dim carte_melange.w(32)
Global Dim carte_coupe.w(32)
Global Dim Points.w(32)
Global Dim carte$(3)
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

Global atout=Random(3) ;;; (de -1 à 3)
atout=-1 

Procedure creation_cartes()
  For i=1 To 4
    For u=0 To 3
      carte(i+u*8)=i+6
    Next
    For u=0 To 3
      carte(i+4+u*8)=i
    Next
  Next
EndProcedure
creation_cartes() ;;; crée un jeu de cartes
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;
Procedure les_points()
  For u=0 To 3
    For i=1 To 3
      points(i+u*8)=0
    Next
    points(4+u*8)=10
    points(5+u*8)=11
    points(6+u*8)=2
    points(7+u*8)=3
    points(8+u*8)=4
    
    If atout=u
      Points(3+u*8)=14
      Points(6+u*8)=20
    EndIf
    
  Next
EndProcedure
les_points() ;;; attribut les points selon l'atout

For u=0 To 3
  If atout=u
    Debug carte$(u)+" (atout)"    
  Else
    Debug carte$(u)
  EndIf
  
  For i=1 To 8
    Debug Str(carte(i+u*8))+" : "+Str(points(i+u*8))+" pts"
  Next
  Debug"---"
Next

;;;;;;;;;;;;;;;
Debug "=== Exemple de carte ==="
carte=Random(31)+1
Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)+" - "+Str(carte(carte))+" : "+Str(points(carte))+" pts"
Debug "-"
Debug " "
Debug " "
;;;;;;;;;;;;;;;

Procedure melange_cartes()
  For i=1 To 32
    carte_melange(i)=i  
  Next
  For i=1 To 32
    Swap carte_melange(i),carte_melange(Random(31)+1)  
  Next
EndProcedure
melange_cartes() ;;; melange


; For i=1 To 3
; Debug carte_melange(i)  
; Next
;;End:End

;;;;;;;;;;;;;;;
Debug "=== Liste des cartes mélangées ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
Procedure coupe_cartes()
  coupe=6+Random(20)
  ;  coupe=12 ;- TRIIICHE
  For i=1 To 32
    carte_coupe(i)=carte_melange(coupe)
    coupe+1
    If coupe=33
      coupe=1
    EndIf  
  Next
  For i=1 To 32
    carte_melange(i)=carte_coupe(i)
  Next
EndProcedure
coupe_cartes() ;;; coupe


;;;;;;;;;;;;;;;
Debug "=== Liste des cartes coupées ==="
For i=1 To 32
  If i=21
    Debug ">>carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
  Else
    Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
  EndIf
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
; 
Dim joueur.w(3,7)
donneur=Random(3)

receveur=donneur+1
receveur%4

carte_propose=-1

;;;;;;;;;;;;;;;;  distribution des cartes
la=1
For u=0 To 3
  For i=0 To 2
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next
;;;
For u=0 To 3
  For i=3 To 4
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next

Debug "***"
Debug "le donneur est le joueur "+Str(donneur+1)
Debug "*"

receveur=donneur+1
receveur%4

For u=0 To 3
  Debug "Joueur "+Str(receveur+1)
  For i=0 To 4
    i2=joueur(receveur,i)
    Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
    
    
  Next
  Debug ""
  receveur+1
  receveur%4
Next

Debug "-"
carte_propose=carte_melange(21)
;carte_propose=28 ;- TRIIICHE, A supprimer apres tests

Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
atout=(carte_propose-1)/8
les_points()

Debug "atout : "+carte$(atout)

;End:End

Debug "---"
Debug "-"

;joueur_prise=1;-joueur_prise=
;joueur_prise=Random(3)

receveur=donneur+1 ;- TRIIICHE, A supprimer apres tests
receveur%4

;joueur(receveur,2)=30 ;- TRIIICHE, A supprimer apres tests

;Debug "receveur pure : "+Str(receveur)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-;;;;;;;;;;;Debut;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

For tour1=0 To 3
  ;- IA_Choice ;       ###########
  
  nb_atout=0
  nb_points=0
  nb_points_other=0
  vingt=0
  quatorze=0
  IA_Choice=0
  belote_rebelote=0
  niveau_du_joueur=130 ;-(100(joueur laxiste) à 300(joueur strict))
  
  Debug "Joueur "+Str(receveur+1)
  
  Debug ":"
  
  
  ;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  
  For i=-1 To 4
    If i=-1
      ii=carte_propose
    Else
      ii=joueur(receveur,i)
    EndIf
    
    If (ii-1)/8=atout
      ;Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
      Debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
      nb_atout+1
      nb_points+points(ii)
      If points(ii)=20
        vingt=1
      EndIf
      If points(ii)=14
        quatorze=1
      EndIf
      If points(ii)=3 Or points(ii)=4
        belote_rebelote+1
      EndIf
      
    Else
      ;nb_points_other+points(carte_melange(ii))
      nb_points_other+points(ii)
      If points(ii)=11
        nb_points_other+25
        Debug "As détecté"  
      EndIf
      
      ;Debug "points_other :"+Str(points(carte_melange(ii)))
    EndIf
    
  Next
  
  
  Debug "nb_atout : "+Str(nb_atout)
  Debug "nb_points : "+Str(nb_points)
  Debug "nb_points_other : "+Str(nb_points_other)
  
  Debug "vingt : "+Str(vingt)
  Debug "quatorze : "+Str(quatorze)
  
  If vingt+quatorze=2
    IA_Choice=100
  ElseIf vingt+quatorze=1
    If vingt=1
      IA_Choice=80
    Else
      IA_Choice=40
    EndIf
  EndIf
  IA_Choice+Pow(3,(nb_atout-vingt-quatorze))
  Debug "Pow(3) = "+Str(Pow(3,(nb_atout-vingt-quatorze)))
  IA_Choice+nb_points
  IA_Choice+nb_points_other
  If belote_rebelote=2
    Debug "Belote+Rebelote"
    IA_Choice+20
  EndIf
  
  Debug "IA = "+Str(IA_Choice)+" pts"
  
  
  ; End:End
  
  
  
  If IA_Choice>=niveau_du_joueur
    Debug "Le joueur "+Str(receveur+1)+" peux tout à fait prendre !!!"
    joueur_prise=receveur
    ;Break
  Else
    Debug "Le joueur "+Str(receveur+1)+" passe..."
  EndIf
  receveur+1
  receveur%4
  Debug"="
  Debug"="
  
Next tour1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Debug ""
Debug "Fin de l'IA"
Debug "-----"


; End:End




Debug "---"
Debug "Distribution du reste des cartes :"
;Debug "A suivre..."

receveur=donneur+1
receveur%4

; Debug "(Le joueur "+Str(receveur+1)+" reçois les 3 prochaines cartes)"
Debug "-"

; Dim joueur.w(3,7)
; joueur_prise=Random(3)

Debug "================"
Debug "donneur = joueur "+Str(donneur+1)
Debug "joueur_prise = joueur "+Str(joueur_prise+1)
Debug "================"
la+1
flag.b=0


For u=0 To 3
  For i=5 To 7
    If joueur_prise=receveur And flag=0
      flag=1
      joueur(receveur,i)=carte_propose
    Else
      joueur(receveur,i)=carte_melange(la)
      la+1
    EndIf
  Next
  receveur+1
  receveur%4
Next

Debug "***"

receveur=donneur+1
receveur%4

atout=(carte_propose-1)/8
les_points()

For u=0 To 3
  Debug "Joueur "+Str(receveur+1)
  For i=0 To 7
    ii= joueur(receveur,i)
    If (ii-1)/8 = atout
      a$="  -  Atout"
    Else
      a$=""
    EndIf
    
    Debug "carte("+Str(ii)+") "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+a$
  Next
  Debug ""
  receveur+1
  receveur%4
Next


atout=Random(3) ;;; (de -1 à 3)
les_points()

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Début d'un code de jeu de belote

Message par threedslider »

RE Hello SPH !

Je vois que tu avances et tant mieux pour toi pour ta progression :wink:

Par contre je l'ai pas testé récemment donc je verrais ça bientôt :mrgreen:

Bon courage !
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

threedslider a écrit : lun. 30/juin/2025 20:34 RE Hello SPH !

Je vois que tu avances et tant mieux pour toi pour ta progression :wink:

Par contre je l'ai pas testé récemment donc je verrais ça bientôt :mrgreen:

Bon courage !
Merci pour tes encouragements. :idea:

Quand tu le testeras, tout sera dans le debuggeur. Il n'y a actuellement aucun graphismes. Tout est actuellement dans les calculs... :wink:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Début d'un code de jeu de belote

Message par threedslider »

Okay ! Bah c'est déjà pas mal !
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

Voila : l'IA des 2 tours est faite.
Je met le code ici mais ça deviens imbuvable. Beaucoup d'info dans le debuggeur que moi seul peux comprendre.
Ce code n'est pas très utile pour le commun des mortels.

Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;
;RandomSeed(Random(2))

Global Dim carte.w(32)
Global Dim carte_melange.w(32)
Global Dim carte_coupe.w(32)
Global Dim Points.w(32)
Global Dim carte$(3)
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

Global atout=Random(3) ;;; (de -1 à 3)
atout=-1 

Procedure creation_cartes()
  For i=1 To 4
    For u=0 To 3
      carte(i+u*8)=i+6
    Next
    For u=0 To 3
      carte(i+4+u*8)=i
    Next
  Next
EndProcedure
creation_cartes() ;;; crée un jeu de cartes
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;
Procedure les_points()
  For u=0 To 3
    For i=1 To 3
      points(i+u*8)=0
    Next
    points(4+u*8)=10
    points(5+u*8)=11
    points(6+u*8)=2
    points(7+u*8)=3
    points(8+u*8)=4
    
    If atout=u
      Points(3+u*8)=14
      Points(6+u*8)=20
    EndIf
    
  Next
EndProcedure
les_points() ;;; attribut les points selon l'atout

For u=0 To 3
  If atout=u
    Debug carte$(u)+" (atout)"    
  Else
    Debug carte$(u)
  EndIf
  
  For i=1 To 8
    Debug Str(carte(i+u*8))+" : "+Str(points(i+u*8))+" pts"
  Next
  Debug"---"
Next

;;;;;;;;;;;;;;;
Debug "=== Exemple de carte ==="
carte=Random(31)+1
Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)+" - "+Str(carte(carte))+" : "+Str(points(carte))+" pts"
Debug "-"
Debug " "
Debug " "
;;;;;;;;;;;;;;;

Procedure melange_cartes()
  For i=1 To 32
    carte_melange(i)=i  
  Next
  For i=1 To 32
    ;Swap carte_melange(i),carte_melange(Random(31)+1)  
  Next
EndProcedure
melange_cartes() ;;; melange


; For i=1 To 3
; Debug carte_melange(i)  
; Next
;;End:End

;;;;;;;;;;;;;;;
Debug "=== Liste des cartes mélangées ==="
For i=1 To 32
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
Procedure coupe_cartes()
  coupe=6+Random(20)
  coupe=22 ;- TRIIICHE
  For i=1 To 32
    carte_coupe(i)=carte_melange(coupe)
    coupe+1
    If coupe=33
      coupe=1
    EndIf  
  Next
  For i=1 To 32
    carte_melange(i)=carte_coupe(i)
  Next
EndProcedure
coupe_cartes() ;;; coupe


;;;;;;;;;;;;;;;
Debug "=== Liste des cartes coupées ==="
For i=1 To 32
  If i=21
    Debug ">>carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
  Else
    Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
  EndIf
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
; 
Dim joueur.w(3,7)
donneur=Random(3)

receveur=donneur+1
receveur%4

carte_propose=-1

;;;;;;;;;;;;;;;;  distribution des cartes
la=1
For u=0 To 3
  For i=0 To 2
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next
;;;
For u=0 To 3
  For i=3 To 4
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next

Debug "***"
Debug "le donneur est le joueur "+Str(donneur+1)
Debug "*"

receveur=donneur+1
receveur%4

For u=0 To 3
  Debug "Joueur "+Str(receveur+1)
  For i=0 To 4
    i2=joueur(receveur,i)
    Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
    
    
  Next
  Debug ""
  receveur+1
  receveur%4
Next

Debug "-"
carte_propose=carte_melange(21)
;carte_propose=28 ;- TRIIICHE, A supprimer apres tests

Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
atout=(carte_propose-1)/8
les_points()

Debug "atout : "+carte$(atout)


Debug "---"
Debug "-"

receveur=donneur+1
receveur%4

;joueur(receveur,2)=30 ;- TRIIICHE, A supprimer apres tests

;Debug "receveur pure : "+Str(receveur)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-;;;;;;;;;;;Debut;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Debug "==============="
Debug "Tour 1"
Debug "Début de l'IA"
Debug "-"

For tour1=0 To 3
  ;- IA_Choice ;       ###########
  
  nb_atout=0
  nb_points=0
  nb_points_other=0
  vingt=0
  quatorze=0
  IA_Choice=0
  belote_rebelote=0
  niveau_du_joueur=250 ;-(100(joueur laxiste) à 300(joueur exigent))
  
  Debug "Joueur "+Str(receveur+1)
  
  Debug ":"
  
  
  ;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  
  For i=-1 To 4
    If i=-1
      ii=carte_propose
    Else
      ii=joueur(receveur,i)
    EndIf
    
    If (ii-1)/8=atout
      ;Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
      Debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
      nb_atout+1
      nb_points+points(ii)
      If points(ii)=20
        vingt=1
      EndIf
      If points(ii)=14
        quatorze=1
      EndIf
      If points(ii)=3 Or points(ii)=4
        belote_rebelote+1
      EndIf
      
    Else
      ;nb_points_other+points(carte_melange(ii))
      nb_points_other+points(ii)
      If points(ii)=11
        nb_points_other+12
        Debug "As détecté"  
      EndIf
      
      ;Debug "points_other :"+Str(points(carte_melange(ii)))
    EndIf
    
  Next
  
  
  Debug "nb_atout : "+Str(nb_atout)
  Debug "nb_points : "+Str(nb_points)
  Debug "nb_points_other : "+Str(nb_points_other)
  
  Debug "vingt : "+Str(vingt)
  Debug "quatorze : "+Str(quatorze)
  
  If vingt+quatorze=2
    IA_Choice=100
  ElseIf vingt+quatorze=1
    If vingt=1
      IA_Choice=60
    Else
      IA_Choice=30
    EndIf
  EndIf
  IA_Choice+Pow(3,(nb_atout-vingt-quatorze))
  Debug "Pow(3) = "+Str(Pow(3,(nb_atout-vingt-quatorze)))
  IA_Choice+nb_points
  IA_Choice+nb_points_other
  If belote_rebelote=2
    Debug "Belote+Rebelote"
    IA_Choice+20
  EndIf
  If nb_atout=1
    IA_Choice-20
  EndIf
  
  Debug "IA = "+Str(IA_Choice)+" pts"
  
  
  ; End:End
  
  
  
  If IA_Choice>=niveau_du_joueur
    Debug "Le joueur "+Str(receveur+1)+" peux tout à fait prendre !!!"
    joueur_prise=receveur
    Goto joueur_ok
  Else
    Debug "Le joueur "+Str(receveur+1)+" passe..."
  EndIf
  receveur+1
  receveur%4
  Debug"="
  Debug"="
  
Next tour1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Debug ""
Debug "Fin de l'IA"
Debug "-----"
Debug "-"

Debug "---"
For i=1 To 10
  Debug "========================="
Next
Debug "-"

receveur=donneur+1
receveur%4

Dim reste_atout(2) ;-reste_atout(2)
u=0
For i=0 To 2
  If u=atout
    u+1
  EndIf
  reste_atout(i)=u
  u+1
Next

Debug "==============="
Debug "Tour 2"
Debug "Début de l'IA"
Debug "-"


Debug "Atout épuisé : "+carte$(atout)
Debug ""

  Debug "Joueur "+Str(receveur+1)
  For i=0 To 4
    i2=joueur(receveur,i)
    Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
  Next
  
  Debug ""
  Debug "            ###"
  Debug "            ###"
  Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
  atout=(carte_propose-1)/8
  ;les_points()
  Debug "            ###"
  Debug "            ###"
  Debug ""
  
  Dim choix(3)
  
  
  For tour2=0 To 3 ;- tour2
  
  Debug "Joueur "+Str(receveur+1)
  Dim mes_atouts(3)
  
  For atout2=0 To 2
  nb_atout=0
  IA_Choice=0
  nb_points=0
  nb_points_other=0
  vingt=0
  quatorze=0
  belote_rebelote=0
    
  For i3=-1 To 4
    If i3=-1
      ii=carte_propose
    Else
      ii=joueur(receveur,i3)
    EndIf
    
    
        ;Debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
        ;End:End
        
    atout=reste_atout(atout2)
    les_points()
    Debug "..."
    Debug "## atout = "+Str(atout)
    
    
    Debug "~Carte~ : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
        
      If (ii-1)/8=atout;reste_atout(atout2)
        ;Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
        ;Debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
        Debug "Atout détecté"
        nb_atout+1
        nb_points+points(ii)
        If points(ii)=20
          vingt=1
        EndIf
        If points(ii)=14
          quatorze=1
        EndIf
        If points(ii)=3 Or points(ii)=4
          belote_rebelote+1
        EndIf
        
      Else
        ;nb_points_other+points(carte_melange(ii))
        nb_points_other+points(ii)
        If points(ii)=11
          nb_points_other+12
          Debug "As détecté"  
        EndIf
        
        ;Debug "points_other :"+Str(points(carte_melange(ii)))
      EndIf
      
      
      ;;;;;;;;;;
        
  Debug "nb_atout : "+Str(nb_atout)
  Debug "nb_points : "+Str(nb_points)
  Debug "nb_points_other : "+Str(nb_points_other)
  
  Debug "vingt : "+Str(vingt)
  Debug "quatorze : "+Str(quatorze)
  
Next i3


;;;;;;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;;;;

  If vingt+quatorze=2
    IA_Choice+100
  ElseIf vingt+quatorze=1
    If vingt=1
      IA_Choice+60
    Else
      IA_Choice+30
    EndIf
  EndIf
  IA_Choice+Pow(3,(nb_atout-vingt-quatorze))
  Debug "Pow(3) = "+Str(Pow(3,(nb_atout-vingt-quatorze)))
  IA_Choice+nb_points
  IA_Choice+nb_points_other
  If belote_rebelote=2
    Debug "Belote+Rebelote = 20 pts"
    IA_Choice+20
  EndIf
  If nb_atout=1
    Debug "Un seul atout = -20 pts"
    IA_Choice-20
  EndIf
  Debug "IA = "+Str(IA_Choice)+" pts"
  
 ;;;;;;;;;;
      
Debug "-"  

choix(atout)=IA_Choice


;End:End

  Debug"="
  Debug"="
  
Next atout2

Debug "Résumé :"

For i=0 To 2
  Debug "atout : "+Str(reste_atout(i))+"   ---   "+Str(choix(reste_atout(i)))+" pts"
Next

Debug"="
Debug "^^^^ "
Debug "^^^^ "
Debug"="

; End:End

  receveur+1
  receveur%4

  Debug"----       TOUR2 = "+Str(tour2)
  
;   For i=0 To 3
;     Debug Str(mes_atouts(i))+" "+ carte$(i)
;     For u=0 To 4
;       Debug "^"
;     Next
;     
;   Next
  
  Debug "//"
  Debug "//"
  Debug "//"
  Debug "//"
  Debug "//"
  
  
Next tour2

Debug ""
Debug "Fin de l'IA"
Debug "-----"
Debug "-"


End:End



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

joueur_ok:

Debug "---"
Debug "Distribution du reste des cartes :"
;Debug "A suivre..."

receveur=donneur+1
receveur%4

; Debug "(Le joueur "+Str(receveur+1)+" reçois les 3 prochaines cartes)"
Debug "-"

; Dim joueur.w(3,7)
; joueur_prise=Random(3)

Debug "================"
Debug "donneur = joueur "+Str(donneur+1)
Debug "joueur_prise = joueur "+Str(joueur_prise+1)
Debug "================"
la+1
flag.b=0


For u=0 To 3
  For i=5 To 7
    If joueur_prise=receveur And flag=0
      flag=1
      joueur(receveur,i)=carte_propose
    Else
      joueur(receveur,i)=carte_melange(la)
      la+1
    EndIf
  Next
  receveur+1
  receveur%4
Next

Debug "***"

receveur=donneur+1
receveur%4

atout=(carte_propose-1)/8
les_points()

For u=0 To 3
  Debug "Joueur "+Str(receveur+1)
  For i=0 To 7
    ii= joueur(receveur,i)
    If (ii-1)/8 = atout
      a$="  -  Atout"
    Else
      a$=""
    EndIf
    
    Debug "carte("+Str(ii)+") "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+a$
  Next
  Debug ""
  receveur+1
  receveur%4
Next


atout=Random(3) ;;; (de -1 à 3)
les_points()


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

L'IA des choix des meilleures cartes est faite.
Je poste juste pour ceux qui sont curieux :

Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;
;RandomSeed(10)

Global Dim carte.w(32)
Global Dim carte_melange.w(32)
Global Dim carte_coupe.w(32)
Global Dim Points.w(32)
;Global Dim swap2.w(32)
Global Dim carte$(3)
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

Global atout=Random(3) ;;; (de -1 à 3)
atout=-1 

Procedure creation_cartes()
  For i=1 To 4
    For u=0 To 3
      carte(i+u*8)=i+6
    Next
    For u=0 To 3
      carte(i+4+u*8)=i
    Next
  Next
EndProcedure
creation_cartes() ;;; crée un jeu de cartes
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;
Procedure les_points()
  For u=0 To 3
    For i=1 To 3
      points(i+u*8)=0
    Next
    points(4+u*8)=10
    points(5+u*8)=11
    points(6+u*8)=2
    points(7+u*8)=3
    points(8+u*8)=4
    
    If atout=u
      Points(3+u*8)=14
      Points(6+u*8)=20
    EndIf
    
  Next
EndProcedure
les_points() ;;; attribut les points selon l'atout

For u=0 To 3*-1
  If atout=u
    Debug carte$(u)+" (atout)"    
  Else
    Debug carte$(u)
  EndIf
  
  For i=1 To 8
    Debug Str(carte(i+u*8))+" : "+Str(points(i+u*8))+" pts"
  Next
  Debug"---"
Next

;;;;;;;;;;;;;;;
Debug "=== Exemple de carte ==="
carte=Random(31)+1
Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)+" - "+Str(carte(carte))+" : "+Str(points(carte))+" pts"
Debug "-"
Debug " "
Debug " "
;;;;;;;;;;;;;;;

Procedure melange_cartes()
  For i=1 To 32
    carte_melange(i)=i  
  Next
  For i=1 To 32
    u=Random(31)+1  
    Swap carte_melange(i),carte_melange(u)
  Next
  ;   For i=1 To 32
  ;     swap2(i)=carte_melange(i)
  ;   Next
EndProcedure
melange_cartes() ;;; melange


; For i=1 To 3
; Debug carte_melange(i)  
; Next
;;End:End

;;;;;;;;;;;;;;;
Debug "=== Liste des cartes mélangées ==="
For i=1 To 32*0
  Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
Next
; End:End

Debug " "
Debug " "
;;;;;;;;;;;;;;;
Procedure coupe_cartes()
  coupe=6+Random(20)
  ;  coupe=20 ;- TRIIICHE
  For i=1 To 32
    carte_coupe(i)=carte_melange(coupe)
    coupe+1
    If coupe=33
      coupe=1
    EndIf  
  Next
  For i=1 To 32
    carte_melange(i)=carte_coupe(i)
  Next
EndProcedure
coupe_cartes() ;;; coupe


;;;;;;;;;;;;;;;
Debug "=== Liste des cartes coupées ==="
For i=1 To 32*0
  If i=21
    Debug ">>carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
  Else
    Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
  EndIf
Next

Debug " "
Debug " "
;;;;;;;;;;;;;;;
;
donneur=3;- Random(3)




boucle=0
;- BOUCLE ####

boucle:

coupe_cartes() ;;; coupe

donneur+1
donneur%4


Dim joueur.w(3,7)

receveur=donneur+1
receveur%4

carte_propose=-1

;;;;;;;;;;;;;;;;  distribution des cartes
la=1
For u=0 To 3
  For i=0 To 2
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next
;;;
For u=0 To 3
  For i=3 To 4
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next

For u=0 To 3
  For i1=0 To 4
    For i2=0 To 4
      If i1<>i2
        If joueur(u,i1)<joueur(u,i2)
          Swap joueur(u,i1),joueur(u,i2)
        EndIf
      EndIf
    Next
  Next
Next


Debug "***"
Debug "le donneur est le joueur "+Str(donneur+1)
Debug "*"

If boucle=1
  Debug "Boucle = "+Str(boucle)
  End:End
EndIf


receveur=donneur+1
receveur%4

atout=(carte_melange(21)-1)/8
les_points()
;###################### choix de l'atout (la carte 21)
carte_propose=carte_melange(21)
Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
Debug "atout : "+carte$(atout)
Debug "---"
Debug "-"



For U10=0 To 3
  Debug "Joueur "+Str(receveur+1)
  For i=0 To 4
    i2=joueur(receveur,i)
    Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
  Next
  
  Debug "==="
  Debug ""
  
  For signe=0 To 3
    For i4=0 To 4
      i2=joueur(receveur,i4)
      signe1=(i2-1)/8
      For i5=i4 To 4 ;i4 au lieu de 0
        i3=joueur(receveur,i5)
        signe2=(i3-1)/8
        
        If i4<>i5
          If signe1=signe2 And signe1=signe
            If points(i2)<points(i3)
              Debug "Les 2 cartes ===" ;-Les 2 cartes ==="
              carte=joueur(receveur,i4)
              Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)+" - "+Str(carte(carte))+" : "+Str(points(carte))+" pts"
              carte=joueur(receveur,i5)
              Debug "carte("+Str(carte)+") "+carte$((carte-1)/8)+" - "+Str(carte(carte))+" : "+Str(points(carte))+" pts"
              ;               Debug ""
              ;               Debug "Résumé :"
              ;               
              ;               Debug "Joueur "+Str(receveur+1)
              ;               For i=0 To 4
              ;                 i2=joueur(receveur,i)
              ;                 Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
              ;               Next
              Debug "~ swap ~"
              
              Swap joueur(receveur,i4),joueur(receveur,i5)
              
            EndIf
            
            Debug "-"
          EndIf
          
          
          
        EndIf
        
      Next i5
      
    Next i4
    
  Next signe
  
  
  
  Debug "=> Joueur "+Str(receveur+1)
  For i=0 To 4
    i2=joueur(receveur,i)
    Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
  Next
  Debug ""
  
  ;End:End
  
  Debug ""
  receveur+1
  receveur%4
Next U10

Debug "####"
Debug "-Fin du tri-"
Debug "####"


carte_propose=carte_melange(21)
Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
Debug "atout : "+carte$(atout)
les_points()
Debug "---"
Debug "-"
;End:End


receveur=donneur+1
receveur%4

;joueur(receveur,2)=30 ;- TRIIICHE, A supprimer apres tests

;Debug "receveur pure : "+Str(receveur)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-;;;;;;;;;;;Debut;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Debug "==============="
Debug "Tour 1"
Debug "Début de l'IA"
Debug "-"

For tour1=0 To 3
  ;- IA_Choice ;       ###########
  
  nb_atout=0
  nb_points=0
  nb_points_other=0
  vingt=0
  quatorze=0
  IA_Choice=0
  belote_rebelote=0
  niveau_du_joueur=150 ;-(100(joueur laxiste) à 300(joueur exigent))
  
  Debug "Joueur "+Str(receveur+1)
  
  Debug ":"
  
  
  ;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  
  For i=-1 To 4
    If i=-1
      ii=carte_propose
    Else
      ii=joueur(receveur,i)
    EndIf
    
    If (ii-1)/8=atout
      ;Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
      Debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
      nb_atout+1
      nb_points+points(ii)
      If points(ii)=20
        vingt=1
      EndIf
      If points(ii)=14
        quatorze=1
      EndIf
      If points(ii)=3 Or points(ii)=4
        belote_rebelote+1
      EndIf
      
    Else
      ;nb_points_other+points(carte_melange(ii))
      nb_points_other+points(ii)
      If points(ii)=11
        nb_points_other+12
        Debug "As détecté"  
      EndIf
      
      ;Debug "points_other :"+Str(points(carte_melange(ii)))
    EndIf
    
  Next
  
  
  Debug "nb_atout : "+Str(nb_atout)
  Debug "nb_points : "+Str(nb_points)
  Debug "nb_points_other : "+Str(nb_points_other)
  
  Debug "vingt : "+Str(vingt)
  Debug "quatorze : "+Str(quatorze)
  
  If vingt+quatorze=2
    IA_Choice=100
  ElseIf vingt+quatorze=1
    If vingt=1
      IA_Choice=60
    Else
      IA_Choice=30
    EndIf
  EndIf
  IA_Choice+Pow(3,(nb_atout-vingt-quatorze))
  Debug "Pow(3) = "+Str(Pow(3,(nb_atout-vingt-quatorze)))
  IA_Choice+nb_points
  IA_Choice+nb_points_other
  If belote_rebelote=2
    Debug "Belote+Rebelote"
    IA_Choice+20
  EndIf
  If nb_atout=1
    IA_Choice-20
  EndIf
  
  Debug "IA = "+Str(IA_Choice)+" pts"
  
  
  ; End:End
  
  
  
  If IA_Choice>=niveau_du_joueur
    Debug "Le joueur "+Str(receveur+1)+" peux tout à fait prendre !!!"
    joueur_prise=receveur
    Goto joueur_ok
  Else
    Debug "Le joueur "+Str(receveur+1)+" passe..."
  EndIf
  receveur+1
  receveur%4
  Debug"="
  Debug"="
  
Next tour1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Debug ""
Debug "Fin de l'IA"
Debug "-----"
Debug "-"

Debug "---"
For i=1 To 10
  Debug "========================="
Next
Debug "-"

receveur=donneur+1
receveur%4

Dim reste_atout(2) ;-reste_atout(2)
u=0
For i=0 To 2
  If u=atout
    u+1
  EndIf
  reste_atout(i)=u
  u+1
Next

Debug "==============="
Debug "Tour 2"
Debug "Début de l'IA"
Debug "-"


Debug "Atout épuisé : "+carte$(atout)
Debug ""

Debug "Joueur "+Str(receveur+1)
For i=0 To 4
  i2=joueur(receveur,i)
  Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
Next


Dim choix(3)


For tour2=0 To 3 ;- tour2
  
  Debug "Joueur "+Str(receveur+1)
  Dim mes_atouts(3)
  
  For atout2=0 To 2
    nb_atout=0
    IA_Choice=0
    nb_points=0
    nb_points_other=0
    vingt=0
    quatorze=0
    belote_rebelote=0
    
    For i3=-1 To 4
      If i3=-1
        ii=carte_propose
      Else
        ii=joueur(receveur,i3)
      EndIf
      
      
      ;Debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
      ;End:End
      
      atout=reste_atout(atout2)
      les_points()
      ;    Debug "..."
      ;    Debug "## atout = "+Str(atout)
      
      
      ;    Debug "~Carte~ : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
      
      If (ii-1)/8=atout;reste_atout(atout2)
                       ;Debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
                       ;Debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
                       ;        Debug "Atout détecté"
        nb_atout+1
        nb_points+points(ii)
        If points(ii)=20
          vingt=1
        EndIf
        If points(ii)=14
          quatorze=1
        EndIf
        If points(ii)=3 Or points(ii)=4
          belote_rebelote+1
        EndIf
        
      Else
        ;nb_points_other+points(carte_melange(ii))
        nb_points_other+points(ii)
        If points(ii)=11
          nb_points_other+12
          ;          Debug "As détecté"  
        EndIf
        
        ;Debug "points_other :"+Str(points(carte_melange(ii)))
      EndIf
      
      
      ;;;;;;;;;;
      
      ;  Debug "nb_atout : "+Str(nb_atout)
      ;  Debug "nb_points : "+Str(nb_points)
      ;  Debug "nb_points_other : "+Str(nb_points_other)
      
      ;  Debug "vingt : "+Str(vingt)
      ;  Debug "quatorze : "+Str(quatorze)
      
    Next i3
    
    
    ;;;;;;;;;;;;
    ;;;;;;;;;;;;
    ;;;;;;;;;;;;
    
    If vingt+quatorze=2
      IA_Choice+100
    ElseIf vingt+quatorze=1
      If vingt=1
        IA_Choice+60
      Else
        IA_Choice+30
      EndIf
    EndIf
    IA_Choice+Pow(3,(nb_atout-vingt-quatorze))
    Debug "Pow(3) = "+Str(Pow(3,(nb_atout-vingt-quatorze)))
    IA_Choice+nb_points
    IA_Choice+nb_points_other
    If belote_rebelote=2
      ;   Debug "Belote+Rebelote = 20 pts"
      IA_Choice+20
    EndIf
    If nb_atout=1
      ;   Debug "Un seul atout = -20 pts"
      IA_Choice-20
    EndIf
    ;  Debug "IA = "+Str(IA_Choice)+" pts"
    
    ;;;;;;;;;;
    
    ;Debug "-"  
    
    choix(atout)=IA_Choice
    
    ;  Debug"="
    Debug"="
    
  Next atout2
  
  Debug "Résumé :"
  
  max=-1000
  atout=-1
  For i=0 To 2
    Debug "atout : "+Str(reste_atout(i))+"   ---   "+Str(choix(reste_atout(i)))+" pts"
    If max<choix(reste_atout(i))
      max=choix(reste_atout(i))
      atout=reste_atout(i)
    EndIf
    
  Next
  Debug"="
  Debug "MAX ="+Str(max)+" --- Atout : "+Str(atout)
  If max>=niveau_du_joueur
    joueur_prise=receveur
    Goto joueur_ok
  EndIf
  
  Debug "^^^^ "
  Debug "^^^^ "
  Debug"="
  
  ; End:End
  
  receveur+1
  receveur%4
  
  Debug"----       TOUR2 = "+Str(tour2)
  
  ;   For i=0 To 3
  ;     Debug Str(mes_atouts(i))+" "+ carte$(i)
  ;     For u=0 To 4
  ;       Debug "^"
  ;     Next
  ;     
  ;   Next
  
  ; Debug "//"
  ; Debug "//"
  ; Debug "//"
  ; Debug "//"
  Debug "//"
  
  
Next tour2

Debug ""
Debug "Fin de l'IA"
Debug "-----"
Debug "-"

boucle+1

Goto boucle

End:End



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

joueur_ok:

les_points()

Debug "-#-#-"
Debug "-#-#-"
Debug "Distribution du reste des cartes :"
;Debug "A suivre..."

receveur=donneur+1
receveur%4

; Debug "(Le joueur "+Str(receveur+1)+" reçois les 3 prochaines cartes)"
Debug "-"

; Dim joueur.w(3,7)
; joueur_prise=Random(3)

Debug "================"
Debug "donneur = joueur "+Str(donneur+1)
Debug "joueur_prise = joueur "+Str(joueur_prise+1)
Debug "================"
la+1
flag.b=0


For u=0 To 3
  For i=5 To 7
    If joueur_prise=receveur And flag=0
      flag=1
      joueur(receveur,i)=carte_propose
    Else
      joueur(receveur,i)=carte_melange(la)
      la+1
    EndIf
  Next
  receveur+1
  receveur%4
Next

Debug "***"

receveur=donneur+1
receveur%4

For u=0 To 3
  Debug "Joueur "+Str(receveur+1)
  For i=0 To 7
    ii= joueur(receveur,i)
    If (ii-1)/8 = atout
      a$="  -  Atout"
    Else
      a$=""
    EndIf
    
    Debug "carte("+Str(ii)+") "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+a$
  Next
  Debug ""
  receveur+1
  receveur%4
Next

; 
; atout=Random(3) ;;; (de -1 à 3)
; les_points()



!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Début d'un code de jeu de belote

Message par SPH »

Voici une touche de graphisme dans ce code de belote. C'est minime et c'est provisoire bien sûr :
PS : le debuggueur montre les cartes, et un openwindow decide de l'atout...

Code : Tout sélectionner

; belote - SPH(2025)
; pb 6.12LTS
;;;;;;;;;;;;;;;;;;;;;;;
InitSprite()
InitKeyboard()
InitMouse()


; Ouverture de la fenêtre
OpenWindow(0,0,0,600,100,"Choix",#PB_Window_ScreenCentered);|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,600,100,1,0,0)
Police = LoadFont(0, "Arial", 16)

Procedure clear()
  Repeat         ;- Gestion de la fenêtre
    Event  = WindowEvent() 
  Until Event = 0
EndProcedure

CreateSprite(0,40,40)
StartDrawing(SpriteOutput(0))
LineXY(0,0,30,20,RGB(255,255,0))
LineXY(20,30,30,20,RGB(255,255,0))
LineXY(20,30,0,0,RGB(255,255,0))
StopDrawing()

clear()


r=Random(65535)
;r=21053
RandomSeed(r)
Debug "random "+Str(r)
Debug "-"

Global Dim carte.w(32)
Global Dim carte_melange.w(32)
Global Dim carte_coupe.w(32)
Global Dim Points.w(32)
Global Dim ordre.w(32)
Global Dim carte$(3)
Global donneur, receveur
carte$(0)="Pique"
carte$(1)="Coeur"
carte$(2)="Trèfle"
carte$(3)="Carreau"

Global atout=Random(3) ;;; (de -1 à 3)
atout=-1 

Procedure creation_cartes()
  For i=1 To 4
    For u=0 To 3
      carte(i+u*8)=i+6
    Next
    For u=0 To 3
      carte(i+4+u*8)=i
    Next
  Next
EndProcedure
creation_cartes() ;;; crée un jeu de cartes
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;
Procedure les_points()
  
  For u=0 To 3
    nb=-3
    For i=1 To 3
      points(i+u*8)=0
      ordre(i+u*8)=nb
      nb+1
    Next
    points(4+u*8)=10
    ordre(4+u*8)=10
    points(5+u*8)=11
    ordre(5+u*8)=11
    points(6+u*8)=2
    ordre(6+u*8)=2
    points(7+u*8)=3
    ordre(7+u*8)=3
    points(8+u*8)=4
    ordre(8+u*8)=4
    
    If atout=u
      Points(3+u*8)=14
      Points(6+u*8)=20
      ordre(3+u*8)=14
      ordre(6+u*8)=20
    EndIf
    
  Next
  ;     For i=1 To 32
  ;       Debug ordre(i)
  ;     Next
  ;     End
  
EndProcedure
les_points() ;;; attribut les points selon l'atout

;;##debug "=== Exemple de carte ==="
;carte=Random(31)+1
;;##debug "carte("+Str(carte)+") "+carte$((carte-1)/8)+" - "+Str(carte(carte))+" : "+Str(points(carte))+" pts"

Procedure melange_cartes()
  For i=1 To 32
    carte_melange(i)=i  
  Next
  For i=1 To 32
    u=Random(31)+1  
    Swap carte_melange(i),carte_melange(u)
  Next
EndProcedure
melange_cartes() ;;; melange

;;;;;;;;;;;;;;;
Procedure coupe_cartes()
  Debug "Tas de cartes coupé"
  coupe=6+Random(20)
  For i=1 To 32
    carte_coupe(i)=carte_melange(coupe)
    coupe+1
    If coupe=33
      coupe=1
    EndIf  
  Next
  For i=1 To 32
    carte_melange(i)=carte_coupe(i)
  Next
EndProcedure
;coupe_cartes() ;;; coupe


;;;;;;;;;;;;;;;
;##debug "=== Liste des cartes coupées ==="
; ; ; ; For i=1 To 32
; ; ; ;   If i=21
; ; ; ;     Debug ">>carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
; ; ; ;   Else
; ; ; ;     Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
; ; ; ;   EndIf
; ; ; ; Next
; ; ; ; 
;##debug " "
;##debug " "
;;;;;;;;;;;;;;;
;
donneur=2;- Random(3)
je_suis_le_joueur=0 ;-je_suis_le_joueur= 
boucle=0
;- BOUCLE ####

boucle:
coupe_cartes() ;;; coupe
donneur+1
donneur%4

Global Dim joueur.w(3,7)
Global Dim joueur_ordre.w(3,7)

receveur=donneur+1
receveur%4

carte_propose=-1

;;;;;;;;;;;;;;;;  distribution des cartes
la=1
For u=0 To 3
  For i=0 To 2
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next
;;;
For u=0 To 3
  For i=3 To 4
    joueur(receveur,i)=carte_melange(la)
    la+1
  Next
  receveur+1
  receveur%4
Next

For u=0 To 3
  For i1=0 To 4
    For i2=0 To 4
      If i1<>i2
        If joueur(u,i1)<joueur(u,i2)
          Swap joueur(u,i1),joueur(u,i2)
        EndIf
      EndIf
    Next
  Next
Next


Debug "***"
Debug "le donneur est le joueur "+Str(donneur+1)
Debug "je suis le joueur "+Str(je_suis_le_joueur+1)
Debug "*"

If boucle=5
  Debug "==="
  Debug "Boucle = "+Str(boucle)
  End:End
EndIf


receveur=donneur+1
receveur%4

atout=(carte_melange(21)-1)/8
atout_autre=atout

les_points()
;###################### choix de l'atout (la carte 21)
carte_propose=carte_melange(21)
Debug "Carte proposée N°"+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
Debug "atout : "+carte$(atout)
Debug "---"
Debug "-"


Procedure tri(x)
  Debug "On est dans la procedure ''tri( )''"
  For U10=0 To 3
    ;     Debug "~~"
    ;     Debug "Joueur "+Str(receveur+1)
    ; ; ; ; ; ;     For i=0 To x
    ; ; ; ; ; ;       i2=joueur(receveur,i)
    ; ; ; ; ; ;       ;     Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
    ; ; ; ; ; ;     Next
    
    ; Debug "==="
    ;  Debug ""
    Repeat
      flag.b=0
      For signe=0 To 3
        For i4=0 To x
          i2=joueur(receveur,i4)
          signe1=(i2-1)/8
          For i5=i4 To x ;i4 au lieu de 0
            i3=joueur(receveur,i5)
            signe2=(i3-1)/8
            
            If i4<>i5
              If signe1=signe2 And signe1=signe
                If ordre(i2)<ordre(i3)
                  flag=1
                  Swap joueur(receveur,i4),joueur(receveur,i5)
                EndIf
                
              EndIf
            EndIf
          Next i5
        Next i4
      Next signe
    Until flag=0
    
    Debug "=> Joueur "+Str(receveur+1)
    For i=0 To x
      i2=joueur(receveur,i)
      If (i2-1)/8 = atout
        a$="  -  Atout"
      Else
        a$=""
      EndIf
      
      Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts. : "+a$
      joueur_ordre(receveur,i)=i2
    Next
    receveur+1
    receveur%4
  Next U10
  
EndProcedure
Debug "Tri sur 5 cartes"
tri(4)
Debug "####"
Debug "-Fin du tri-"
Debug "####"


carte_propose=carte_melange(21)
; atout=carte_propose
; Debug atout

les_points()
Debug "Atout : "+carte$(atout)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"

Debug "---"
Debug "-"

receveur=donneur+1
receveur%4

; For u=0 To 3
; For i=0 To 4
;     i2=joueur(u,i)
;     ;Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
; ; ; ; ; ; ; ; ; ; ;     Debug joueur_ordre(u,i)
;   Next
; Debug "="  
; Next

;  End:End
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-;;;;;;;;;;;Debut;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Debug "==============="
Debug "Tour 1"
Debug "Début de l'IA"
Debug "-"

;{
For tour1=0 To 3
  ;- IA_Choice ;       ###########
  
  nb_atout=0
  nb_points=0
  nb_points_other=0
  vingt=0
  quatorze=0
  IA_Choice=0
  belote_rebelote=0
  niveau_du_joueur=160 ;-(100(joueur laxiste) à 300(joueur exigent))
  
  ;##debug "Joueur "+Str(receveur+1)
  
  ;##debug ":"
  
  
  ;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  
  For i=-1 To 4
    If i=-1
      ii=carte_propose
    Else
      ii=joueur(receveur,i)
    EndIf
    
    If (ii-1)/8=atout
      nb_atout+1
      nb_points+points(ii)
      If points(ii)=20
        vingt=1
      EndIf
      If points(ii)=14
        quatorze=1
      EndIf
      If points(ii)=3 Or points(ii)=4
        belote_rebelote+1
      EndIf
      
    Else
      nb_points_other+points(ii)
      If points(ii)=11
        nb_points_other+12
        ;##debug "As détecté"  
      EndIf
      
      ;;##debug "points_other :"+Str(points(carte_melange(ii)))
    EndIf
    
  Next
  
  
  ;##debug "nb_atout : "+Str(nb_atout)
  ;##debug "nb_points : "+Str(nb_points)
  ;##debug "nb_points_other : "+Str(nb_points_other)
  
  ;##debug "vingt : "+Str(vingt)
  ;##debug "quatorze : "+Str(quatorze)
  
  If vingt+quatorze=2
    IA_Choice=100
  ElseIf vingt+quatorze=1
    If vingt=1
      IA_Choice=60
    Else
      IA_Choice=30
    EndIf
  EndIf
  IA_Choice+Pow(3,(nb_atout-vingt-quatorze))
  ;##debug "Pow(3) = "+Str(Pow(3,(nb_atout-vingt-quatorze)))
  IA_Choice+nb_points
  IA_Choice+nb_points_other
  If belote_rebelote=2
    ;##debug "Belote+Rebelote"
    IA_Choice+20
  EndIf
  If nb_atout=1
    IA_Choice-20
  EndIf
  
  ;##debug "IA = "+Str(IA_Choice)+" pts"
  
  
  If receveur=je_suis_le_joueur
    Debug "C'est à moi je choisir (joueur "+Str(receveur+1)+")"
    Debug "Mon choix :"
    
    Repeat
      clear()  
      ClearScreen(RGB(40,40,40)) 
      
      ExamineMouse()
      x=MouseX()
      y=MouseY()
      x_la=x/100
      xmouse=MouseButton(#PB_MouseButton_Left)
      
      StartDrawing(ScreenOutput())
      
      For i=0 To 500 Step 100
        LineXY(i,0,i,100,RGB(200,200,200))
      Next
      
      DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent )
      DrawingFont(Police)
      a$="Une"
      DrawText(50-TextWidth(a$)/2,40, a$, RGB(255,255,255))
      Dim atout_light(3)
      For i=0 To 3
        If atout=i
          atout_light(i)=RGB(5,255,5)
        Else
          atout_light(i)=RGB(30,70,0)
        EndIf
      Next
      
      a$="QUIT"
      DrawText(550-TextWidth(a$)/2,40, a$, RGB(255,0,0))
      Box(x_la*100+3,3,94,94,RGB(255,255,255))
      For i=0 To 3
        DrawText(150+i*100-TextWidth(carte$(i))/2,40, carte$(i), atout_light(i))
      Next
      StopDrawing()
      
      ;;;;;
      
      DisplayTransparentSprite(0,x,y)
      
      If xmouse=1 
        If x_la=5
          End:End
        EndIf
        If x_la=0
          IA_Choice=-1000
          Goto le_choix1
        EndIf
        If x_la>=1 And x_la<=4
          If x_la-1=atout
            IA_Choice=1000
            Goto le_choix1
          EndIf
        EndIf
      EndIf
      FlipBuffers()
      ExamineKeyboard()
    ForEver
    
  EndIf
  
  
  le_choix1:
  ClearScreen(RGB(40,40,40)) 
  FlipBuffers()
  
  If IA_Choice>=niveau_du_joueur   
    joueur_prise=receveur
    Debug "Le joueur "+Str(receveur+1)+" prend !!!!!!!!!!!!!!!!!!!!!!!!!":Delay(500)
    ;End:End
    Goto joueur_ok
  Else
    Debug "1> Le joueur "+Str(receveur+1)+" passe..." : Delay(500)
  EndIf
  receveur+1
  receveur%4
  ;##debug"="
  ;##debug"="
  
Next tour1
;}


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;##debug ""
;##debug "Fin de l'IA"
;##debug "-----"
;##debug "-"
Debug "# fin du tour 1"
;##debug "---"

For i=1 To 3
  Debug "========================="
Next
;##debug "-"

receveur=donneur+1
receveur%4

Dim reste_atout(2) ;-reste_atout(2)
u=0
For i=0 To 2
  If u=atout
    u+1
  EndIf
  reste_atout(i)=u
  u+1
Next

Debug "==============="
Debug "Tour 2"
Debug "Début de l'IA"
Debug "-"
;{

Debug "Choix de l'atout (sauf : "+carte$(atout)+")"
Debug ""

;##debug "Joueur "+Str(receveur+1)
; For i=0 To 4
;   i2=joueur(receveur,i)
;   Debug "carte("+Str(i2)+") "+carte$((i2-1)/8)+"----"+Str(carte(i2))+" : "+Str(points(i2))+" pts."
; Next
Debug "~#~#"

Dim choix(3)


For tour2=0 To 3 ;- tour2
  
  ;##debug "Joueur "+Str(receveur+1)
  Dim mes_atouts(3)
  
  For atout2=0 To 2
    nb_atout=0
    IA_Choice=0
    nb_points=0
    nb_points_other=0
    vingt=0
    quatorze=0
    belote_rebelote=0
    
    For i3=-1 To 4
      If i3=-1
        ii=carte_propose
      Else
        ii=joueur(receveur,i3)
      EndIf
      
      
      ;;##debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
      ;End:End
      
      atout=reste_atout(atout2)
      les_points()
      ;    ;##debug "..."
      ;    ;##debug "## atout = "+Str(atout)
      
      
      ;    ;##debug "~Carte~ : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
      
      If (ii-1)/8=atout;reste_atout(atout2)
                       ;;##debug "Carte proposée : "+Str(carte_propose)+"   "+carte$((carte_propose-1)/8)+" - "+Str(carte(carte_propose))+" : "+Str(points(carte_propose))+" pts"
                       ;;##debug "Carte : "+Str(ii)+"   "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+" pts"
                       ;        ;##debug "Atout détecté"
        nb_atout+1
        nb_points+points(ii)
        If points(ii)=20
          vingt=1
        EndIf
        If points(ii)=14
          quatorze=1
        EndIf
        If points(ii)=3 Or points(ii)=4
          belote_rebelote+1
        EndIf
        
      Else
        ;nb_points_other+points(carte_melange(ii))
        nb_points_other+points(ii)
        If points(ii)=11
          nb_points_other+12
          ;          ;##debug "As détecté"  
        EndIf
        
        ;;##debug "points_other :"+Str(points(carte_melange(ii)))
      EndIf
      
      
      ;;;;;;;;;;
      
      ;  ;##debug "nb_atout : "+Str(nb_atout)
      ;  ;##debug "nb_points : "+Str(nb_points)
      ;  ;##debug "nb_points_other : "+Str(nb_points_other)
      
      ;  ;##debug "vingt : "+Str(vingt)
      ;  ;##debug "quatorze : "+Str(quatorze)
      
    Next i3
    
    
    ;;;;;;;;;;;;
    ;;;;;;;;;;;;
    ;;;;;;;;;;;;
    
    If vingt+quatorze=2
      IA_Choice+100
    ElseIf vingt+quatorze=1
      If vingt=1
        IA_Choice+60
      Else
        IA_Choice+30
      EndIf
    EndIf
    IA_Choice+Pow(3,(nb_atout-vingt-quatorze))
    ;##debug "Pow(3) = "+Str(Pow(3,(nb_atout-vingt-quatorze)))
    IA_Choice+nb_points
    IA_Choice+nb_points_other
    If belote_rebelote=2
      ;   ;##debug "Belote+Rebelote = 20 pts"
      IA_Choice+20
    EndIf
    If nb_atout=1
      ;   ;##debug "Un seul atout = -20 pts"
      IA_Choice-20
    EndIf
    ;  ;##debug "IA = "+Str(IA_Choice)+" pts"
    
    If receveur=je_suis_le_joueur
      Debug "C'est à moi je choisir (joueur "+Str(receveur+1)+")"
      Debug "Mon choix :"
      
      Repeat
        clear()  
        ClearScreen(RGB(40,40,40)) ; tour 2
        
        ExamineMouse()
        x=MouseX()
        y=MouseY()
        x_la=x/100
        xmouse=MouseButton(#PB_MouseButton_Left)
        
        StartDrawing(ScreenOutput())
        
        For i=0 To 500 Step 100
          LineXY(i,0,i,100,RGB(200,200,200))
        Next
        
        DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent )
        DrawingFont(Police)
        a$="Deux"
        DrawText(50-TextWidth(a$)/2,40, a$, RGB(255,255,255))
        Dim atout_light(3)
        For i=0 To 3
          ;Debug atout:End
          
          If atout_autre<>i
            atout_light(i)=RGB(5,255,5)
          Else
            atout_light(i)=RGB(30,70,0)
          EndIf
        Next
        
        a$="QUIT"
        DrawText(550-TextWidth(a$)/2,40, a$, RGB(255,0,0))
        Box(x_la*100+3,3,94,94,RGB(255,255,255))
        For i=0 To 3
          DrawText(150+i*100-TextWidth(carte$(i))/2,40, carte$(i), atout_light(i))
        Next
        StopDrawing()
        
        ;;;;;
        
        DisplayTransparentSprite(0,x,y)
        
        If xmouse=1 
          If x_la=5
            End:End
          EndIf
          If x_la=0
            IA_Choice=-1000
            Goto le_choix2
          EndIf
          If x_la>=1 And x_la<=4
            If x_la-1<>atout_autre
              atout=x_la-1
              IA_Choice=1000
              choix(atout)=IA_Choice
              Goto le_choix2
            EndIf
          EndIf
        EndIf
        FlipBuffers()
        ExamineKeyboard()
      ForEver
      
    EndIf
    
    
    ; le_choix2:
    ;;;;;;;;;;
    
    ;;##debug "-"  
    
    choix(atout)=IA_Choice
    
    ;  ;##debug"="
    ;##debug"="
    
  Next atout2
  
  le_choix2:
  ClearScreen(RGB(40,40,40)) 
  FlipBuffers()
  
  ;##debug "Résumé :"
  
  max=-1000
  ;atout=-1
  For i=0 To 2
    ;##debug "atout : "+Str(reste_atout(i))+"   ---   "+Str(choix(reste_atout(i)))+" pts"
    If max<choix(reste_atout(i))
      max=choix(reste_atout(i))
      atout=reste_atout(i)
    EndIf
    
  Next
  ;##debug"="
  ;##debug "MAX ="+Str(max)+" --- Atout : "+Str(atout)
  
  
  If max>=niveau_du_joueur
    joueur_prise=receveur
    Debug "#################################"
    Debug "#################################"
    Debug "Le joueur "+Str(receveur+1)+" prends en "+carte$(atout)+"!!!!"
    Debug "#################################"
    Debug "#################################"
    
    
    Goto joueur_ok
  Else
    ;    Debug "#################################"
    Debug "2> Le joueur "+Str(receveur+1)+" passe...":Delay(500)
    ;    Debug "#################################"
    
  EndIf
  
  receveur+1
  receveur%4
  
Next tour2
;}


Debug ""
Debug "Fin de l'IA"
Debug "-----"
Debug "-"



receveur=donneur+1
receveur%4

For u=0 To 3*-666
  Debug "Joueur "+Str(receveur+1)
  For i=0 To 4;7
    ii= joueur(receveur,i)
    If (ii-1)/8 = atout
      a$="  -  Atout"
    Else
      a$=""
    EndIf
    
    Debug "°°°° carte("+Str(ii)+") "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+a$
  Next
  Debug ""
  receveur+1
  receveur%4
Next

;;;
;;;
;;
;
; For i=1 To 32
;   If i=21
;     Debug ">>carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
;   Else
;     Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
;   EndIf
; Next

Debug ""
Debug "~~##~~##"
Debug "Remise dans le paquet dans l'ordre des cartes des joueurs"
Debug "~~##~~##"

;;;;; remise dans le paquet dans l'ordre des cartes des joueurs
nb=1
For u=0 To 3
  ;   Debug "Joueur "+Str(receveur+1)
  For i=0 To 4
    ii= joueur(receveur,i)
    ;    Debug "~~~~ carte("+Str(ii)+") "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+a$
    carte_melange(nb)=ii  
    nb+1
  Next
  Debug ""
  receveur+1
  receveur%4
Next
;;;
;;;
;;
;
For i=1 To 32*-666
  If i=21
    Debug "##>>carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
  Else
    Debug "carte("+Str(carte_melange(i))+") "+carte$((carte_melange(i)-1)/8)+"----"+Str(carte(carte_melange(i)))+" : "+Str(points(carte_melange(i)))+" pts"
  EndIf
  
Next
; ; ; 
Debug ""
Debug "~~##~~##"
Debug "~~##~~##"
Debug "~~##~~##"
Debug "~~##~~##"
Debug ""

; ; ; 
; ; ; 
; ; ; End:End
; ; ; 

boucle+1

Goto boucle

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

joueur_ok: ;-joueur_ok:

les_points()

;##debug "-#-#-"
;##debug "-#-#-"
;##debug "Distribution du reste des cartes :"
;;##debug "A suivre..."

receveur=donneur+1
receveur%4

Debug "(Le joueur "+Str(receveur+1)+" reçois les 3 prochaines cartes)"
Debug "-"

;;Dim joueur.w(3,7)
;;joueur_prise=Random(3)

; Debug "================"
; Debug "donneur = joueur "+Str(donneur+1)
; Debug "joueur_prise = joueur "+Str(joueur_prise+1)
; Debug "atout : "+carte$(atout)
; Debug "================"
la+1
flag.b=0


For u=0 To 3
  For i=5 To 7
    If joueur_prise=receveur And flag=0
      flag=1
      joueur(receveur,i)=carte_propose
    Else
      joueur(receveur,i)=carte_melange(la)
      la+1
    EndIf
  Next
  receveur+1
  receveur%4
Next

;##debug "***"

receveur=donneur+1
receveur%4

For u=0 To 3
  ;##debug "Joueur "+Str(receveur+1)
  For i=0 To 7
    ii= joueur(receveur,i)
    If (ii-1)/8 = atout
      a$="  -  Atout"
    Else
      a$=""
    EndIf
    
    ;##debug "carte("+Str(ii)+") "+carte$((ii-1)/8)+" - "+Str(carte(ii))+" : "+Str(points(ii))+a$
  Next
  ;##debug ""
  receveur+1
  receveur%4
Next

; 
; atout=Random(3) ;;; (de -1 à 3)
; les_points()

For u=0 To 3
  For i1=0 To 7
    For i2=0 To 7
      If i1<>i2
        If joueur(u,i1)<joueur(u,i2)
          Swap joueur(u,i1),joueur(u,i2)
        EndIf
      EndIf
    Next
  Next
Next


tri(7)

Debug "####"
Debug "-Fin du tri N°2-"
Debug "####"
;;;;;;;;;;
;End:End

;##debug "***"

receveur=donneur+1
receveur%4




!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre