jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Othello - la table d'exercices Sam 24 Mai 2014 - 14:16 | |
| Et voici maintenant Othello. Décidément, je suis très jeux, ces temps-ci ! Qu'est-ce que je vais pouvoir m'exercer !! Alors, encore une fois, ceci n'est qu'une table d'exercices, c'est-à-dire que vous devez jouer alternativement les blancs et les noirs. Par contre, cette fois-ci, l'ordinateur contrôle vos déplacements et vous empêche de jouer un coup illicite. Il peut même aussi vous conseiller dans votre jeu, mais là, comme l'a si bien dit Shakespeare, doit-on toujours suivre les conseils des ordinateurs ? That is the question ! (Othello, Acte III, Scène IV). Ce sera alors à vos risques et périls... (Plus tard, à la rentrée, j'essaierai d'en faire un véritable jeu où l'ordinateur pourra vous servir de partenaire. Ca promet... En attendant, exercez-vous bien ! - Code:
-
rem ' Othello - par jjn4 - le 13-05-2014 dim a , i , j , k : rem Variables provisoires numériques dim a$ : rem Variables provisoires alphanumériques dim ei : rem Emplacement Indiqué pour dessiner les pions dim cc(9,9) : rem Pions contenus dans les cases de la grille dim cf : rem Couleur du feu du bas (vert=0 - rouge=1) dim ga(8,8) : rem Grille d`Analyse de la situation dim gr(8,8) : rem GRille décorative dim nc : rem Nombre de cases où jouer dim nq : rem Numero de la cellule cliQuée dim io : rem Indicateur du bouton Où dim jp : rem Indicateur de Juste Place d`un pion dim tb , tn : rem Total de points des blancs et des noirs dim vl(8) : rem Valeur des lignes autour du pion joué label aide : rem Aide à l`utilisation du programme label calcul : rem Calcul du nombre de pions de chacun label clic : rem Clic sur une cellule du tableau label dessin : rem Dessine un pion à l`endroit précisé label feux : rem Changement de couleur des feux bicolores label new : rem Recommencer un nouveau jeu label ou : rem Où placer les pions label pivot : rem Faire pivoter les pions label quel : rem Quelle réponse donner au clic label quitter : rem Sortir du programme cc(5,4)=1 : cc(5,5)=2 : cc(4,4)=2 : cc(4,5)=1 a$="DBDAADBDECEDDECEBACBBCABFBEDDEBF" : rem Hexadécimal for k=1 to 2 a$=reverse$(a$) for i=1+(k-1)*4 to 4+(k-1)*4 for j=1 to 8 gr(i,j)=asc(mid$(a$,((i-1)-(k-1)*4)*8+j,1))-65 next j next i next k
rem form0 width 0,1000 height 0,730 caption 0," Othello - Table d'exercice" rem Indicateurs de jeu button 18 left 18,9 top 18,536 width 18,106 height 18,106 font_bold 18 font_size 18,22 caption 18,"Où" on_click 18,ou alpha 20 hide 20 left 20,2 top 20,475 width 20,120 height 20,173 color 20,255,0,0 alpha 22 hide 22 left 22,9 top 22,482 width 22,53 height 22,54 color 22,0,0,0 alpha 24 hide 24 left 24,62 top 24,482 width 24,53 height 24,54 color 24,255,255,255 alpha 26 hide 26 left 26,17 top 26,491 font_bold 26 font_size 26,24 color 26,0,0,0 font_color 26,255,255,255 alpha 28 hide 28 left 28,70 top 28,491 font_bold 28 font_size 28,24 color 28,255,255,255 alpha 30 left 30,10 top 30,80 width 30,53 height 30,53 color 30,255,255,255 alpha 32 left 32,10 top 32,133 width 32,53 height 32,53 color 32,0,0,0 alpha 34 left 34,63 top 34,80 width 34,53 height 34,53 color 34,255,0,0 alpha 36 left 36,63 top 36,133 width 36,53 height 36,53 color 36,0,255,0 button 38 left 38,10 top 38,190 width 38,106 height 38,106 font_bold 38 font_size 38,48 font_name 38,"Wingdings" caption 38,chr$(244) on_click 38,feux alpha 40 left 40,10 top 40,360 width 40,53 height 40,53 color 40,0,0,0 alpha 42 left 42,63 top 42,360 width 42,53 height 42,53 color 42,255,255,255 alpha 44 left 44,18 top 44,369 font_bold 44 font_size 44,24 color 44,0,0,0 font_color 44,255,255,255 alpha 46 left 46,71 top 46,369 font_bold 46 font_size 46,24 color 46,255,255,255 alpha 48 left 48,68 top 48,153 font_bold 48 color 48,0,255,0 caption 48,"A vous" rem Boutons de commande button 50 left 50,784 top 50,10 width 50,160 height 50,160 font_bold 50 font_size 50,18 caption 50,"Aide" on_click 50,aide button 52 left 52,784 top 52,330 width 52,160 height 52,160 font_bold 52 font_size 52,18 caption 52,"Nouveau" on_click 52,new button 54 left 54,784 top 54,490 width 54,160 height 54,160 font_bold 54 font_size 54,18 caption 54,"Quitter" on_click 54,quitter rem Bordure du tableau alpha 80 left 80,125 top 80,5 width 80,648 height 80,648 color 80,120,90,0
rem Dessin de la planche (101-108 + 111-118 + 121-128 + 131-138 ) for i=1 to 8 : rem ( + 141-148 + 151-158 + 161-168 + 171-178) for j=1 to 8 picture 100+(i-1)*10+j left 100+(i-1)*10+j,j*80+50 top 100+(i-1)*10+j,(8-i)*80+10 width 100+(i-1)*10+j,78 height 100+(i-1)*10+j,78 color 100+(i-1)*10+j,180,255,255 on_click 100+(i-1)*10+j,clic next j next i for i=0 to 1 for j=0 to 1 ei=134+i*10+j gosub dessin next j next i gosub calcul end : rem ' Début des routines ===============================================
aide: : rem Aide à l`utilisation du programme application_title "REGLES DU JEU D'OTHELLO" a$=" Ce jeu consiste à placer des pions de sa couleur"+chr$(13) a$=a$+"de façon à ce que ceux-ci emprisonnent un ou plusieurs"+chr$(13) a$=a$+"pions adverses dans le sens horizontal, vertical ou diagonal."+chr$(13) a$=a$+chr$(13)+" Les pions pris prendront alors la couleur du joueur."+chr$(13) a$=a$+"Vous devez placer vos pions à un endroit où ils pourront prendre"+chr$(13) a$=a$+"au moins un pion de l'adversaire."+chr$(13)+chr$(13) a$=a$+" Les noirs commencent. Si un joueur ne peut pas jouer, il passe"+chr$(13) a$=a$+"son tour. A la fin, le vainqueur est celui qui possède le plus de"+chr$(13) a$=a$+"pions. S'il reste des cases vides, elles comptent pour le vainqueur."+chr$(13)+chr$(13) a$=a$+" Le programme peut vous prodiguer des conseils en vous indiquant"+chr$(13) a$=a$+"toutes les cases où vous pouvez jouer (jaune + rose) et les cases où"+chr$(13) a$=a$+"il vous conseille préférentiellement de jouer (rose). (Mais si vous"+chr$(13) a$=a$+"trouvez que les conseils de l'ordinateur sont mauvais, l'auteur du"+chr$(13) a$=a$+"programme décline toute responsabilité...)"+chr$(13) message a$ return
calcul: : rem Calcul du nombre de pions de chacun tb=0 : tn=0 for i=1 to 8 for j=1 to 8 if cc(i,j)=1 tb=tb+1 end_if if cc(i,j)=2 tn=tn+1 end_if next j next i caption 44,tn caption 46,tb return
clic: : rem Clic sur une cellule du tableau nq=number_click if cc(int((nq-100)/10)+1,nq-(int(nq/10)*10))=0 i=int((nq-100)/10)+1 j=nq-(int(nq/10)*10) gosub quel if jp=1 2d_target_is nq 2d_pen_color 0,0,0 if cf=1 2d_fill_color 255,255,255 cc(int((nq-100)/10)+1,nq-(int(nq/10)*10))=1 else 2d_fill_color 0,0,0 cc(int((nq-100)/10)+1,nq-(int(nq/10)*10))=2 end_if 2d_circle 39,39,35 gosub pivot gosub feux gosub calcul else beep end_if else beep end_if return
dessin: : rem Dessine un pion à l`endroit indiqué 2d_target_is ei 2d_fill_color 255,255,255 if i=j 2d_fill_color 0,0,0 end_if 2d_pen_color 0,0,0 2d_circle 39,39,35 return
feux: : rem Changement de couleur des feux bicolores cf=1-cf if cf=1 color 34,0,255,0 color 36,255,0,0 top 48,100 else color 34,255,0,0 color 36,0,255,0 top 48,153 end_if return
new: : rem Recommencer un nouveau jeu a=message_confirmation_yes_no("Recommencer un nouveau jeu ?") if a=1 for i=1 to 8 for j=1 to 8 2d_target_is 100+(i-1)*10+j 2d_pen_color 180,255,255 2d_fill_color 180,255,255 2d_circle 39,39,35 cc(i,j)=0 next j next i for i=0 to 1 for j=0 to 1 ei=134+i*10+j gosub dessin next j next i cc(5,4)=1 : cc(5,5)=2 : cc(4,4)=2 : cc(4,5)=1 gosub calcul cf=1 gosub feux end_if return
ou: : rem Où placer les pions io=1-io if io=1 for i=20 to 28 step 2 show i next i caption 26+(1-cf)*2,"" caption 18,"Jouer" inactive 38 inactive 52 for i=1 to 8 for j=1 to 8 off_click 100+(i-1)*10+j ga(i,j)=0 next j next i nc=0 for i=1 to 8 for j=1 to 8 if cc(i,j)=0 gosub quel if jp=1 ga(i,j)=1 nc=nc+1 color 100+(i-1)*10+j,255,255,0 end_if end_if next j next i caption 26+cf*2,nc a=0 for k=5 to 0 step -1 for i=1 to 8 for j=1 to 8 if (ga(i,j)=1) and (gr(i,j)=k) color 100+(i-1)*10+j,255,200,255 a=1 end_if next j next i if a=1 exit_for end_if next k else for i=20 to 28 step 2 hide i next i caption 18,"Où" for i=1 to 8 for j=1 to 8 on_click 100+(i-1)*10+j,clic if ga(i,j)=1 color 100+(i-1)*10+j,180,255,255 end_if next j next i active 38 active 52 end_if return
pivot: : rem Faire pivoter les pions i=int((nq-100)/10)+1 j=nq-(int(nq/10)*10) a=cc(i,j) if vl(1)>0 : rem Horizontale Est for k=j+1 to j+vl(1) 2d_target_is 100+(i-1)*10+k 2d_pen_color 0,0,0 2d_fill_color (2-a)*255,(2-a)*255,(2-a)*255 wait 100 2d_circle 39,39,35 cc(i,k)=a next k end_if if vl(2)>0 : rem Oblique Nord-Est for k=i+1 to i+vl(2) 2d_target_is 100+(k-1)*10+j+k-i 2d_pen_color 0,0,0 2d_fill_color (2-a)*255,(2-a)*255,(2-a)*255 wait 100 2d_circle 39,39,35 cc(k,j+k-i)=a next k end_if if vl(3)>0 : rem Verticale Nord for k=i+1 to i+vl(3) 2d_target_is 100+(k-1)*10+j 2d_pen_color 0,0,0 2d_fill_color (2-a)*255,(2-a)*255,(2-a)*255 wait 100 2d_circle 39,39,35 cc(k,j)=a next k end_if if vl(4)>0 : rem Oblique Nord-Ouest for k=i+1 to i+vl(4) 2d_target_is 100+(k-1)*10+j-k+i 2d_pen_color 0,0,0 2d_fill_color (2-a)*255,(2-a)*255,(2-a)*255 wait 100 2d_circle 39,39,35 cc(k,j-k+i)=a next k end_if if vl(5)>0 : rem Horizontale Ouest for k=j-1 to j-vl(5) step -1 2d_target_is 100+(i-1)*10+k 2d_pen_color 0,0,0 2d_fill_color (2-a)*255,(2-a)*255,(2-a)*255 wait 100 2d_circle 39,39,35 cc(i,k)=a next k end_if if vl(6)>0 : rem Oblique Sud-Ouest for k=i-1 to i-vl(6) step -1 2d_target_is 100+(k-1)*10+j+k-i 2d_pen_color 0,0,0 2d_fill_color (2-a)*255,(2-a)*255,(2-a)*255 wait 100 2d_circle 39,39,35 cc(k,j+k-i)=a next k end_if if vl(7)>0 : rem Verticale Sud for k=i-1 to i-vl(7) step -1 2d_target_is 100+(k-1)*10+j 2d_pen_color 0,0,0 2d_fill_color (2-a)*255,(2-a)*255,(2-a)*255 wait 100 2d_circle 39,39,35 cc(k,j)=a next k end_if if vl(8)>0 : rem Oblique Sud-Est for k=i-1 to i-vl(8) step -1 2d_target_is 100+(k-1)*10+j-k+i 2d_pen_color 0,0,0 2d_fill_color (2-a)*255,(2-a)*255,(2-a)*255 wait 100 2d_circle 39,39,35 cc(k,j-k+i)=a next k end_if return
quel: : rem Quelle réponse donner au clic a=2-cf for k=1 to 8 vl(k)=0 next k for k=j+1 to j+8 : rem Horizontale Est if k<10 if cc(i,k)=3-a vl(1)=vl(1)+1 else if cc(i,k)=0 vl(1)=vl(1)*0 end_if exit_for end_if end_if next k for k=i+1 to i+8 : rem Oblique Nord-Est if (k<10) and ((j+k-i)<10) if cc(k,j+k-i)=3-a vl(2)=vl(2)+1 else if cc(k,j+k-i)=0 vl(2)=vl(2)*0 end_if exit_for end_if end_if next k for k=i+1 to i+8 : rem Verticale Nord if k<10 if cc(k,j)=3-a vl(3)=vl(3)+1 else if cc(k,j)=0 vl(3)=vl(3)*0 end_if exit_for end_if end_if next k for k=i+1 to i+8 : rem Oblique Nord-Ouest if (k<10) and ((j-k+i)>-1) if cc(k,j-k+i)=3-a vl(4)=vl(4)+1 else if cc(k,j-k+i)=0 vl(4)=vl(4)*0 end_if exit_for end_if end_if next k for k=j-1 to j-8 step -1 : rem Horizontale Ouest if k>-1 if cc(i,k)=3-a vl(5)=vl(5)+1 else if cc(i,k)=0 vl(5)=vl(5)*0 end_if exit_for end_if end_if next k for k=i-1 to i-8 step -1 : rem Oblique Sud-Ouest if (k>-1) and ((j+k-i)>-1) if cc(k,j+k-i)=3-a vl(6)=vl(6)+1 else if cc(k,j+k-i)=0 vl(6)=vl(6)*0 end_if exit_for end_if end_if next k for k=i-1 to i-8 step -1 : rem Verticale Sud if k>-1 if cc(k,j)=3-a vl(7)=vl(7)+1 else if cc(k,j)=0 vl(7)=vl(7)*0 end_if exit_for end_if end_if next k for k=i-1 to i-8 step -1 : rem Oblique Sud-Est if (k>-1) and ((j-k+i)<10) if cc(k,j-k+i)=3-a vl(8)=vl(8)+1 else if cc(k,j-k+i)=0 vl(8)=vl(8)*0 end_if exit_for end_if end_if next k jp=0 for k=1 to 8 if vl(k)>0 jp=1 end_if next k return
quitter: : rem Sortir du programme a=message_confirmation_yes_no("Vous voulez réellement quitter ce superbe jeu ?") if a=1 terminate end_if return
| |
|