Publié par SFLPMEA le 19/12/2006
DAMIER.BAS Source Qbasic Version 4.5. Constitution d'un damier avec déplacement de cercle. Début d'un programme de jeu de Sazuke83 complètement modifié par SFLPMEA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
' *********************** ' * JEU du DAMIER * DAM04.BAS ' *********************** ' Ecrit par SFLPMEA sur une idée de sazuke83 CLS : SCREEN 12: WINDOW SCREEN (1, 1)-(640, 480) OPTION BASE 1: DEFSTR A-Z ' ***** El‚ments modifiables (dans une certaine limite) L.C% = 30 ' ***** Dimension d'une case carrée du damier Nb.L% = 12 ' ***** Nombre de lignes du damier Nb.Col% = 19 ' ***** Nombre de colonnes Ec% = 3 ' ***** Intervalle/Ecart entre les cases Cc% = 13 ' ***** Couleur du contour des cases Nb.Cf% = 10 ' ***** Nombre de Cases Fixes Nb.Camo% = 12 ' ***** Nombre de Cases amovibles et déplaçables Ccamo% = 11 ' ***** Couleur des cases movibles Col.C% = 14 ' ***** Couleur de l'anneau Chasseur Nb.Rond% = 70 ' ***** Nombre de Ronds à Manger C.Rond% = 12 ' ***** Couleur IF Nb.Cf% + Nb.Camo% + Nb.Rond% + 1 > Nb.L% * Nb.Col% THEN SOUND 400, 36.4: LOCATE 10, 10: PRINT "C o m p l e t ! ! !": END END IF ' ***** Les DIM DIM Kase(Nb.Col%, Nb.L%) AS STRING * 4 ' ***** Contenu du damier ' ***** Possibilités ' ***** "VIDE" ' ***** "FIXE" ' ***** "MOBI" ' ***** "MIAM" ' ***** "ROND" FOR C% = 1 TO Nb.Col%: FOR L% = 1 TO Nb.L% Kase(C%, L%) = "VIDE" NEXT L%, C% DIM Xp%(Nb.Col%) ' ***** Abscisse du Pixel central des cases DIM Yp%(Nb.L%) ' ***** Ordonnée du pixel central des cases FOR I% = 1 TO Nb.Col% Xp%(I%) = Ec% + L.C% / 2 + (Ec% + L.C%) * (I% - 1) NEXT I% FOR I% = 1 TO Nb.L% Yp%(I%) = Ec% + L.C% / 2 + (Ec% + L.C%) * (I% - 1) NEXT ' ***** Dessin du damier L.C2% = L.C% / 2 ' ***** demi côté d'une case FOR X1% = 1 TO Nb.Col% X% = Xp%(X1%) FOR Y1% = 1 TO Nb.L% Y% = Yp%(Y1%) LINE (X% - L.C2%, Y% - L.C2%)-(X% + L.C2%, Y% + L.C2%), Cc%, B NEXT Y1% NEXT X1% ' ***** Positionnement de départ du cercle X.C% = Xp%(1): Y.C% = Yp%(Nb.L%) CIRCLE (X.C%, Y.C%), L.C2% - 2, Col.C% CIRCLE (X.C%, Y.C%), L.C2% - 8, Col.C% PAINT (X.C% - L.C2% + 3, Y.C%), Col.C%, Col.C% X.C.Pr% = X.C%: Y.C.Pr% = Y.C% Kase(1, Nb.L%) = "ROND" RANDOMIZE TIMER ' ***** Positionnement des dalles fixes ' ***** PREMIERE METHODE FOR .../... NEXT FOR I% = 1 TO Nb.Cf% C% = INT(RND * Nb.Col%) + 1 L% = INT(RND * Nb.L%) + 1 IF Kase(C%, L%) <> "VIDE" THEN I% = I% - 1 ELSE X% = Xp%(C%): Y% = Yp%(L%) Couleur% = 7 FOR I1% = 2 TO L.C2% - 2 Couleur% = Couleur% + 1: IF Couleur% > 15 THEN Couleur% = 8 LINE (X% - I1%, Y% - I1%)-(X% + I1%, Y% + I1%), Couleur%, B NEXT I1% Kase(C%, L%) = "FIXE" END IF NEXT I% ' ***** Positionnement des cases amovibles et déplaçables ' ***** DEUXIEME METHODE : DO .../... LOOP Nb% = 0 DO Nb% = Nb% + 1 C% = INT(RND * Nb.Col%) + 1 L% = INT(RND * Nb.L%) + 1 IF Kase(C%, L%) <> "VIDE" THEN Nb% = Nb% - 1 ELSE X% = Xp%(C%): Y% = Yp%(L%) LINE (X% - L.C2% + 2, Y% - L.C2% + 2)-(X% + L.C2% - 2, Y% + L.C2% - 2), Ccamo%, BF CIRCLE (X%, Y%), 3, 0 Kase(C%, L%) = "MOBI" END IF LOOP UNTIL Nb% >= Nb.Camo% ' ***** Positionnement des Ronds à 'manger' ' ***** TROISIEME METHODE : UTILISATION DU GOTO FOR I% = 1 TO Nb.Rond% E01.OKUPE: C% = INT(RND * Nb.Col%) + 1 L% = INT(RND * Nb.L%) + 1 IF Kase(C%, L%) <> "VIDE" GOTO E01.OKUPE X.C% = Xp%(C%): Y.C% = Yp%(L%) CIRCLE (X.C%, Y.C%), L.C2% - 2, C.Rond% CIRCLE (X.C%, Y.C%), L.C2% - 8, C.Rond% PAINT (X.C% - L.C2% + 3, Y.C%), C.Rond%, C.Rond% Kase(C%, L%) = "MIAM" NEXT I% LOCATE 28, 10: PRINT "ET MAINTENANT ....." END