FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 0:29

» track_bar circulaire
par Klaus Hier à 21:41

» Gestionnaire de Projets Panoramic
par Jean Claude Hier à 20:41

» Mah-Jong européen new-look
par Jean Claude Hier à 20:34

» Gestion de l'Unicode
par jean_debord Hier à 11:21

» Button_picture
par pascal10000 Jeu 14 Déc 2017 - 11:41

» Pourquoi le compilateur stagne
par Minibug Jeu 14 Déc 2017 - 11:09

» 4 (en analyse): SYNEDIT_TARGET_IS_OBJECT devient inactif
par Jack Jeu 14 Déc 2017 - 10:09

» 3 (en analyse): Mauvaise interprétation du string "THEN"
par Jack Jeu 14 Déc 2017 - 10:03

» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Marc Jeu 14 Déc 2017 - 10:00

» API Windows
par Klaus Mar 12 Déc 2017 - 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Concours de Morpions

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
jjn4

avatar

Nombre de messages : 1628
Date d'inscription : 13/09/2009

MessageSujet: Concours de Morpions   Mar 20 Juin 2017 - 18:07

Non, non, rassurez-vous,
le jeu ne consiste pas à
fêter comme un héros
celui qui a le plus de morpions !
affraid  alien  affraid
Vous vous souvenez de ce bon vieux jeu de morpion
auquel vous jouiez quand vous étiez sur les bancs,
ce qui horripilait votre prof de... (censuré) ?
Eh bien, le voilà de retour sur votre ordinateur !
cheers  cheers alien bounce Basketball
Grâce à Théodore !
Eh oui, après Gertrude, voici Théodore,
l'androïde qui joue au Morpion !
Oh, il n'a pas inventé l'eau tiède !
Mais le bougre sait drôlement bien calculer !
Alors, tous avec moi, pour Théodore hip-hip-hip...!
cheers alien geek
Code:
rem ' Morpionibus-N - Jeu de morpion à géométrie variable - par jjn4 - 21/06/2017
  dim APJD%(66) , APOD%(66) : rem Après la ligne oblique Descendante maxi repérée
  dim APJH%(27) , APOH%(27) : rem Après la ligne Horizontale maxi repérée
  dim APJM%(66) , APOM%(66) : rem Après la ligne oblique Montante maxi repérée
  dim APJV%(40) , APOV%(40) : rem Après la ligne Vericale maxi repérée
  dim AVJD%(66) , AVOD%(66) : rem Avant la ligne oblique Descendante maxi repérée
  dim AVJH%(27) , AVOH%(27) : rem Avant la ligne Horizontale maxi repérée
  dim AVJM%(66) , AVOM%(66) : rem Avant la ligne oblique Montante maxi repérée
  dim AVJV%(40) , AVOV%(40) : rem Avant la ligne Vericale maxi repérée
  dim CG%(41,28) : rem Contenu de la Grille                  (J=Joueur O=Ordi)
  dim CJ% , CJ$(3) : rem Catégories de jeux
  dim CX% , CY% : rem Coordonnées en X et Y du point de clic
  dim GPJD%(66) , GPJH%(27) , GPJM%(66) , GPJV%(40) : rem Garantie contre Piège
  dim JB$(2) : rem Affichage du nombre de Joueurs biologiques
  dim MJD%(66) , MOD%(66) : rem Calcul des suites Maxi obliques Descendantes
  dim MJH%(27) , MOH%(27) : rem Calcul des suites Maxi Horizontales (J=Joueur)
  dim MJM%(66) , MOM%(66) : rem Calcul des suites Maxi obliques Montantes
  dim MJV%(40) , MOV%(40) : rem Calcul des suites Maxi Verticales (O=Ordinateur)
  dim NE% : rem Nombre de symboles Ecrits
  dim NJ% : rem Niveau de Jeu
  dim OCJD%(66) , OCOD%(66) : rem Où la ligne oblique Descendante maxi repérée Commence
  dim OCJH%(27) , OCOH%(27) : rem Où la ligne Horizontale maxi repérée Commence
  dim OCJM%(66) , OCOM%(66) : rem Où la ligne oblique Montante maxi repérée Commence
  dim OCJV%(40) , OCOV%(40) : rem Où la ligne Verticale maxi repérée Commence 
  dim TB$(3) : rem Texte des Boutons
  dim TJ% : rem A qui c`est le Tour de Jouer  (1=joueur -1=ordi)
  dim V1M% : rem Variables globales à utilisation Multiple
  TJ%=1 : CJ%=1 : NJ%=5
  label clic : rem Redirection de tous les on-click
 
rem Lecture des datas et préparation du jeu ===================================
  for V1M% = 1 to 3
      read CJ$(V1M%)
  next V1M%
  for V1M% = 1 to 2
      read JB$(V1M%)
  next V1M%
  for V1M% = 1 to 3
      read TB$(V1M%)
  next V1M%
  for V1M% = 0 to 28
      CG%(0,V1M%)=3
      CG%(41,V1M%)=3
  next V1M%
  for V1M% = 0 to 41
      CG%(V1M%,0)=3
      CG%(V1M%,28)=3
  next V1M%
 
rem form0 =====================================================================
  width 0,1360
  height 0,720
  caption 0,"  MORPIONIBUS-N  -  par jjn4  -  Ver-200617.1.3"
 
rem Grille de jeu =============================================================
  picture 100
      width 100,1002
      height 100,675
      font_size 100,16
      font_name 100,"Wingdings"
      2d_target_is 100
      print_target_is 100
      grille()
     
rem Organes de notation =======================================================
  panel 200 : rem Zone jaune
      left 200,1005
      top 200,3
      width 200,90
      height 200,100
      color 200,255,255,0
  alpha 210 : rem Couleur du joueur jouant
      parent 210,200
      left 210,10
      top 210,6
      font_bold 210
      font_size 210,14
      font_name 210,"Arial"
      font_color 210,0,0,255
  alpha 220 : rem Symbole du joueur jouant
      parent 220,200
      left 220,30
      top 220,60
      font_size 220,20
  panel 230 : rem Zone noire
      left 230,1005
      top 230,103
      width 230,45
      height 230,70
      color 230,0,0,0
  alpha 240 : rem Symbole du joueur noir
      parent 240,230
      left 240,12
      top 240,8
      font_bold 240
      font_size 240,16
      font_color 240,255,255,255
      font_name 240,"Webdings"
      caption 240,chr$(114)
  alpha 250 : rem Score du joueur noir
      parent 250,230
      left 250,10
      top 250,37
      font_bold 250
      font_size 250,16
      font_color 250,255,255,255
      caption 250,"00"
  panel 260 : rem Zone rouge
      left 260,1050
      top 260,103
      width 260,45
      height 260,70
      color 260,255,0,0
  alpha 270 : rem Symbole du joueur rouge
      parent 270,260
      left 270,12
      top 270,8
      font_bold 270
      font_size 270,17
      font_name 270,"Wingdings"
      caption 270,chr$(162)
  alpha 280 : rem Score du joueur rouge
      parent 280,260
      left 280,10
      top 280,37
      font_bold 280
      font_size 280,16
      caption 280,"00"
  container_option 290 : rem Zone de choix du type de jeu
      left 290,1100
      top 290,10
      width 290,230
      height 290,120
      caption 290,"Type de jeu"
  for V1M% = 1 to 3 : rem Objets 300, 310 et 320
      option V1M%*10+290
        parent V1M%*10+290,290
        left V1M%*10+290,25
        top V1M%*10+290,(V1M%-1)*30+25
        width V1M%*10+290,180
        font_bold V1M%*10+290
        font_size V1M%*10+290,12
        caption V1M%*10+290,CJ$(V1M%)
        on_click V1M%*10+290,clic
  next V1M%
  mark_on 300
  container_option 330 : rem Zone de choix du niveau de jeu
      left 330,1100
      top 330,140
      width 330,230
      height 330,120
      caption 330,"Niveau de jeu"
    for V1M% = 1 to 3 : rem Objets 340, 350 et 360
        option V1M%*10+330
          parent V1M%*10+330,330
          left V1M%*10+330,25
          top V1M%*10+330,(V1M%-1)*30+25
          width V1M%*10+330,180
          font_bold V1M%*10+330
          font_size V1M%*10+330,12
          caption V1M%*10+330,"Niveau "+str$(V1M%+3)
          on_click V1M%*10+330,clic
      next V1M%
      mark_on 350
  panel 370 : rem Zone de déclaration de victoire
      left 370,1005
      top 370,173
      width 370,90
      height 370,86
      color 370,0,255,0
  alpha 380 : rem Affichage du nom du gagnant
      parent 380,370
      left 380,8
      top 380,18
      font_bold 380
      font_size 380,14
  container_option 390 : rem Zone de choix du nombre de joueurs biologiques
      left 390,1005
      top 390,270
      width 390,325
      height 390,60
      caption 390,"Nombre de joueurs biologiques"
  for V1M% = 1 to 2 : rem Objets 400 et 410
      option V1M%*10+390
        parent V1M%*10+390,390
        left V1M%*10+390,(V1M%-1)*160+20
        top V1M%*10+390,25
        width V1M%*10+390,140
        font_bold V1M%*10+390
        font_size V1M%*10+390,12
        caption V1M%*10+390,JB$(V1M%)
  next V1M%
  mark_on 400
  container 420 : rem zone de choix de la force de Théodore
      left 420,1005
      top 420,340
      width 420,325
      height 420,60
      caption 420,"Puissance de réflexion de Théodore"
  for V1M% = 1 to 2 : rem Objets 430 et 440
      option V1M%*10+420
        parent V1M%*10+420,420
        left V1M%*10+420,(V1M%-1)*150+20
        top V1M%*10+420,25
        width V1M%*10+420,140
        font_bold V1M%*10+420
        font_size V1M%*10+420,12
        caption V1M%*10+420,"Puissance  "+str$(V1M%)
        on_click V1M%*10+390,clic
  next V1M%
  mark_on 440
 
rem Boutons de commande =======================================================
  for V1M% = 1 to 3 : rem Objets N° 500, 510 et 520
      button V1M%*10+490
        left V1M%*10+490,1005
        top V1M%*10+490,(V1M%-1)*90+405
        width V1M%*10+490,325
        height V1M%*10+490,90
        font_bold V1M%*10+490
        font_size V1M%*10+490,40
        font_name V1M%*10+490,"Arial"
        caption V1M%*10+490,TB$(V1M%)
        on_click V1M%*10+490,clic
  next V1M%

end : rem ' Début des routines ================================================

sub aide() : rem Explications concernant le jeu ===============================
  dim_local v1ai$ , v2ai$ : rem Variables à utilisation multiple
  v2ai$=chr$(13)
  application_title "  Explications du jeu Morpionibus"
  v1ai$="  Morpionibus-N consiste à aligner des croix ou des ronds sur les cases"+v2ai$
  v1ai$=v1ai$+"d'une page de cahier de façon à réussir des alignements d'un nombre"+v2ai$
  v1ai$=v1ai$+"convenu de symboles identiques."+v2ai$+v2ai$
  v1ai$=v1ai$+"  Cela ne vous rappelle-t-il pas de vieux souvenirs de moments scolaires"+v2ai$
  v1ai$=v1ai$+"bien fastidieux ?  En principe, c'est une suite de 5 croix ou 5 ronds, mais"+v2ai$
  v1ai$=v1ai$+"ici, on peut faire varier le niveau de jeu de 4 à 6 de ces symboles."+v2ai$+v2ai$
  v1ai$=v1ai$+"  Vous avez aussi le choix entre 3 types de jeux différents :"+v2ai$
  v1ai$=v1ai$+"- Morpionibus simple :"+v2ai$
  v1ai$=v1ai$+"  le gagnant est le premier qui réussit à aligner 4, 5 ou 6 de ses symboles."+v2ai$
  v1ai$=v1ai$+"- Morpionibus 10 :"+v2ai$
  v1ai$=v1ai$+"  le gagnant est le premier qui réussit à faire 10 de ces alignements."+v2ai$
  v1ai$=v1ai$+"- Morpionibus Max :"+v2ai$
  v1ai$=v1ai$+"  une fois la grille entièrement remplie, le gagnant est celui qui a réalisé"+v2ai$
  v1ai$=v1ai$+"  le plus grand nombre d'alignements."+v2ai$+v2ai$
  v1ai$=v1ai$+"  Vous pouvez jouer à deux ou seul contre l'androïde Théodore, qui vous"+v2ai$
  v1ai$=v1ai$+"servira aimablement de partenaire, sans tricher et sans devenir de"+v2ai$
  v1ai$=v1ai$+"mauvaise foi si vous lui mettez une piquette..."+v2ai$+v2ai$
  v1ai$=v1ai$+"  Dans les jeux 10 et Max, lorsque vous parviendrez à réaliser un"+v2ai$
  v1ai$=v1ai$+"alignement, vous pourrez vous reservir de certaines de ces croix alignées,"+v2ai$
  v1ai$=v1ai$+"en fait, seulement celles situées aux extrémités de cet alignement."
  message v1ai$ 
end_sub

sub auto() : rem L`ordinateur joue en automatique =============================
  auto2(1)
  if checked(440)=1
      if TJ%=-1
        if NJ%>4
            auto4()
        end_if
      end_if
      if TJ%=-1
        auto3(1)
      end_if
  end_if
  if TJ%=-1
      auto2(2)
  end_if
  if checked(440)=1
      if NJ%=5
        if TJ%=-1
            auto2(3)
        end_if
      end_if
  end_if
  if checked(440)=0
      if TJ%=-1
        auto3(1)
      end_if
  end_if
  if TJ%=-1
      auto3(2)
  end_if
  if TJ%=-1
      auto3(3)
  end_if
  if TJ%=-1
      if NJ%-4>0
        auto3(4)
      end_if
  end_if
  if TJ%=-1
      if NJ%-5>0
        auto3(5)
      end_if
  end_if
  if TJ%=-1
      if NE%=1
        auto2(NJ%-1)
      end_if
  end_if
end_sub

sub auto2(cb%) : rem Détection de segments trop longs chez le joueur ==========
  dim_local v1au% , v2au% : rem Variables à utilsation multiple
  rem cb% = CoMbien faut-il soutraire au niveau de jeu
  CX%=0 : CY%=0
  for v1au% = 1 to 27
      if MJH%(v1au%)=NJ%-cb%
        CY%=v1au%
        exit_for
      end_if
  next v1au%
  if CY%>0
      if AVJH%(CY%)=0
        CX%=OCJH%(CY%)-1
      else
        CX%=OCJH%(CY%)+MJH%(CY%)
      end_if
      jouer()
      exit_sub
  end_if
  CX%=0 : CY%=0
  for v1au% = 1 to 40
      if MJV%(v1au%)=NJ%-cb%
        CX%=v1au%
        exit_for
      end_if
  next v1au%
  if CX%>0
      if AVJV%(CX%)=0
        CY%=OCJV%(CX%)-1
      else
        CY%=OCJV%(CX%)+MJV%(CX%)
      end_if
      jouer()
      exit_sub
  end_if
  CX%=0 : CY%=0
  for v1au% = 1 to 66
      if MJD%(v1au%)=NJ%-cb%
        CX%=v1au%+OCJD%(v1au%)-27
        CY%=OCJD%(v1au%)
        v2au%=v1au%
        exit_for
      end_if
  next v1au%
  if CY%>0
      if AVJD%(v2au%)=0
        CX%=CX%-1
        CY%=CY%-1
      else
        CX%=CX%+MJD%(v2au%)
        CY%=CY%+MJD%(v2au%)
      end_if
      jouer()
      exit_sub
  end_if
  CX%=0 : CY%=0 : v2au%=0
  for v1au% = 1 to 66
      if MJM%(v1au%)=NJ%-cb%
        CX%=v1au%-OCJM%(v1au%)+1
        CY%=OCJM%(v1au%)
        v2au%=v1au%
        exit_for
      end_if
  next v1au%
  if CY%>0
      if AVJM%(v2au%)=0
        CX%=CX%+1
        CY%=CY%-1
      else
        CX%=CX%-MJM%(v2au%)
        CY%=CY%+MJM%(v2au%)
      end_if
      jouer()
      exit_sub
  end_if
end_sub

sub auto3(cb%) : rem Détection des endroits où jouer pour l`ordi ==============
  dim_local v1au% , v2au% : rem Variables à utilisation multiple
  rem cb% = CoMbien faut-il soutraire au niveau de jeu
  CX%=0 : CY%=0
  for v1au% = 1 to 27
      if MOH%(v1au%)=NJ%-cb%
        CY%=v1au%
        exit_for
      end_if
  next v1au%
  if CY%>0
      if AVOH%(CY%)=0
        CX%=OCOH%(CY%)-1
      else
        CX%=OCOH%(CY%)+MOH%(CY%)
      end_if
      jouer()
      exit_sub
  end_if
  CX%=0 : CY%=0
  for v1au% = 1 to 40
      if MOV%(v1au%)=NJ%-cb%
        CX%=v1au%
        exit_for
      end_if
  next v1au%
  if CX%>0
      if AVOV%(CX%)=0
        CY%=OCOV%(CX%)-1
      else
        CY%=OCOV%(CX%)+MOV%(CX%)
      end_if
      jouer()
      exit_sub
  end_if
  CX%=0 : CY%=0
  for v1au% = 1 to 66
      if MOD%(v1au%)=NJ%-cb%
        CX%=v1au%+OCOD%(v1au%)-27
        CY%=OCOD%(v1au%)
        v2au%=v1au%
        exit_for
      end_if
  next v1au%
  if CY%>0
      if AVOD%(v2au%)=0
        CX%=CX%-1
        CY%=CY%-1
      else
        CX%=CX%+MOD%(v2au%)
        CY%=CY%+MOD%(v2au%)
      end_if
      jouer()
      exit_sub
  end_if
  CX%=0 : CY%=0 : v2au%=0
  for v1au% = 1 to 66
      if MOM%(v1au%)=NJ%-cb%
        CX%=v1au%-OCOM%(v1au%)+1
        CY%=OCOM%(v1au%)
        v2au%=v1au%
        exit_for
      end_if
  next v1au%
  if CY%>0
      if AVOM%(v2au%)=0
        CX%=CX%+1
        CY%=CY%-1
      else
        CX%=CX%-MOM%(v2au%)
        CY%=CY%+MOM%(v2au%)
      end_if
      jouer()
      exit_sub
  end_if
end_sub

sub auto4() : rem Détection des pièges du jeoueur =============================
  dim_local v1au%
  CX%=0 : CY%=0
  for v1au% = 1 to 27
      if GPJH%(v1au%)>0
        CY%=v1au%
        CX%=GPJH%(v1au%)
        exit_for
      end_if
  next v1au%
  if CY%>0
      jouer()
      exit_sub
  end_if
  for v1au% = 1 to 40
      if GPJV%(v1au%)>0
        CX%=v1au%
        cy%=GPJV%(v1au%)
        exit_for
      end_if
  next v1au%
  if CX%>0
      jouer()
      exit_sub
  end_if
  for v1au% = 1 to 66
      if GPJD%(v1au%)>0
        CX%=v1au%+GPJD%(v1au%)-27
        CY%=GPJD%(v1au%)
        exit_for
      end_if
  next v1au%
  if CY%>0
      jouer()
      exit_sub
  end_if
  for v1au% = 1 to 66
      if GPJM%(v1au%)>0
        CX%=v1au%-GPJM%(v1au%)+1
        CY%=GPJM%(v1au%)
        exit_for
      end_if
  next v1au%
  if CY%>0
      jouer()
  end_if
end_sub

sub calcul() : rem Calcule les suites maximum =================================
  dim_local noca% : rem Numéro de l`Oblique
  dim_local v1ca%
  rem Calcule à l`horizontale ------------------------------------------------
  AVJH%(CY%)=0 : APJH%(CY%)=0 : AVOH%(CY%)=0 : APOH%(CY%)=0
  calculJH()
  if MJH%(CY%)>NJ%-1
      ligne(1,OCJH%(CY%),CY%,OCJH%(CY%)+MJH%(CY%)-1,CY%)
      plus(1)
      for v1ca% = OCJH%(CY%)+1 to OCJH%(CY%)+MJH%(CY%)-2
        CG%(v1ca%,CY%)=2
      next v1ca%
      calculJH()
  end_if
  if MJH%(CY%)>0
      AVJH%(CY%)=CG%(OCJH%(CY%)-1,CY%)
      APJH%(CY%)=CG%(OCJH%(CY%)+MJH%(CY%),CY%)
      while ((AVJH%(CY%)=-1) or (abs(AVJH%(CY%))=2) or (AVJH%(CY%)=3)) and ((APJH%(CY%)=-1) or (abs(APJH%(CY%))=2) or (APJH%(CY%)=3))
        for v1ca% = OCJH%(CY%) to OCJH%(CY%)+MJH%(CY%)-1
            CG%(v1ca%,CY%)=4
        next v1ca%
        calculJH()
        if MJH%(CY%)>0
            AVJH%(CY%)=CG%(OCJH%(CY%)-1,CY%)
            APJH%(CY%)=CG%(OCJH%(CY%)+MJH%(CY%),CY%)
        else
            exit_while
        end_if
      end_while
  end_if
  for v1ca% = 1 to 40
      if abs(CG%(v1ca%,CY%))=4
        CG%(v1ca%,CY%)=CG%(v1ca%,CY%)/4
      end_if
  next v1ca%
  GPJH%(CY%)=0
  for v1ca% = 1 to 40
      if (v1ca%>2) and (v1ca%<39)
        if (CG%(v1ca%-2,CY%)=1) and (CG%(v1ca%-1,CY%)=1) and (CG%(v1ca%,CY%)=0) and (CG%(v1ca%+1,CY%)=1) and (CG%(v1ca%+2,CY%)=1)
            GPJH%(CY%)=v1ca%
        end_if
      end_if
  next v1ca%
  calculOH()
  if MOH%(CY%)>NJ%-1
      ligne(2,OCOH%(CY%),CY%,OCOH%(CY%)+MOH%(CY%)-1,CY%)
      plus(2)
      for v1ca% = OCOH%(CY%)+1 to OCOH%(CY%)+MOH%(CY%)-2
        CG%(v1ca%,CY%)=-2
      next v1ca%
      calculOH()
  end_if
  if MOH%(CY%)>0
      AVOH%(CY%)=CG%(OCOH%(CY%)-1,CY%)
      APOH%(CY%)=CG%(OCOH%(CY%)+MOH%(CY%),CY%)
      while ((AVOH%(CY%)=1) or (abs(AVOH%(CY%))=2) or (AVOH%(CY%)=3)) and ((APOH%(CY%)=1) or (abs(APOH%(CY%))=2) or (APOH%(CY%)=3))
        for v1ca% = OCOH%(CY%) to OCOH%(CY%)+MOH%(CY%)-1
            CG%(v1ca%,CY%)=-4
        next v1ca%
        calculOH()
        if MOH%(CY%)>0
            AVOH%(CY%)=CG%(OCOH%(CY%)-1,CY%)
            APOH%(CY%)=CG%(OCOH%(CY%)+MOH%(CY%),CY%)
        else
            exit_while
        end_if
      end_while
  end_if
  for v1ca% = 1 to 40
      if abs(CG%(v1ca%,CY%))=4
        CG%(v1ca%,CY%)=CG%(v1ca%,CY%)/4
      end_if
  next v1ca%
  rem Calcule à la verticale -------------------------------------------------
  AVJV%(CX%)=0 : APJV%(CX%)=0 : AVOV%(CX%)=0 : APOV%(CX%)=0
  calculJV()
  if MJV%(CX%)>NJ%-1
      ligne(1,CX%,OCJV%(CX%),CX%,OCJV%(CX%)+MJV%(CX%)-1)
      plus(1)
      for v1ca% = OCJV%(CX%)+1 to OCJV%(CX%)+MJV%(CX%)-2
        CG%(CX%,v1ca%)=2
      next v1ca%
      calculJV()
  end_if
  if MJV%(CX%)>0
      AVJV%(CX%)=CG%(CX%,OCJV%(CX%)-1)
      APJV%(CX%)=CG%(CX%,OCJV%(CX%)+MJV%(CX%))
      while ((AVJV%(CX%)=-1) or (abs(AVJV%(CX%))=2) or (AVJV%(CX%)=3)) and ((APJV%(CX%)=-1) or (abs(APJV%(CX%))=2) or (APJV%(CX%)=3))
        for v1ca% = OCJV%(CX%) to OCJV%(CX%)+MJV%(CX%)-1
            CG%(CX%,v1ca%)=4
        next v1ca%
        calculJV()
        if MJV%(CX%)>0
            AVJV%(CX%)=CG%(CX%,OCJV%(CX%)-1)
            APJV%(CX%)=CG%(CX%,OCJV%(CX%)+MJV%(CX%))
        else
            exit_while
        end_if
      end_while
  end_if
  for v1ca% = 1 to 27
      if abs(CG%(CX%,v1ca%))=4
        CG%(CX%,v1ca%)=CG%(CX%,v1ca%)/4
      end_if
  next v1ca%
  GPJV%(CX%)=0
  for v1ca% = 1 to 27
      if (v1ca%>2) and (v1ca%<26)
        if (CG%(CX%,v1ca%-2)=1) and (CG%(CX%,v1ca%-1)=1) and (CG%(CX%,v1ca%)=0) and (CG%(CX%,v1ca%+1)=1) and (CG%(CX%,v1ca%+2)=1)
            GPJV%(CX%)=v1ca%
        end_if
      end_if
  next v1ca%
  calculOV()
  if MOV%(CX%)>NJ%-1
      ligne(2,CX%,OCOV%(CX%),CX%,OCOV%(CX%)+MOV%(CX%)-1)
      plus(2)
      for v1ca% = OCOV%(CX%)+1 to OCOV%(CX%)+MOV%(CX%)-2
        CG%(CX%,v1ca%)=-2
      next v1ca%
      calculOV()
  end_if
  if MOV%(CX%)>0
      AVOV%(CX%)=CG%(CX%,OCOV%(CX%)-1)
      APOV%(CX%)=CG%(CX%,OCOV%(CX%)+MOV%(CX%))
      while ((AVOV%(CX%)=1) or (abs(AVOV%(CX%))=2) or (AVOV%(CX%)=3)) and ((APOV%(CX%)=1) or (abs(APOV%(CX%))=2) or (APOV%(CX%)=3))
        for v1ca% = OCOV%(CX%) to OCOV%(CX%)+MOV%(CX%)-1
            CG%(CX%,v1ca%)=-4
        next v1ca%
        calculOV()
        if MOV%(CX%)>0
            AVOV%(CX%)=CG%(CX%,OCOV%(CX%)-1)
            APOV%(CX%)=CG%(CX%,OCOV%(CX%)+MOV%(CX%))
        else
            exit_while
        end_if
      end_while
  end_if
  for v1ca% = 1 to 27
      if abs(CG%(CX%,v1ca%))=4
        CG%(CX%,v1ca%)=CG%(CX%,v1ca%)/4
      end_if
  next v1ca%
  rem Calcule à l`oblique descendante ----------------------------------------
  noca%=CX%-CY%+27
  AVJD%(noca%)=0 : APJD%(noca%)=0 : AVOD%(noca%)=0 : APOD%(noca%)=0
  calculJD(noca%)
  if MJD%(noca%)>NJ%-1
      ligne(1,noca%+OCJD%(noca%)-27,OCJD%(noca%),noca%+OCJD%(noca%)+MJD%(noca%)-28,OCJD%(noca%)+MJD%(noca%)-1)
      plus(1)
      for v1ca% = OCJD%(noca%)+1 to OCJD%(noca%)+MJD%(noca%)-2
        CG%(noca%+v1ca%-27,v1ca%)=2
      next v1ca%
      calculJD(noca%)
  end_if
  if MJD%(noca%)>0
      AVJD%(noca%)=CG%(noca%+OCJD%(noca%)-28,OCJD%(noca%)-1)
      APJD%(noca%)=CG%(noca%+OCJD%(noca%)-27+MJD%(noca%),OCJD%(noca%)+MJD%(noca%))
      while ((AVJD%(noca%)=-1) or (abs(AVJD%(noca%))=2) or (AVJD%(noca%)=3)) and ((APJD%(noca%)=-1) or (abs(APJD%(noca%))=2) or (APJD%(noca%)=3))
        for v1ca% = OCJD%(noca%) to OCJD%(noca%)+MJD%(noca%)-1
            CG%(noca%+v1ca%-27,v1ca%)=4
        next v1ca%
        calculJD(noca%)
        if MJD%(noca%)>0
            AVJD%(noca%)=CG%(noca%+OCJD%(noca%)-28,OCJD%(noca%)-1)
            APJD%(noca%)=CG%(noca%+OCJD%(noca%)-27+MJD%(noca%),OCJD%(noca%)+MJD%(noca%))
        else
            exit_while
        end_if
      end_while
  end_if
  for v1ca% = 1 to 27
      if ((noca%+v1ca%-27)>0) and ((noca%+v1ca%-27)<41)
        if abs(CG%(noca%+v1ca%-27,v1ca%))=4
            CG%(noca%+v1ca%-27,v1ca%)=CG%(noca%+v1ca%-27,v1ca%)/4
        end_if
      end_if
  next v1ca%
  GPJD%(noca%)=0
  for v1ca% = 3 to 25
      if ((noca%+v1ca%-27)>2) and ((noca%+v1ca%-27)<39)
        if ((CG%(noca%+v1ca%-29,v1ca%-2)=1) and (CG%(noca%+v1ca%-28,v1ca%-1)=1) and (CG%(noca%+v1ca%-27,v1ca%)=0) and (CG%(noca%+v1ca%-26,v1ca%+1)=1) and (CG%(noca%+v1ca%-25,v1ca%+2)=1))
            GPJD%(noca%)=v1ca%
        end_if
      end_if
  next v1ca%
  calculOD(noca%)
  if MOD%(noca%)>NJ%-1
      ligne(2,noca%+OCOD%(noca%)-27,OCOD%(noca%),noca%+OCOD%(noca%)+MOD%(noca%)-28,OCOD%(noca%)+MOD%(noca%)-1)
      plus(2)
      for v1ca% = OCOD%(noca%)+1 to OCOD%(noca%)+MOD%(noca%)-2
        CG%(noca%+v1ca%-27,v1ca%)=-2
      next v1ca%
      calculOD(noca%)
  end_if
  if MOD%(noca%)>0
      AVOD%(noca%)=CG%(noca%+OCOD%(noca%)-28,OCOD%(noca%)-1)
      APOD%(noca%)=CG%(noca%+OCOD%(noca%)-27+MOD%(noca%),OCOD%(noca%)+MOD%(noca%))
      while ((AVOD%(noca%)=1) or (abs(AVOD%(noca%))=2) or (AVOD%(noca%)=3)) and ((APOD%(noca%)=1) or (abs(APOD%(noca%))=2) or (APOD%(noca%)=3))
        for v1ca% = OCOD%(noca%) to OCOD%(noca%)+MOD%(noca%)-1
            CG%(noca%+v1ca%-27,v1ca%)=-4
        next v1ca%
        calculOD(noca%)
        if MOD%(noca%)>0
            AVOD%(noca%)=CG%(noca%+OCOD%(noca%)-28,OCOD%(noca%)-1)
            APOD%(noca%)=CG%(noca%+OCOD%(noca%)-27+MOD%(noca%),OCOD%(noca%)+MOD%(noca%))
        else
            exit_while
        end_if
      end_while
  end_if
  for v1ca% = 1 to 27
      if ((noca%+v1ca%-27)>0) and ((noca%+v1ca%-27)<41)
        if abs(CG%(noca%+v1ca%-27,v1ca%))=4
            CG%(noca%+v1ca%-27,v1ca%)=CG%(noca%+v1ca%-27,v1ca%)/4
        end_if
      end_if
  next v1ca%
  rem Calcule à l`oblique montante -------------------------------------------
  noca%=CX%+CY%-1
  AVJM%(noca%)=0 : APJM%(noca%)=0 : AVOM%(noca%)=0 : APOM%(noca%)=0
  calculJM(noca%)
  if MJM%(noca%)>NJ%-1
      ligne(1,noca%-OCJM%(noca%)+1,OCJM%(noca%),noca%-OCJM%(noca%)-MJM%(noca%)+2,OCJM%(noca%)+MJM%(noca%)-1)
      plus(1)
      for v1ca% = OCJM%(noca%)+1 to OCJM%(noca%)+MJM%(noca%)-2
        CG%(noca%-v1ca%+1,v1ca%)=2
      next v1ca%
      calculJM(noca%)
  end_if
  if MJM%(noca%)>0
      AVJM%(noca%)=CG%(noca%-OCJM%(noca%)+2,OCJM%(noca%)-1)
      APJM%(noca%)=CG%(noca%-OCJM%(noca%)+1-MJM%(noca%),OCJM%(noca%)+MJM%(noca%))
      while ((AVJM%(noca%)=-1) or (abs(AVJM%(noca%))=2) or (AVJM%(noca%)=3)) and ((APJM%(noca%)=-1) or (abs(APJM%(noca%))=2) or (APJM%(noca%)=3))
        for v1ca% = OCJM%(noca%) to OCJM%(noca%)+MJM%(noca%)-1
            CG%(noca%-v1ca%+1,v1ca%)=4
        next v1ca%
        calculJM(noca%)
        if MJM%(noca%)>0
            AVJM%(noca%)=CG%(noca%-OCJM%(noca%)+2,OCJM%(noca%)-1)
            APJM%(noca%)=CG%(noca%-OCJM%(noca%)+1-MJM%(noca%),OCJM%(noca%)+MJM%(noca%))
        else
            exit_while
        end_if
      end_while
  end_if
  for v1ca% = 1 to 27
      if ((noca%-v1ca%+1)>0) and ((noca%-v1ca%+1)<41)
        if abs(CG%(noca%-v1ca%+1,v1ca%))=4
            CG%(noca%-v1ca%+1,v1ca%)=CG%(noca%-v1ca%+1,v1ca%)/4
        end_if
      end_if
  next v1ca%
  GPJM%(noca%)=0
  for v1ca% = 3 to 25
      if ((noca%-v1ca%+1)>2) and ((noca%-v1ca%+1)<39)
        if (CG%(noca%-v1ca%+3,v1ca%-2)=1) and (CG%(noca%-v1ca%+2,v1ca%-1)=1) and (CG%(noca%-v1ca%+1,v1ca%)=0) and (CG%(noca%-v1ca%,v1ca%+1)=1) and (CG%(noca%-v1ca%-1,v1ca%+2)=1)
            GPJM%(noca%)=v1ca%
        end_if
      end_if
  next v1ca%
  calculOM(noca%)
  if MOM%(noca%)>NJ%-1
      ligne(2,noca%-OCOM%(noca%)+1,OCOM%(noca%),noca%-OCOM%(noca%)-MOM%(noca%)+2,OCOM%(noca%)+MOM%(noca%)-1)
      plus(2)
      for v1ca% = OCOM%(noca%)+1 to OCOM%(noca%)+MOM%(noca%)-2
        CG%(noca%-v1ca%+1,v1ca%)=-2
      next v1ca%
      calculOM(noca%)
  end_if
  if MOM%(noca%)>0
      AVOM%(noca%)=CG%(noca%-OCOM%(noca%)+2,OCOM%(noca%)-1)
      APOM%(noca%)=CG%(noca%-OCOM%(noca%)+1-MOM%(noca%),OCOM%(noca%)+MOM%(noca%))
      while ((AVOM%(noca%)=1) or (abs(AVOM%(noca%))=2) or (AVOM%(noca%)=3)) and ((APOM%(noca%)=1) or (abs(APOM%(noca%))=2) or (APOM%(noca%)=3))
        for v1ca% = OCOM%(noca%) to OCOM%(noca%)+MOM%(noca%)-1
            CG%(noca%-v1ca%+1,v1ca%)=-4
        next v1ca%
        calculOM(noca%)
        if MOM%(noca%)>0
            AVOM%(noca%)=CG%(noca%-OCOM%(noca%)+2,OCOM%(noca%)-1)
            APOM%(noca%)=CG%(noca%-OCOM%(noca%)+1-MOM%(noca%),OCOM%(noca%)+MOM%(noca%))
        else
            exit_while
        end_if
      end_while
  end_if
  for v1ca% = 1 to 27
      if ((noca%-v1ca%+1)>0) and ((noca%-v1ca%+1)<41)
        if abs(CG%(noca%-v1ca%+1,v1ca%))=4
            CG%(noca%-v1ca%+1,v1ca%)=CG%(noca%-v1ca%+1,v1ca%)/4
        end_if
      end_if
  next v1ca%
end_sub

sub calculJD(qo%) : rem Partie oblique Descendante du calcul du Joueur ========
  dim_local v1cd% , v2cd% , v4cd%
  MJD%(qo%)=0 : OCJD%(qo%)=0
  for v1cd% = 1 to 27
      if ((qo%+v1cd%-27)>0) and ((qo%+v1cd%-27)<41)
        if CG%(qo%+v1cd%-27,v1cd%)=1
            v2cd%=v2cd%+1
            if v2cd%=1
              v4cd%=v1cd%
            end_if
            if v2cd%>MJD%(qo%)
              MJD%(qo%)=v2cd%
              OCJD%(qo%)=v4cd%
            end_if
        else
            v2cd%=0
        end_if
      end_if
  next v1cd%
end_sub

sub calculJH() : rem Partie Horizontale du calcul du Joueur ===================
  dim_local v1ch% , v2ch% , v4ch%
  MJH%(CY%)=0 : OCJH%(CY%)=0
  for v1ch% = 1 to 40
      if CG%(v1ch%,CY%)=1
        v2ch%=v2ch%+1
        if v2ch%=1
            v4ch%=v1ch%
        end_if
        if v2ch%>MJH%(CY%)
            MJH%(CY%)=v2ch%
            OCJH%(CY%)=v4ch%
        end_if
      else
        v2ch%=0
      end_if
  next v1ch%
end_sub

sub calculJM(noca%) : rem Partie oblique Montante du calcul du Joueur =========
  dim_local v1cm% , v2cm% , v4cm% : rem Variables à utilisation multiple
  MJM%(noca%)=0 : OCJM%(noca%)=0
  for v1cm% = 1 to 27
      if ((noca%-v1cm%+1)>0) and ((noca%-v1cm%+1)<41)
        if CG%(noca%-v1cm%+1,v1cm%)=1
            v2cm%=v2cm%+1
            if v2cm%=1
              v4cm%=v1cm%
            end_if
            if v2cm%>MJM%(noca%)
              MJM%(noca%)=v2cm%
              OCJM%(noca%)=v4cm%
            end_if
        else
            v2cm%=0
        end_if
      end_if
  next v1cm%
end_sub

sub calculJV() : rem Partie Verticale du calcul du Joueur =====================
  dim_local v1cv% , v2cv% , v4cv% : rem Variables à utilisation multiple
  MJV%(CX%)=0 : OCJV%(CX%)=0
  for v1cv% = 1 to 27
      if CG%(CX%,v1cv%)=1
        v2cv%=v2cv%+1
        if v2cv%=1
            v4cv%=v1cv%
        end_if
        if v2cv%>MJV%(CX%)
            MJV%(CX%)=v2cv%
            OCJV%(CX%)=v4cv%
        end_if
      else
        v2cv%=0
      end_if
  next v1cv%
end_sub

sub calculOD(qo%) : rem Partie oblique Descendante du calcul de l`Ordi ========
  dim_local v1cd% , v3cd% , v5cd% : rem Variables à utilisation multiple
  MOD%(qo%)=0 : OCOD%(qo%)=0
  for v1cd% = 1 to 27
      if ((qo%+v1cd%-27)>0) and ((qo%+v1cd%-27)<41)
        if CG%(qo%+v1cd%-27,v1cd%)=-1
            v3cd%=v3cd%+1
            if v3cd%=1
              v5cd%=v1cd%
            end_if
            if v3cd%>MOD%(qo%)
              MOD%(qo%)=v3cd%
              OCOD%(qo%)=v5cd%
            end_if
        else
            v3cd%=0
        end_if
      end_if
  next v1cd%
end_sub

sub calculOH() : rem Partie Horizontale du calcul de l`Ordi ===================
  dim_local V1ch% , v3ch% , v5ch% : rem Variables à utilisation multiple
  MOH%(CY%)=0 : OCOH%(CY%)=0
  for v1ch% = 1 to 40
      if CG%(v1ch%,CY%)=-1
        v3ch%=v3ch%+1
        if v3ch%=1
            v5ch%=v1ch%
        end_if
        if v3ch%>MOH%(CY%)
            MOH%(CY%)=v3ch%
            OCOH%(CY%)=v5ch%
        end_if
      else
        v3ch%=0
      end_if
  next v1ch% 
end_sub 

sub calculOM(noca%) : rem Partie oblique Montante du calcul de l`Ordi =========
  dim_local v1cm% , v3cm% , v5cm% : rem Variables à utilisation multiple
  MOM%(noca%)=0 : OCOM%(noca%)=0
  for v1cm% = 1 to 27
      if ((noca%-v1cm%+1)>0) and ((noca%-v1cm%+1)<41)
        if CG%(noca%-v1cm%+1,v1cm%)=-1
            v3cm%=v3cm%+1
            if v3cm%=1
              v5cm%=v1cm%
            end_if
            if v3cm%>MOM%(noca%)
              MOM%(noca%)=v3cm%
              OCOM%(noca%)=v5cm%
            end_if
        else
            v3cm%=0
        end_if
      end_if
  next v1cm%
end_sub

sub calculOV() : rem Partie Verticale du calcul de l`Ordi =====================
  dim_local v1cv% , v3cv% , v5cv% : rem Variables à utilisation multiple
  MOV%(CX%)=0 : OCOV%(CX%)=0
  for v1cv% = 1 to 27
      if CG%(CX%,v1cv%)=-1
        v3cv%=v3cv%+1
        if v3cv%=1
            v5cv%=v1cv%
        end_if
        if v3cv%>MOV%(CX%)
            MOV%(CX%)=v3cv%
            OCOV%(CX%)=v5cv%
        end_if
      else
        v3cv%=0
      end_if
  next v1cv%
end_sub

clic: : rem Redirection de tous les on-click ==================================
  select number_click
      case 100
        off_click 100
        ecrit()
        if caption$(380)=""
            on_click 100,clic
        end_if
      case 500 : rejouer()
      case 510 : aide()
      case 520 : quitter()
  end_select
  if number_click>295 and number_click<325
      type()
  end_if
  if number_click>335 and number_click<365
      niveau()
  end_if
  if number_click>395 and number_click<415
      force()
  end_if
return

rem Datas =====================================================================
  data "Morpionibus simple" , "Morpionibus 10" , "Morpionibus Max"
  data "Un seul joueur" , "Deux joueurs"
  data "Jouer" , "Aide" , "Quitter"
rem Fin des datas

sub ecrit() : rem Note une croix ou un rond dans la grille ====================
  dim_local exec% , eyec% : rem Coordonnées du clic
  dim_local cbec% , cvec% , crec% : rem Couleurs du point de clic
  dim_local v1ec% : rem Variables à utilisation variée
  exec%=mouse_x_left_down(100)
  eyec%=mouse_y_left_down(100)
  cbec%=color_pixel_blue(100,exec%,eyec%)
  cvec%=color_pixel_green(100,exec%,eyec%)
  crec%=color_pixel_red(100,exec%,eyec%)
  if cbec%<>180 and cvec%<>180 and crec%<>180
      CX%=int(exec%/25)+1
      CY%=int(eyec%/25)+1
  end_if
  if CG%(CX%,CY%)=0
      if TJ%=1
        font_name 100,"Webdings"
        font_color 100,0,0,0
        print_locate (CX%-1)*25+3,(CY%-1)*25
        print chr$(114)
      else
        font_name 100,"Wingdings"
        font_color 100,255,0,0
        print_locate (CX%-1)*25+4,(CY%-1)*25+1
        print chr$(162)
      end_if
      CG%(CX%,CY%)=TJ%
      calcul()
      TJ%=0-TJ%
      if caption$(380)=""
        note()
      end_if
      NE%=NE%+1
      if NE%=1
        for v1ec% = 300 to 320 step 10
            inactive v1ec%
            inactive v1ec%+40
        next v1ec%
        inactive 400
        inactive 410
        inactive 430
        inactive 440
      end_if
  end_if
  if TJ%=-1
      if caption$(380)=""
        if checked(400)=1
            auto()
        end_if
      end_if
  end_if
  if NE%>1079
      gagne()
      beep
  end_if
end_sub

sub force() : rem Possibilité ou non de réglage de la force de Théodore =======
  if number_click=400
      active 430
      active 440
  else
      inactive 430
      inactive 440
  end_if
end_sub

sub gagne() : rem Cas où un joueur gagne ======================================
  dim_local v1ga%
  select CJ%
      case 1
        if caption$(250)="01"
            v1ga%=1
        end_if
        if caption$(280)="01"
            v1ga%=2
        end_if
      case 2
        if caption$(250)="10"
            v1ga%=1
        end_if
        if caption$(280)="10"
            v1ga%=2
        end_if
      case 3
        if val(caption$(250))>val(caption$(280))
            v1ga%=1
        end_if
        if val(caption$(250))<val(caption$(280))
            v1ga%=2
        end_if
  end_select
  if v1ga%=1
      caption 380," NOIR"+chr$(13)+"GAGNE"
  end_if
  if v1ga%=2
      caption 380,"ROUGE"+chr$(13)+"GAGNE"
  end_if
  ligne(v1ga%)
  if v1ga%>0
      off_click 100
      caption 210,""
      caption 220,""
  end_if
end_sub

sub grille() : rem Trace la grille de jeu =====================================
  dim_local v1gr% , v2gr% : rem Variables à utilisation multiple
  2d_pen_width 1
  2d_pen_color 180,180,180
  for v1gr% = 1 to 27
      2d_line 0,v1gr%*25-1,1002,v1gr%*25-1
  next v1gr%
  for v1gr%=1 to 40
      2d_line v1gr%*25+1,0,v1gr%*25+1,675
  next v1gr%
end_sub

sub jouer() : rem L`ordinateur joue ===========================================
  dim_local v1jo%
  font_name 100,"Wingdings"
  font_color 100,255,0,0
  for v1jo% = 1 to 2
      print_locate (CX%-1)*25+4,(CY%-1)*25+1
      print chr$(162)
      pause 50
      print_locate (CX%-1)*25+4,(CY%-1)*25+1
      print " "
      pause 50
  next v1jo%
  print_locate (CX%-1)*25+4,(CY%-1)*25+1
  print chr$(162)
  CG%(CX%,CY%)=TJ%
  calcul()
  TJ%=0-TJ%
  if caption$(380)=""
      note()
  end_if
  NE%=NE%+1
end_sub

sub ligne(qg%,xl1%,yl1%,xl2%,yl2%) : rem Trace lignes alignements gagnants ====
  dim_local x1li% , y1li% , x2li% , y2li% : rem Coordonnées réelles de la ligne
  dim_local v1li%
  rem qg% = Qui Gagne
  rem xl1%,yl1%,xl2%,yl2% = Coordonnées dans la grille
  x1li%=(xl1%-1)*25+13
  y1li%=(yl1%-1)*25+12
  x2li%=(xl2%-1)*25+14
  y2li%=(yl2%-1)*25+12
  2d_pen_width 3
  if qg%=1
      2d_pen_color 0,155,255
  else
      2d_pen_color 0,255,0
  end_if
  if caption$(380)=""
      2d_line x1li%,y1li%,x2li%,y2li%
  end_if
end_sub

sub niveau() : rem Niveau de jeu ==============================================
  dim_local v1ni%
  v1ni%=number_click
  NJ%=(v1ni%/10)-30
end_sub

sub note() : rem Affiche le contenu de la note jaune ==========================
  if TJ%=1
      caption 210," NOIR"+chr$(13)+"  joue"
      font_name 220,"Webdings"
      font_color 220,0,0,0
      caption 220,chr$(114)
  else
      caption 210,"ROUGE"+chr$(13)+"  joue"
      font_name 220,"Wingdings"
      font_color 220,255,0,0
      caption 220,chr$(162)
  end_if
end_sub

sub plus(qj%) : rem Addition d`un point au score d`un des joueurs =============
  dim_local v1pl% , v2pl% , v3pl$ , v4pl$ : rem Variables à utilisation variée
  rem qj% = Quel Joueur
  if caption$(250)<>""
      v1pl%=val(caption$(250))
  end_if
  if caption$(280)<>""
      v2pl%=val(caption$(280))
  end_if
  if qj%=1
      v1pl%=v1pl%+1
  else
      v2pl%=v2pl%+1
  end_if
  v3pl$=str$(v1pl%)
  v4pl$=str$(v2pl%)
  if len(v3pl$)<2
      v3pl$="0"+v3pl$
  end_if
  if len(v4pl$)<2
      v4pl$="0"+v4pl$
  end_if
  caption 250,v3pl$
  caption 280,v4pl$
  beep
  select CJ%
      case 1
        if caption$(250)<>"00" or caption$(280)<>"00"
            gagne()
        end_if
      case 2
        if val(caption$(250))>9 or val(caption$(280))>9
            gagne()
        end_if
      case 3
        if NE%>1079
            gagne()
        end_if
  end_select
end_sub

sub quitter() : rem Abandonner le jeu =========================================
  dim_local v1qu%
  v1qu%=message_confirmation_yes_no("Vous voulez vraiment quitter ce jeu ?")
  if v1qu%=1
      terminate
  end_if
end_sub

sub rejouer() : rem Nouveau jeu ===============================================
  dim_local v1re% , v2re% : rem Variables à utilisation multiple
  if caption$(500)="Rejouer"
      for v1re% = 1 to 40
        for v2re% = 1 to 27
            CG%(v1re%,v2re%)=0
        next v2re%
      next v1re%
      NE%=0
      TJ%=1
      for v1re% = 300 to 320 step 10
        active v1re%
        active v1re%+40
      next v1re%
      active 400
      active 410
      active 430
      active 440
      caption 380,""
      color 100,255,255,255
      grille()
      caption 250,"00"
      caption 280,"00"
      for v1re% = 1 to 27
        MJH%(v1re%)=0
        MOH%(v1re%)=0
      next v1re%
      for v1re% = 1 to 40
        MJV%(v1re%)=0
        MOV%(v1re%)=0
      next v1re%
      for v1re% = 1 to 66
        MJD%(v1re%)=0
        MOD%(v1re%)=0
        MJM%(v1re%)=0
        MOM%(v1re%)=0
      next v1re%
  end_if
  caption 500,"Rejouer"
  note()
  on_click 100,clic
end_sub

sub type() : rem Type de jeu ==================================================
  dim_local v1ty%
  v1ty%=number_click
  CJ%=(v1ty%/10)-29
end_sub


Dernière édition par jjn4 le Lun 26 Juin 2017 - 14:57, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
papydall

avatar

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

MessageSujet: Re: Concours de Morpions   Mar 20 Juin 2017 - 18:27

Salut Amigo Martianno!

Papydall gagne:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

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

MessageSujet: Re: Concours de Morpions   Mar 20 Juin 2017 - 20:09

J'aime !

Je n'ai réussi à battre Théodore qu'une seul fois en 3 ou 4 parties, il est très fort.

Je connais un de mes petits enfants qui va adorer.
cheers

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 2414
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Concours de Morpions   Mar 20 Juin 2017 - 20:20

Moi au contraire j'ai perdu la première fois seulement sur les 4 parties. drunken

Maintenant j'ai ma stratégie mais je ne la divulguerai pas sinon Théodore risque d'être furax et de mettre les bouchées doubles à la prochaine fois.
lol! lol! lol! lol!

Cela dit, encore un très bon jeu, bien prenant comme notre martien en a le secret.
BRAVO JJN4 !! cheers cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
papydall

avatar

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

MessageSujet: Re: Concours de Morpions   Mer 21 Juin 2017 - 3:23

Spoiler:
 

Spoiler:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Froggy One

avatar

Nombre de messages : 395
Date d'inscription : 06/01/2012

MessageSujet: Re: Concours de Morpions   Mer 21 Juin 2017 - 9:45

Super cadeau de vacances ! d'abord j'ai eu la joie de le battre, et maintenant je vais pouvoir apprendre en regardant ton code !! merci jjn4 !!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
Yannick

avatar

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

MessageSujet: re   Mer 21 Juin 2017 - 11:58

cheers cheers cheers

Super JJN4 !!!
Encore une belle création qui va enrichir la Ludothèque.

J' ai réussi à battre Théodore mais il est coriace.
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jjn4

avatar

Nombre de messages : 1628
Date d'inscription : 13/09/2009

MessageSujet: +++   Mer 21 Juin 2017 - 12:36

En plus, j'ai quelques idées pour le rendre plus fort encore...
Mais je ne sais pas si je vous ferai cette nouvelle version
prochainement, car c'est bientôt les vacances...
Alors peut-être à la rentrée...?
Amusez-vous bien !!!
jocolor alien geek
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
jjn4

avatar

Nombre de messages : 1628
Date d'inscription : 13/09/2009

MessageSujet: +++   Mer 21 Juin 2017 - 19:00

Et voilà, c'est fait (avant les vacances) :
Théodore a maintenant 2 forces de calcul.
Laurent, tu me diras si ta stratégie secrète
fonctionne toujours... !!!
lol! alien lol!
Bonnes vacances à tous
et à plus tard...
cheers alien cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Minibug

avatar

Nombre de messages : 2414
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Concours de Morpions   Mer 21 Juin 2017 - 19:13

Sacré Théodore va !

Il a bien appris ces nouveaux cours et il les applique à la lettre...
Mais si on ruse encore un peu plus, eh bien là plus de Théodore ! Laughing Laughing Laughing

Cela dit, la faille est quand même plus limité qu'avant mais il reste encore du travail à faire sur l'IA pour le rendre invincible !!! geek
Bon en même temps ce n'est que Théodore ! rendeer

Bonnes vacances Jjn4 et reviens nous tous verdi par ton bronzage martien ! jocolor king sunny drunken


Dernière édition par Laurent (Minibug) le Jeu 22 Juin 2017 - 0:23, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Yannick

avatar

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

MessageSujet: re   Mer 21 Juin 2017 - 21:10

cheers cheers cheers


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

avatar

Nombre de messages : 1628
Date d'inscription : 13/09/2009

MessageSujet: +++   Jeu 22 Juin 2017 - 0:04

Oh, il ne faut pas rendre Théodore trop fort, quand même,
sinon, s'il gagne tout le temps, vous finirez par le prendre en grippe !
Alors bye, bye, à dans pas mal de temps !
Bonnes prochaines vacances à vous aussi !
sunny sunny alien flower flower
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Froggy One

avatar

Nombre de messages : 395
Date d'inscription : 06/01/2012

MessageSujet: Re: Concours de Morpions   Dim 25 Juin 2017 - 10:29

Bonnes vacances JJN ! cela me laisse le temps de me creuser les méninges pour comprendre comment tu t'y prends pour coder cette intelligence artificielle... j'essaie de traduire en terrien, cela donne : si le niveau de jeu est supérieur à 4 alors le point de clic est à zéro et si le calcul des suites est égal à la différence du niveau de jeu et de ce qu'il faut lui retirer...

 À mon niveau à moi c'est effectivement du martien ! comprends bien, je ne t'en fais pas reproche, ce serait très idiot de ma part ! je suis très heureux de battre ton programme ( Twisted Evil  Twisted Evil  Twisted Evil ) mais je retrouve un peu la sensation de vertige qui m'a saisi quand j'avais réussi à coder une grille de lettres et que quelqu'un a écrit sur le forum (sans aucune mauvaise intention, je le précise) que je gagnerais tout son respect si j'arrivais à coder le programme pour qu'il trouve le mot dans icelle...  je prends conscience de la distance en années-lumière entre le gars qui fait des petits projets, celui qui sait depuis longtemps en faire des gros et le nombre incommensurable de routines qui trainent sur le net, aussi désincarnées pour le néophyte que la vénus de Milo pour un néanderthalien (quoique).

 Merci de m'avoir lu, j'avais envie de m'exprimer et que cela n'empêche personne de continuer : il n'est pas nécessaire d'espérer pour entreprendre ni de réussir etc.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
Jean Claude

avatar

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

MessageSujet: Re: Concours de Morpions   Dim 25 Juin 2017 - 15:36

Ah! Ah! Théodore c'est un blaireau, il n'est pas aussi futé qu'il le prétend.



A+

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

avatar

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

MessageSujet: re   Dim 25 Juin 2017 - 16:30

@ Jean Claude,

Il va vraiment falloir que l' on te trouve un truc à coder...
lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Froggy One

avatar

Nombre de messages : 395
Date d'inscription : 06/01/2012

MessageSujet: Re: Concours de Morpions   Dim 25 Juin 2017 - 17:29

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
jjn4

avatar

Nombre de messages : 1628
Date d'inscription : 13/09/2009

MessageSujet: +++   Lun 26 Juin 2017 - 15:08

Et voici la 3° (et je pense dernière) mouture de Morpionibus-N (publié au début).
Je m'étais dépêché de « finir » pour partir en vacances et penser à autre chose.
Total, il m'est revenu à l'esprit des oublis faisant des bugs et aussi des
perfectionnements et des vérifications amenant à des aménagements
(je n'avais même pas testé la catégorie Morpionibus-Max (pressé de partir)).
Finalement, je préfère le faire maintenant, car à la rentrée, j'aurai
passablement oublié le pourquoi du comment de son fonctionnement
(et comme vous le voyez, il y a maintenant la Wifi, sur la planète Mars !)
(J'ai un peu boosté l'Intelligence Artificielle, si bien qu'il est moins facile à battre).
(Mais rassurez-vous, vous pouvez encore le considérer comme un blaireau
(ou un bourrin, selon le point de vue de chacun, et espérer le battre)
Amusez-vous bien, car en principe, je ne fais pas d'informatique pendant
les vacances, et comme je ne reviens pas avant un bout de temps...
cheers  sunny  alien  bom  drunken
Je voudrais dire un petit mot à ce pauvre Froggy-one,
qui ne rêve que de passer en Froggy-two (et plus si affinité)
et qu'on laisse sur le bord de la route sans songer à le prendre en stop !
(surtout, ne te vexe pas, c'est de l'humour) (et même de l'humour martien).
Je dirai simplement que j'ai commencé à faire de l'informatique à partir de 1984,
en amateur toujours (je n'ai pas du tout fait d'études dans cette direction)
et disons que l'amateur commence à avoir un peu d'expérience...
silent  alien  king
Pour ce qui est des programmes, il ne faut pas les considérer
comme ayant été faits tout d'un bloc, il faut faire étape par étape,
sans vraiment être sûr qu'on arrivera au bout, ni à l'étape suivante.
Par exemple, je fais souvent d'abord la présentation (que je tiens à être jolie)
ensuite ça donne des idées pour l'étape suivante (faire fonctionner le jeu en manuel)
L'Intelligence Artificielle, ça vient en dernier, et pas de façon définitive.
Je tiens à beaucoup tester mes programmes, de façon à ne pas les offrir plein de bugs.
Et en les testant, ça donne des idées pour l'étape suivante ou pour des améliorations.
Au fond, c'est une construction progressive.
scratch  alien  affraid
Au final, je conçois que ce soit difficile à décrypter.
Pour aider à comprendre, voici le plan initial d'I.A. que j'avais conçu
pour Morpionibus-N (plusieurs fois boosté depuis) :
Détecter les longueurs maximum des segments
pour les horizontales, les verticales et les obliques, puis
1 Si XXXX --> mettre O au bout
2 Si XXX ---> mettre O au bout
3 Si OOOO --> mettre O au bout
4 Si OOO --> mettre O au bout
5 Si OO ---> mettre O au bout
6 Si O ----> mettre O au bout
7 Si aucun O --> mettre O près du X
Bien sûr, après, ce schéma simple s'est un peu étoffé à force d'y jouer...
Ah :  confused  alien  Suspect
Pssst : (citation) « Si le niveau de jeu est supérieur à 4 alors le point de clic... »
En fait, il s'agit du nombre de XXXX exigé pour faire un morpion
(ce nombre étant le même que le niveau de jeu).
Question  alien  study
Bon, je ne vais pas en mettre des dizaines de pages...
Surtout, il ne pas se décourager, ça finit par venir !
Bonnes vacances (certainement prochaines) à tous !!!
jocolor cherry alien geek flower
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Froggy One

avatar

Nombre de messages : 395
Date d'inscription : 06/01/2012

MessageSujet: Re: Concours de Morpions   Lun 26 Juin 2017 - 19:30

study cyclops OK merci alien
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
Yannick

avatar

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

MessageSujet: re   Mar 1 Aoû 2017 - 22:21

@ JJN4,

J' ai repris ton jeu du Morpion et j' ai essayer de "Windowser" l' interface pour une amie qui a du mal
à sortir des sentiers battus.

Oui mais voilà, j' ai une série de bug dus à des caption$() et autres.J' ai mis sur mon webdav un dossier
zip de mes travaux.

Si tu peux y jeter un oeil et voir ce qui cloche entre mon interface et tes procédures de calcul... scratch
Je t ' en serai reconnaissant. I love you
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jjn4

avatar

Nombre de messages : 1628
Date d'inscription : 13/09/2009

MessageSujet: +++   Dim 24 Sep 2017 - 16:34

Coucou !
Me voilà de retour de vacances !
alien

@ Yannick :
Désolé, je ne suivais pas vraiment
ce qui se passait sur le forum...
sunny

J'ai cherché sur ton webdav et je
n'ai rien trouvé de ce que tu dis.
Mais qu'est-ce que tu entends
exactement par Windowser ?
Panoramic fonctionne déjà avec
windows, non ?
scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Yannick

avatar

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

MessageSujet: Re   Lun 25 Sep 2017 - 14:55

Désolé JJN4,

j' ai eu besoin de la place pour mettre le squelette du mag pour un éventuel successeur.
Par "windoser" j' entends donner un aspect windows ( fond vert, main_menu, etc...).
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Concours de Morpions   Lun 25 Sep 2017 - 16:09

Yanick l’inventeur !
Il a inventé le verbe « windowser ».
C’est un verbe du 1er groupe et se conjugue comme « panoramiquer »

Spoiler:
 

Mais quand on est vert et qu'on vient d'une planète rouge, on est pardonné de la tête aux pieds même si l'on ne saisit pas l'humour panoramo-windosien !!!!

Ne dégainez pas, je sors sur la pointe des pieds. Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jjn4

avatar

Nombre de messages : 1628
Date d'inscription : 13/09/2009

MessageSujet: +++   Lun 25 Sep 2017 - 18:11

Ah oui, les menus, je n'en mets jamais, car je fais tous
mes programmes pour qu'ils fonctionnent aisément en
tactile, alors que les menus, en tactile, il faut pour cela
avoir le doigt « fin ».
Quant au fond vert... franchement, un jeu de morpion
sur une feuille de papier à fond vert, ce n'est pas sérieux.
Comme les boutons sont finalement beaucoup plus faciles
que les menus, conseille donc à ton amie de... s'adapter...
parce que pour mettre tous les boutons (il y en a 26,
avec les changements) en menus, il y a du boulot !
affraid
@ Papydall :
J'avais fait un programme comme cela, une fois.
Il conjuguait indifféremment tous les verbes se terminant
en ER, si bien que si on lui donnait le mot : Escalier
(qui se termine en ER), il conjuguait (subjonctif) :
que j'escaliasse
que tu escaliasses
qu'il escaliât
que nous escaliassions
...
lol! alien lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Contenu sponsorisé




MessageSujet: Re: Concours de Morpions   

Revenir en haut Aller en bas
 
Concours de Morpions
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

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: