$TYPECHECK ON
DIM DX AS QDXSCREEN
DECLARE SUB AfficheCoup
DECLARE SUB CalculScores
DECLARE SUB CommencerPartie
DECLARE SUB InitTableau
DECLARE SUB JeuJoueur
DECLARE SUB JeuOrdi
DECLARE SUB JoueurCommence
DECLARE SUB OrdiCommence
DECLARE SUB AfficheGrille
DECLARE SUB Quitter
DECLARE SUB Grille10
DECLARE SUB Grille15
DECLARE SUB Grille20
DECLARE SUB PrefereRouge
DECLARE SUB PrefereBleu
DECLARE SUB JaiGagne
DECLARE SUB TextesOrigine
CONST ORDI = 0
CONST JOUEUR = 1
CONST VRAI = 1
CONST FAUX = 0
CONST ROUGE = &HFF
CONST BLEU = &HFFOOOO
DIM AfficheCoupX AS WORD
DIM AfficheCoupY AS WORD
DIM Numalign AS INTEGER
NumAlign = 2 * (21 - 4) * ((2 * 21) - 4)
DIM CoupJoueurOrdi(21, 21) AS INTEGER
DIM al(21, 21, 0 TO 20) AS INTEGER
DIM NbrPionsAlign(Numalign) AS INTEGER
DIM OrdiJoue AS INTEGER
DIM Ponderation(5) AS WORD
DIM Gauche AS INTEGER
DIM Haut AS INTEGER
DIM Largeur AS INTEGER
DIM Hauteur AS INTEGER
DIM NumeroRangee AS INTEGER
DIM CouleurJoueur AS INTEGER
DIM CouleurEnCours AS INTEGER
DIM CouleurOrdi AS INTEGER
DIM QuiCommence AS INTEGER
DIM Gagne AS BYTE
DIM CaseH AS INTEGER
DIM CaseV AS INTEGER
DIM Alignement AS INTEGER
DIM Coup_Joueur_Ordi AS INTEGER
DIM DimGrille AS INTEGER
DIM Nalign AS INTEGER
DIM ponderRef AS INTEGER
DIM PonderCase AS INTEGER
DIM CaseHCoupJoue AS INTEGER
DIM CaseVCoupJoue AS INTEGER
DIM DernierCoupOrdi$ AS STRING
DIM DernierCoupJoueur$ AS STRING
DIM CoupsJoues AS WORD
DIM a$ AS STRING
Ponderation(1) = 1
Ponderation(2) = 3
Ponderation(3) = 9
Ponderation(4) = 30
Ponderation(5) = 10000
DimGrille = 10
OrdiJoue= 1
QuiCommence = JOUEUR
CouleurJoueur = ROUGE
CouleurOrdi = BLEU
CREATE Fenetre_Principale AS QFORM
width = 640
height = 475
BorderStyle = 4
CREATE FenetreJeu AS QCANVAS
Top = 70
Left = 200
Width = 202
Height = 202
onpaint = AfficheGrille
OnClick = JeuJoueur
END CREATE
CREATE menu AS QMAINMENU
CREATE menu1 AS QMENUITEM
CAPTION = "&Fichier"
CREATE menu_CommencePartie AS QMENUITEM
CAPTION = "&Commencer une partie"
Onclick = CommencerPartie
END CREATE
CREATE menu_Inter AS QMENUITEM
CAPTION = "-"
END CREATE
CREATE menu_Quitter AS QMENUITEM
CAPTION = "&Quitter"
onclick = quitter
END CREATE
END CREATE
CREATE menu2 AS QMENUITEM
CAPTION = "&Grille"
CREATE menu_grille10 AS QMENUITEM
CAPTION = "&10 x 10"
onclick = Grille10
checked = VRAI
END CREATE
CREATE menu_grille15 AS QMENUITEM
CAPTION = "1&5 x 15"
onclick = Grille15
END CREATE
CREATE menu_grille20 AS QMENUITEM
CAPTION = "&21 x 21"
onclick = Grille20
END CREATE
END CREATE
CREATE menu3 AS QMENUITEM
CAPTION = "&options"
CREATE MenuRouge AS QMENUITEM
CAPTION = "Vous jouez avec les &Rouges"
Checked = VRAI
onclick = PrefereRouge
END CREATE
CREATE MenuBleu AS QMENUITEM
CAPTION = "Vous jouez avec les &Bleus"
onclick = PrefereBleu
END CREATE
CREATE OptionsInter1 AS QMENUITEM
CAPTION = "-"
END CREATE
CREATE MenuStartHomme AS QMENUITEM
CAPTION = "Vous commencez"
checked = 1
onclick = JoueurCommence
END CREATE
CREATE MenuStartOrdi AS QMENUITEM
CAPTION = "Je commence"
onclick = OrdiCommence
END CREATE
END CREATE
END CREATE
CREATE BarreInfos AS QSTATUSBAR
SizeGrip = FAUX
AddPanels "", "", "",""
Panel(0).Width = 260
Panel(1).Width = 110
Panel(2).Width = 135
Panel(0).Alignment = 2
END CREATE
center
SHOWMODAL
END CREATE
SUB Grille10
Menu_grille10.checked = 1
Menu_grille15.checked = 0
Menu_grille20.checked = 0
FenetreJeu.Top = 70
FenetreJeu.Left = 200
FenetreJeu.Width = 202
FenetreJeu.Height = 202
DimGrille = 10
AfficheGrille
END SUB
SUB Grille15
Menu_grille10.checked = 0
Menu_grille15.checked = 1
Menu_grille20.checked = 0
FenetreJeu.Top = 25
FenetreJeu.Left = 150
FenetreJeu.Width = 292
FenetreJeu.Height = 292
DimGrille = 15
AfficheGrille
END SUB
SUB Grille20
Menu_grille10.checked = 0
Menu_grille15.checked = 0
Menu_grille20.checked = 1
FenetreJeu.Top = 0
FenetreJeu.Left = 100
FenetreJeu.Width = 400
FenetreJeu.Height = 400
DimGrille = 21
AfficheGrille
END SUB
SUB AfficheGrille
DIM i AS WORD
Gauche = FenetreJeu.Left
Haut = FenetreJeu.Top
Largeur = FenetreJeu.Width
Hauteur = FenetreJeu.Height
fenetrejeu.fillrect = 20,20,Largeur, hauteur, &HC2FEFB
NumeroRangee = 0
FOR i=20 TO Largeur STEP 18
numeroRangee= numeroRangee + 1
a$=STR$(NumeroRangee)
FenetreJeu.TextOut(0, i+5, a$, 0, &HC0C0C0)
fenetrejeu.line(20,i,Largeur,i, &H808080)
fenetrejeu.line(20,i+1,Largeur,i+1, &H808080)
fenetrejeu.line(i,20,i,hauteur,&H808080)
fenetrejeu.line(i+1,20,i+1,hauteur,&H808080)
FenetreJeu.Textout(i+5, 5, CHR$(NumeroRangee+64), 0, &HC0C0C0)
NEXT i
FenetreJeu.FillRect(20,19,Largeur,22, &HFFFFFF)
FenetreJeu.FillRect(19,20,22,hauteur, &HFFFFFF)
FenetreJeu.FillRect(23, hauteur - 2, Largeur,hauteur, 0)
FenetreJeu.FillRect(Largeur-2,Hauteur,Largeur, 23, 0)
CALL TextesOrigine
END SUB
SUB TextesOrigine
BarreInfos.Panel(0).CAPTION = " French Morpion (version provisoire)"
BarreInfos.Panel(1).CAPTION = " Coups joués : 0 "
BarreInfos.Panel(2).CAPTION = " Votre dernier coup : "
BarreInfos.Panel(3).CAPTION = " Mon dernier coup : "
END SUB
SUB PrefereRouge
MenuRouge.Checked = VRAI
MenuBleu.Checked = FAUX
CouleurJoueur = ROUGE
CouleurOrdi = BLEU
END SUB
SUB PrefereBleu
MenuRouge.Checked = FAUX
MenuBleu.Checked = VRAI
CouleurJoueur = BLEU
CouleurOrdi = ROUGE
END SUB
SUB JoueurCommence
MenuStartHomme.Checked = VRAI
MenuStartOrdi.Checked = FAUX
QuiCommence = JOUEUR
END SUB
SUB OrdiCommence
MenuStartHomme.Checked = 0
MenuStartOrdi.Checked = 1
QuiCommence = ORDI
END SUB
SUB CommencerPartie
OrdiJoue = 1
CALL AfficheGrille
CALL InitTableau
IF QuiCommence = ORDI THEN
IF CouleurJoueur = ROUGE THEN
CouleurEnCours = BLEU
ELSE
CouleurEnCours = ROUGE
END IF
JeuOrdi
ELSE
OrdiJoue = 0
CouleurEnCours = CouleurJoueur
END IF
END SUB
SUB InitTableau
DIM nt AS INTEGER
BarreInfos.panel(0).CAPTION = "Patience... Je me concentre..."
FOR CaseH = 1 TO 21
FOR CaseV = 1 TO 21
al(caseV, CaseH, 0) = 0
NEXT CaseV
NEXT CaseH
FOR CaseH = 1 TO DimGrille
FOR CaseV = 1 TO DimGrille - 4
NumAlign = (CaseH - 1) * (DimGrille - 4) + CaseV
FOR Alignement = 0 TO 4
al(CaseH, CaseV + Alignement, 0) = al(CaseH, CaseV + Alignement, 0) + 1
al(CaseH, CaseV + Alignement, al(CaseH, CaseV + Alignement, 0)) = NumAlign
NEXT Alignement
NEXT CaseV
NEXT CaseH
nt = NumAlign
FOR CaseV = 1 TO DimGrille
FOR CaseH = 1 TO DimGrille - 4
NumAlign = nt + ((CaseV - 1) * (DimGrille - 4) + CaseH)
FOR Alignement = 0 TO 4
al(CaseH + Alignement, CaseV, 0) = al(CaseH + Alignement, CaseV, 0) + 1
al(CaseH + Alignement, CaseV, al(CaseH + Alignement, CaseV, 0)) = NumAlign
NEXT Alignement
NEXT CaseH
NEXT CaseV
nt = NumAlign
FOR CaseH = 1 TO DimGrille - 4
FOR CaseV = 1 TO DimGrille - 4
NumAlign = nt + ((CaseH - 1) * (DimGrille - 4) + CaseV)
FOR Alignement = 0 TO 4
al(CaseH + Alignement, CaseV + Alignement, 0) = al(CaseH + Alignement, CaseV + Alignement, 0) + 1
al(CaseH + Alignement, CaseV + Alignement, al(CaseH + Alignement, CaseV + Alignement, 0)) = NumAlign
NEXT Alignement
NEXT CaseV
NEXT CaseH
nt = NumAlign
FOR CaseH = 1 TO DimGrille - 4
FOR CaseV = 5 TO DimGrille
NumAlign = nt + (CaseH - 1) * (DimGrille - 4) + (CaseV - 4)
FOR Alignement = 0 TO 4
al(CaseH + Alignement, CaseV - Alignement, 0) = al(CaseH + Alignement, CaseV - Alignement, 0) + 1
al(CaseH + Alignement, CaseV - Alignement, al(CaseH + Alignement, CaseV - Alignement, 0)) = NumAlign
NEXT Alignement
NEXT CaseV
NEXT CaseH
FOR CaseH = 1 TO DimGrille
FOR CaseV = 1 TO DimGrille
CoupJoueurOrdi(CaseH, CaseV) = 0
NEXT CaseV
NEXT CaseH
NumAlign = 2 * (21 - 4) * ((2 * 21) - 4)
FOR nt = 1 TO Numalign
NbrPionsAlign(nt) = 0
NEXT nt
CoupsJoues = 0
IF QuiCommence = JOUEUR THEN
BarreInfos.panel(0).CAPTION = "A vous..."
END IF
END SUB
SUB JeuOrdi
BarreInfos.Panel(3).CAPTION = " Mon dernier coup : " + DernierCoupOrdi$
BarreInfos.Panel(0).CAPTION = "Je réfléchis ..."
OrdiJoue = 1
PonderRef = -10000
FOR CaseH = 1 TO DimGrille
FOR CaseV = 1 TO DimGrille
PonderCase = 0
IF CoupJoueurOrdi(CaseH, CaseV) = 0 THEN
Nalign = al(CaseH, CaseV, 0)
FOR Alignement = 1 TO Nalign
NumAlign = al(CaseH, CaseV, Alignement)
IF NbrPionsAlign(NumAlign) <> 9999 THEN
IF NbrPionsAlign(NumAlign) >= 0 THEN
PonderCase = PonderCase + Ponderation(NbrPionsAlign(NumAlign) + 1)
ELSE
PonderCase = PonderCase + Ponderation(1 - NbrPionsAlign(NumAlign))
END IF
END IF
NEXT Alignement
IF PonderCase > PonderRef THEN
CaseHCoupJoue = CaseH
CaseVCoupJoue = CaseV
PonderRef = PonderCase
END IF
END IF
NEXT CaseV
NEXT CaseH
Coup_Joueur_Ordi = 1
CalculScores
CouleurEnCours = CouleurOrdi
AfficheCoup
IF gagne THEN
OrdiJoue = 2
CALL JaiGagne
ELSE
OrdiJoue = 0
DernierCoupOrdi$ = CHR$(CaseHCoupJoue + 64) + " - " + STR$(CaseVCoupJoue)
BarreInfos.Panel(0).CAPTION = " Je joue en " + DernierCoupOrdi$ + " A vous..."
END IF
END SUB
SUB JeuJoueur
IF OrdiJoue > 0 THEN
EXIT SUB
END IF
CaseHCoupJoue = (MOUSEX - 12) / 18
CaseVCoupJoue = (MOUSEY - 12) / 18
IF CaseHCoupJoue = 0 OR CaseVCoupJoue = 0 THEN
EXIT SUB
END IF
DernierCoupJoueur$ = CHR$(CaseHCoupJoue + 64) + " - " + STR$(CaseVCoupJoue)
BarreInfos.Panel(2).CAPTION = " Votre dernier coup : " + DernierCoupJoueur$
CouleurEnCours = CouleurJoueur
Coup_Joueur_Ordi = -1
CALL CalculScores
CALL AfficheCoup
IF gagne THEN
CALL JaiGagne
ELSE
CALL JeuOrdi
END IF
END SUB
SUB CalculScores
Nalign = al(CaseHCoupJoue, CaseVCoupJoue, 0)
FOR Alignement = 1 TO Nalign
NumAlign = al(CaseHCoupJoue, CaseVCoupJoue, Alignement)
IF NbrPionsAlign(NumAlign) <> 9999 THEN
IF NbrPionsAlign(NumAlign) * Coup_Joueur_Ordi < 0 THEN
NbrPionsAlign(NumAlign) = 9999
ELSE
NbrPionsAlign(NumAlign) = NbrPionsAlign(NumAlign) + Coup_Joueur_Ordi
Gagne = (ABS(NbrPionsAlign(NumAlign)) = 5)
END IF
END IF
IF gagne THEN
EXIT FOR
END IF
NEXT Alignement
CoupJoueurOrdi(CaseHCoupJoue, CaseVCoupJoue) = Coup_Joueur_Ordi
INC CoupsJoues
BarreInfos.Panel(1).CAPTION = " Coups joués : " + STR$(CoupsJoues)
END SUB
SUB AfficheCoup
AfficheCoupX = 5+(18*CaseHCoupJoue)
AfficheCoupY = 6+(18*CaseVCoupJoue)
fenetrejeu.line(AfficheCoupX, AfficheCoupY,AfficheCoupX + 13, AfficheCoupY + 13, CouleurEnCours)
fenetrejeu.line(AfficheCoupX, AfficheCoupY + 1,AfficheCoupX + 12, AfficheCoupY + 13, CouleurEnCours)
fenetrejeu.line(AfficheCoupX + 1, AfficheCoupY,AfficheCoupX + 13, AfficheCoupY + 12, CouleurEnCours)
fenetrejeu.line(AfficheCoupX + 13, AfficheCoupY,AfficheCoupX, AfficheCoupY + 13, CouleurEnCours)
fenetrejeu.line(AfficheCoupX + 12, AfficheCoupY,AfficheCoupX, AfficheCoupY + 12, CouleurEnCours)
fenetrejeu.line(AfficheCoupX + 13, AfficheCoupY + 1,AfficheCoupX + 1, AfficheCoupY + 13, CouleurEnCours)
END SUB
SUB JaiGagne
DIM Couleur AS INTEGER
OrdiJoue = 1
IF Coup_Joueur_Ordi = -1 THEN
BarreInfos.Panel(0).CAPTION = "Vous avez gagné en " + STR$(CoupsJoues) + " coups."
ELSE
BarreInfos.Panel(0).CAPTION = "J'ai gagné en " + STR$(CoupsJoues) + " coups."
END IF
couleur = CouleurEnCours
FOR gagne = 1 TO 10
CouleurEnCours = Couleur
CALL AfficheCoup
SLEEP 0.5
CouleurEnCours = &HC2FEFB
CALL AfficheCoup
SLEEP 0.5
NEXT gagne
END SUB
SUB Quitter
Fenetre_Principale.CLOSE
END SUB
|
|