home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / NEWS / 439 / TETRISCK / QBASIC < prev    next >
Text File  |  1993-10-07  |  8KB  |  326 lines

  1. DECLARE SUB debut ()
  2. DECLARE SUB lignes ()
  3. DECLARE SUB ajoute ()
  4. DECLARE SUB nouvelle ()
  5. DECLARE SUB copie ()
  6. DECLARE FUNCTION essaie! (x AS INTEGER, Y AS INTEGER)
  7. DECLARE SUB surveille ()
  8. DECLARE SUB chargeen ()
  9. DECLARE SUB tourne (n AS INTEGER)
  10. DECLARE SUB effaceen (x AS INTEGER, Y AS INTEGER)
  11. DECLARE SUB videen ()
  12. DECLARE SUB decor ()
  13. DECLARE SUB tire ()
  14. DECLARE SUB afficheen (x AS INTEGER, Y AS INTEGER)
  15.  
  16.  
  17.  
  18.  
  19. DIM SHARED jeu(15, 20)
  20. DIM SHARED en(4, 4)
  21. DIM SHARED es(4, 4)
  22.  
  23. COMMON SHARED xpos AS INTEGER, ypos AS INTEGER, compteur AS LONG, fini AS INTEGER, score AS INTEGER
  24.  
  25.  
  26. debut
  27. fini = 0
  28. decor
  29. tire
  30.         nouvelle
  31.         DO WHILE fini = 0
  32.                 
  33.                 surveille
  34.  
  35.                 IF compteur / 6 = INT(compteur / 6) OR ypos = 18 THEN
  36.                         copie
  37.                         r = essaie(xpos, ypos + 1)
  38.  
  39.                         IF r = 0 THEN
  40.  
  41.                                 ajoute
  42.                                 lignes
  43.                                 nouvelle
  44.  
  45.  
  46.  
  47.                         END IF
  48.  
  49.  
  50.                 END IF
  51.                 compteur = compteur + 1
  52.  
  53.         LOOP
  54.  
  55. END
  56.  
  57. SUB afficheen (x AS INTEGER, Y AS INTEGER)
  58.  
  59.         FOR i = 0 TO 3
  60.                 FOR j = 0 TO 3
  61.                         xn = (xpos + j) * 2 + 26
  62.                         IF en(j, i) THEN
  63.                                 LOCATE i + ypos + 3, xn
  64.                                 PRINT "██"
  65.                         END IF
  66.                 NEXT j
  67.         NEXT i
  68.  
  69. END SUB
  70.  
  71. SUB ajoute
  72.  
  73.         FOR i = 0 TO 3
  74.                 FOR j = 0 TO 3
  75.                         IF en(i, j) THEN jeu(xpos + i, ypos + j) = en(i, j)
  76.                 NEXT j
  77.         NEXT i
  78.  
  79. END SUB
  80.  
  81. SUB chargeen
  82.  
  83.         FOR i = 0 TO 3
  84.                 FOR j = 0 TO 3
  85.                         en(i, j) = es(i, j)
  86.                 NEXT j
  87.         NEXT i
  88.  
  89. END SUB
  90.  
  91. SUB copie
  92.  
  93.         FOR i = 0 TO 3
  94.                 FOR j = 0 TO 3
  95.                         es(i, j) = en(i, j)
  96.                 NEXT j
  97.         NEXT i
  98.  
  99. END SUB
  100.  
  101. SUB debut
  102.  
  103.         CLS
  104.         PRINT "Tetris"
  105.         PRINT "Version programmée par"
  106.         PRINT "Thibault JAMME, 1993"
  107.         PRINT
  108.         PRINT "Appuyez sur une touche"
  109.        
  110.         i$ = ""
  111.         DO WHILE LEN(i$) = 0
  112.                 i$ = INKEY$
  113.                 h = RND(1)
  114.         LOOP
  115.  
  116. END SUB
  117.  
  118. SUB decor
  119.  
  120.         CLS
  121.  
  122.         FOR i = 1 TO 20
  123.                 LOCATE i + 1, 25
  124.                 PRINT "│                              │"
  125.         NEXT i
  126.         LOCATE 22, 25
  127.         PRINT "└──────────────────────────────┘"
  128.        
  129. END SUB
  130.  
  131. SUB effaceen (x AS INTEGER, Y AS INTEGER)
  132.  
  133.         FOR i = 0 TO 3
  134.                 FOR j = 0 TO 3
  135.                         xn = (xpos + j) * 2 + 26
  136.                         IF en(j, i) THEN
  137.                                 LOCATE i + Y + 3, xn
  138.                                 PRINT "  "
  139.                         END IF
  140.                 NEXT j
  141.         NEXT i
  142.  
  143. END SUB
  144.  
  145. FUNCTION essaie (xn AS INTEGER, yn AS INTEGER)
  146.  
  147.         retour = 1
  148.         FOR i = 0 TO 3
  149.                 FOR j = 0 TO 3
  150.  
  151.  
  152.                         IF es(i, j) THEN
  153.  
  154.                                 IF xn + i >= 15 THEN retour = 0
  155.                                 IF yn + j >= 19 THEN retour = 0
  156.  
  157.                                 IF xn + i < 0 THEN retour = 0
  158.                                 IF yn + j < 0 THEN retour = 0
  159.  
  160.                                 IF retour THEN IF jeu(xn + i, yn + j) THEN retour = 0
  161.                         END IF
  162.                 NEXT j
  163.         NEXT i
  164.  
  165.         IF retour <> 0 THEN
  166.                 effaceen xpos, ypos
  167.                 xpos = xn
  168.                 ypos = yn
  169.                 chargeen
  170.                 afficheen xpos, ypos
  171.         END IF
  172.  
  173.         essaie = retour
  174.  
  175. END FUNCTION
  176.  
  177. SUB lignes
  178.  
  179.         LOCATE 1, 1
  180.         FOR i = 0 TO 18
  181.                 total = 0
  182.                 FOR j = 0 TO 14
  183.                         total = total + jeu(j, i)
  184.                 NEXT j
  185.                 
  186.                 IF total = 15 THEN
  187.  
  188.                         score = score + 100
  189.                         LOCATE 1, 1
  190.                         PRINT "["; score; "]  ";
  191.  
  192.                         PRINT i
  193.  
  194.                         FOR l = i TO 1 STEP -1
  195.  
  196.                                 FOR c = 0 TO 14
  197.                                         sa = jeu(c, l - 1)
  198.                                         jeu(c, l) = sa
  199.                                         LOCATE l + 3, c * 2 + 26
  200.  
  201.                                         IF sa = 1 THEN PRINT "██" ELSE PRINT "  "
  202.                                 NEXT c
  203.  
  204.                                 LOCATE 2, 26
  205.                                 PRINT "thib                            "
  206.                                 FOR c = 0 TO 14
  207.                                         jeu(c, 0) = 0
  208.                                 NEXT c
  209.  
  210.  
  211.                         NEXT l
  212.  
  213.                 END IF
  214.         NEXT i
  215. END SUB
  216.  
  217. SUB nouvelle
  218.  
  219.         compteur = 0
  220.         xpos = INT(RND(1) * 10)
  221.         ypos = 0
  222.         tire   'remplit en avec une des 7 briques possibles
  223.         afficheen xpos, ypos
  224.  
  225. END SUB
  226.  
  227. SUB surveille
  228.                
  229.                
  230.                 i$ = INKEY$
  231.                 car = -1
  232.                 IF LEN(i$) THEN car = ASC(i$)
  233.                 IF car = 0 THEN car = ASC(RIGHT$(i$, 1))
  234.  
  235.                 IF car = 13 THEN
  236.                         tourne 1
  237.                         r = essaie(xpos, ypos)
  238.                 END IF
  239.  
  240.                 IF car = 8 THEN
  241.                         tourne 2
  242.                         r = essaie(xpos, ypos)
  243.                 END IF
  244.  
  245.                 IF car = 27 THEN fini = 1
  246.  
  247.  
  248.                 copie
  249.  
  250.  
  251.                 IF car = 77 THEN r = essaie(xpos + 1, ypos)
  252.                 IF car = 75 THEN r = essaie(xpos - 1, ypos)
  253.                 IF car = 80 THEN r = essaie(xpos, ypos + 1)
  254.  
  255.  
  256. END SUB
  257.  
  258. SUB tire
  259.         videen   ' pour vider "en"
  260.  
  261.         n = INT(RND(1) * 7)
  262.  
  263.         IF n = 0 THEN
  264.                 en(0, 2) = 1: en(0, 3) = 1
  265.                 en(1, 2) = 1: en(1, 3) = 1
  266.         END IF
  267.  
  268.         IF n = 1 THEN
  269.                 en(0, 3) = 1: en(1, 3) = 1: en(2, 3) = 1
  270.                 en(2, 2) = 1
  271.         END IF
  272.  
  273.         IF n = 2 THEN
  274.                 en(0, 3) = 1: en(1, 3) = 1: en(2, 3) = 1
  275.                 en(1, 2) = 1
  276.         END IF
  277.  
  278.         IF n = 3 THEN
  279.                 en(0, 3) = 1: en(1, 3) = 1
  280.                 en(2, 3) = 1: en(3, 3) = 1
  281.         END IF
  282.        
  283.         IF n = 4 THEN
  284.                 en(0, 0) = 1
  285.                 en(0, 1) = 1: en(1, 1) = 1: en(2, 1) = 1
  286.         END IF
  287.  
  288.         IF n = 5 THEN
  289.                 en(0, 1) = 1: en(1, 1) = 1
  290.                 en(1, 2) = 1: en(2, 2) = 1
  291.         END IF
  292.  
  293.         IF n = 6 THEN
  294.                 en(0, 2) = 1: en(1, 2) = 1
  295.                 en(1, 1) = 1: en(2, 1) = 1
  296.         END IF
  297.  
  298.         REM Tirer un nombre au hasard pour faire une rotation!
  299.  
  300. END SUB
  301.  
  302. SUB tourne (n AS INTEGER)
  303.  
  304.         FOR i = 0 TO 3
  305.                 FOR j = 0 TO 3
  306.                         nx = j
  307.                         ny = i
  308.                         IF n = 2 THEN ny = 3 - ny
  309.                         IF n = 1 THEN nx = 3 - nx
  310.                         es(nx, ny) = en(i, j)
  311.                 NEXT j
  312.         NEXT i
  313.  
  314. END SUB
  315.  
  316. SUB videen
  317.  
  318.         FOR i = 0 TO 3
  319.                 FOR j = 0 TO 3
  320.                         en(i, j) = 0
  321.                 NEXT j
  322.         NEXT i
  323.  
  324. END SUB
  325.  
  326.