FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» number_mouse_up
Une premiere version de puissance 4 Emptypar jjn4 Aujourd'hui à 11:59

» Aide de PANORAMIC
Une premiere version de puissance 4 Emptypar jjn4 Aujourd'hui à 11:16

» trop de fichiers en cours
Une premiere version de puissance 4 Emptypar lepetitmarocain Aujourd'hui à 10:43

» Je teste PANORAMIC V 1 beta 1
Une premiere version de puissance 4 Emptypar papydall Aujourd'hui à 4:17

» select intégrés
Une premiere version de puissance 4 Emptypar jjn4 Hier à 18:33

» PANORAMIC V 1
Une premiere version de puissance 4 Emptypar Klaus Hier à 9:53

» bouton dans autre form que 0
Une premiere version de puissance 4 Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Une premiere version de puissance 4 Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Une premiere version de puissance 4 Emptypar Klaus Lun 6 Mai 2024 - 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Une premiere version de puissance 4 Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Une premiere version de puissance 4 Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Une premiere version de puissance 4 Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Une premiere version de puissance 4 Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Une premiere version de puissance 4 Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Une premiere version de puissance 4 Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-39%
Le deal à ne pas rater :
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
399 € 649 €
Voir le deal

 

 Une premiere version de puissance 4

Aller en bas 
+3
Minibug
papydall
Jicehel
7 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptySam 24 Déc 2016 - 11:32

Bonjour, c'est les vacances.
Pour ne pas perdre trop la main, j'ai fais une première version de puissance 4
J'aimerais y faire 2 changements si j'ai le temps et par intérêt:

1/ Récupérer le travail sur le serveur FTP pour faire une partie multijoueur (se connecter sur un serveur voir si quelqu'un attend un partenaire ou lancer une partie puis gérer les tours de jeu par échange de "messages" de façon invisible pour le joueur et une sécurité en cas de perte de connexion ou de temps trop long avec possibilité de pouvoir reprendre une partie dans ce cas (genre en stockant l'identifiant des joueurs))

2/ Un vieux truc que j'aimerais faire mais que je n'ai jamais eu le courage d'attaquer: faire un mode contre l'ordinateur mais pas avec des coups aléatoires parmi les possibles mais via un calcul de plusieurs coups à l'avance pour voir si on peut gagner en un coup, 2 coups ou 3 coups tout en ne donnant pas à son adversaire la possibilité de le faire

Après si l'un ou l'autre est mis en place, j'améliorerais sans doute les graphisme ou alors je n'en aurais pas le temps et ça en restera là.
On verra bien. En tout cas joyeux Noël à tous.

Code:
' Puissance 4 version 1 (Simple)
' Mode 2 joueurs alternativement sur le même ordinateur
' Dessin simple sans animation

' Définir le type pour une case de la grille
' Case = 0 => ROUGE; 1 => JAUNE; 2 => VIDE
DIM ROUGE% : ROUGE% = -1
DIM JAUNE% : JAUNE% = 1
DIM VIDE%  : VIDE%  = 0

' Définir la grille de jeu
DIM NB_COLONNES% : NB_COLONNES% = 7
DIM NB_LIGNES%  : NB_LIGNES%  = 6
DIM NB_VIDES% : NB_VIDES% = NB_COLONNES% * NB_LIGNES%

' La grille de jeu avec une bordure supplémentaire
DIM Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Colonnes%(NB_COLONNES%)

' Programmation du mode de debuggage
DIM Debug% : Debug% = 0 : ' Mettre à 1 pour activer le mode debug
DIM F_Debug% : F_Debug% = 1
DIM M_Debug%

' Tailles des éléments du jeu
DIM Marge% : Marge% = 20
DIM Bordure% : Bordure% = 10
DIM Largeur_pion% : Largeur_pion% = 60

' Définition des numéro d'objet
DIM N_Grille% : N_Grille% = 10

DIM Num%, Message$
DIM Tour%

LABEL Clic

Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord% pour portabilité

INIT()
AIDE()
IF Debug% = 1 THEN CREER_FENETRE_DEBUG()

CREER_GRILLE()
VIDER()
SHOW 0
Tour% = JAUNE% :  2D_TARGET_IS 0 :Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
ON_CLICK N_Grille%,clic
END

SUB CREER_GRILLE()
DIM_LOCAL Decal_x,Decal_y, i%, j%, r
  PICTURE N_Grille% : LEFT N_Grille%, Marge% : TOP N_Grille%, Marge%
  WIDTH N_Grille%,  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%)
  HEIGHT N_Grille%, Bordure% + NB_LIGNES% * (Largeur_pion% + Bordure%)
  COLOR N_Grille%,0,0,255 : 2D_FILL_COLOR 50,50,50
  2D_TARGET_IS N_Grille%
  r =  Largeur_pion% / 2
  Decal_y = Bordure%

  FOR i% = 1 TO NB_LIGNES%
    Decal_x = Bordure%
    FOR j% = 1 TO NB_COLONNES%
        2D_CIRCLE Decal_x + r, Decal_y +  r,  r
        Decal_x = Decal_x +  Largeur_pion% + Bordure%
    NEXT j%
    Decal_y = Decal_y +  Largeur_pion% + Bordure%
  NEXT i%
END_SUB

SUB INIT()
DIM_LOCAL Largeur%, Hauteur%, ind%
  HIDE 0
  Largeur% =  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  WIDTH 0, Largeur%
  Hauteur% =  2*Bordure% + (NB_LIGNES% + 1 ) * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  HEIGHT 0, Hauteur% + bandeau%
  CAPTION 0,"  P U I S S A N C E  4"
  ind% = 3 : ALPHA ind% : LEFT ind%, Marge% + 10 : TOP ind%, (NB_LIGNES%)* (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2
  FONT_SIZE ind%,22 :  FONT_NAME ind%,"Times New Roman" :  CAPTION ind%,"C'est au tour de jouer de : "
END_SUB

SUB VIDER()
DIM_LOCAL i%, j%  : ' parcourir les cases de la grille pour la vider
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = VIDE%
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = 0
NEXT j%
END_SUB

SUB CREER_FENETRE_DEBUG()
DIM_LOCAL i%,j%, ind%
ind% = 200
  FORM F_Debug%
  LEFT  F_Debug%, WIDTH(0) +50
  CAPTION F_Debug%,"Debug"
  M_Debug% = ind%
  ALPHA ind% :  PARENT ind%, F_Debug%
  LEFT ind%, 10 : WIDTH ind%, WIDTH(F_Debug%) - 20
  TOP ind%, 10
END_SUB

rem ====================================' détection des dimensions de la fenêtre
SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
      MESSAGE "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
      TERMINATE
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 THEN DIM bandeau%
    IF VARIABLE("bord%")=0 THEN DIM bord%
    ' Calcul de bandeau% et bord%
    DIM_LOCAL w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    PICTURE 1 : FULL_SPACE 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    DELETE 1
END_SUB

SUB AIDE()
DIM_LOCAL a$
' Système d`aide du programme
  APPLICATION_TITLE "Règles du jeu PUISSANCE 4"
  a$="  Le but du jeu est d'aligner 4 pions de sa couleur dans le sens"+chr$(13)
  a$=a$+"horizontal, vertical ou diagonal. Le premier qui réalise cela a"+chr$(13)
  a$=a$+"gagné et le jeu s'arrête. Si toutes les cases du jeu sont remplies"+chr$(13)
  a$=a$+"sans que cela ait pu être réalisé, alors la partie est nulle."+chr$(13)+chr$(13)
  a$=a$+"Cliquez dans une colonne avec au moins un emplacement de libre"+chr$(13)
  a$=a$+"pour lacher le pion dans cette colonne"
  MESSAGE a$
END_SUB

SUB Dessine_Pion(Col%,Ligne,Couleur%)
    IF Couleur% = JAUNE%
      2D_FILL_COLOR 230,230,50
    ELSE
      2D_FILL_COLOR 240,50,50
    END_IF
    2D_CIRCLE Col% * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2, Ligne * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2,  Largeur_pion% / 2
END_SUB

SUB Fin()
    wait 2000
    Terminate
END_SUB

SUB Verifie_victoire(COLONNE%,LIGNE%)
dim_local i%,j%,k%, pions%, resultat%,a$
resultat%=0
for i%=1 to 4
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%+k%,j%+k%)
        next k%
        if pions%=4 or pions%=-4 then resultat%=pions%
      next j%
next i%
 
for i%=4 to 7
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%-k%,j%+k%)
        next k%
        if pions%=4 or pions%=-4 then resultat%=pions%
      next j%
next i%

i%=COLONNE%
for j%=1 to 3
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%,j%+k%)
      next k%
      if pions%=4 or pions%=-4 then resultat%=pions%
next j%

j% = LIGNE%
for i%=1 to 4 : rem Horizontale
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%+k%,j%)
      next k%
      if pions%=4 or pions%=-4 then resultat%=pions%
next i%

if resultat%<>0
  beep
  a$="Bravo, la partie est finie"+ chr$(13) + "LES "
  if resultat%= 4 then a$=a$+"JAUNES"
  if resultat%=-4 then a$=a$+"ROUGES"
  a$ = a$ + " ONT GAGNE !"
  if message_confirmation_ok(a$) > -1 then Fin()
  if Debug% = 1
      caption M_Debug%, Message$
  end_if
end_if
END_SUB

Clic:
OFF_CLICK N_Grille%
  Num% = INT((MOUSE_X_POSITION(N_Grille%) - 0.5 * Bordure%) / (Largeur_pion% + Bordure%)) + 1
  Message$ =  "Clic sur la colonne n°" + STR$(Num%)
  IF Debug% = 1 THEN CAPTION M_Debug%, Message$
  IF Colonnes%(Num%) < NB_LIGNES%
      Colonnes%(Num%) = Colonnes%(Num%) + 1
      Grille%(Num%, Colonnes%(Num%)) = Tour%
      2D_TARGET_IS N_Grille% : Dessine_Pion(Num% -1, NB_LIGNES% - Colonnes%(Num%),Tour%)
      NB_VIDES% =  NB_VIDES% - 1
      Verifie_victoire(Num%, Colonnes%(Num%))
      IF NB_VIDES% = 0 THEN Fin()
      IF Tour% = JAUNE%
          Tour% = ROUGE%
      ELSE
          Tour% = JAUNE%
      END_IF
      2D_TARGET_IS 0 : Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
  END_IF
ON_CLICK N_Grille%,clic
RETURN
Revenir en haut Aller en bas
papydall

papydall


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

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptySam 24 Déc 2016 - 12:07

Salut Jicehel.


Il y a un minibug (pas notre ami, mais dans le programme).

Le jeton jaune (celui de la 2ème ligne à partir du bas, le plus à gauche) est mal placé.
En fait, j’ai cliqué sur la case juste en dessus, mais il s’est placé une ligne plus bas.
D’ailleurs ce comportement se répète pour d’autres cases.  



C'est tout bon, bravo Jicehel !


Dernière édition par papydall le Sam 24 Déc 2016 - 17:52, édité 1 fois
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptySam 24 Déc 2016 - 13:01

Bonjour Jicehel !

Je n'ai pas encore regardé ton programme mais comme tu parle de FTP ça m'interpelle puisque c'est ce sur quoi je travaille actuellement. Wink

Je suis d’ailleurs plutôt sur une version 'Serveur partagé', mais j'ai aussi préparé une version 'FTP' avec les fonctions de la DLL de Klaus qui est pratiquement finalisée.

Le problème, c'est la possibilité d'utilisé le FTP depuis le WEB. J'ai démarré avec mon ftpperso.free.fr mais il n'autorise qu'un accés à la fois donc pour chatter ou jouer à plusieurs c'est pas très pratique !! Suspect

Et pour créer un FTP en ligne style sur un site WEB, etc. je ne connais pas assez. Peut être que certaines personnes ici ont les compétences... Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2391
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptySam 24 Déc 2016 - 16:48

Bonjour à tous !

Merci et bravo Jicehel ! cheers
Vivement la suite ...

@Papydall
Je ne pense pas qu’il y a un bug pour ce jeu : ce sont des colonnes verticales dans lesquelles on lâche un pion qui va descendre le plus bas possible. Impossible d’y jouer sans gravité ! No

Une premiere version de puissance 4 Puissa10
Revenir en haut Aller en bas
papydall

papydall


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

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptySam 24 Déc 2016 - 18:00

Salut Marc37.
Tu as parfaitement raison.
J’ai raturé mon message ci-haut pour ne pas inquiéter  notre ami Jicehel.
Bravo Jicehel pour ce jeu  cheers
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyDim 25 Déc 2016 - 20:42

Content que ça vous plaise. Un grand classique mais facile à programmer et amusant à deux.
On peut faire très simplement un mode 2 joueurs mais le rendre intéressant (en ne faisant pas jouer l'ordinateur aléatoirement ou presque) c'est déjà plus compliqué et ça c'est un truc pour lequel j'ai toujours eu du mal.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyMer 4 Jan 2017 - 0:02

Ce soir javais envie de coder un peu alors j'ai commencé une version contre l'ordi du puissance4 mais il y a de grosses améliorations à faire et des corrections aussi car il y a à priori des comportements anormaux.

En tous cas voici la version de ce soir:
Code:
' Puissance 4 version 1 (Simple)
' Mode contre l'ordinateur
' Dessin simple sans animation
' Les jaunes commencent toujours

' Définir le type pour une case de la grille
' Case = 0 => ROUGE; 1 => JAUNE; 2 => VIDE
DIM ROUGE% : ROUGE% = -1
DIM JAUNE% : JAUNE% = 1
DIM VIDE%  : VIDE%  = 0
DIM C_ORDI% :' Couleur des pions de l'odinateur

' Définir la grille de jeu
DIM NB_COLONNES% : NB_COLONNES% = 7
DIM NB_LIGNES%  : NB_LIGNES%  = 6
DIM NB_VIDES% : NB_VIDES% = NB_COLONNES% * NB_LIGNES%

' La grille de jeu avec une bordure supplémentaire
DIM Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Sauve_Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Colonnes%(NB_COLONNES%),Sauve_Colonnes%(NB_COLONNES%)

' Programmation du mode de debuggage
DIM Debug% : Debug% = 0 : ' Mettre à 1 pour activer le mode debug
DIM F_Debug% : F_Debug% = 1
DIM M_Debug%, Tps_Msg_Debug%  : Tps_Msg_Debug% = 1500

' Tailles des éléments du jeu
DIM Marge% : Marge% = 20
DIM Bordure% : Bordure% = 10
DIM Largeur_pion% : Largeur_pion% = 60

' Définition des numéro d'objet
DIM N_Grille% : N_Grille% = 10

DIM Num%, Message$, resultat%
DIM Tour%, Aff_tour%

LABEL Clic

Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord% pour portabilité

INIT()
AIDE()
IF Debug% = 1 THEN CREER_FENETRE_DEBUG()

CREER_GRILLE()
VIDER()
SHOW 0
C_ORDI% = JAUNE%
IF Tour% = C_ORDI% THEN Ajoute_Pion(4) : Dessine_Pion2(4) : Change_Tour()
IF Debug% = 1 THEN DEBUG_GRILLE()
ON_CLICK N_Grille%,clic
END

SUB CREER_GRILLE()
DIM_LOCAL Decal_x,Decal_y, i%, j%, r
  PICTURE N_Grille% : LEFT N_Grille%, Marge% : TOP N_Grille%, Marge%
  WIDTH N_Grille%,  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%)
  HEIGHT N_Grille%, Bordure% + NB_LIGNES% * (Largeur_pion% + Bordure%)
  COLOR N_Grille%,0,0,255 : 2D_FILL_COLOR 50,50,50
  2D_TARGET_IS N_Grille%
  r =  Largeur_pion% / 2
  Decal_y = Bordure%

  FOR i% = 1 TO NB_LIGNES%
    Decal_x = Bordure%
    FOR j% = 1 TO NB_COLONNES%
        2D_CIRCLE Decal_x + r, Decal_y +  r,  r
        Decal_x = Decal_x +  Largeur_pion% + Bordure%
    NEXT j%
    Decal_y = Decal_y +  Largeur_pion% + Bordure%
  NEXT i%
END_SUB

SUB INIT()
DIM_LOCAL Largeur%, Hauteur%, ind%
  HIDE 0
  Largeur% =  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  WIDTH 0, Largeur%
  Hauteur% =  2*Bordure% + (NB_LIGNES% + 1 ) * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  HEIGHT 0, Hauteur% + bandeau%
  CAPTION 0,"  P U I S S A N C E  4"
  Tour% = JAUNE%
  ind% = 3 : ALPHA ind% : LEFT ind%, Marge% + 10 : TOP ind%, (NB_LIGNES%)* (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2
  FONT_SIZE ind%,22 :  FONT_NAME ind%,"Times New Roman" :  CAPTION ind%,"C'est au tour de jouer de : "
  2D_TARGET_IS 0 :Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
  Aff_tour% = 1
END_SUB

SUB VIDER()
DIM_LOCAL i%, j%  : ' parcourir les cases de la grille pour la vider
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = VIDE%
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = 0
NEXT j%
END_SUB

SUB CREER_FENETRE_DEBUG()
DIM_LOCAL i%,j%, ind%
ind% = 200
  FORM F_Debug%
  LEFT  F_Debug%, WIDTH(0) +50
  CAPTION F_Debug%,"Debug"
  M_Debug% = ind%
  ALPHA ind% :  PARENT ind%, F_Debug%
  LEFT ind%, 10 : WIDTH ind%, WIDTH(F_Debug%) - 20
  TOP ind%, 10
  FOR i% = 1 TO NB_LIGNES% + 2
    ALPHA ind%+i% :  PARENT ind%+i%, F_Debug%
    LEFT ind%+i%, 10 : WIDTH ind%+i%, WIDTH(F_Debug%) - 20
    TOP ind%+i%, 10 + 13*(NB_LIGNES% - i% +4)
  NEXT i%
END_SUB

SUB DEBUG_GRILLE()
DIM_LOCAL i%,j%, ind%, T$
ind% = 200
  FOR i% = 1 TO NB_LIGNES%
    T$ = ""
    FOR j% = 1 TO NB_COLONNES%
      T$=T$ + RIGHT$("  "+ STR$(Grille%(j%, i%)),3)
    NEXT j%
    CAPTION ind%+i%, T$
  NEXT i%
  T$ = ""
  FOR j% = 1 TO NB_COLONNES%
      T$=T$ + RIGHT$("  "+ STR$(Colonnes%(j%)),3)
  NEXT j%
  CAPTION ind%+NB_LIGNES% + 2, T$
END_SUB

rem ====================================' détection des dimensions de la fenêtre
SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
      MESSAGE "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
      TERMINATE
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 THEN DIM bandeau%
    IF VARIABLE("bord%")=0 THEN DIM bord%
    ' Calcul de bandeau% et bord%
    DIM_LOCAL w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    PICTURE 1 : FULL_SPACE 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    DELETE 1
END_SUB

SUB AIDE()
DIM_LOCAL a$
' Système d`aide du programme
  APPLICATION_TITLE "Règles du jeu PUISSANCE 4"
  a$="  Le but du jeu est d'aligner 4 pions de sa couleur dans le sens"+chr$(13)
  a$=a$+"horizontal, vertical ou diagonal. Le premier qui réalise cela a"+chr$(13)
  a$=a$+"gagné et le jeu s'arrête. Si toutes les cases du jeu sont remplies"+chr$(13)
  a$=a$+"sans que cela ait pu être réalisé, alors la partie est nulle."+chr$(13)+chr$(13)
  a$=a$+"Cliquez dans une colonne avec au moins un emplacement de libre"+chr$(13)
  a$=a$+"pour lacher le pion dans cette colonne"
  MESSAGE a$
END_SUB

SUB Dessine_Pion(Col%,Ligne,Couleur%)
    IF Couleur% = JAUNE%
      2D_FILL_COLOR 230,230,50
    ELSE
      2D_FILL_COLOR 240,50,50
    END_IF
    2D_CIRCLE Col% * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2, Ligne * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2,  Largeur_pion% / 2
END_SUB

SUB Fin()
    wait 2000
    Terminate
END_SUB

SUB Verifie_victoire(COLONNE%,LIGNE%)
dim_local i%,j%,k%, pions%
resultat%=0
for i%=1 to NB_COLONNES% - 3
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%+k%,j%+k%)
        next k%
        if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
      next j%
next i%

for i%=4 to NB_COLONNES%
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%-k%,j%+k%)
        next k%
        if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
      next j%
next i%

i%=COLONNE%
for j%=1 to 3
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%,j%+k%)
      next k%
      if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
next j%

j% = LIGNE%
for i%=1 to (NB_COLONNES% - 3) : rem Horizontale
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%+k%,j%)
      next k%
      if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
next i%

END_SUB

SUB Change_Tour()
      IF Tour% = JAUNE%
          Tour% = ROUGE%
      ELSE
          Tour% = JAUNE%
      END_IF
      IF Aff_tour% = 1 THEN 2D_TARGET_IS 0 : Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
END_SUB

SUB Sauve_grille()
dim_local i%,j%
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Sauve_Grille%(j%,i%) = Grille%(j%,i%)
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Sauve_Colonnes%(j%) = Colonnes%(j%)
NEXT j%
END_SUB

SUB Restore_grille()
dim_local i%,j%
NB_VIDES% =  NB_VIDES% + 1
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = Sauve_Grille%(j%,i%)
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = Sauve_Colonnes%(j%)
NEXT j%
END_SUB

SUB Ordi_joue()
dim_local i%,j%, sortie%

sortie% = 0
  Sauve_grille()
  ' Essaye de gagner
  FOR j% = 1 TO NB_COLONNES%
    IF Colonnes%(j%) < NB_LIGNES%
      Ajoute_Pion(j%)
      Verifie_victoire(j%, Colonnes%(j%))
      IF resultat% = 4 * C_Ordi%
        Dessine_Pion2(j%)
        Victoire()
        j% = NB_COLONNES% : sortie% = 1
      ELSE
        Restore_grille()
      END_IF
    END_IF
  NEXT j%
  ' Empèche l'adversaire de gagner
  IF sortie% = 0
    Aff_tour% = 0 : Change_tour()
    FOR j% = 1 TO NB_COLONNES%
      IF Colonnes%(j%) < NB_LIGNES%
        Ajoute_Pion(j%)
        Verifie_victoire(j%, Colonnes%(j%))
        IF abs(resultat%) = 4
          Message$ =  "Jeu auto en" + STR$(j%)
          IF Debug% = 1 THEN CAPTION M_Debug%, Message$  : WAIT Tps_Msg_Debug%
          Restore_grille(): Change_tour()
          Ajoute_Pion(j%) : Dessine_Pion2(j%)
          j% = NB_COLONNES% : sortie%= 1 : Change_tour()
        ELSE
          Restore_grille()
        END_IF
      END_IF
    NEXT j%
    Aff_tour% = 1 : Change_tour()
  END_IF
  ' A développer pour autres cas
  ' Sinon joue où il y a de la place
j% = 1
WHILE ((j% < NB_COLONNES%) AND (sortie% = 0))
    IF Colonnes%(j%) < NB_LIGNES% AND sortie% = 0
      Message$ =  "L'ordinateur joue dans la colonne n°" + STR$(j%)
      IF Debug% = 1 THEN CAPTION M_Debug%, Message$ : WAIT Tps_Msg_Debug%
      Ajoute_Pion(j%)
      Dessine_Pion2(j%)
      sortie% = 1
    END_IF
    j% = j%+1
END_WHILE

END_SUB

SUB Ajoute_Pion(Col%)
      Colonnes%(Col%) = Colonnes%(Col%) + 1
      Grille%(Col%, Colonnes%(Col%)) = Tour%
      NB_VIDES% =  NB_VIDES% - 1
END_SUB

SUB Dessine_Pion2(Colonne%)
  2D_TARGET_IS N_Grille%
  Dessine_Pion(Colonne% -1, NB_LIGNES% - Colonnes%(Colonne%),Tour%)
END_SUB

SUB Victoire()
        BEEP
        message$="Bravo, la partie est finie"+ CHR$(13) + "LES "
        IF resultat%= 4*JAUNE% THEN message$=message$+"JAUNES"
        IF resultat%= 4*ROUGE% THEN message$=message$+"ROUGES"
        message$=message$ + " ONT GAGNE !"
        IF MESSAGE_CONFIRMATION_OK(message$) > -1 THEN Fin()
        IF Debug% = 1
            CAPTION M_Debug%, Message$
        END_IF
        Fin()
END_SUB

Clic:
OFF_CLICK N_Grille%
    Num% = INT((MOUSE_X_POSITION(N_Grille%) - 0.5 * Bordure%) / (Largeur_pion% + Bordure%)) + 1
    Message$ =  "Clic sur la colonne n°" + STR$(Num%)
    IF Debug% = 1 THEN CAPTION M_Debug%, Message$
    IF Colonnes%(Num%) < NB_LIGNES%
      Ajoute_Pion(Num%)
      Dessine_Pion2(Num%)
      Verifie_victoire(Num%, Colonnes%(Num%))
      IF resultat%<>0 THEN Victoire()
      IF NB_VIDES% = 0
        message$="Partie nulle, la grille est pleine" +CHR$(13)
        message$=message$+"Personne n'a réussi à gagner"
        IF MESSAGE_CONFIRMATION_OK(message$) > -1 THEN Fin()
        IF Debug% = 1
            CAPTION M_Debug%, Message$
        END_IF
        Fin()
      END_IF
      IF Debug% = 1 THEN DEBUG_GRILLE()
      Change_Tour()
    END_IF
    Ordi_joue()
    IF Debug% = 1 THEN DEBUG_GRILLE()
    Change_Tour()
ON_CLICK N_Grille%,clic
RETURN
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyMer 4 Jan 2017 - 8:13

Bravo Jicehel,

Je viens de faire une dizaine de parties avec ce dernier code.

Je n'ai rien constaté d'anormale dans le déroulement du jeu.
Je n'ai pas gagné à tous les coups, mais ça reste assez facile.

Une remarque: une erreur de frappe: "c'est le tour de jouer de :"

Sinon, j'ai remarqué que l'ordi commence toujours sa partie dans la même colonne. Ce qui permet au joueur de gagner à tous les coups (dès qu'il a trouvé une première fois, il lui suffit de refaire pareil à chaque fois).

En tous cas bravo !
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyMer 4 Jan 2017 - 8:30

Un exemple de configuration ou je gagne à tous les coups.

Une premiere version de puissance 4 Image_12
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyMer 4 Jan 2017 - 10:24

Oui, on est d'accord la dessus Jean-Claude, j'ai fait les 2 premiers cas (le test pour gagner et pour empêcher l'autre de gagner) et il était tard alors j'ai rapidement codé un petit truc pour que l'ordi joue dans les autres cas mais il n'a aucune stratégie ni aucun aléa.
Là je suis au boulot, mais il faudrait qu'il estime s'il joue dans un case si l'adversaire risque de gagner au tour suivant pour éliminer cette case s'il peut jouer ailleurs.
Il faudrait un petit tableau avec les colonnes où il peut jouer puis qu'il fasse un tirage aléatoire pour jouer dans une de ces colonnes.
Je pense que je pourrais coder ça ce soir et ça rendra le jeu plus intéressant et moins prévisible.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyMer 4 Jan 2017 - 11:13

L'important, c'est que l'ordinateur recherche en priorité à bloquer son adversaire dès que celui-çi a aligné trois pions.
C'est déjà le cas dans ton code.
Si son adversaire n'a pas encore aligné 3 pions, alors tu peux autoriser l'ordinateur à placer son pion de manière aléatoire.

J'espère que mon explication n'est pas trop brouillonne.  drunken

Pour le premier pion, là tu peux le faire aléatoire d'entrée.

A+
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyMer 4 Jan 2017 - 20:47

Une premiere version de puissance 4 Image_13


Je pense que c'est la case vide (ligne 3 colonne 5) qui n'a pas été prise en compte.

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyJeu 5 Jan 2017 - 0:34

Non, non, pas de problème. Si tu regardes bien, ils ont bien gagné en diagonal entre la colonne 1 et la colonne 4

J'ai codé le coté aléatoire qui va rendre le jeu un peu plus intéressant, un peu plus compliqué aussi mais faisable pour rester amusant car l'ordinateur ne joue qu'en défense sans stratégie d'attaque.

Bon jeu à vous. Il reste des conditions de fin à vérifier (Je n'ai pas contrôlé le décompte des pions mais il est tard et je vais aller me coucher) mais il y a de quoi s'amuser et si vous voyez des bugs, je sais que vous me les direz Wink

PS: Le source et libre alors si vous voulez l'optimiser, améliorer le source, ajouter des commentaires ou autres modifications, faites vous plaisir.

Code:
' Puissance 4 version 1 (Simple)
' Mode contre l'ordinateur
' Dessin simple sans animation
' Les jaunes commencent toujours

' Définir le type pour une case de la grille
' Case = 0 => ROUGE; 1 => JAUNE; 2 => VIDE
DIM ROUGE% : ROUGE% = -1
DIM JAUNE% : JAUNE% = 1
DIM VIDE%  : VIDE%  = 0
DIM C_ORDI% :' Couleur des pions de l'odinateur

' Définir la grille de jeu
DIM NB_COLONNES% : NB_COLONNES% = 7
DIM NB_LIGNES%  : NB_LIGNES%  = 6
DIM NB_VIDES% : NB_VIDES% = NB_COLONNES% * NB_LIGNES%

' La grille de jeu avec une bordure supplémentaire
DIM Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Sauve_Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Colonnes%(NB_COLONNES%),Sauve_Colonnes%(NB_COLONNES%)

' Programmation du mode de debuggage
DIM Debug% : Debug% = 1 : ' Mettre à 1 pour activer le mode debug
DIM F_Debug% : F_Debug% = 1
DIM M_Debug%, Tps_Msg_Debug%  : Tps_Msg_Debug% = 1500

' Tailles des éléments du jeu
DIM Marge% : Marge% = 20
DIM Bordure% : Bordure% = 10
DIM Largeur_pion% : Largeur_pion% = 60

' Définition des numéro d'objet
DIM N_Grille% : N_Grille% = 10

DIM Num%, Message$, resultat%
DIM Tour%, Aff_tour%, sortie%

DIM NB_jouables%, col_jouables%(NB_COLONNES%)

LABEL Clic

Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord% pour portabilité

INIT()
AIDE()
IF Debug% = 1 THEN CREER_FENETRE_DEBUG()

CREER_GRILLE()
VIDER()
SHOW 0
C_ORDI% = JAUNE%
IF Tour% = C_ORDI% THEN Ajoute_Pion(4) : Dessine_Pion2(4) : Change_Tour()
IF Debug% = 1 THEN DEBUG_GRILLE()
ON_CLICK N_Grille%,clic
END

SUB CREER_GRILLE()
DIM_LOCAL Decal_x,Decal_y, i%, j%, r
  PICTURE N_Grille% : LEFT N_Grille%, Marge% : TOP N_Grille%, Marge%
  WIDTH N_Grille%,  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%)
  HEIGHT N_Grille%, Bordure% + NB_LIGNES% * (Largeur_pion% + Bordure%)
  COLOR N_Grille%,0,0,255 : 2D_FILL_COLOR 50,50,50
  2D_TARGET_IS N_Grille%
  r =  Largeur_pion% / 2
  Decal_y = Bordure%

  FOR i% = 1 TO NB_LIGNES%
    Decal_x = Bordure%
    FOR j% = 1 TO NB_COLONNES%
        2D_CIRCLE Decal_x + r, Decal_y +  r,  r
        Decal_x = Decal_x +  Largeur_pion% + Bordure%
    NEXT j%
    Decal_y = Decal_y +  Largeur_pion% + Bordure%
  NEXT i%
END_SUB

SUB INIT()
DIM_LOCAL Largeur%, Hauteur%, ind%
  HIDE 0
  Largeur% =  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  WIDTH 0, Largeur%
  Hauteur% =  2*Bordure% + (NB_LIGNES% + 1 ) * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  HEIGHT 0, Hauteur% + bandeau%
  CAPTION 0,"  P U I S S A N C E  4"
  Tour% = JAUNE%
  ind% = 3 : ALPHA ind% : LEFT ind%, Marge% + 10 : TOP ind%, (NB_LIGNES%)* (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2
  FONT_SIZE ind%,22 :  FONT_NAME ind%,"Times New Roman" :  CAPTION ind%,"C'est au tour de jouer de : "
  2D_TARGET_IS 0 :Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
  Aff_tour% = 1
END_SUB

SUB VIDER()
DIM_LOCAL i%, j%  : ' parcourir les cases de la grille pour la vider
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = VIDE%
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = 0
NEXT j%
END_SUB

SUB CREER_FENETRE_DEBUG()
DIM_LOCAL i%,j%, ind%
ind% = 200
  FORM F_Debug%
  LEFT  F_Debug%, WIDTH(0) +50
  CAPTION F_Debug%,"Debug"
  M_Debug% = ind%
  ALPHA ind% :  PARENT ind%, F_Debug%
  LEFT ind%, 10 : WIDTH ind%, WIDTH(F_Debug%) - 20
  TOP ind%, 10
  FOR i% = 1 TO NB_LIGNES% + 2
    ALPHA ind%+i% :  PARENT ind%+i%, F_Debug%
    LEFT ind%+i%, 10 : WIDTH ind%+i%, WIDTH(F_Debug%) - 20
    TOP ind%+i%, 10 + 13*(NB_LIGNES% - i% +4)
  NEXT i%
END_SUB

SUB DEBUG_GRILLE()
DIM_LOCAL i%,j%, ind%, T$
ind% = 200
  FOR i% = 1 TO NB_LIGNES%
    T$ = ""
    FOR j% = 1 TO NB_COLONNES%
      T$=T$ + RIGHT$("  "+ STR$(Grille%(j%, i%)),3)
    NEXT j%
    CAPTION ind%+i%, T$
  NEXT i%
  T$ = ""
  FOR j% = 1 TO NB_COLONNES%
      T$=T$ + RIGHT$("  "+ STR$(Colonnes%(j%)),3)
  NEXT j%
  CAPTION ind%+NB_LIGNES% + 2, T$
END_SUB

rem ====================================' détection des dimensions de la fenêtre
SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
      MESSAGE "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
      TERMINATE
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 THEN DIM bandeau%
    IF VARIABLE("bord%")=0 THEN DIM bord%
    ' Calcul de bandeau% et bord%
    DIM_LOCAL w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    PICTURE 1 : FULL_SPACE 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    DELETE 1
END_SUB

SUB AIDE()
DIM_LOCAL a$
' Système d`aide du programme
  APPLICATION_TITLE "Règles du jeu PUISSANCE 4"
  a$="  Le but du jeu est d'aligner 4 pions de sa couleur dans le sens"+chr$(13)
  a$=a$+"horizontal, vertical ou diagonal. Le premier qui réalise cela a"+chr$(13)
  a$=a$+"gagné et le jeu s'arrête. Si toutes les cases du jeu sont remplies"+chr$(13)
  a$=a$+"sans que cela ait pu être réalisé, alors la partie est nulle."+chr$(13)+chr$(13)
  a$=a$+"Cliquez dans une colonne avec au moins un emplacement de libre"+chr$(13)
  a$=a$+"pour lacher le pion dans cette colonne"
  MESSAGE a$
END_SUB

SUB Dessine_Pion(Col%,Ligne,Couleur%)
    IF Couleur% = JAUNE%
      2D_FILL_COLOR 230,230,50
    ELSE
      2D_FILL_COLOR 240,50,50
    END_IF
    2D_CIRCLE Col% * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2, Ligne * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2,  Largeur_pion% / 2
END_SUB

SUB Fin()
    wait 2000
    Terminate
END_SUB

SUB Verifie_victoire(COLONNE%,LIGNE%)
dim_local i%,j%,k%, pions%
resultat%=0
for i%=1 to NB_COLONNES% - 3
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%+k%,j%+k%)
        next k%
        if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
      next j%
next i%

for i%=4 to NB_COLONNES%
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%-k%,j%+k%)
        next k%
        if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
      next j%
next i%

i%=COLONNE%
for j%=1 to (NB_LIGNES% - 3)
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%,j%+k%)
      next k%
      if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
next j%

j% = LIGNE%
for i%=1 to (NB_COLONNES% - 3) : rem Horizontale
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%+k%,j%)
      next k%
      if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
next i%

END_SUB

SUB Change_Tour()
      IF Tour% = JAUNE%
          Tour% = ROUGE%
      ELSE
          Tour% = JAUNE%
      END_IF
      IF Aff_tour% = 1 THEN 2D_TARGET_IS 0 : Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
END_SUB

SUB Sauve_grille()
dim_local i%,j%
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Sauve_Grille%(j%,i%) = Grille%(j%,i%)
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Sauve_Colonnes%(j%) = Colonnes%(j%)
NEXT j%
END_SUB

SUB Restore_grille()
dim_local i%,j%
NB_VIDES% =  NB_VIDES% + 1
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = Sauve_Grille%(j%,i%)
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = Sauve_Colonnes%(j%)
NEXT j%
END_SUB

SUB Ordi_essai_gagne()
dim_local j%
  FOR j% = 1 TO NB_COLONNES%
    IF Colonnes%(j%) < NB_LIGNES%
      Ajoute_Pion(j%)
      Verifie_victoire(j%, Colonnes%(j%))
      IF resultat% = 4 * C_Ordi%
        Dessine_Pion2(j%)
        Victoire()
        j% = NB_COLONNES% : sortie% = 1
      ELSE
        Restore_grille()
      END_IF
    END_IF
  NEXT j%
END_SUB

SUB Ordi_empeche_victoire()
dim_local j%
 Aff_tour% = 0 : Change_tour()
 FOR j% = 1 TO NB_COLONNES%
  IF Colonnes%(j%) < NB_LIGNES%
    Ajoute_Pion(j%)
    Verifie_victoire(j%, Colonnes%(j%))
    IF ABS(resultat%) = 4
      Message$ =  "Jeu auto en" + STR$(j%)
      IF Debug% = 1 THEN CAPTION M_Debug%, Message$  : WAIT Tps_Msg_Debug%
      Restore_grille()
      Change_tour()
      Ajoute_Pion(j%)
      Dessine_Pion2(j%)
      j% = NB_COLONNES% : sortie%= 1 : Change_tour()
    ELSE
      Restore_grille()
    END_IF
  END_IF
 NEXT j%
 Aff_tour% = 1 : Change_tour()
END_SUB

SUB Ordi_empeche_victoire_suiv()
dim_local i%,j%
 Aff_tour% = 0 : NB_jouables% = 0
 FOR j% = 1 TO NB_COLONNES%
  IF Colonnes%(j%) < (NB_LIGNES% - 1)
    Ajoute_Pion(j%) : Change_tour() : Ajoute_Pion(j%)
    Verifie_victoire(j%, Colonnes%(j%))
    IF ABS(resultat%) <> 4
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
    END_IF
    Restore_grille(): NB_VIDES% =  NB_VIDES% + 1 : Change_tour()
  ELSE
    IF Colonnes%(j%) = NB_LIGNES%
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
        Restore_grille()
    END_IF
  END_IF
 NEXT j%
 IF NB_jouables% = 0
  FOR j% = 1 TO NB_COLONNES%
    IF Colonnes%(j%) < NB_LIGNES%
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
    END_IF
  NEXT j%
  i%=INT(RND(NB_jouables%))+1
  Message$ =  "L'ordinateur joue dans la colonne n°" + STR$(col_jouables%(i%))
  IF Debug% = 1 THEN CAPTION M_Debug%, Message$ : WAIT Tps_Msg_Debug%
  Ajoute_Pion(col_jouables%(i%))
  Dessine_Pion2(col_jouables%(i%))
  sortie% = 1
 ELSE
  i%=INT(RND(NB_jouables%))+1
  Message$ =  "L'ordinateur joue dans la colonne n°" + STR$(col_jouables%(i%))
  IF Debug% = 1 THEN CAPTION M_Debug%, Message$ : WAIT Tps_Msg_Debug%
  Ajoute_Pion(col_jouables%(i%))
  Dessine_Pion2(col_jouables%(i%))
  sortie% = 1
 END_IF
 Aff_tour% = 1
END_SUB

SUB Ordi_joue()
dim_local i%,j%

sortie% = 0
  Sauve_grille()
  Ordi_essai_gagne()
  IF sortie% = 0 THEN Ordi_empeche_victoire()
  IF sortie% = 0 AND NB_VIDES% > 1 THEN Ordi_empeche_victoire_suiv()
END_SUB

SUB Ajoute_Pion(Col%)
      Colonnes%(Col%) = Colonnes%(Col%) + 1
      Grille%(Col%, Colonnes%(Col%)) = Tour%
      NB_VIDES% =  NB_VIDES% - 1
END_SUB

SUB Dessine_Pion2(Colonne%)
  2D_TARGET_IS N_Grille%
  Dessine_Pion(Colonne% -1, NB_LIGNES% - Colonnes%(Colonne%),Tour%)
END_SUB

SUB Victoire()
        BEEP
        message$="Bravo, la partie est finie"+ CHR$(13) + "LES "
        IF resultat%= 4*JAUNE% THEN message$=message$+"JAUNES"
        IF resultat%= 4*ROUGE% THEN message$=message$+"ROUGES"
        message$=message$ + " ONT GAGNE !"
        IF MESSAGE_CONFIRMATION_OK(message$) > -1 THEN Fin()
        IF Debug% = 1
            CAPTION M_Debug%, Message$
        END_IF
        Fin()
END_SUB

Clic:
OFF_CLICK N_Grille%
    Num% = INT((MOUSE_X_POSITION(N_Grille%) - 0.5 * Bordure%) / (Largeur_pion% + Bordure%)) + 1
    Message$ =  "Clic sur la colonne n°" + STR$(Num%)
    IF Debug% = 1 THEN CAPTION M_Debug%, Message$
    IF Colonnes%(Num%) < NB_LIGNES%
      Ajoute_Pion(Num%)
      Dessine_Pion2(Num%)
      Verifie_victoire(Num%, Colonnes%(Num%))
      IF resultat%<>0 THEN Victoire()
      IF NB_VIDES% = 0
        message$="Partie nulle, la grille est pleine" +CHR$(13)
        message$=message$+"Personne n'a réussi à gagner"
        IF MESSAGE_CONFIRMATION_OK(message$) > -1 THEN Fin()
        IF Debug% = 1
            CAPTION M_Debug%, Message$
        END_IF
        Fin()
      END_IF
      IF Debug% = 1 THEN DEBUG_GRILLE()
      Change_Tour()
    END_IF
    Ordi_joue()
    IF Debug% = 1 THEN DEBUG_GRILLE()
    Change_Tour()
ON_CLICK N_Grille%,clic
RETURN
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyJeu 5 Jan 2017 - 7:50

Bonjour à tous,

@Jicehel
J'ai eu un crash au premier essai.
Dommage car le jeu se passait bien.
La stratégie de défense de l'ordinateur est impitoyable, ça en deviendrait presque une forme de stratégie d'attaque.

Pour le bug j'ai réussi à capturer en 2 temps, tout y est.

Une premiere version de puissance 4 Image_14

Une premiere version de puissance 4 Image_15

PS : Ce n'est pas très visible sur l'image: "Debug (ne répond pas)"
Précision: je vennais de jouer en colonne 6.

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyVen 6 Jan 2017 - 1:12

En effet, j'ai trouvé 2 grosses erreurs de logique dans mon programme (ça ne veut pas dire qu'il n'y en a pas d'autres Wink )
J'ai corrigé et j'ai testé un peu, ça marche plutôt bien.
Pour moi ça me convient dans l'état pour le moment. Mais si vous voulez améliorer, corriger des petites choses ou faire vos versions à vous, faites vous plaisir.
Code:
' Puissance 4 version 1 (Simple)
' Mode contre l'ordinateur
' Dessins simples sans animation
' Les jaunes commencent toujours et sont jou par l'ordinateur

' Définir le type pour une case de la grille
' Case = 0 => ROUGE; 1 => JAUNE; 2 => VIDE
DIM ROUGE% : ROUGE% = -1
DIM JAUNE% : JAUNE% = 1
DIM VIDE%  : VIDE%  = 0
DIM C_ORDI% :' Couleur des pions de l'odinateur

' Définir la grille de jeu
DIM NB_COLONNES% : NB_COLONNES% = 7
DIM NB_LIGNES%  : NB_LIGNES%  = 6
DIM NB_VIDES% : NB_VIDES% = NB_COLONNES% * NB_LIGNES%

' La grille de jeu avec une bordure supplémentaire
DIM Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Sauve_Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Colonnes%(NB_COLONNES%),Sauve_Colonnes%(NB_COLONNES%)

' Programmation du mode de debuggage
DIM Debug% : Debug% = 0 : ' Mettre à 1 pour activer le mode debug
DIM F_Debug% : F_Debug% = 1
DIM M_Debug%, Tps_Msg_Debug%  : Tps_Msg_Debug% = 1500

' Tailles des éléments du jeu
DIM Marge% : Marge% = 20
DIM Bordure% : Bordure% = 10
DIM Largeur_pion% : Largeur_pion% = 60

' Définition des numéro d'objet
DIM N_Grille% : N_Grille% = 10

DIM Num%, Message$, resultat%
DIM Tour%, Aff_tour%, sortie%

DIM NB_jouables%, col_jouables%(NB_COLONNES%)

LABEL Clic

Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord% pour portabilité

INIT()
AIDE()
IF Debug% = 1 THEN CREER_FENETRE_DEBUG()

CREER_GRILLE()
VIDER()
SHOW 0
C_ORDI% = JAUNE%
IF Tour% = C_ORDI% THEN Ajoute_Pion(4) : Dessine_Pion2(4) : Change_Tour()
IF Debug% = 1 THEN DEBUG_GRILLE()
ON_CLICK N_Grille%,clic
END

SUB CREER_GRILLE()
DIM_LOCAL Decal_x,Decal_y, i%, j%, r
  PICTURE N_Grille% : LEFT N_Grille%, Marge% : TOP N_Grille%, Marge%
  WIDTH N_Grille%,  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%)
  HEIGHT N_Grille%, Bordure% + NB_LIGNES% * (Largeur_pion% + Bordure%)
  COLOR N_Grille%,0,0,255 : 2D_FILL_COLOR 50,50,50
  2D_TARGET_IS N_Grille%
  r =  Largeur_pion% / 2
  Decal_y = Bordure%

  FOR i% = 1 TO NB_LIGNES%
    Decal_x = Bordure%
    FOR j% = 1 TO NB_COLONNES%
        2D_CIRCLE Decal_x + r, Decal_y +  r,  r
        Decal_x = Decal_x +  Largeur_pion% + Bordure%
    NEXT j%
    Decal_y = Decal_y +  Largeur_pion% + Bordure%
  NEXT i%
END_SUB

SUB INIT()
DIM_LOCAL Largeur%, Hauteur%, ind%
  HIDE 0
  Largeur% =  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  WIDTH 0, Largeur%
  Hauteur% =  2*Bordure% + (NB_LIGNES% + 1 ) * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  HEIGHT 0, Hauteur% + bandeau%
  CAPTION 0,"  P U I S S A N C E  4"
  Tour% = JAUNE%
  ind% = 3 : ALPHA ind% : LEFT ind%, Marge% + 10 : TOP ind%, (NB_LIGNES%)* (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2
  FONT_SIZE ind%,22 :  FONT_NAME ind%,"Times New Roman" :  CAPTION ind%,"C'est au tour de jouer de : "
  2D_TARGET_IS 0 :Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
  Aff_tour% = 1
END_SUB

SUB VIDER()
DIM_LOCAL i%, j%  : ' parcourir les cases de la grille pour la vider
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = VIDE%
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = 0
NEXT j%
END_SUB

SUB CREER_FENETRE_DEBUG()
DIM_LOCAL i%,j%, ind%
ind% = 200
  FORM F_Debug%
  LEFT  F_Debug%, WIDTH(0) +50 : WIDTH F_Debug%,600
  CAPTION F_Debug%,"Debug"
  M_Debug% = ind%
  ALPHA ind% :  PARENT ind%, F_Debug%
  LEFT ind%, 10 : WIDTH ind%, WIDTH(F_Debug%) - 20
  TOP ind%, 10
  FOR i% = 1 TO NB_LIGNES% + 2
    ALPHA ind%+i% :  PARENT ind%+i%, F_Debug%
    LEFT ind%+i%, 10 : WIDTH ind%+i%, WIDTH(F_Debug%) - 20
    TOP ind%+i%, 10 + 13*(NB_LIGNES% - i% +4)
  NEXT i%
END_SUB

SUB DEBUG_GRILLE()
DIM_LOCAL i%,j%, ind%, T$
ind% = 200
  FOR i% = 1 TO NB_LIGNES%
    T$ = ""
    FOR j% = 1 TO NB_COLONNES%
      T$=T$ + RIGHT$("  "+ STR$(Grille%(j%, i%)),3)
    NEXT j%
    CAPTION ind%+i%, T$
  NEXT i%
  T$ = ""
  FOR j% = 1 TO NB_COLONNES%
      T$=T$ + RIGHT$("  "+ STR$(Colonnes%(j%)),3)
  NEXT j%
  CAPTION ind%+NB_LIGNES% + 2, T$
END_SUB

rem ====================================' détection des dimensions de la fenêtre
SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
      MESSAGE "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
      TERMINATE
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 THEN DIM bandeau%
    IF VARIABLE("bord%")=0 THEN DIM bord%
    ' Calcul de bandeau% et bord%
    DIM_LOCAL w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    PICTURE 1 : FULL_SPACE 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    DELETE 1
END_SUB

SUB AIDE()
DIM_LOCAL a$
' Système d`aide du programme
  APPLICATION_TITLE "Règles du jeu PUISSANCE 4"
  a$="  Le but du jeu est d'aligner 4 pions de sa couleur dans le sens"+chr$(13)
  a$=a$+"horizontal, vertical ou diagonal. Le premier qui réalise cela a"+chr$(13)
  a$=a$+"gagné et le jeu s'arrête. Si toutes les cases du jeu sont remplies"+chr$(13)
  a$=a$+"sans que cela ait pu être réalisé, alors la partie est nulle."+chr$(13)+chr$(13)
  a$=a$+"Cliquez dans une colonne avec au moins un emplacement de libre"+chr$(13)
  a$=a$+"pour lacher le pion dans cette colonne"
  MESSAGE a$
END_SUB

SUB Dessine_Pion(Col%,Ligne,Couleur%)
    IF Couleur% = JAUNE%
      2D_FILL_COLOR 230,230,50
    ELSE
      2D_FILL_COLOR 240,50,50
    END_IF
    2D_CIRCLE Col% * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2, Ligne * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2,  Largeur_pion% / 2
END_SUB

SUB Fin()
    wait 2000
    Terminate
END_SUB

SUB Verifie_victoire(COLONNE%,LIGNE%)
dim_local i%,j%,k%, pions%
resultat%=0
for i%=1 to NB_COLONNES% - 3
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%+k%,j%+k%)
        next k%
        if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
      next j%
next i%

for i%=4 to NB_COLONNES%
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%-k%,j%+k%)
        next k%
        if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
      next j%
next i%

i%=COLONNE%
for j%=1 to (NB_LIGNES% - 3)
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%,j%+k%)
      next k%
      if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
next j%

j% = LIGNE%
for i%=1 to (NB_COLONNES% - 3) : rem Horizontale
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%+k%,j%)
      next k%
      if pions%=4*ROUGE% or pions%=4*JAUNE% then resultat%=pions%
next i%

END_SUB

SUB Change_Tour()
      IF Tour% = JAUNE%
          Tour% = ROUGE%
      ELSE
          Tour% = JAUNE%
      END_IF
      IF Aff_tour% = 1 THEN 2D_TARGET_IS 0 : Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
END_SUB

SUB Sauve_grille()
dim_local i%,j%
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Sauve_Grille%(j%,i%) = Grille%(j%,i%)
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Sauve_Colonnes%(j%) = Colonnes%(j%)
NEXT j%
END_SUB

SUB Restore_grille()
dim_local i%,j%
NB_VIDES% =  NB_VIDES% + 1
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = Sauve_Grille%(j%,i%)
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = Sauve_Colonnes%(j%)
NEXT j%
END_SUB

SUB Ordi_essai_gagne()
dim_local j%
  FOR j% = 1 TO NB_COLONNES%
    IF Colonnes%(j%) < NB_LIGNES%
      Ajoute_Pion(j%)
      Verifie_victoire(j%, Colonnes%(j%))
      IF resultat% = 4 * C_Ordi%
        Dessine_Pion2(j%)
        Victoire()
        j% = NB_COLONNES% : sortie% = 1
      ELSE
        Restore_grille()
      END_IF
    END_IF
  NEXT j%
END_SUB

SUB Ordi_empeche_victoire()
dim_local j%
 Aff_tour% = 0 : Change_tour()
 FOR j% = 1 TO NB_COLONNES%
  IF Debug% = 1 THEN CAPTION F_Debug%, "Colonnes%(" + STR$(j%) + "): "+STR$(Colonnes%(j%))+ " - Ordi_empeche_victoire"
  IF Colonnes%(j%) < NB_LIGNES%
    Ajoute_Pion(j%)
    Verifie_victoire(j%, Colonnes%(j%))
    IF ABS(resultat%) = 4
      Message$ =  "Jeu auto en" + STR$(j%)
      IF Debug% = 1 THEN CAPTION M_Debug%, Message$  : WAIT Tps_Msg_Debug%
      Restore_grille()
      Change_tour()
      Ajoute_Pion(j%)
      Dessine_Pion2(j%)
      j% = NB_COLONNES% : sortie%= 1 : Change_tour()
    ELSE
      Restore_grille()
    END_IF
  END_IF
 NEXT j%
 Aff_tour% = 1 : Change_tour()
END_SUB

SUB Ordi_empeche_victoire_suiv()
dim_local i%,j%
 Aff_tour% = 0 : NB_jouables% = 0
 FOR j% = 1 TO NB_COLONNES%
  IF Debug% = 1 THEN CAPTION F_Debug%, "Colonnes%(" + STR$(j%) + "): "+STR$(Colonnes%(j%))+ " - Ordi_empeche_victoire_suiv"
  IF Colonnes%(j%) < (NB_LIGNES% - 1)
    Ajoute_Pion(j%) : Change_tour() : Ajoute_Pion(j%)
    Verifie_victoire(j%, Colonnes%(j%))
    IF ABS(resultat%) <> 4
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
    END_IF
    Restore_grille(): NB_VIDES% =  NB_VIDES% + 1 : Change_tour()
  ELSE
    IF Colonnes%(j%) = (NB_LIGNES% - 1)
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
        Restore_grille()
    END_IF
  END_IF
 NEXT j%
 IF NB_jouables% = 0
  FOR j% = 1 TO NB_COLONNES%
    IF Colonnes%(j%) < NB_LIGNES%
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
    END_IF
  NEXT j%
  i%=INT(RND(NB_jouables%))+1
  Message$ =  "L'ordinateur joue dans la colonne n°" + STR$(col_jouables%(i%))
  IF Debug% = 1 THEN CAPTION M_Debug%, Message$ : WAIT Tps_Msg_Debug%
  Ajoute_Pion(col_jouables%(i%))
  Dessine_Pion2(col_jouables%(i%))
  sortie% = 1
 ELSE
  i%=INT(RND(NB_jouables%))+1
  Message$ =  "L'ordinateur joue dans la colonne n°" + STR$(col_jouables%(i%))
  IF Debug% = 1 THEN CAPTION M_Debug%, Message$ : WAIT Tps_Msg_Debug%
  Ajoute_Pion(col_jouables%(i%))
  Dessine_Pion2(col_jouables%(i%))
  sortie% = 1
 END_IF
 Aff_tour% = 1
END_SUB

SUB Ordi_joue()
dim_local i%,j%

sortie% = 0
  Sauve_grille()
  Ordi_essai_gagne()
  IF sortie% = 0 THEN Ordi_empeche_victoire()
  IF sortie% = 0 AND NB_VIDES% > 1 THEN Ordi_empeche_victoire_suiv()
END_SUB

SUB Ajoute_Pion(Col%)
      Colonnes%(Col%) = Colonnes%(Col%) + 1
      Grille%(Col%, Colonnes%(Col%)) = Tour%
      NB_VIDES% =  NB_VIDES% - 1
END_SUB

SUB Dessine_Pion2(Colonne%)
  2D_TARGET_IS N_Grille%
  Dessine_Pion(Colonne% -1, NB_LIGNES% - Colonnes%(Colonne%),Tour%)
END_SUB

SUB Victoire()
        BEEP
        message$="Bravo, la partie est finie"+ CHR$(13) + "LES "
        IF resultat%= 4*JAUNE% THEN message$=message$+"JAUNES"
        IF resultat%= 4*ROUGE% THEN message$=message$+"ROUGES"
        message$=message$ + " ONT GAGNE !"
        IF MESSAGE_CONFIRMATION_OK(message$) > -1 THEN Fin()
        IF Debug% = 1
            CAPTION M_Debug%, Message$
        END_IF
        Fin()
END_SUB

SUB Verifie_complet()
  IF NB_VIDES% = 0
    message$="Partie nulle, la grille est pleine" +CHR$(13)
    message$=message$+"Personne n'a réussi à gagner"
    IF MESSAGE_CONFIRMATION_OK(message$) > -1 THEN Fin()
    IF Debug% = 1
        CAPTION M_Debug%, Message$
    END_IF
    Fin()
  END_IF
END_SUB

Clic:
OFF_CLICK N_Grille%
    Num% = INT((MOUSE_X_POSITION(N_Grille%) - 0.5 * Bordure%) / (Largeur_pion% + Bordure%)) + 1
    Message$ =  "Clic sur la colonne n°" + STR$(Num%)
    IF Debug% = 1 THEN CAPTION M_Debug%, Message$
    IF Debug% = 1 THEN CAPTION F_Debug%, "Colonnes%(Num%): "+STR$(Colonnes%(Num%))+ " - Clic"
    IF Colonnes%(Num%) < NB_LIGNES%
      Ajoute_Pion(Num%)
      Dessine_Pion2(Num%)
      Verifie_victoire(Num%, Colonnes%(Num%))
      IF resultat%<>0 THEN Victoire()
      Verifie_complet()
      IF Debug% = 1 THEN DEBUG_GRILLE()
      Change_Tour()
      Ordi_joue()
      Verifie_complet()
      IF Debug% = 1 THEN DEBUG_GRILLE()
      Change_Tour()
    END_IF
ON_CLICK N_Grille%,clic
RETURN
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyVen 6 Jan 2017 - 8:45

Salut à tous,

@Jicehel

je pense également, qu'en l'état, c'est un bon jeu. La difficulté est moyenne pour un débutant.

Est-il facile de montrer la ligne gagnante à la fin (avec des points noirs au milieu des pions par exemple) ?
J'ai tenté de le faire, mais j'ai vite renoncé car le code est assez complexe.

Bravo, ça va plaire à mes petits enfants.

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyVen 6 Jan 2017 - 15:14

Bonne idée Jean-Claude, je vais essayer de t'ajouter ça se soir.
Ca ne me parait pas très compliqué à première vue. Par contre je vais faire simple (s'il y a plusieurs possibilités de bonnes lignes, il n'affichera que la première bonne combinaison)
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyVen 6 Jan 2017 - 18:21

Heu... sauf erreur, il n'y a q'une combinaison gagnante vu que le jeu se termine à cette combinaison Exclamation .

Je suis entrain de coder une version en 2D, j'espère y arriver.

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyVen 6 Jan 2017 - 20:04

Et non, tu peux en avoir 3 ou plus si le pion vient compléter plusieurs série de 3 ou s'il forme une ligne de 5 ou 6 pions alignés.

Mais bon qu'importe, j'afficherais la première bonne combinaison trouvée
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyVen 6 Jan 2017 - 20:17

Oui effectivement, je n'ai pas entrevu cette possibilité.

Bon... après c'est une cerise sur le gâteau, si c'est trop complexe ce n'est pas indispensable.

A+
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptyVen 6 Jan 2017 - 20:41

Salut tout le monde !

J'avais pas encore testé ce petit programme sympa...

Après une première partie rapidement terminé par une 'déculotté', j'ai repris la main et j'ai mis la 'paté' à l'ordi. cheers
Non mais alors, c'est qui l'patron Question Exclamation

Laughing Laughing Laughing

Bravo pour ce code Jicehel. Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptySam 7 Jan 2017 - 0:06

Et voilà, la première combinaison gagnante trouvée clignote à l'écran.

Bon jeu à vous.

Code:
' Puissance 4 version 1 (Simple)
' Mode contre l'ordinateur
' Dessins simples sans animation
' Les jaunes commencent toujours et sont jou par l'ordinateur

' Définir le type pour une case de la grille
' Case = 0 => ROUGE; 1 => JAUNE; 2 => VIDE
DIM ROUGE% : ROUGE% = -1
DIM JAUNE% : JAUNE% = 1
DIM GAGNE% : GAGNE% = 2
DIM VIDE%  : VIDE%  = 0
DIM C_ORDI% :' Couleur des pions de l'odinateur

' Définir la grille de jeu
DIM NB_COLONNES% : NB_COLONNES% = 7
DIM NB_LIGNES%  : NB_LIGNES%  = 6
DIM NB_VIDES% : NB_VIDES% = NB_COLONNES% * NB_LIGNES%

' La grille de jeu avec une bordure supplémentaire
DIM Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Sauve_Grille%(NB_COLONNES%, NB_LIGNES%)
DIM Colonnes%(NB_COLONNES%),Sauve_Colonnes%(NB_COLONNES%)

' Programmation du mode de debuggage
DIM Debug% : Debug% = 0 : ' Mettre à 1 pour activer le mode debug
DIM F_Debug% : F_Debug% = 1
DIM M_Debug%, Tps_Msg_Debug%  : Tps_Msg_Debug% = 1500

' Tailles des éléments du jeu
DIM Marge% : Marge% = 20
DIM Bordure% : Bordure% = 10
DIM Largeur_pion% : Largeur_pion% = 60

' Définition des numéro d'objet
DIM N_Grille% : N_Grille% = 10

DIM Num%, Message$, resultat%
DIM Tour%, Aff_tour%, sortie%

DIM NB_jouables%, col_jouables%(NB_COLONNES%)
DIM P_Gagne%(3,1)

LABEL Clic

Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord% pour portabilité

INIT()
AIDE()
IF Debug% = 1 THEN CREER_FENETRE_DEBUG()

CREER_GRILLE()
VIDER()
SHOW 0
C_ORDI% = JAUNE%
IF Tour% = C_ORDI% THEN Ajoute_Pion(4) : Dessine_Pion2(4) : Change_Tour()
IF Debug% = 1 THEN DEBUG_GRILLE()
ON_CLICK N_Grille%,clic
END

SUB CREER_GRILLE()
DIM_LOCAL Decal_x,Decal_y, i%, j%, r
  PICTURE N_Grille% : LEFT N_Grille%, Marge% : TOP N_Grille%, Marge%
  WIDTH N_Grille%,  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%)
  HEIGHT N_Grille%, Bordure% + NB_LIGNES% * (Largeur_pion% + Bordure%)
  COLOR N_Grille%,0,0,255 : 2D_FILL_COLOR 50,50,50
  2D_TARGET_IS N_Grille%
  r =  Largeur_pion% / 2
  Decal_y = Bordure%

  FOR i% = 1 TO NB_LIGNES%
    Decal_x = Bordure%
    FOR j% = 1 TO NB_COLONNES%
        2D_CIRCLE Decal_x + r, Decal_y +  r,  r
        Decal_x = Decal_x +  Largeur_pion% + Bordure%
    NEXT j%
    Decal_y = Decal_y +  Largeur_pion% + Bordure%
  NEXT i%
END_SUB

SUB INIT()
DIM_LOCAL Largeur%, Hauteur%, ind%
  HIDE 0
  Largeur% =  Bordure% + NB_COLONNES% * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  WIDTH 0, Largeur%
  Hauteur% =  2*Bordure% + (NB_LIGNES% + 1 ) * (Largeur_pion% + Bordure%) + 2 * Marge% + 2 * bord%
  HEIGHT 0, Hauteur% + bandeau%
  CAPTION 0,"  P U I S S A N C E  4"
  Tour% = JAUNE%
  ind% = 3 : ALPHA ind% : LEFT ind%, Marge% + 10 : TOP ind%, (NB_LIGNES%)* (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2
  FONT_SIZE ind%,22 :  FONT_NAME ind%,"Times New Roman" :  CAPTION ind%,"C'est au tour de jouer de : "
  2D_TARGET_IS 0 :Dessine_Pion(6, NB_LIGNES% +0.5,Tour%)
  Aff_tour% = 1
END_SUB

SUB VIDER()
DIM_LOCAL i%, j%  : ' parcourir les cases de la grille pour la vider
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = VIDE%
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = 0
NEXT j%
END_SUB

SUB CREER_FENETRE_DEBUG()
DIM_LOCAL i%,j%, ind%
ind% = 200
  FORM F_Debug%
  LEFT  F_Debug%, WIDTH(0) +50 : WIDTH F_Debug%,600
  CAPTION F_Debug%,"Debug"
  M_Debug% = ind%
  ALPHA ind% :  PARENT ind%, F_Debug%
  LEFT ind%, 10 : WIDTH ind%, WIDTH(F_Debug%) - 20
  TOP ind%, 10
  FOR i% = 1 TO NB_LIGNES% + 2
    ALPHA ind%+i% :  PARENT ind%+i%, F_Debug%
    LEFT ind%+i%, 10 : WIDTH ind%+i%, WIDTH(F_Debug%) - 20
    TOP ind%+i%, 10 + 13*(NB_LIGNES% - i% +4)
  NEXT i%
END_SUB

SUB DEBUG_GRILLE()
DIM_LOCAL i%,j%, ind%, T$
ind% = 200
  FOR i% = 1 TO NB_LIGNES%
    T$ = ""
    FOR j% = 1 TO NB_COLONNES%
      T$=T$ + RIGHT$("  "+ STR$(Grille%(j%, i%)),3)
    NEXT j%
    CAPTION ind%+i%, T$
  NEXT i%
  T$ = ""
  FOR j% = 1 TO NB_COLONNES%
      T$=T$ + RIGHT$("  "+ STR$(Colonnes%(j%)),3)
  NEXT j%
  CAPTION ind%+NB_LIGNES% + 2, T$
END_SUB

rem ====================================' détection des dimensions de la fenêtre
SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
      MESSAGE "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
      TERMINATE
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 THEN DIM bandeau%
    IF VARIABLE("bord%")=0 THEN DIM bord%
    ' Calcul de bandeau% et bord%
    DIM_LOCAL w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    PICTURE 1 : FULL_SPACE 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    DELETE 1
END_SUB

SUB AIDE()
DIM_LOCAL a$
' Système d`aide du programme
  APPLICATION_TITLE "Règles du jeu PUISSANCE 4"
  a$="  Le but du jeu est d'aligner 4 pions de sa couleur dans le sens"+chr$(13)
  a$=a$+"horizontal, vertical ou diagonal. Le premier qui réalise cela a"+chr$(13)
  a$=a$+"gagné et le jeu s'arrête. Si toutes les cases du jeu sont remplies"+chr$(13)
  a$=a$+"sans que cela ait pu être réalisé, alors la partie est nulle."+chr$(13)+chr$(13)
  a$=a$+"Cliquez dans une colonne avec au moins un emplacement de libre"+chr$(13)
  a$=a$+"pour lacher le pion dans cette colonne"
  MESSAGE a$
END_SUB

SUB Dessine_Pion(Col%,Ligne,Couleur%)
    IF Couleur% = JAUNE%
      2D_FILL_COLOR 230,230,50
    ELSE
      IF Couleur% = ROUGE%
        2D_FILL_COLOR 240,50,50
      ELSE
        2D_FILL_COLOR 230,50,230
      END_IF
    END_IF
    2D_CIRCLE Col% * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2, Ligne * (Largeur_pion% + Bordure%) + Bordure% + Largeur_pion% / 2,  Largeur_pion% / 2
END_SUB

SUB Fin()
    wait 2000
    Terminate
END_SUB

SUB Verifie_victoire(COLONNE%,LIGNE%)
dim_local i%,j%,k%, pions%
resultat%=0
for i%=1 to NB_COLONNES% - 3
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%+k%,j%+k%)
        next k%
        if pions%=4*ROUGE% or pions%=4*JAUNE%
          resultat%=pions%
          P_Gagne%(0,0) = i% : P_Gagne%(0,1) = j%
          for k% = 1 to 3
              P_Gagne%(k%,0) = i%+k% : P_Gagne%(k%,1) = j%+k%
          next k%
        end_if
      next j%
next i%

if resultat% =0
  for i%=4 to NB_COLONNES%
      for j%=1 to 3
        pions% = GRILLE%(i%,j%)
        for k% = 1 to 3
            pions%=  pions% + GRILLE%(i%-k%,j%+k%)
        next k%
        if pions%=4*ROUGE% or pions%=4*JAUNE%
          resultat%=pions%
          P_Gagne%(0,0) = i% : P_Gagne%(0,1) = j%
          for k% = 1 to 3
              P_Gagne%(k%,0) = i%-k% : P_Gagne%(k%,1) = j%+k%
          next k%
        end_if
      next j%
  next i%
end_if

if resultat% =0
  i%=COLONNE%
  for j%=1 to (NB_LIGNES% - 3)
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%,j%+k%)
      next k%
      if pions%=4*ROUGE% or pions%=4*JAUNE%
        resultat%=pions%
        P_Gagne%(0,0) = i% : P_Gagne%(0,1) = j%
        for k% = 1 to 3
          P_Gagne%(k%,0) = i% : P_Gagne%(k%,1) = j%+k%
        next k%
      end_if
  next j%
end_if

if resultat% =0
  j% = LIGNE%
  for i%=1 to (NB_COLONNES% - 3) : rem Horizontale
      pions% = GRILLE%(i%,j%)
      for k% = 1 to 3
        pions%=  pions% + GRILLE%(i%+k%,j%)
      next k%
      if pions%=4*ROUGE% or pions%=4*JAUNE%
        resultat%=pions%
        P_Gagne%(0,0) = i% : P_Gagne%(0,1) = j%
        for k% = 1 to 3
          P_Gagne%(k%,0) = i%+k% : P_Gagne%(k%,1) = j%
        next k%
      end_if
  next i%
end_if
END_SUB

SUB Change_Tour()
      IF Tour% = JAUNE%
          Tour% = ROUGE%
      ELSE
          Tour% = JAUNE%
      END_IF
      IF Aff_tour% = 1 THEN 2D_TARGET_IS 0 : Dessine_Pion(5, NB_LIGNES% + 0.6,Tour%)
END_SUB

SUB Sauve_grille()
dim_local i%,j%
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Sauve_Grille%(j%,i%) = Grille%(j%,i%)
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Sauve_Colonnes%(j%) = Colonnes%(j%)
NEXT j%
END_SUB

SUB Restore_grille()
dim_local i%,j%
NB_VIDES% =  NB_VIDES% + 1
FOR i% = 1 TO NB_LIGNES%
  FOR j% = 1 TO NB_COLONNES%
    Grille%(j%,i%) = Sauve_Grille%(j%,i%)
  NEXT j%
NEXT i%
FOR j% = 1 TO NB_COLONNES%
  Colonnes%(j%) = Sauve_Colonnes%(j%)
NEXT j%
END_SUB

SUB Ordi_essai_gagne()
dim_local j%
  FOR j% = 1 TO NB_COLONNES%
    IF Colonnes%(j%) < NB_LIGNES%
      Ajoute_Pion(j%)
      Verifie_victoire(j%, Colonnes%(j%))
      IF resultat% = 4 * C_Ordi%
        Dessine_Pion2(j%)
        Victoire()
        j% = NB_COLONNES% : sortie% = 1
      ELSE
        Restore_grille()
      END_IF
    END_IF
  NEXT j%
END_SUB

SUB Ordi_empeche_victoire()
dim_local j%
 Aff_tour% = 0 : Change_tour()
 FOR j% = 1 TO NB_COLONNES%
  IF Debug% = 1 THEN CAPTION F_Debug%, "Colonnes%(" + STR$(j%) + "): "+STR$(Colonnes%(j%))+ " - Ordi_empeche_victoire"
  IF Colonnes%(j%) < NB_LIGNES%
    Ajoute_Pion(j%)
    Verifie_victoire(j%, Colonnes%(j%))
    IF ABS(resultat%) = 4
      Message$ =  "Jeu auto en" + STR$(j%)
      IF Debug% = 1 THEN CAPTION M_Debug%, Message$  : WAIT Tps_Msg_Debug%
      Restore_grille()
      Change_tour()
      Ajoute_Pion(j%)
      Dessine_Pion2(j%)
      j% = NB_COLONNES% : sortie%= 1 : Change_tour()
    ELSE
      Restore_grille()
    END_IF
  END_IF
 NEXT j%
 Aff_tour% = 1 : Change_tour()
END_SUB

SUB Ordi_empeche_victoire_suiv()
dim_local i%,j%
 Aff_tour% = 0 : NB_jouables% = 0
 FOR j% = 1 TO NB_COLONNES%
  IF Debug% = 1 THEN CAPTION F_Debug%, "Colonnes%(" + STR$(j%) + "): "+STR$(Colonnes%(j%))+ " - Ordi_empeche_victoire_suiv"
  IF Colonnes%(j%) < (NB_LIGNES% - 1)
    Ajoute_Pion(j%) : Change_tour() : Ajoute_Pion(j%)
    Verifie_victoire(j%, Colonnes%(j%))
    IF ABS(resultat%) <> 4
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
    END_IF
    Restore_grille(): NB_VIDES% =  NB_VIDES% + 1 : Change_tour()
  ELSE
    IF Colonnes%(j%) = (NB_LIGNES% - 1)
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
        Restore_grille()
    END_IF
  END_IF
 NEXT j%
 IF NB_jouables% = 0
  FOR j% = 1 TO NB_COLONNES%
    IF Colonnes%(j%) < NB_LIGNES%
        NB_jouables% = NB_jouables%+1
        col_jouables%(NB_jouables%) = j%
    END_IF
  NEXT j%
  i%=INT(RND(NB_jouables%))+1
  Message$ =  "L'ordinateur joue dans la colonne n°" + STR$(col_jouables%(i%))
  IF Debug% = 1 THEN CAPTION M_Debug%, Message$ : WAIT Tps_Msg_Debug%
  Ajoute_Pion(col_jouables%(i%))
  Dessine_Pion2(col_jouables%(i%))
  sortie% = 1
 ELSE
  i%=INT(RND(NB_jouables%))+1
  Message$ =  "L'ordinateur joue dans la colonne n°" + STR$(col_jouables%(i%))
  IF Debug% = 1 THEN CAPTION M_Debug%, Message$ : WAIT Tps_Msg_Debug%
  Ajoute_Pion(col_jouables%(i%))
  Dessine_Pion2(col_jouables%(i%))
  sortie% = 1
 END_IF
 Aff_tour% = 1
END_SUB

SUB Ordi_joue()
dim_local i%,j%

sortie% = 0
  Sauve_grille()
  Ordi_essai_gagne()
  IF sortie% = 0 THEN Ordi_empeche_victoire()
  IF sortie% = 0 AND NB_VIDES% > 1 THEN Ordi_empeche_victoire_suiv()
END_SUB

SUB Ajoute_Pion(Col%)
      Colonnes%(Col%) = Colonnes%(Col%) + 1
      Grille%(Col%, Colonnes%(Col%)) = Tour%
      NB_VIDES% =  NB_VIDES% - 1
END_SUB

SUB Dessine_Pion2(Colonne%)
  2D_TARGET_IS N_Grille%
  Dessine_Pion(Colonne% -1, NB_LIGNES% - Colonnes%(Colonne%),Tour%)
END_SUB

SUB Victoire()
dim_local i%,j%,k%
        BEEP
        j% = Tour% : message$ =""
        FOR i% = 0 TO 7
          IF j% = Tour% THEN j% = GAGNE% : ELSE: j% = Tour%
          FOR k% = 0 TO 3
            Dessine_Pion(P_Gagne%(k%,0) -1, NB_LIGNES% - P_Gagne%(k%,1),j%)
            IF i% = 0
              IF message$ <> "" THEN message$ = message$ + " : "
              message$ = message$ + "P_Gagne%(" + STR$(k%) + ") = (" + STR$(P_Gagne%(k%,0)) + " , " + STR$(P_Gagne%(k%,1)) + ")"
              IF Debug% = 1 THEN CAPTION F_Debug%, message$
            END_IF
          NEXT k%
          WAIT 200
        NEXT i%
        message$="Bravo, la partie est finie"+ CHR$(13) + "LES "
        IF resultat%= 4*JAUNE% THEN message$=message$+"JAUNES"
        IF resultat%= 4*ROUGE% THEN message$=message$+"ROUGES"
        message$=message$ + " ONT GAGNE !"
        IF MESSAGE_CONFIRMATION_OK(message$) > -1 THEN Fin()
        IF Debug% = 1
            CAPTION M_Debug%, Message$
        END_IF
        Fin()
END_SUB

SUB Verifie_complet()
  IF NB_VIDES% = 0
    message$="Partie nulle, la grille est pleine" +CHR$(13)
    message$=message$+"Personne n'a réussi à gagner"
    IF MESSAGE_CONFIRMATION_OK(message$) > -1 THEN Fin()
    IF Debug% = 1
        CAPTION M_Debug%, Message$
    END_IF
    Fin()
  END_IF
END_SUB

Clic:
OFF_CLICK N_Grille%
    Num% = INT((MOUSE_X_POSITION(N_Grille%) - 0.5 * Bordure%) / (Largeur_pion% + Bordure%)) + 1
    Message$ =  "Clic sur la colonne n°" + STR$(Num%)
    IF Debug% = 1 THEN CAPTION M_Debug%, Message$
    IF Debug% = 1 THEN CAPTION F_Debug%, "Colonnes%(Num%): "+STR$(Colonnes%(Num%))+ " - Clic"
    IF Colonnes%(Num%) < NB_LIGNES%
      Ajoute_Pion(Num%)
      Dessine_Pion2(Num%) : WAIT 50
      Verifie_victoire(Num%, Colonnes%(Num%))
      IF resultat%<>0 THEN Victoire()
      Verifie_complet()
      IF Debug% = 1 THEN DEBUG_GRILLE()
      Change_Tour()
      Ordi_joue()
      Verifie_complet()
      IF Debug% = 1 THEN DEBUG_GRILLE()
      Change_Tour()
    END_IF
ON_CLICK N_Grille%,clic
RETURN
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Une premiere version de puissance 4 Empty
MessageSujet: RE   Une premiere version de puissance 4 EmptySam 7 Jan 2017 - 0:23

SUPERBE !
cheers
Bravo Jicehel !

Tout comme Minibug, 
après une cuisante défaite ,
bounce  
j' ai du lui montrer qui était le Maître  .
lol!
Revenir en haut Aller en bas
En ligne
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptySam 7 Jan 2017 - 9:24

Bonjour,

Ce dernier code fonctionne parfaitement à partir de l'éditeur, mais j'ai un petit souci avec et j'ai peut-être bien trouvé un bug de la dernière version Panoramic.
Avant de parler de bug, il faudrait que vous essayez de transformer ce code en exécutable et de l'utiliser.
Chez moi l'exécutable affiche le message d’accueil, puis le plateau de jeu et après c'est terminé, plus de réaction du programme au clic de souris.

J'ai recommencé plusieurs fois, rien y fait.

Pouvez-vous essayer de votre coté SVP.

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 EmptySam 7 Jan 2017 - 10:35

Je vais essayer et je pense que j'essayerais aussi d'ajouter une petite fonction avant le tirage aléatoire pour augmenter l'intelligence du programme en le faisant jouer s'il le peut pour obtenir un alignement de 3 pions et d'une case vide ou sinon pour empêcher son adversaire de le faire.


Revenir en haut Aller en bas
Contenu sponsorisé





Une premiere version de puissance 4 Empty
MessageSujet: Re: Une premiere version de puissance 4   Une premiere version de puissance 4 Empty

Revenir en haut Aller en bas
 
Une premiere version de puissance 4
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Que signifient version "régulière" et version "instantanée"
» Première question d'importance
» Première surprise de l'année
» D.I.C version Sub
» Version Mac

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les jeux faits avec Panoramic-
Sauter vers: