Mai 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | 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 | | | Calendrier |
|
| | Tetris | |
| | Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Tetris Jeu 19 Fév 2015 - 23:06 | |
| Je vous mets ci dessous le listing du programme Tetris. C'est une première version jouable. Si vous voyez des améliorations Un article vas être fait pour le mag et vous trouverez les ressources sur le site du mag également. N'hésitez pas à améliorer le code si vous avez des idées. Une fonction manquante mais pour laquelle il faut quand même bien réfléchir c'est la chute de pièce si rien ne la retient et qu'il y a un trou dessous. Ça parait simple, mais ça ne l'est pas tant que ça. Il y a d'autres choses améliorables Bon et si d'autres personnes ont le message "Exception Exception in module kgf.dll at 00041F18. qu'ils n'hésitent pas à l'écrire, je ne vois pas pourquoi j'ai ce problème et que les autres ne l'ont pas ... d'ailleur, je ne sais pas non plus pourquoi il ne fait pas mon on_error_goto puisqu'à la base, je l'avais rajout exprès pour ne pas bloquer le jeu.... - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 '
' Déclaration des sous-programmes évenementiels label boucle_principale, quitte, t1, chutte, err, lance_musique
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 610 dim h_fenetre : h_fenetre = 700
' variables de la grille dim marge_grille : marge_grille =15 : ' marge entre la fenêtre et la grille dim h_carre_grille : h_carre_grille = 30 : ' taille d'une case de la grille
' variables d'un carré élementaire dim h_carre : h_carre = h_carre_grille - 1 : ' taille d'un carré de base dim m_carre : m_carre = int(h_carre / : ' taille la bordure du carré pour le relief
' définition des pièces dim couleur_piece(6,3) dim d_piece(3,3) : ' contient les "carrés" occupés par la pièce dans son état de rotation actuelle dim d_piece_temp(3,3) : ' copie temporaire de la piece pour les rotations
' pièce O dim piece_O(3,3) piece_O(0,0) = 0 : piece_O(0,1) = 0: piece_O(0,2) = 0: piece_O(0,3) = 0 piece_O(1,0) = 0 : piece_O(1,1) = 1: piece_O(1,2) = 1: piece_O(1,3) = 0 piece_O(2,0) = 0 : piece_O(2,1) = 1: piece_O(2,2) = 1: piece_O(2,3) = 0 piece_O(3,0) = 0 : piece_O(3,1) = 0: piece_O(3,2) = 0: piece_O(3,3) = 0
couleur_piece(0,0) = 220 : couleur_piece(0,1) = 220 : couleur_piece(0,2) = 0
' pièce I dim piece_I(3,3) piece_I(0,0) = 0 : piece_I(0,1) = 0: piece_I(0,2) = 0: piece_I(0,3) = 0 piece_I(1,0) = 1 : piece_I(1,1) = 1: piece_I(1,2) = 1: piece_I(1,3) = 1 piece_I(2,0) = 0 : piece_I(2,1) = 0: piece_I(2,2) = 0: piece_I(2,3) = 0 piece_I(3,0) = 0 : piece_I(3,1) = 0: piece_I(3,2) = 0: piece_I(3,3) = 0
couleur_piece(1,0) = 100 : couleur_piece(1,1) = 220 : couleur_piece(1,2) = 220
' pièce S dim piece_S(3,3) piece_S(0,0) = 0 : piece_S(0,1) = 0: piece_S(0,2) = 0: piece_S(0,3) = 0 piece_S(1,0) = 0 : piece_S(1,1) = 0: piece_S(1,2) = 1: piece_S(1,3) = 1 piece_S(2,0) = 0 : piece_S(2,1) = 1: piece_S(2,2) = 1: piece_S(2,3) = 0 piece_S(3,0) = 0 : piece_S(3,1) = 0: piece_S(3,2) = 0: piece_S(3,3) = 0
couleur_piece(2,0) = 0 : couleur_piece(2,1) = 220 : couleur_piece(2,2) = 0
' pièce Z dim piece_Z(3,3) piece_Z(0,0) = 0 : piece_Z(0,1) = 0: piece_Z(0,2) = 0: piece_Z(0,3) = 0 piece_Z(1,0) = 0 : piece_Z(1,1) = 1: piece_Z(1,2) = 1: piece_Z(1,3) = 0 piece_Z(2,0) = 0 : piece_Z(2,1) = 0: piece_Z(2,2) = 1: piece_Z(2,3) = 1 piece_Z(3,0) = 0 : piece_Z(3,1) = 0: piece_Z(3,2) = 0: piece_Z(3,3) = 0
couleur_piece(3,0) = 220 : couleur_piece(3,1) = 0 : couleur_piece(3,2) = 0
' pièce L dim piece_L(3,3) piece_L(0,0) = 0 : piece_L(0,1) = 0: piece_L(0,2) = 0: piece_L(0,3) = 0 piece_L(1,0) = 0 : piece_L(1,1) = 1: piece_L(1,2) = 1: piece_L(1,3) = 1 piece_L(2,0) = 0 : piece_L(2,1) = 1: piece_L(2,2) = 0: piece_L(2,3) = 0 piece_L(3,0) = 0 : piece_L(3,1) = 0: piece_L(3,2) = 0: piece_L(3,3) = 0
couleur_piece(4,0) = 220 : couleur_piece(4,1) = 120 : couleur_piece(4,2) = 0
' pièce J dim piece_J(3,3) piece_J(0,0) = 0 : piece_J(0,1) = 0: piece_J(0,2) = 0: piece_J(0,3) = 0 piece_J(1,0) = 0 : piece_J(1,1) = 1: piece_J(1,2) = 1: piece_J(1,3) = 1 piece_J(2,0) = 0 : piece_J(2,1) = 0: piece_J(2,2) = 0: piece_J(2,3) = 1 piece_J(3,0) = 0 : piece_J(3,1) = 0: piece_J(3,2) = 0: piece_J(3,3) = 0
couleur_piece(5,0) = 0 : couleur_piece(5,1) = 0 : couleur_piece(5,2) = 220
' pièce T dim piece_T(3,3) piece_T(0,0) = 0 : piece_T(0,1) = 0: piece_T(0,2) = 0: piece_T(0,3) = 0 piece_T(1,0) = 0 : piece_T(1,1) = 1: piece_T(1,2) = 1: piece_T(1,3) = 1 piece_T(2,0) = 0 : piece_T(2,1) = 0: piece_T(2,2) = 1: piece_T(2,3) = 0 piece_T(3,0) = 0 : piece_T(3,1) = 0: piece_T(3,2) = 0: piece_T(3,3) = 0
couleur_piece(6,0) = 220 : couleur_piece(6,1) = 0 : couleur_piece(6,2) = 220
' dessin des carrés de couleur dim p_carre : ' Picture des carré pour la pièce 0, 6 autres objets seront créés pour les autres carés de base ' On créé ensuite 7 autres pictures pour stocker les différentes pièces ' On créera les pièces tournées à 90°, 180° et -90° à la suite dim i_temp% : ' Image servant à faire la copie du carré correspondant à la pièce
' définition des noms d'obhets dim a_grille1% : ' picture ou l'on crée la grille comme fond et ou on mettra les blocs inactifs dim a_grille2% : ' nom de la grille 2 sur laquelle on affiche les sprites de la pièce et le fond avec les blocs figés dim a_suivante% : ' nom du "picture" où l'on affiche la pièce suivante dim a_score% : ' nom de l'affichage du score dim a_lignes% : ' nom de l'affichage du nombre de lignes faites dim a_nb_lignes%: ' affichage du nombre de lignes faites dim a_niveau% : ' affichage du niveau actuel
' définition des variables du jeu dim iter%, iter2% : ' Compteurs d'itérations dim objet%: objet% = 0 : ' Compteur d'objets créés dim p_suivante : ' prochaine pièce qui sera affichée dim piece : ' Numero de la pièce active. Si la pièce vaut -1, prendre la pièce suivante dim x_piece, y_piece : ' Coordonnées de la pièce courante en cases dim x_initial, y_initial : ' Coordonnées initiale d'une nouvelle pièce x_initial = 4 : y_initial = -4 dim diff_couleur : diff_couleur = 100 : ' Ombres et lumière dim ind_c% : ind_c% = int(diff_couleur / h_carre) : ' variation de lumiere par pas dim temps% : temps% = 75 : ' temps d'une boucle principale dim v_dep : v_dep = 0.2 : ' Vitesse de descente de la pièce dim t_principal : ' Numéro du timer principal dim t_musique : ' ' Timer pour relancer la musique dim sprite_piece : sprite_piece = 1 : ' Le sprite de la pièce !! dim test_dep% : ' Vaut 1 si le déplacement est possible dim grille%(9,19) : ' Mémorise les carrés des pièces dans la grille dim rotation% : ' Indique si la pièce est tournée dim nb_lignes%: ' Le compteur de ligne dim niveau% : ' Niveau actuel dim score% : ' Le score dim player_musique: ' Objet qui jouera la musique dim s$ : ' chaine de caractères temporaire
' définitions des sons dim s_dep_impossible : ' mouvement impossible dim s_dep_lateral : ' deplacement à droit ou a gauche dim s_rotation : ' tourne la pièce de 90° dim s_gameover : ' son de fin de partie dim s_verouillee : ' la pièce est bloquée (arrivée, on passe à la pièce suivante) dim s_niveau : ' passage au niveau supérieur dim s_chutte : ' son de la chutte d'une pièce quand on appuie sur espace dim s1_ligne, s2_lignes, s3_lignes, s4_lignes : ' sons de 1 à 4 lignes complètes dim m_gameover : ' Musique après la fin de partie dim m_theme : ' Musique durant le jeu dim m_highscore : ' Musique sur l'ecran des high_score
dim grille_active% : grille_active%=2 : ' Définit la grille de travail
' ****************************** COMMANDES CLAVIER ************************** dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:... 27 * dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> DEPLACER À GAUCHE:...... 37 * dim tfh,ctfh : ctfh=38 : ' * FLÈCHE HAUTE ==> PIVOTER A GAUCHE........ 38 * dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> DEPLACER À DROITE:...... 39 * dim tfb,ctfb : ctfb=40 : ' * FLÈCHE BASSE ==> PIVOTER À DROITE:....... 40 * dim esp,cesp : cesp=32 : ' * ESPACE ==> TOMBER:................. 32 * ' ***************************************************************************
' initialisation de la fenêtre de jeu width 0, l_fenetre : height 0,h_fenetre
objet% = objet% + 1 : a_grille1% = objet% picture a_grille1% : hide a_grille1%: left a_grille1%, marge_grille : top a_grille1%, marge_grille width a_grille1%, 10*h_carre_grille : height a_grille1%,20*h_carre_grille color a_grille1%,200, 150, 150 : 2D_target_is a_grille1% : trace_grille() file_save a_grille1%,"fond.bmp"
objet% = objet% + 1: a_grille2% = objet% scene2D a_grille2% : left a_grille2%, marge_grille : top a_grille2%, marge_grille width a_grille2%, 10*h_carre_grille : height a_grille2%,20*h_carre_grille file_load a_grille2%,"fond.bmp" sprite sprite_piece
objet% = objet% + 1: i_temp% = objet% : image i_temp% objet% = objet% + 1 : picture objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, marge_grille : width objet%,250: height objet%,172 : file_load objet%,titre.jpg
objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 3* marge_grille + 172 : width objet%,250: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Pièce suivante :"
objet% = objet% + 1 : a_suivante% = objet% : picture objet% : left objet%, 2*marge_grille + 12 * h_carre_grille top objet%, 4* marge_grille + 202 : width objet%,4* h_carre_grille: height objet%, 4* h_carre_grille
' Création des 7 pièces dans les 4 directions
for iter% = 0 to 6
objet% = objet% + 1 : if iter%= 0 then p_carre = objet%
picture objet% : 2d_target_is objet% top objet%, -400: width objet%, h_carre_grille : height objet%, h_carre_grille dessine_carre(iter%)
picture objet%+7 : hide objet% +7 width objet%+7, 4*h_carre_grille: height objet%+7, 4*h_carre_grille : top objet%+7, -400 color objet%+7,0,0,0: 2d_target_is objet%+7 : dessine_piece(iter%,1)
picture objet%+14 : hide objet% + 14 width objet%+14, 4*h_carre_grille: height objet%+14, 4*h_carre_grille: top objet%+14, -400 color objet%+14,0,0,0: 2d_target_is objet%+14 : dessine_piece(iter%,2)
picture objet%+21 : hide objet% + 21 width objet%+21, 4*h_carre_grille: height objet%+21, 4*h_carre_grille : top objet%+21, -400 color objet%+21,0,0,0: 2d_target_is objet%+21 : dessine_piece(iter%,3)
picture objet%+28 : hide objet% + 28 width objet%+28, 4*h_carre_grille: height objet%+28, 4*h_carre_grille: top objet%+28, -400 color objet%+28,0,0,0: 2d_target_is objet%+28 : dessine_piece(iter%,4)
next iter%
objet% = objet% + 28 piece = -1 : vide_grille() : Cree_piece_suivante() dll_on "kgf.dll"
' Debug Windows dim debug_mode : debug_mode = 0 : ' Active ou non le mode debug dim debug_windows if debug_mode = 1 objet% = objet% + 1 : debug_windows = objet% form debug_windows : command_target_is debug_windows left debug_windows, 700 : height debug_windows,700 : width debug_windows, 250 objet% = objet% + 1 : list objet% : width objet%, 220 height objet%, 650 command_target_is 0 : set_focus 0 end_if
' Demarrage du jeu, on lance les cycle du jeu au travers d'un timer qui va rythmer les actions
score% = 0 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 12* marge_grille + 242 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Score :"
objet% = objet% + 1 : a_score% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 12* marge_grille + 242 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000000"
nb_lignes% = 0 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 14* marge_grille + 272 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Lignes :"
objet% = objet% + 1 : a_nb_lignes% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 14* marge_grille + 272 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000000"
niveau% = 1 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 16* marge_grille + 302 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Niveau :"
objet% = objet% + 1 : a_niveau% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 16* marge_grille + 302 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000001"
' Chargement des sons objet% = objet% + 1 : s_dep_impossible = objet% : sound objet% : file_load objet%,"sons\Deplacement impossible.mp3" objet% = objet% + 1 : s_dep_lateral = objet% : sound objet% : file_load objet%,"sons\Deplacement lateral.mp3" objet% = objet% + 1 : s_rotation = objet% : sound objet% : file_load objet%,"sons\Rotation piece.mp3" objet% = objet% + 1 : s_gameover = objet% : sound objet% : file_load objet%,"sons\Game Over.mp3" objet% = objet% + 1 : s_verouillee = objet% : sound objet% : file_load objet%,"sons\Piece verouillee.mp3" objet% = objet% + 1 : s_niveau = objet% : sound objet% : file_load objet%,"sons\Niveau superieur.mp3" objet% = objet% + 1 : s_chutte = objet% : sound objet% : file_load objet%,"sons\Chutte.mp3" objet% = objet% + 1 : s1_ligne = objet% : sound objet% : file_load objet%,"sons\Simple Ligne.mp3" objet% = objet% + 1 : s2_lignes = objet% : sound objet% : file_load objet%,"sons\Double ligne.mp3" objet% = objet% + 1 : s3_lignes = objet% : sound objet% : file_load objet%,"sons\Triple ligne.mp3" objet% = objet% + 1 : s4_lignes = objet% : sound objet% : file_load objet%,"sons\Tetris.mp3" objet% = objet% + 1 : m_gameover = objet% : sound objet% : file_load objet%,"sons\Musique - Game Over.mp3" objet% = objet% + 1 : m_theme = objet% : sound objet% : file_load objet%,"sons\Musique - Theme Tetris.mp3" objet% = objet% + 1 : m_highscore = objet% : sound objet% : file_load objet%,"sons\Musique - High Scores.mp3"
objet% = objet% + 1 : player_musique = objet% panel objet% : hide objet% : iter% = dll_call5("CreatePlayer",handle(player_musique),0,0,100,100) s$ = "sons\Musique - Theme Tetris.mp3" iter% = dll_call1("LoadFileIntoPlayer",adr(s$)) iter% = dll_call0("PlayPlayer") iter% = dll_call1("VolumePlayer",30)
objet%= objet% + 1 : t_musique = objet% timer t_musique : timer_interval t_musique,83000 : on_timer t_musique, lance_musique
objet%= objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale
' On détecte le changement d'état des touches on_key_down 0,t1
end
lance_musique: iter% = dll_call0("PlayPlayer") return
sub dessine_piece(num%,rot%) dim_local d_piece(3,3) dim_local i%,j%
select num% case 0 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_O(i%,j%) : next j% : next i% case 1 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_I(i%,j%) : next j% : next i% case 2 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_S(i%,j%) : next j% : next i% case 3 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_Z(i%,j%) : next j% : next i% case 4 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_L(i%,j%) : next j% : next i% case 5 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_J(i%,j%) : next j% : next i% case 6 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_T(i%,j%) : next j% : next i% end_select
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 if rot% = 1 then copie_carre(num%,i%,j%,rot%) if rot% = 2 then copie_carre(num%,3-j%,i%,rot%) if rot% = 3 then copie_carre(num%,3-i%,3-j%,rot%) if rot% = 4 then copie_carre(num%,j%,3-i%,rot%) end_if next j% next i% end_sub
sub dessine_carre(num%) dim_local c1%,c2%,c3%, k%,l%, temp1%,temp2%,temp3% c1% = couleur_piece(num%, 0) : c2% = couleur_piece(num%, 1) : c3% = couleur_piece(num%,2) for k% = 0 to h_carre-1 for l% = 0 to m_carre-1 temp1% = c1% + ind_c%*(h_carre - k%) : if temp1% > 255 then temp1% = 255 temp2% = c2% + ind_c%*(h_carre - k%) : if temp2% > 255 then temp2% = 255 temp3% = c3% + ind_c%*(h_carre - k%) : if temp3% > 255 then temp3% = 255 2d_pen_color temp1%,temp2%,temp3% if k% >= l% 2d_point k%,l% 2d_point l%,k% end_if temp1% = c1% - ind_c% * k% : if temp1% < 0 then temp1% = 0 temp2% = c2% - ind_c% * k% : if temp2% < 0 then temp2% = 0 temp3% = c3% - ind_c% * k% : if temp3% < 0 then temp3% = 0 2d_pen_color temp1%,temp2%,temp3% if k% >= l% 2d_point k%,h_carre-l% 2d_point h_carre-l%,k% end_if next l% next k% 2d_pen_color c1%,c2%,c3% : 2d_fill_color c1%,c2%,c3% 2d_rectangle m_carre, m_carre , h_carre - m_carre +1, h_carre - m_carre +1 end_sub
sub copie_carre(num%,x_dest,y_dest, rot%) 2D_target_is p_carre + num% 2D_image_copy i_temp%,0,0,h_carre,h_carre 2d_target_is p_carre+num%+7*rot% 2D_image_paste i_temp%,x_dest * h_carre_grille +1,y_dest * h_carre_grille +1 end_sub
sub vide_grille() for iter% = 0 to 9 for iter2% = 0 to 19 grille%(iter%,iter2%) = -1 next iter2% next iter% end_sub
sub trace_grille() 2D_pen_color 180,180,255 for iter% = 1 to 10 2D_line iter%*h_carre_grille, 0, iter%*h_carre_grille,20*h_carre_grille next iter% for iter% = 1 to 20 2D_line 0, iter%*h_carre_grille, 10*h_carre_grille,iter%*h_carre_grille next iter% end_sub
sub Cree_piece_suivante() p_suivante = int(rnd(6.9999)) end_sub
sub test_dep_bas()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece - 0.001) + 1 + j% temp2% = x_piece + i% if temp% = 20 then test_dep% = 0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if next j% next i%
end_sub
sub test_dep_gauche()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% -1 if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if end_if end_if next j% next i%
end_sub
sub test_rot_gauche()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece_temp(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if next j% next i%
end_sub
sub test_dep_droite()
dim_local i%,j%,temp%, temp2% test_dep% = 1 for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% +1 if temp2% > 9 then test_dep%=0 : exit_sub if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if end_if end_if next j% next i%
end_sub
sub test_rot_droite()
dim_local i%,j%,temp%, temp2% test_dep% = 1 for i% = 0 to 3 for j% = 0 to 3 if d_piece_temp(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% +1 if temp2% > 9 then test_dep%=0 : exit_sub if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if next j% next i%
end_sub
sub test_ligne() dim_local i%,j%,ligne%, nbligne% nbligne%=0 for i% = 0 to 3 ligne%=1 for j% = 0 to 9 if y_piece + i% < 20 if grille%(j%,y_piece + i%) < 0 then ligne% = 0 : exit_for else ligne%= 0 end_if next j% if ligne%=1 then suppr_ligne(y_piece + i%) : nbligne% = nbligne% +1 next i% if nbligne% > 0 2D_target_is a_grille1% : trace_grille() file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" select nbligne% case 1 : score% = score% + niveau% * 40 : play s1_ligne case 2 : score% = score% + niveau% * 100 : play s2_lignes case 3 : score% = score% + niveau% * 300 : play s3_lignes case 4 : score% = score% + niveau% *1200 : play s4_lignes end_select caption a_score%,right$("000000" + str$(score%),6) nb_lignes% = nb_lignes% + nbligne% caption a_nb_lignes%,right$("000000" + str$(nb_lignes%),6) end_if end_sub
sub suppr_ligne(l%) dim_local i%,j% 2D_target_is a_grille1% 2D_image_copy i_temp%,0,0,10*h_carre_grille,l%*h_carre_grille 2D_image_paste i_temp%,0,1 * h_carre_grille for i% = l% to 1 step -1 for j% = 0 to 9 grille%(j%,i%) = grille%(j%,i%-1) next j% next i% for j% = 0 to 9 grille%(j%,0) = -1 next j% end_sub
sub bloque_piece() dim_local i%,j%,s$ for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 and y_piece >= 0 if (int(y_piece)+j%) < 20 then grille%(x_piece + i%, int(y_piece)+j%) = piece end_if next j% next i% if debug_mode =1 clear debug_windows +1 item_add debug_windows +1,"XX | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | for i% = 0 to 19 s$=right$("0" + str$(i%),2) + " | " for j%=0 to 9 s$=s$ + right$(" " + str$(grille%(j%,i%)),2) + " | " next j% item_add debug_windows +1,s$ next i% set_focus 0 end_if on_error_goto err err: ' on place le fond dans le presse-papier clipboard_copy a_grille1% repeat i% = dll_call1("ClipboardFunction",1) until i%=0 ' on charge cette image dans l'image interne i% = dll_call0("LoadPicture") repeat i% = dll_call1("ClipboardFunction",1) until i%=0 ' on place la pièce à bloquer dans le presse-papier clipboard_copy p_carre+piece+7*rotation% repeat i% = dll_call1("ClipboardFunction",1) until i%=0 ' KGF_res% = dll_call6("ModifyPicture",x%,y%,T%,R%,G%,B%) i% = dll_call6("ModifyPicture",x_piece*h_carre_grille, int(y_piece)*h_carre_grille,100,0,0,0) ' récupérer l'image interne vers le presse-papier i% = dll_call0("SavePicture") repeat i% = dll_call1("ClipboardFunction",1) until i%=0 ' i% = dll_call1("ClipboardFunction",2) ' et copier le résultat dans le picture d'affichage: clipboard_paste a_grille1% repeat i% = dll_call1("ClipboardFunction",1) until i%=0 file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" off_error_goto end_sub
boucle_principale:
timer_off t_principal set_focus 0 if esc = 1 if message_confirmation_yes_no ("Voulez-vous vraiment quitter le jeu ?") = 1 then goto quitte esc = 0 end_if
' dessin d'une pièce if piece = -1 sprite_hide sprite_piece : piece = p_suivante x_piece = x_initial : y_piece = y_initial : rotation% = 1 Cree_piece_suivante() 2d_target_is p_carre+piece+7 2d_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% sprite_position sprite_piece,x_initial * h_carre_grille,y_initial * h_carre_grille sprite_show sprite_piece 2d_target_is p_carre+p_suivante+7 2d_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille 2d_target_is a_suivante% 2d_image_paste i_temp%,0,0 2d_target_is 0 select piece case 0 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_O(iter%,iter2%) : next iter2% : next iter% case 1 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_I(iter%,iter2%) : next iter2% : next iter% case 2 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_S(iter%,iter2%) : next iter2% : next iter% case 3 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_Z(iter%,iter2%) : next iter2% : next iter% case 4 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_L(iter%,iter2%) : next iter2% : next iter% case 5 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_J(iter%,iter2%) : next iter2% : next iter% case 6 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_T(iter%,iter2%) : next iter2% : next iter% end_select end_if y_piece = y_piece + v_dep
if tfg = 1 test_dep_gauche() if test_dep%= 1 x_piece = x_piece - 1 play s_dep_lateral else play s_dep_impossible end_if tfg = 0 end_if
if tfh = 1 test_dep% = 1 for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece_temp(3-iter2%,iter%) = d_piece(iter%,iter2%) : next iter2% : next iter% test_rot_gauche() if test_dep%= 1 rotation%=rotation%+1 if rotation%=5 then rotation% = 1 2D_target_is p_carre+piece+7*rotation% 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% play s_rotation for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = d_piece_temp(iter%,iter2%) : next iter2% : next iter% else play s_dep_impossible end_if tfh = 0 end_if
if tfd = 1 test_dep_droite() if test_dep%= 1 x_piece = x_piece + 1 play s_dep_lateral else play s_dep_impossible end_if tfd = 0 end_if
if tfb = 1 test_dep% = 1 for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece_temp(iter2%,3-iter%) = d_piece(iter%,iter2%) : next iter2% : next iter% test_rot_droite() if test_dep%= 1 rotation%=rotation%-1 if rotation%=0 then rotation% = 4 2D_target_is p_carre+piece+7*rotation% 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% play s_rotation for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = d_piece_temp(iter%,iter2%) : next iter2% : next iter% else play s_dep_impossible end_if tfb = 0 end_if
if esp = 1 then play s_chutte chutte: test_dep_bas() if test_dep%=0 play s_verouillee if y_piece < 0 goto quitte else bloque_piece() esp = 0 y_piece = int(y_piece) test_ligne() piece = -1 end_if play s_verouillee else sprite_position sprite_piece,x_piece * h_carre_grille,y_piece * h_carre_grille end_if if esp = 1 then y_piece = y_piece + v_dep : wait 10 : goto chutte temps% = 80 - niveau% * 2 : v_dep = 1 - (0.85 - niveau% / 10) : timer_interval t_principal,temps% if int(nb_lignes% / 30) + 1 > niveau% then play s_niveau niveau% = int(nb_lignes% / 30) + 1 : caption a_niveau%,right$("000000" + str$(niveau%),6) timer_on t_principal return
' ****** Gestion du clavier
t1: if key_down_code=cesp then esp=1 if key_down_code=cesc then esc=1 if key_down_code=ctfg then tfg=1 if key_down_code=ctfh then tfh=1 if key_down_code=ctfd then tfd=1 if key_down_code=ctfb then tfb=1 return
quitte: timer_off_all play s_gameover : wait 300 play m_gameover Message "Partie terminée" wait 4000 iter% = dll_call1("KillProcessByHandle",handle(0)) dll_off end | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tetris Ven 20 Fév 2015 - 7:57 | |
| Salut Jicehel, Dans le code ci-dessus il y a un petit bug (un oubli) en ligne 19. J'ai testé, mais voila ce que çà donne dès que le premier objet arrive en bas. A+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tetris Ven 20 Fév 2015 - 8:06 | |
| Nouvel essai, cette fois-ci, çà passe MAIS J'ai un message d'erreur en fin de partie: m_gameover, is not floating point valueJe précise que c'est avec le code tetris V3.bas du zip A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Ven 20 Fév 2015 - 10:23 | |
| En effet Jean-Claude, le Zip n'est pas à jour au niveau du programme, je vais le mettre à jour ce soir. Pareil pour le Clipboard, je pense qu'avec la modif de KGF de Klaus, le problème ne devrait plus se poser. Pour que tu puisses tester, télécharge la DLL de Klaus et prends le code posté ici. Moi, j'ai encore un problème avec de temps en temps, le message le message "Exception Exception in module kgf.dll at 00041F18" qui apparait lors de la copie d'image. Je remplacerais cette partie du programme qui pose problème si Jack permet la copie avec gestion de la transprence ou je chercherais un autre moyen de faire. En fait j'ai déjà une idée qui serait tout aussi simple avec la modif que j'ai faite et la pièce courante. Je pourrais juste simplement recopier les carrés directement où il faut. Je vais essayer et je pense qu'en plus, ça simplifiera le code...
| |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Ven 20 Fév 2015 - 11:11 | |
| Voilà, j'ai fais la modif du code. C'est plus simple, ça va plus vite et je pense que je n'aurais plus d'erreur sur ma machine. Si quelqu'un voit une petite astuce pour ne plus avoir le petit bug visuel quand on fait tourner la pièce et que l'on charge le sprite avec l'image de la pièce, qu'il n'hésite pas à m'en faire part. J'ai essayé de mettre tous les objets de construction en dehors de la zone affichée et je les masque, mais lors de la copie de la pièce pendant la rotation, l'image de la pièce s'affiche quand même très brièvement. A part ça sinon, ça me plait bien. - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 '
' Déclaration des sous-programmes évenementiels label boucle_principale, quitte, t1, chutte, lance_musique
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 610 dim h_fenetre : h_fenetre = 700
' variables de la grille dim marge_grille : marge_grille =15 : ' marge entre la fenêtre et la grille dim h_carre_grille : h_carre_grille = 30 : ' taille d'une case de la grille
' variables d'un carré élementaire dim h_carre : h_carre = h_carre_grille - 1 : ' taille d'un carré de base dim m_carre : m_carre = int(h_carre / 8) : ' taille la bordure du carré pour le relief
' définition des pièces dim couleur_piece(6,3) dim d_piece(3,3) : ' contient les "carrés" occupés par la pièce dans son état de rotation actuelle dim d_piece_temp(3,3) : ' copie temporaire de la piece pour les rotations
' pièce O dim piece_O(3,3) piece_O(0,0) = 0 : piece_O(0,1) = 0: piece_O(0,2) = 0: piece_O(0,3) = 0 piece_O(1,0) = 0 : piece_O(1,1) = 1: piece_O(1,2) = 1: piece_O(1,3) = 0 piece_O(2,0) = 0 : piece_O(2,1) = 1: piece_O(2,2) = 1: piece_O(2,3) = 0 piece_O(3,0) = 0 : piece_O(3,1) = 0: piece_O(3,2) = 0: piece_O(3,3) = 0
couleur_piece(0,0) = 220 : couleur_piece(0,1) = 220 : couleur_piece(0,2) = 0
' pièce I dim piece_I(3,3) piece_I(0,0) = 0 : piece_I(0,1) = 0: piece_I(0,2) = 0: piece_I(0,3) = 0 piece_I(1,0) = 1 : piece_I(1,1) = 1: piece_I(1,2) = 1: piece_I(1,3) = 1 piece_I(2,0) = 0 : piece_I(2,1) = 0: piece_I(2,2) = 0: piece_I(2,3) = 0 piece_I(3,0) = 0 : piece_I(3,1) = 0: piece_I(3,2) = 0: piece_I(3,3) = 0
couleur_piece(1,0) = 100 : couleur_piece(1,1) = 220 : couleur_piece(1,2) = 220
' pièce S dim piece_S(3,3) piece_S(0,0) = 0 : piece_S(0,1) = 0: piece_S(0,2) = 0: piece_S(0,3) = 0 piece_S(1,0) = 0 : piece_S(1,1) = 0: piece_S(1,2) = 1: piece_S(1,3) = 1 piece_S(2,0) = 0 : piece_S(2,1) = 1: piece_S(2,2) = 1: piece_S(2,3) = 0 piece_S(3,0) = 0 : piece_S(3,1) = 0: piece_S(3,2) = 0: piece_S(3,3) = 0
couleur_piece(2,0) = 0 : couleur_piece(2,1) = 220 : couleur_piece(2,2) = 0
' pièce Z dim piece_Z(3,3) piece_Z(0,0) = 0 : piece_Z(0,1) = 0: piece_Z(0,2) = 0: piece_Z(0,3) = 0 piece_Z(1,0) = 0 : piece_Z(1,1) = 1: piece_Z(1,2) = 1: piece_Z(1,3) = 0 piece_Z(2,0) = 0 : piece_Z(2,1) = 0: piece_Z(2,2) = 1: piece_Z(2,3) = 1 piece_Z(3,0) = 0 : piece_Z(3,1) = 0: piece_Z(3,2) = 0: piece_Z(3,3) = 0
couleur_piece(3,0) = 220 : couleur_piece(3,1) = 0 : couleur_piece(3,2) = 0
' pièce L dim piece_L(3,3) piece_L(0,0) = 0 : piece_L(0,1) = 0: piece_L(0,2) = 0: piece_L(0,3) = 0 piece_L(1,0) = 0 : piece_L(1,1) = 1: piece_L(1,2) = 1: piece_L(1,3) = 1 piece_L(2,0) = 0 : piece_L(2,1) = 1: piece_L(2,2) = 0: piece_L(2,3) = 0 piece_L(3,0) = 0 : piece_L(3,1) = 0: piece_L(3,2) = 0: piece_L(3,3) = 0
couleur_piece(4,0) = 220 : couleur_piece(4,1) = 120 : couleur_piece(4,2) = 0
' pièce J dim piece_J(3,3) piece_J(0,0) = 0 : piece_J(0,1) = 0: piece_J(0,2) = 0: piece_J(0,3) = 0 piece_J(1,0) = 0 : piece_J(1,1) = 1: piece_J(1,2) = 1: piece_J(1,3) = 1 piece_J(2,0) = 0 : piece_J(2,1) = 0: piece_J(2,2) = 0: piece_J(2,3) = 1 piece_J(3,0) = 0 : piece_J(3,1) = 0: piece_J(3,2) = 0: piece_J(3,3) = 0
couleur_piece(5,0) = 0 : couleur_piece(5,1) = 0 : couleur_piece(5,2) = 220
' pièce T dim piece_T(3,3) piece_T(0,0) = 0 : piece_T(0,1) = 0: piece_T(0,2) = 0: piece_T(0,3) = 0 piece_T(1,0) = 0 : piece_T(1,1) = 1: piece_T(1,2) = 1: piece_T(1,3) = 1 piece_T(2,0) = 0 : piece_T(2,1) = 0: piece_T(2,2) = 1: piece_T(2,3) = 0 piece_T(3,0) = 0 : piece_T(3,1) = 0: piece_T(3,2) = 0: piece_T(3,3) = 0
couleur_piece(6,0) = 220 : couleur_piece(6,1) = 0 : couleur_piece(6,2) = 220
' dessin des carrés de couleur dim p_carre : ' Picture des carré pour la pièce 0, 6 autres objets seront créés pour les autres carés de base ' On créé ensuite 7 autres pictures pour stocker les différentes pièces ' On créera les pièces tournées à 90°, 180° et -90° à la suite dim i_temp% : ' Image servant à faire la copie du carré correspondant à la pièce
' définition des noms d'obhets dim a_grille1% : ' picture ou l'on crée la grille comme fond et ou on mettra les blocs inactifs dim a_grille2% : ' nom de la grille 2 sur laquelle on affiche les sprites de la pièce et le fond avec les blocs figés dim a_suivante% : ' nom du "picture" où l'on affiche la pièce suivante dim a_score% : ' nom de l'affichage du score dim a_lignes% : ' nom de l'affichage du nombre de lignes faites dim a_nb_lignes%: ' affichage du nombre de lignes faites dim a_niveau% : ' affichage du niveau actuel
' définition des variables du jeu dim iter%, iter2% : ' Compteurs d'itérations dim objet%: objet% = 0 : ' Compteur d'objets créés dim p_suivante : ' prochaine pièce qui sera affichée dim piece : ' Numero de la pièce active. Si la pièce vaut -1, prendre la pièce suivante dim x_piece, y_piece : ' Coordonnées de la pièce courante en cases dim x_initial, y_initial : ' Coordonnées initiale d'une nouvelle pièce x_initial = 4 : y_initial = -4 dim diff_couleur : diff_couleur = 100 : ' Ombres et lumière dim ind_c% : ind_c% = int(diff_couleur / h_carre) : ' variation de lumiere par pas dim temps% : temps% = 75 : ' temps d'une boucle principale dim v_dep : v_dep = 0.2 : ' Vitesse de descente de la pièce dim t_principal : ' Numéro du timer principal dim t_musique : ' ' Timer pour relancer la musique dim sprite_piece : sprite_piece = 1 : ' Le sprite de la pièce !! dim test_dep% : ' Vaut 1 si le déplacement est possible dim grille%(9,19) : ' Mémorise les carrés des pièces dans la grille dim rotation% : ' Indique si la pièce est tournée dim nb_lignes%: ' Le compteur de ligne dim niveau% : ' Niveau actuel dim score% : ' Le score dim player_musique: ' Objet qui jouera la musique dim s$ : ' chaine de caractères temporaire
' définitions des sons dim s_dep_impossible : ' mouvement impossible dim s_dep_lateral : ' deplacement à droit ou a gauche dim s_rotation : ' tourne la pièce de 90° dim s_gameover : ' son de fin de partie dim s_verouillee : ' la pièce est bloquée (arrivée, on passe à la pièce suivante) dim s_niveau : ' passage au niveau supérieur dim s_chutte : ' son de la chutte d'une pièce quand on appuie sur espace dim s1_ligne, s2_lignes, s3_lignes, s4_lignes : ' sons de 1 à 4 lignes complètes dim m_gameover : ' Musique après la fin de partie dim m_theme : ' Musique durant le jeu dim m_highscore : ' Musique sur l'ecran des high_score
dim grille_active% : grille_active%=2 : ' Définit la grille de travail
' ****************************** COMMANDES CLAVIER ************************** dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:... 27 * dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> DEPLACER À GAUCHE:...... 37 * dim tfh,ctfh : ctfh=38 : ' * FLÈCHE HAUTE ==> PIVOTER A GAUCHE........ 38 * dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> DEPLACER À DROITE:...... 39 * dim tfb,ctfb : ctfb=40 : ' * FLÈCHE BASSE ==> PIVOTER À DROITE:....... 40 * dim esp,cesp : cesp=32 : ' * ESPACE ==> TOMBER:................. 32 * ' ***************************************************************************
' initialisation de la fenêtre de jeu width 0, l_fenetre : height 0,h_fenetre
objet% = objet% + 1 : a_grille1% = objet% picture a_grille1% : hide a_grille1%: left a_grille1%, marge_grille : top a_grille1%, marge_grille width a_grille1%, 10*h_carre_grille : height a_grille1%,20*h_carre_grille color a_grille1%,200, 150, 150 : 2D_target_is a_grille1% : trace_grille() file_save a_grille1%,"fond.bmp"
objet% = objet% + 1: a_grille2% = objet% scene2D a_grille2% : left a_grille2%, marge_grille : top a_grille2%, marge_grille width a_grille2%, 10*h_carre_grille : height a_grille2%,20*h_carre_grille file_load a_grille2%,"fond.bmp" sprite sprite_piece
objet% = objet% + 1: i_temp% = objet% : image i_temp% : top objet%, -800 : hide i_temp%
objet% = objet% + 1 : picture objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, marge_grille : width objet%,250: height objet%,172 : file_load objet%,titre.jpg
objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 3* marge_grille + 172 : width objet%,250: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Pièce suivante :"
objet% = objet% + 1 : a_suivante% = objet% : picture objet% : left objet%, 2*marge_grille + 12 * h_carre_grille top objet%, 4* marge_grille + 202 : width objet%,4* h_carre_grille: height objet%, 4* h_carre_grille
' Création des 7 pièces dans les 4 directions
for iter% = 0 to 6
objet% = objet% + 1 : if iter%= 0 then p_carre = objet%
picture objet% : 2d_target_is objet% : hide objet% top objet%, -400: width objet%, h_carre_grille : height objet%, h_carre_grille dessine_carre(iter%)
picture objet%+7 : hide objet% +7 width objet%+7, 4*h_carre_grille: height objet%+7, 4*h_carre_grille : top objet%+7, -400 color objet%+7,0,0,0: 2d_target_is objet%+7 : dessine_piece(iter%,1)
picture objet%+14 : hide objet% + 14 width objet%+14, 4*h_carre_grille: height objet%+14, 4*h_carre_grille: top objet%+14, -400 color objet%+14,0,0,0: 2d_target_is objet%+14 : dessine_piece(iter%,2)
picture objet%+21 : hide objet% + 21 width objet%+21, 4*h_carre_grille: height objet%+21, 4*h_carre_grille : top objet%+21, -400 color objet%+21,0,0,0: 2d_target_is objet%+21 : dessine_piece(iter%,3)
picture objet%+28 : hide objet% + 28 width objet%+28, 4*h_carre_grille: height objet%+28, 4*h_carre_grille: top objet%+28, -400 color objet%+28,0,0,0: 2d_target_is objet%+28 : dessine_piece(iter%,4)
next iter%
objet% = objet% + 28 piece = -1 : vide_grille() : Cree_piece_suivante() dll_on "kgf.dll"
' Debug Windows dim debug_mode : debug_mode = 0 : ' Active ou non le mode debug dim debug_windows if debug_mode = 1 objet% = objet% + 1 : debug_windows = objet% form debug_windows : command_target_is debug_windows left debug_windows, 700 : height debug_windows,700 : width debug_windows, 250 objet% = objet% + 1 : list objet% : width objet%, 220 height objet%, 650 command_target_is 0 : set_focus 0 end_if
' Demarrage du jeu, on lance les cycle du jeu au travers d'un timer qui va rythmer les actions
score% = 0 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 12* marge_grille + 242 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Score :"
objet% = objet% + 1 : a_score% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 12* marge_grille + 242 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000000"
nb_lignes% = 0 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 14* marge_grille + 272 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Lignes :"
objet% = objet% + 1 : a_nb_lignes% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 14* marge_grille + 272 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000000"
niveau% = 1 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 16* marge_grille + 302 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Niveau :"
objet% = objet% + 1 : a_niveau% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 16* marge_grille + 302 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000001"
' Chargement des sons objet% = objet% + 1 : s_dep_impossible = objet% : sound objet% : file_load objet%,"sons\Deplacement impossible.mp3" objet% = objet% + 1 : s_dep_lateral = objet% : sound objet% : file_load objet%,"sons\Deplacement lateral.mp3" objet% = objet% + 1 : s_rotation = objet% : sound objet% : file_load objet%,"sons\Rotation piece.mp3" objet% = objet% + 1 : s_gameover = objet% : sound objet% : file_load objet%,"sons\Game Over.mp3" objet% = objet% + 1 : s_verouillee = objet% : sound objet% : file_load objet%,"sons\Piece verouillee.mp3" objet% = objet% + 1 : s_niveau = objet% : sound objet% : file_load objet%,"sons\Niveau superieur.mp3" objet% = objet% + 1 : s_chutte = objet% : sound objet% : file_load objet%,"sons\Chutte.mp3" objet% = objet% + 1 : s1_ligne = objet% : sound objet% : file_load objet%,"sons\Simple Ligne.mp3" objet% = objet% + 1 : s2_lignes = objet% : sound objet% : file_load objet%,"sons\Double ligne.mp3" objet% = objet% + 1 : s3_lignes = objet% : sound objet% : file_load objet%,"sons\Triple ligne.mp3" objet% = objet% + 1 : s4_lignes = objet% : sound objet% : file_load objet%,"sons\Tetris.mp3" objet% = objet% + 1 : m_gameover = objet% : sound objet% : file_load objet%,"sons\Musique - Game Over.mp3" objet% = objet% + 1 : m_theme = objet% : sound objet% : file_load objet%,"sons\Musique - Theme Tetris.mp3" objet% = objet% + 1 : m_highscore = objet% : sound objet% : file_load objet%,"sons\Musique - High Scores.mp3"
objet% = objet% + 1 : player_musique = objet% panel objet% : hide objet% : iter% = dll_call5("CreatePlayer",handle(player_musique),0,0,100,100) s$ = "sons\Musique - Theme Tetris.mp3" iter% = dll_call1("LoadFileIntoPlayer",adr(s$)) iter% = dll_call0("PlayPlayer") iter% = dll_call1("VolumePlayer",30)
objet%= objet% + 1 : t_musique = objet% timer t_musique : timer_interval t_musique,83000 : on_timer t_musique, lance_musique
objet%= objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale
' On détecte le changement d'état des touches on_key_down 0,t1
end
lance_musique: iter% = dll_call0("PlayPlayer") return
sub dessine_piece(num%,rot%) dim_local d_piece(3,3) dim_local i%,j%
select num% case 0 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_O(i%,j%) : next j% : next i% case 1 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_I(i%,j%) : next j% : next i% case 2 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_S(i%,j%) : next j% : next i% case 3 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_Z(i%,j%) : next j% : next i% case 4 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_L(i%,j%) : next j% : next i% case 5 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_J(i%,j%) : next j% : next i% case 6 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_T(i%,j%) : next j% : next i% end_select
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 if rot% = 1 then copie_carre(num%,i%,j%,rot%) if rot% = 2 then copie_carre(num%,3-j%,i%,rot%) if rot% = 3 then copie_carre(num%,3-i%,3-j%,rot%) if rot% = 4 then copie_carre(num%,j%,3-i%,rot%) end_if next j% next i% end_sub
sub dessine_carre(num%) dim_local c1%,c2%,c3%, k%,l%, temp1%,temp2%,temp3% c1% = couleur_piece(num%, 0) : c2% = couleur_piece(num%, 1) : c3% = couleur_piece(num%,2) for k% = 0 to h_carre-1 for l% = 0 to m_carre-1 temp1% = c1% + ind_c%*(h_carre - k%) : if temp1% > 255 then temp1% = 255 temp2% = c2% + ind_c%*(h_carre - k%) : if temp2% > 255 then temp2% = 255 temp3% = c3% + ind_c%*(h_carre - k%) : if temp3% > 255 then temp3% = 255 2d_pen_color temp1%,temp2%,temp3% if k% >= l% 2d_point k%,l% 2d_point l%,k% end_if temp1% = c1% - ind_c% * k% : if temp1% < 0 then temp1% = 0 temp2% = c2% - ind_c% * k% : if temp2% < 0 then temp2% = 0 temp3% = c3% - ind_c% * k% : if temp3% < 0 then temp3% = 0 2d_pen_color temp1%,temp2%,temp3% if k% >= l% 2d_point k%,h_carre-l% 2d_point h_carre-l%,k% end_if next l% next k% 2d_pen_color c1%,c2%,c3% : 2d_fill_color c1%,c2%,c3% 2d_rectangle m_carre, m_carre , h_carre - m_carre +1, h_carre - m_carre +1 end_sub
sub copie_carre(num%,x_dest,y_dest, rot%) 2D_target_is p_carre + num% 2D_image_copy i_temp%,0,0,h_carre,h_carre 2D_target_is p_carre+num%+7*rot% 2D_image_paste i_temp%,x_dest * h_carre_grille +1,y_dest * h_carre_grille +1 end_sub
sub vide_grille() for iter% = 0 to 9 for iter2% = 0 to 19 grille%(iter%,iter2%) = -1 next iter2% next iter% end_sub
sub trace_grille() 2D_pen_color 180,180,255 for iter% = 1 to 10 2D_line iter%*h_carre_grille, 0, iter%*h_carre_grille,20*h_carre_grille next iter% for iter% = 1 to 20 2D_line 0, iter%*h_carre_grille, 10*h_carre_grille,iter%*h_carre_grille next iter% end_sub
sub Cree_piece_suivante() p_suivante = int(rnd(6.9999)) end_sub
sub test_dep_bas()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece - 0.001) + 1 + j% temp2% = x_piece + i% if temp% = 20 then test_dep% = 0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if next j% next i%
end_sub
sub test_dep_gauche()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% -1 if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if end_if end_if next j% next i%
end_sub
sub test_rot_gauche()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece_temp(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if next j% next i%
end_sub
sub test_dep_droite()
dim_local i%,j%,temp%, temp2% test_dep% = 1 for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% +1 if temp2% > 9 then test_dep%=0 : exit_sub if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if end_if end_if next j% next i%
end_sub
sub test_rot_droite()
dim_local i%,j%,temp%, temp2% test_dep% = 1 for i% = 0 to 3 for j% = 0 to 3 if d_piece_temp(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% +1 if temp2% > 9 then test_dep%=0 : exit_sub if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if next j% next i%
end_sub
sub test_ligne() dim_local i%,j%,ligne%, nbligne% nbligne%=0 for i% = 0 to 3 ligne%=1 for j% = 0 to 9 if y_piece + i% < 20 if grille%(j%,y_piece + i%) < 0 then ligne% = 0 : exit_for else ligne%= 0 end_if next j% if ligne%=1 then suppr_ligne(y_piece + i%) : nbligne% = nbligne% +1 next i% if nbligne% > 0 2D_target_is a_grille1% : trace_grille() file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" select nbligne% case 1 : score% = score% + niveau% * 40 : play s1_ligne case 2 : score% = score% + niveau% * 100 : play s2_lignes case 3 : score% = score% + niveau% * 300 : play s3_lignes case 4 : score% = score% + niveau% *1200 : play s4_lignes end_select caption a_score%,right$("000000" + str$(score%),6) nb_lignes% = nb_lignes% + nbligne% caption a_nb_lignes%,right$("000000" + str$(nb_lignes%),6) end_if end_sub
sub suppr_ligne(l%) dim_local i%,j% 2D_target_is a_grille1% 2D_image_copy i_temp%,0,0,10*h_carre_grille,l%*h_carre_grille 2D_image_paste i_temp%,0,1 * h_carre_grille for i% = l% to 1 step -1 for j% = 0 to 9 grille%(j%,i%) = grille%(j%,i%-1) next j% next i% for j% = 0 to 9 grille%(j%,0) = -1 next j% end_sub
sub bloque_piece() dim_local i%,j%,s$ for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 and y_piece >= 0 if (int(y_piece)+j%) < 20 then grille%(x_piece + i%, int(y_piece)+j%) = piece end_if next j% next i% if debug_mode =1 clear debug_windows +1 item_add debug_windows +1,"XX | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | for i% = 0 to 19 s$=right$("0" + str$(i%),2) + " | " for j%=0 to 9 s$=s$ + right$(" " + str$(grille%(j%,i%)),2) + " | " next j% item_add debug_windows +1,s$ next i% set_focus 0 end_if for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 2D_target_is p_carre + piece 2D_image_copy i_temp%,0,0,h_carre,h_carre 2D_target_is a_grille1% 2D_image_paste i_temp%,(x_piece+i%) * h_carre_grille +1,int(y_piece+j%) * h_carre_grille +1 end_if next j% next i% file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" end_sub
boucle_principale:
timer_off t_principal set_focus 0 if esc = 1 if message_confirmation_yes_no ("Voulez-vous vraiment quitter le jeu ?") = 1 then goto quitte esc = 0 end_if
' dessin d'une pièce if piece = -1 sprite_hide sprite_piece : piece = p_suivante x_piece = x_initial : y_piece = y_initial : rotation% = 1 Cree_piece_suivante() 2d_target_is p_carre+piece+7 2d_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% sprite_position sprite_piece,x_initial * h_carre_grille,y_initial * h_carre_grille sprite_show sprite_piece 2d_target_is p_carre+p_suivante+7 2d_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille 2d_target_is a_suivante% 2d_image_paste i_temp%,0,0 2d_target_is 0 select piece case 0 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_O(iter%,iter2%) : next iter2% : next iter% case 1 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_I(iter%,iter2%) : next iter2% : next iter% case 2 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_S(iter%,iter2%) : next iter2% : next iter% case 3 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_Z(iter%,iter2%) : next iter2% : next iter% case 4 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_L(iter%,iter2%) : next iter2% : next iter% case 5 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_J(iter%,iter2%) : next iter2% : next iter% case 6 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_T(iter%,iter2%) : next iter2% : next iter% end_select end_if y_piece = y_piece + v_dep
if tfg = 1 test_dep_gauche() if test_dep%= 1 x_piece = x_piece - 1 play s_dep_lateral else play s_dep_impossible end_if tfg = 0 end_if
if tfh = 1 test_dep% = 1 for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece_temp(3-iter2%,iter%) = d_piece(iter%,iter2%) : next iter2% : next iter% test_rot_gauche() if test_dep%= 1 rotation%=rotation%+1 if rotation%=5 then rotation% = 1 2D_target_is p_carre+piece+7*rotation% 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% play s_rotation for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = d_piece_temp(iter%,iter2%) : next iter2% : next iter% else play s_dep_impossible end_if tfh = 0 end_if
if tfd = 1 test_dep_droite() if test_dep%= 1 x_piece = x_piece + 1 play s_dep_lateral else play s_dep_impossible end_if tfd = 0 end_if
if tfb = 1 test_dep% = 1 for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece_temp(iter2%,3-iter%) = d_piece(iter%,iter2%) : next iter2% : next iter% test_rot_droite() if test_dep%= 1 rotation%=rotation%-1 if rotation%=0 then rotation% = 4 2D_target_is p_carre+piece+7*rotation% 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% play s_rotation for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = d_piece_temp(iter%,iter2%) : next iter2% : next iter% else play s_dep_impossible end_if tfb = 0 end_if
if esp = 1 then play s_chutte chutte: test_dep_bas() if test_dep%=0 play s_verouillee if y_piece < 0 goto quitte else y_piece = int(y_piece) bloque_piece() esp = 0 test_ligne() piece = -1 end_if play s_verouillee else sprite_position sprite_piece,x_piece * h_carre_grille,y_piece * h_carre_grille end_if if esp = 1 then y_piece = y_piece + v_dep : wait 10 : goto chutte temps% = 80 - niveau% * 2 : v_dep = 1 - (0.85 - niveau% / 10) : timer_interval t_principal,temps% if int(nb_lignes% / 30) + 1 > niveau% then play s_niveau niveau% = int(nb_lignes% / 30) + 1 : caption a_niveau%,right$("000000" + str$(niveau%),6) timer_on t_principal return
' ****** Gestion du clavier
t1: if key_down_code=cesp then esp=1 if key_down_code=cesc then esc=1 if key_down_code=ctfg then tfg=1 if key_down_code=ctfh then tfh=1 if key_down_code=ctfd then tfd=1 if key_down_code=ctfb then tfb=1 return
quitte: timer_off_all play s_gameover : wait 300 play m_gameover Message "Partie terminée" wait 4000 iter% = dll_call1("KillProcessByHandle",handle(0)) dll_off end | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tetris Ven 20 Fév 2015 - 13:15 | |
| Cette fois-ci c'est jouable et sans erreur (avec le code ci-dessus). Belle prise de tête ! A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Ven 20 Fév 2015 - 13:38 | |
| Quand j'aurais fini l'article je vais essayer de reprendre un ancien projet que je n'ai pas terminé. Je pense que ce sera Barbarian, j'ai envie de terminer de le rendre jouable. Dans les améliorations qui seraient à faire, il y aurait: - Un mode VS : 2 écrans et 2 séries de touches (une de chaque coté du clavier quand tu fais 2 lignes, ça en envoi une à ton adversaire. 3, ça en envoie 2, et 4 (tetris), ça en envoie 4 (avec à chaque fois un trou dans une des colonnes) - Choix du niveau de difficulté pour régler la vitesse de départ (à la fin de toute façon, ça va trop vite ... ) - Un menu Options pour choisir le mode de jeu, le niveau de difficulté et la musique - L'option pour faire tomber les pièces quand il n'y a rien en dessous suite à la disparition d'une ou plusieurs lignes (et des pièces au dessus si du coup, elle se retrouvent avec rien en dessous) - Un tableau des Highscores - Une aide intégrée qui explique tout ça ... Je l'écris ici pour que ça me serve de pense bête pour un de ces jours si je reviens sur le programme pour l'améliorer ou pour donner des idées si quelqu'un veut le faire. | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Tetris Ven 20 Fév 2015 - 18:24 | |
| Bonsoir a tous !
ou peut on trouver la version *.ZIP de TETRIS ?
j'ai copié le fichier mis en ligne sur le forum mais a priori il me manque quelque chose... | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 20 Fév 2015 - 18:51 | |
| | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tetris Ven 20 Fév 2015 - 20:50 | |
| Il est temps que tu mettes le zip à jour Jicehel | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Tetris Ven 20 Fév 2015 - 21:42 | |
| bon ! j'ai enfin réussi a tester ce superbe jeu !!! J'ai un plantage en 397. cela arrive lorsque l'on manipule l'orientation de la pièce et que l'on est sur les bords. D'autre part, étant un puriste de ce jeu, je propose de d'inverser les touche "flèche bas" et espace" flèche vers le bas : pour descendre la pièce rapidement espace : pour changer le sens de la pièce. Hors mis ces petits détails, il n'y a rien a dire, tout est parfaitement jouable. Encore merci pour la réalisation de ce jeu. Bravo Jicehel ! Et un programme de plus pour agrandir la bibliothèque Panoramic. | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Ven 20 Fév 2015 - 22:56 | |
| Bien vu Minibug, il y avait une erreur de +1 en trop dans une formule de test. C'est corrigé J'ai changé la gestion des touches comme indiqué J'ai fais aussi un petit ajustement sur le son. Maintenant je n'ai plus de plantage sur mon W8 Si quelqu'un trouve une solution par contre pour qu'il n'y ait plus de bug visuel lors de la rotation, je serais très content. - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 ' Déplacement par les flèches droite / gauche ' Faire tomber la pièce: Flèche vers le bas ' Tourner la pièce : Espace
' Déclaration des sous-programmes évenementiels label boucle_principale, quitte, t1, chutte, lance_musique
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 610 dim h_fenetre : h_fenetre = 700
' variables de la grille dim marge_grille : marge_grille =15 : ' marge entre la fenêtre et la grille dim h_carre_grille : h_carre_grille = 30 : ' taille d'une case de la grille
' variables d'un carré élementaire dim h_carre : h_carre = h_carre_grille - 1 : ' taille d'un carré de base dim m_carre : m_carre = int(h_carre / 8) : ' taille la bordure du carré pour le relief
' définition des pièces dim couleur_piece(6,3) dim d_piece(3,3) : ' contient les "carrés" occupés par la pièce dans son état de rotation actuelle dim d_piece_temp(3,3) : ' copie temporaire de la piece pour les rotations
' pièce O dim piece_O(3,3) piece_O(0,0) = 0 : piece_O(0,1) = 0: piece_O(0,2) = 0: piece_O(0,3) = 0 piece_O(1,0) = 0 : piece_O(1,1) = 1: piece_O(1,2) = 1: piece_O(1,3) = 0 piece_O(2,0) = 0 : piece_O(2,1) = 1: piece_O(2,2) = 1: piece_O(2,3) = 0 piece_O(3,0) = 0 : piece_O(3,1) = 0: piece_O(3,2) = 0: piece_O(3,3) = 0
couleur_piece(0,0) = 220 : couleur_piece(0,1) = 220 : couleur_piece(0,2) = 0
' pièce I dim piece_I(3,3) piece_I(0,0) = 0 : piece_I(0,1) = 0: piece_I(0,2) = 0: piece_I(0,3) = 0 piece_I(1,0) = 1 : piece_I(1,1) = 1: piece_I(1,2) = 1: piece_I(1,3) = 1 piece_I(2,0) = 0 : piece_I(2,1) = 0: piece_I(2,2) = 0: piece_I(2,3) = 0 piece_I(3,0) = 0 : piece_I(3,1) = 0: piece_I(3,2) = 0: piece_I(3,3) = 0
couleur_piece(1,0) = 100 : couleur_piece(1,1) = 220 : couleur_piece(1,2) = 220
' pièce S dim piece_S(3,3) piece_S(0,0) = 0 : piece_S(0,1) = 0: piece_S(0,2) = 0: piece_S(0,3) = 0 piece_S(1,0) = 0 : piece_S(1,1) = 0: piece_S(1,2) = 1: piece_S(1,3) = 1 piece_S(2,0) = 0 : piece_S(2,1) = 1: piece_S(2,2) = 1: piece_S(2,3) = 0 piece_S(3,0) = 0 : piece_S(3,1) = 0: piece_S(3,2) = 0: piece_S(3,3) = 0
couleur_piece(2,0) = 0 : couleur_piece(2,1) = 220 : couleur_piece(2,2) = 0
' pièce Z dim piece_Z(3,3) piece_Z(0,0) = 0 : piece_Z(0,1) = 0: piece_Z(0,2) = 0: piece_Z(0,3) = 0 piece_Z(1,0) = 0 : piece_Z(1,1) = 1: piece_Z(1,2) = 1: piece_Z(1,3) = 0 piece_Z(2,0) = 0 : piece_Z(2,1) = 0: piece_Z(2,2) = 1: piece_Z(2,3) = 1 piece_Z(3,0) = 0 : piece_Z(3,1) = 0: piece_Z(3,2) = 0: piece_Z(3,3) = 0
couleur_piece(3,0) = 220 : couleur_piece(3,1) = 0 : couleur_piece(3,2) = 0
' pièce L dim piece_L(3,3) piece_L(0,0) = 0 : piece_L(0,1) = 0: piece_L(0,2) = 0: piece_L(0,3) = 0 piece_L(1,0) = 0 : piece_L(1,1) = 1: piece_L(1,2) = 1: piece_L(1,3) = 1 piece_L(2,0) = 0 : piece_L(2,1) = 1: piece_L(2,2) = 0: piece_L(2,3) = 0 piece_L(3,0) = 0 : piece_L(3,1) = 0: piece_L(3,2) = 0: piece_L(3,3) = 0
couleur_piece(4,0) = 220 : couleur_piece(4,1) = 120 : couleur_piece(4,2) = 0
' pièce J dim piece_J(3,3) piece_J(0,0) = 0 : piece_J(0,1) = 0: piece_J(0,2) = 0: piece_J(0,3) = 0 piece_J(1,0) = 0 : piece_J(1,1) = 1: piece_J(1,2) = 1: piece_J(1,3) = 1 piece_J(2,0) = 0 : piece_J(2,1) = 0: piece_J(2,2) = 0: piece_J(2,3) = 1 piece_J(3,0) = 0 : piece_J(3,1) = 0: piece_J(3,2) = 0: piece_J(3,3) = 0
couleur_piece(5,0) = 0 : couleur_piece(5,1) = 0 : couleur_piece(5,2) = 220
' pièce T dim piece_T(3,3) piece_T(0,0) = 0 : piece_T(0,1) = 0: piece_T(0,2) = 0: piece_T(0,3) = 0 piece_T(1,0) = 0 : piece_T(1,1) = 1: piece_T(1,2) = 1: piece_T(1,3) = 1 piece_T(2,0) = 0 : piece_T(2,1) = 0: piece_T(2,2) = 1: piece_T(2,3) = 0 piece_T(3,0) = 0 : piece_T(3,1) = 0: piece_T(3,2) = 0: piece_T(3,3) = 0
couleur_piece(6,0) = 220 : couleur_piece(6,1) = 0 : couleur_piece(6,2) = 220
' dessin des carrés de couleur dim p_carre : ' Picture des carré pour la pièce 0, 6 autres objets seront créés pour les autres carés de base ' On créé ensuite 7 autres pictures pour stocker les différentes pièces ' On créera les pièces tournées à 90°, 180° et -90° à la suite dim i_temp% : ' Image servant à faire la copie du carré correspondant à la pièce
' définition des noms d'obhets dim a_grille1% : ' picture ou l'on crée la grille comme fond et ou on mettra les blocs inactifs dim a_grille2% : ' nom de la grille 2 sur laquelle on affiche les sprites de la pièce et le fond avec les blocs figés dim a_suivante% : ' nom du "picture" où l'on affiche la pièce suivante dim a_score% : ' nom de l'affichage du score dim a_lignes% : ' nom de l'affichage du nombre de lignes faites dim a_nb_lignes%: ' affichage du nombre de lignes faites dim a_niveau% : ' affichage du niveau actuel
' définition des variables du jeu dim iter%, iter2% : ' Compteurs d'itérations dim objet%: objet% = 0 : ' Compteur d'objets créés dim p_suivante : ' prochaine pièce qui sera affichée dim piece : ' Numero de la pièce active. Si la pièce vaut -1, prendre la pièce suivante dim x_piece, y_piece : ' Coordonnées de la pièce courante en cases dim x_initial, y_initial : ' Coordonnées initiale d'une nouvelle pièce x_initial = 4 : y_initial = -4 dim diff_couleur : diff_couleur = 100 : ' Ombres et lumière dim ind_c% : ind_c% = int(diff_couleur / h_carre) : ' variation de lumiere par pas dim temps% : temps% = 75 : ' temps d'une boucle principale dim v_dep : v_dep = 0.2 : ' Vitesse de descente de la pièce dim t_principal : ' Numéro du timer principal dim t_musique : ' ' Timer pour relancer la musique dim sprite_piece : sprite_piece = 1 : ' Le sprite de la pièce !! dim test_dep% : ' Vaut 1 si le déplacement est possible dim grille%(9,19) : ' Mémorise les carrés des pièces dans la grille dim rotation% : ' Indique si la pièce est tournée dim nb_lignes%: ' Le compteur de ligne dim niveau% : ' Niveau actuel dim score% : ' Le score dim player_musique: ' Objet qui jouera la musique dim s$ : ' chaine de caractères temporaire
' définitions des sons dim s_dep_impossible : ' mouvement impossible dim s_dep_lateral : ' deplacement à droit ou a gauche dim s_rotation : ' tourne la pièce de 90° dim s_gameover : ' son de fin de partie dim s_verouillee : ' la pièce est bloquée (arrivée, on passe à la pièce suivante) dim s_niveau : ' passage au niveau supérieur dim s_chutte : ' son de la chutte d'une pièce quand on appuie sur espace dim s1_ligne, s2_lignes, s3_lignes, s4_lignes : ' sons de 1 à 4 lignes complètes dim m_gameover : ' Musique après la fin de partie dim m_theme : ' Musique durant le jeu dim m_highscore : ' Musique sur l'ecran des high_score
dim grille_active% : grille_active%=2 : ' Définit la grille de travail
' ****************************** COMMANDES CLAVIER ************************** dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:... 27 * dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> DEPLACER À GAUCHE:...... 37 * dim tfh,ctfh : ctfh=38 : ' * FLÈCHE HAUTE ==> INUTILISEE.............. 38 * dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> DEPLACER À DROITE:...... 39 * dim tfb,ctfb : ctfb=40 : ' * FLÈCHE BASSE ==> FAIRE TOMBER LA PIECE... 40 * dim esp,cesp : cesp=32 : ' * ESPACE ==> PIVOTER À DROITE........ 32 * ' ***************************************************************************
' initialisation de la fenêtre de jeu width 0, l_fenetre : height 0,h_fenetre
objet% = objet% + 1 : a_grille1% = objet% picture a_grille1% : hide a_grille1%: left a_grille1%, marge_grille : top a_grille1%, marge_grille width a_grille1%, 10*h_carre_grille : height a_grille1%,20*h_carre_grille color a_grille1%,200, 150, 150 : 2D_target_is a_grille1% : trace_grille() file_save a_grille1%,"fond.bmp"
objet% = objet% + 1: a_grille2% = objet% scene2D a_grille2% : left a_grille2%, marge_grille : top a_grille2%, marge_grille width a_grille2%, 10*h_carre_grille : height a_grille2%,20*h_carre_grille file_load a_grille2%,"fond.bmp" sprite sprite_piece
objet% = objet% + 1: i_temp% = objet% : image i_temp% : top objet%, -800 : hide i_temp%
objet% = objet% + 1 : picture objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, marge_grille : width objet%,250: height objet%,172 : file_load objet%,titre.jpg
objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 3* marge_grille + 172 : width objet%,250: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Pièce suivante :"
objet% = objet% + 1 : a_suivante% = objet% : picture objet% : left objet%, 2*marge_grille + 12 * h_carre_grille top objet%, 4* marge_grille + 202 : width objet%,4* h_carre_grille: height objet%, 4* h_carre_grille
' Création des 7 pièces dans les 4 directions
for iter% = 0 to 6
objet% = objet% + 1 : if iter%= 0 then p_carre = objet%
picture objet% : 2d_target_is objet% : hide objet% top objet%, -400: width objet%, h_carre_grille : height objet%, h_carre_grille dessine_carre(iter%)
picture objet%+7 : hide objet% +7 width objet%+7, 4*h_carre_grille: height objet%+7, 4*h_carre_grille : top objet%+7, -400 color objet%+7,0,0,0: 2d_target_is objet%+7 : dessine_piece(iter%,1)
picture objet%+14 : hide objet% + 14 width objet%+14, 4*h_carre_grille: height objet%+14, 4*h_carre_grille: top objet%+14, -400 color objet%+14,0,0,0: 2d_target_is objet%+14 : dessine_piece(iter%,2)
picture objet%+21 : hide objet% + 21 width objet%+21, 4*h_carre_grille: height objet%+21, 4*h_carre_grille : top objet%+21, -400 color objet%+21,0,0,0: 2d_target_is objet%+21 : dessine_piece(iter%,3)
picture objet%+28 : hide objet% + 28 width objet%+28, 4*h_carre_grille: height objet%+28, 4*h_carre_grille: top objet%+28, -400 color objet%+28,0,0,0: 2d_target_is objet%+28 : dessine_piece(iter%,4)
next iter%
objet% = objet% + 28 piece = -1 : vide_grille() : Cree_piece_suivante() dll_on "kgf.dll"
' Debug Windows dim debug_mode : debug_mode = 0 : ' Active ou non le mode debug dim debug_windows if debug_mode = 1 objet% = objet% + 1 : debug_windows = objet% form debug_windows : command_target_is debug_windows left debug_windows, 700 : height debug_windows,700 : width debug_windows, 250 objet% = objet% + 1 : list objet% : width objet%, 220 height objet%, 650 command_target_is 0 : set_focus 0 end_if
' Demarrage du jeu, on lance les cycle du jeu au travers d'un timer qui va rythmer les actions
score% = 0 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 12* marge_grille + 242 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Score :"
objet% = objet% + 1 : a_score% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 12* marge_grille + 242 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000000"
nb_lignes% = 0 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 14* marge_grille + 272 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Lignes :"
objet% = objet% + 1 : a_nb_lignes% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 14* marge_grille + 272 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000000"
niveau% = 1 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 16* marge_grille + 302 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Niveau :"
objet% = objet% + 1 : a_niveau% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 16* marge_grille + 302 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000001"
' Chargement des sons objet% = objet% + 1 : s_dep_impossible = objet% : sound objet% : file_load objet%,"sons\Deplacement impossible.mp3" objet% = objet% + 1 : s_dep_lateral = objet% : sound objet% : file_load objet%,"sons\Deplacement lateral.mp3" objet% = objet% + 1 : s_rotation = objet% : sound objet% : file_load objet%,"sons\Rotation piece.mp3" objet% = objet% + 1 : s_gameover = objet% : sound objet% : file_load objet%,"sons\Game Over.mp3" objet% = objet% + 1 : s_verouillee = objet% : sound objet% : file_load objet%,"sons\Piece verouillee.mp3" objet% = objet% + 1 : s_niveau = objet% : sound objet% : file_load objet%,"sons\Niveau superieur.mp3" objet% = objet% + 1 : s_chutte = objet% : sound objet% : file_load objet%,"sons\Chutte.mp3" objet% = objet% + 1 : s1_ligne = objet% : sound objet% : file_load objet%,"sons\Simple Ligne.mp3" objet% = objet% + 1 : s2_lignes = objet% : sound objet% : file_load objet%,"sons\Double ligne.mp3" objet% = objet% + 1 : s3_lignes = objet% : sound objet% : file_load objet%,"sons\Triple ligne.mp3" objet% = objet% + 1 : s4_lignes = objet% : sound objet% : file_load objet%,"sons\Tetris.mp3" objet% = objet% + 1 : m_gameover = objet% : sound objet% : file_load objet%,"sons\Musique - Game Over.mp3" objet% = objet% + 1 : m_theme = objet% : sound objet% : file_load objet%,"sons\Musique - Theme Tetris.mp3" objet% = objet% + 1 : m_highscore = objet% : sound objet% : file_load objet%,"sons\Musique - High Scores.mp3"
objet% = objet% + 1 : player_musique = objet% panel objet% : hide objet% : iter% = dll_call5("CreatePlayer",handle(player_musique),0,0,100,100) s$ = "sons\Musique - Theme Tetris.mp3" iter% = dll_call1("LoadFileIntoPlayer",adr(s$)) iter% = dll_call0("PlayPlayer") iter% = dll_call1("VolumePlayer",30)
objet%= objet% + 1 : t_musique = objet% timer t_musique : timer_interval t_musique,8300 : on_timer t_musique, lance_musique
objet%= objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale
' On détecte le changement d'état des touches on_key_down 0,t1
end
lance_musique: iter% = dll_call0("PlayPlayer") return
sub dessine_piece(num%,rot%) dim_local d_piece(3,3) dim_local i%,j%
select num% case 0 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_O(i%,j%) : next j% : next i% case 1 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_I(i%,j%) : next j% : next i% case 2 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_S(i%,j%) : next j% : next i% case 3 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_Z(i%,j%) : next j% : next i% case 4 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_L(i%,j%) : next j% : next i% case 5 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_J(i%,j%) : next j% : next i% case 6 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_T(i%,j%) : next j% : next i% end_select
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 if rot% = 1 then copie_carre(num%,i%,j%,rot%) if rot% = 2 then copie_carre(num%,3-j%,i%,rot%) if rot% = 3 then copie_carre(num%,3-i%,3-j%,rot%) if rot% = 4 then copie_carre(num%,j%,3-i%,rot%) end_if next j% next i% end_sub
sub dessine_carre(num%) dim_local c1%,c2%,c3%, k%,l%, temp1%,temp2%,temp3% c1% = couleur_piece(num%, 0) : c2% = couleur_piece(num%, 1) : c3% = couleur_piece(num%,2) for k% = 0 to h_carre-1 for l% = 0 to m_carre-1 temp1% = c1% + ind_c%*(h_carre - k%) : if temp1% > 255 then temp1% = 255 temp2% = c2% + ind_c%*(h_carre - k%) : if temp2% > 255 then temp2% = 255 temp3% = c3% + ind_c%*(h_carre - k%) : if temp3% > 255 then temp3% = 255 2d_pen_color temp1%,temp2%,temp3% if k% >= l% 2d_point k%,l% 2d_point l%,k% end_if temp1% = c1% - ind_c% * k% : if temp1% < 0 then temp1% = 0 temp2% = c2% - ind_c% * k% : if temp2% < 0 then temp2% = 0 temp3% = c3% - ind_c% * k% : if temp3% < 0 then temp3% = 0 2d_pen_color temp1%,temp2%,temp3% if k% >= l% 2d_point k%,h_carre-l% 2d_point h_carre-l%,k% end_if next l% next k% 2d_pen_color c1%,c2%,c3% : 2d_fill_color c1%,c2%,c3% 2d_rectangle m_carre, m_carre , h_carre - m_carre +1, h_carre - m_carre +1 end_sub
sub copie_carre(num%,x_dest,y_dest, rot%) 2D_target_is p_carre + num% 2D_image_copy i_temp%,0,0,h_carre,h_carre 2D_target_is p_carre+num%+7*rot% 2D_image_paste i_temp%,x_dest * h_carre_grille +1,y_dest * h_carre_grille +1 end_sub
sub vide_grille() for iter% = 0 to 9 for iter2% = 0 to 19 grille%(iter%,iter2%) = -1 next iter2% next iter% end_sub
sub trace_grille() 2D_pen_color 180,180,255 for iter% = 1 to 10 2D_line iter%*h_carre_grille, 0, iter%*h_carre_grille,20*h_carre_grille next iter% for iter% = 1 to 20 2D_line 0, iter%*h_carre_grille, 10*h_carre_grille,iter%*h_carre_grille next iter% end_sub
sub Cree_piece_suivante() p_suivante = int(rnd(6.9999)) end_sub
sub test_dep_bas()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece - 0.001) + 1 + j% temp2% = x_piece + i% if temp% = 20 then test_dep% = 0 : exit_sub if temp% >= 0 and temp2% >= 0 and temp2% <= 9 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if next j% next i%
end_sub
sub test_dep_gauche()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% -1 if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if end_if end_if next j% next i%
end_sub
sub test_rot_gauche()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece_temp(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if next j% next i%
end_sub
sub test_dep_droite()
dim_local i%,j%,temp%, temp2% test_dep% = 1 for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% +1 if temp2% > 9 then test_dep%=0 : exit_sub if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if end_if end_if next j% next i%
end_sub
sub test_rot_droite()
dim_local i%,j%,temp%, temp2% test_dep% = 1 for i% = 0 to 3 for j% = 0 to 3 if d_piece_temp(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if next j% next i%
end_sub
sub test_ligne() dim_local i%,j%,ligne%, nbligne% nbligne%=0 for i% = 0 to 3 ligne%=1 for j% = 0 to 9 if y_piece + i% < 20 if grille%(j%,y_piece + i%) < 0 then ligne% = 0 : exit_for else ligne%= 0 end_if next j% if ligne%=1 then suppr_ligne(y_piece + i%) : nbligne% = nbligne% +1 next i% if nbligne% > 0 2D_target_is a_grille1% : trace_grille() file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" select nbligne% case 1 : score% = score% + niveau% * 40 : play s1_ligne case 2 : score% = score% + niveau% * 100 : play s2_lignes case 3 : score% = score% + niveau% * 300 : play s3_lignes case 4 : score% = score% + niveau% *1200 : play s4_lignes end_select caption a_score%,right$("000000" + str$(score%),6) nb_lignes% = nb_lignes% + nbligne% caption a_nb_lignes%,right$("000000" + str$(nb_lignes%),6) end_if end_sub
sub suppr_ligne(l%) dim_local i%,j% 2D_target_is a_grille1% 2D_image_copy i_temp%,0,0,10*h_carre_grille,l%*h_carre_grille 2D_image_paste i_temp%,0,1 * h_carre_grille for i% = l% to 1 step -1 for j% = 0 to 9 grille%(j%,i%) = grille%(j%,i%-1) next j% next i% for j% = 0 to 9 grille%(j%,0) = -1 next j% end_sub
sub bloque_piece() dim_local i%,j%,s$ for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 and y_piece >= 0 if (int(y_piece)+j%) < 20 then grille%(x_piece + i%, int(y_piece)+j%) = piece end_if next j% next i% if debug_mode =1 clear debug_windows +1 item_add debug_windows +1,"XX | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | for i% = 0 to 19 s$=right$("0" + str$(i%),2) + " | " for j%=0 to 9 s$=s$ + right$(" " + str$(grille%(j%,i%)),2) + " | " next j% item_add debug_windows +1,s$ next i% set_focus 0 end_if for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 2D_target_is p_carre + piece 2D_image_copy i_temp%,0,0,h_carre,h_carre 2D_target_is a_grille1% 2D_image_paste i_temp%,(x_piece+i%) * h_carre_grille +1,int(y_piece+j%) * h_carre_grille +1 end_if next j% next i% file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" end_sub
boucle_principale:
timer_off t_principal off_key_down 0 set_focus 0 if esc = 1 if message_confirmation_yes_no ("Voulez-vous vraiment quitter le jeu ?") = 1 then goto quitte esc = 0 end_if
' dessin d'une pièce if piece = -1 sprite_hide sprite_piece : piece = p_suivante x_piece = x_initial : y_piece = y_initial : rotation% = 1 Cree_piece_suivante() 2d_target_is p_carre+piece+7 2d_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% sprite_position sprite_piece,x_initial * h_carre_grille,y_initial * h_carre_grille sprite_show sprite_piece 2d_target_is p_carre+p_suivante+7 2d_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille 2d_target_is a_suivante% 2d_image_paste i_temp%,0,0 2d_target_is 0 select piece case 0 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_O(iter%,iter2%) : next iter2% : next iter% case 1 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_I(iter%,iter2%) : next iter2% : next iter% case 2 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_S(iter%,iter2%) : next iter2% : next iter% case 3 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_Z(iter%,iter2%) : next iter2% : next iter% case 4 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_L(iter%,iter2%) : next iter2% : next iter% case 5 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_J(iter%,iter2%) : next iter2% : next iter% case 6 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_T(iter%,iter2%) : next iter2% : next iter% end_select end_if y_piece = y_piece + v_dep
if tfg = 1 test_dep_gauche() if test_dep%= 1 x_piece = x_piece - 1 play s_dep_lateral else play s_dep_impossible end_if tfg = 0 end_if
' if tfh = 1 ' test_dep% = 1 ' for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece_temp(3-iter2%,iter%) = d_piece(iter%,iter2%) : next iter2% : next iter% ' test_rot_gauche() ' if test_dep%= 1 ' rotation%=rotation%+1 ' if rotation%=5 then rotation% = 1 ' 2D_target_is p_carre+piece+7*rotation% ' 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille ' sprite_image_load sprite_piece, i_temp% ' play s_rotation ' for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = d_piece_temp(iter%,iter2%) : next iter2% : next iter% ' else ' play s_dep_impossible ' end_if ' tfh = 0 ' end_if
if tfd = 1 test_dep_droite() if test_dep%= 1 x_piece = x_piece + 1 play s_dep_lateral else play s_dep_impossible end_if tfd = 0 end_if
if esp = 1 test_dep% = 1 for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece_temp(iter2%,3-iter%) = d_piece(iter%,iter2%) : next iter2% : next iter% test_rot_droite() if test_dep%= 1 rotation%=rotation%-1 if rotation%=0 then rotation% = 4 2D_target_is p_carre+piece+7*rotation% 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% play s_rotation for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = d_piece_temp(iter%,iter2%) : next iter2% : next iter% else play s_dep_impossible end_if esp = 0 end_if
if tfb = 1 then play s_chutte chutte: test_dep_bas() if test_dep%=0 play s_verouillee if y_piece < 0 goto quitte else y_piece = int(y_piece) bloque_piece() tfb = 0 test_ligne() piece = -1 end_if play s_verouillee else sprite_position sprite_piece,x_piece * h_carre_grille,y_piece * h_carre_grille end_if if tfb = 1 then y_piece = y_piece + v_dep : wait 10 : goto chutte temps% = 80 - niveau% * 2 : v_dep = 1 - (0.85 - niveau% / 10) : timer_interval t_principal,temps% if int(nb_lignes% / 30) + 1 > niveau% then play s_niveau niveau% = int(nb_lignes% / 30) + 1 : caption a_niveau%,right$("000000" + str$(niveau%),6) timer_on t_principal on_key_down 0,t1 return
' ****** Gestion du clavier
t1: if key_down_code=cesp then esp=1 if key_down_code=cesc then esc=1 if key_down_code=ctfg then tfg=1 if key_down_code=ctfh then tfh=1 if key_down_code=ctfd then tfd=1 if key_down_code=ctfb then tfb=1 return
quitte: timer_off_all iter% = dll_call0("PausePlayer") : wait 50 play s_gameover : wait 300 play m_gameover Message "Partie terminée" wait 4000 iter% = dll_call1("KillProcessByHandle",handle(0)) dll_off end | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Dim 22 Fév 2015 - 11:59 | |
| En rallumant mes neurones ce matin, j'ai trouvé la solution pour éviter le problème d'affichage quand on fait tourner la pièce. C'est un mécanisme que j'ai déjà utilisé dans plusieurs jeux, mais comme je le disais à Minibug, je crois, j'oublie souvent mes solutions ... Là, graphiquement, je pense que c'est correct maintenant. - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 ' Déplacement par les flèches droite / gauche ' Faire tomber la pièce: Flèche vers le bas ' Tourner la pièce : Espace
' Déclaration des sous-programmes évenementiels label boucle_principale, quitte, t1, chutte, lance_musique
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 610 dim h_fenetre : h_fenetre = 700
' variables de la grille dim marge_grille : marge_grille =15 : ' marge entre la fenêtre et la grille dim h_carre_grille : h_carre_grille = 30 : ' taille d'une case de la grille
' variables d'un carré élementaire dim h_carre : h_carre = h_carre_grille - 1 : ' taille d'un carré de base dim m_carre : m_carre = int(h_carre / 8) : ' taille la bordure du carré pour le relief
' définition des pièces dim couleur_piece(6,3) dim d_piece(3,3) : ' contient les "carrés" occupés par la pièce dans son état de rotation actuelle dim d_piece_temp(3,3) : ' copie temporaire de la piece pour les rotations
' pièce O dim piece_O(3,3) piece_O(0,0) = 0 : piece_O(0,1) = 0: piece_O(0,2) = 0: piece_O(0,3) = 0 piece_O(1,0) = 0 : piece_O(1,1) = 1: piece_O(1,2) = 1: piece_O(1,3) = 0 piece_O(2,0) = 0 : piece_O(2,1) = 1: piece_O(2,2) = 1: piece_O(2,3) = 0 piece_O(3,0) = 0 : piece_O(3,1) = 0: piece_O(3,2) = 0: piece_O(3,3) = 0
couleur_piece(0,0) = 220 : couleur_piece(0,1) = 220 : couleur_piece(0,2) = 0
' pièce I dim piece_I(3,3) piece_I(0,0) = 0 : piece_I(0,1) = 0: piece_I(0,2) = 0: piece_I(0,3) = 0 piece_I(1,0) = 1 : piece_I(1,1) = 1: piece_I(1,2) = 1: piece_I(1,3) = 1 piece_I(2,0) = 0 : piece_I(2,1) = 0: piece_I(2,2) = 0: piece_I(2,3) = 0 piece_I(3,0) = 0 : piece_I(3,1) = 0: piece_I(3,2) = 0: piece_I(3,3) = 0
couleur_piece(1,0) = 100 : couleur_piece(1,1) = 220 : couleur_piece(1,2) = 220
' pièce S dim piece_S(3,3) piece_S(0,0) = 0 : piece_S(0,1) = 0: piece_S(0,2) = 0: piece_S(0,3) = 0 piece_S(1,0) = 0 : piece_S(1,1) = 0: piece_S(1,2) = 1: piece_S(1,3) = 1 piece_S(2,0) = 0 : piece_S(2,1) = 1: piece_S(2,2) = 1: piece_S(2,3) = 0 piece_S(3,0) = 0 : piece_S(3,1) = 0: piece_S(3,2) = 0: piece_S(3,3) = 0
couleur_piece(2,0) = 0 : couleur_piece(2,1) = 220 : couleur_piece(2,2) = 0
' pièce Z dim piece_Z(3,3) piece_Z(0,0) = 0 : piece_Z(0,1) = 0: piece_Z(0,2) = 0: piece_Z(0,3) = 0 piece_Z(1,0) = 0 : piece_Z(1,1) = 1: piece_Z(1,2) = 1: piece_Z(1,3) = 0 piece_Z(2,0) = 0 : piece_Z(2,1) = 0: piece_Z(2,2) = 1: piece_Z(2,3) = 1 piece_Z(3,0) = 0 : piece_Z(3,1) = 0: piece_Z(3,2) = 0: piece_Z(3,3) = 0
couleur_piece(3,0) = 220 : couleur_piece(3,1) = 0 : couleur_piece(3,2) = 0
' pièce L dim piece_L(3,3) piece_L(0,0) = 0 : piece_L(0,1) = 0: piece_L(0,2) = 0: piece_L(0,3) = 0 piece_L(1,0) = 0 : piece_L(1,1) = 1: piece_L(1,2) = 1: piece_L(1,3) = 1 piece_L(2,0) = 0 : piece_L(2,1) = 1: piece_L(2,2) = 0: piece_L(2,3) = 0 piece_L(3,0) = 0 : piece_L(3,1) = 0: piece_L(3,2) = 0: piece_L(3,3) = 0
couleur_piece(4,0) = 220 : couleur_piece(4,1) = 120 : couleur_piece(4,2) = 0
' pièce J dim piece_J(3,3) piece_J(0,0) = 0 : piece_J(0,1) = 0: piece_J(0,2) = 0: piece_J(0,3) = 0 piece_J(1,0) = 0 : piece_J(1,1) = 1: piece_J(1,2) = 1: piece_J(1,3) = 1 piece_J(2,0) = 0 : piece_J(2,1) = 0: piece_J(2,2) = 0: piece_J(2,3) = 1 piece_J(3,0) = 0 : piece_J(3,1) = 0: piece_J(3,2) = 0: piece_J(3,3) = 0
couleur_piece(5,0) = 0 : couleur_piece(5,1) = 0 : couleur_piece(5,2) = 220
' pièce T dim piece_T(3,3) piece_T(0,0) = 0 : piece_T(0,1) = 0: piece_T(0,2) = 0: piece_T(0,3) = 0 piece_T(1,0) = 0 : piece_T(1,1) = 1: piece_T(1,2) = 1: piece_T(1,3) = 1 piece_T(2,0) = 0 : piece_T(2,1) = 0: piece_T(2,2) = 1: piece_T(2,3) = 0 piece_T(3,0) = 0 : piece_T(3,1) = 0: piece_T(3,2) = 0: piece_T(3,3) = 0
couleur_piece(6,0) = 220 : couleur_piece(6,1) = 0 : couleur_piece(6,2) = 220
' dessin des carrés de couleur dim p_carre : ' Picture des carré pour la pièce 0, 6 autres objets seront créés pour les autres carés de base ' On créé ensuite 7 autres pictures pour stocker les différentes pièces ' On créera les pièces tournées à 90°, 180° et -90° à la suite dim i_temp% : ' Image servant à faire la copie du carré correspondant à la pièce
' définition des noms d'obhets dim a_grille1% : ' picture ou l'on crée la grille comme fond et ou on mettra les blocs inactifs dim a_grille2% : ' nom de la grille 2 sur laquelle on affiche les sprites de la pièce et le fond avec les blocs figés dim a_suivante% : ' nom du "picture" où l'on affiche la pièce suivante dim a_score% : ' nom de l'affichage du score dim a_lignes% : ' nom de l'affichage du nombre de lignes faites dim a_nb_lignes%: ' affichage du nombre de lignes faites dim a_niveau% : ' affichage du niveau actuel
' définition des variables du jeu dim iter%, iter2% : ' Compteurs d'itérations dim objet%: objet% = 0 : ' Compteur d'objets créés dim p_suivante : ' prochaine pièce qui sera affichée dim piece : ' Numero de la pièce active. Si la pièce vaut -1, prendre la pièce suivante dim x_piece, y_piece : ' Coordonnées de la pièce courante en cases dim x_initial, y_initial : ' Coordonnées initiale d'une nouvelle pièce x_initial = 4 : y_initial = -4 dim diff_couleur : diff_couleur = 100 : ' Ombres et lumière dim ind_c% : ind_c% = int(diff_couleur / h_carre) : ' variation de lumiere par pas dim temps% : temps% = 75 : ' temps d'une boucle principale dim v_dep : v_dep = 0.2 : ' Vitesse de descente de la pièce dim t_principal : ' Numéro du timer principal dim t_musique : ' ' Timer pour relancer la musique dim sprite_piece : sprite_piece = 1 : ' Le sprite de la pièce !! dim test_dep% : ' Vaut 1 si le déplacement est possible dim grille%(9,19) : ' Mémorise les carrés des pièces dans la grille dim rotation% : ' Indique si la pièce est tournée dim nb_lignes%: ' Le compteur de ligne dim niveau% : ' Niveau actuel dim score% : ' Le score dim player_musique: ' Objet qui jouera la musique dim s$ : ' chaine de caractères temporaire
' définitions des sons dim s_dep_impossible : ' mouvement impossible dim s_dep_lateral : ' deplacement à droit ou a gauche dim s_rotation : ' tourne la pièce de 90° dim s_gameover : ' son de fin de partie dim s_verouillee : ' la pièce est bloquée (arrivée, on passe à la pièce suivante) dim s_niveau : ' passage au niveau supérieur dim s_chutte : ' son de la chutte d'une pièce quand on appuie sur espace dim s1_ligne, s2_lignes, s3_lignes, s4_lignes : ' sons de 1 à 4 lignes complètes dim m_gameover : ' Musique après la fin de partie dim m_theme : ' Musique durant le jeu dim m_highscore : ' Musique sur l'ecran des high_score
dim grille_active% : grille_active%=2 : ' Définit la grille de travail
' ****************************** COMMANDES CLAVIER ************************** dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:... 27 * dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> DEPLACER À GAUCHE:...... 37 * dim tfh,ctfh : ctfh=38 : ' * FLÈCHE HAUTE ==> INUTILISEE.............. 38 * dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> DEPLACER À DROITE:...... 39 * dim tfb,ctfb : ctfb=40 : ' * FLÈCHE BASSE ==> FAIRE TOMBER LA PIECE... 40 * dim esp,cesp : cesp=32 : ' * ESPACE ==> PIVOTER À DROITE........ 32 * ' ***************************************************************************
' initialisation de la fenêtre de jeu width 0, l_fenetre : height 0,h_fenetre
objet% = objet% + 1 : a_grille1% = objet% picture a_grille1% : hide a_grille1%: left a_grille1%, marge_grille : top a_grille1%, marge_grille width a_grille1%, 10*h_carre_grille : height a_grille1%,20*h_carre_grille + 300 color a_grille1%,200, 150, 150 : 2D_target_is a_grille1% : trace_grille() file_save a_grille1%,"fond.bmp"
objet% = objet% + 1: a_grille2% = objet% scene2D a_grille2% : left a_grille2%, marge_grille : top a_grille2%, -300 width a_grille2%, 10*h_carre_grille : height a_grille2%,20*h_carre_grille + 300 file_load a_grille2%,"fond.bmp" sprite sprite_piece
objet% = objet% + 1: i_temp% = objet% : image i_temp% : top objet%, -800 : hide i_temp%
objet% = objet% + 1 : picture objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, marge_grille : width objet%,250: height objet%,172 : file_load objet%,titre.jpg
objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 3* marge_grille + 172 : width objet%,250: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Pièce suivante :"
objet% = objet% + 1 : a_suivante% = objet% : picture objet% : left objet%, 2*marge_grille + 12 * h_carre_grille top objet%, 4* marge_grille + 202 : width objet%,4* h_carre_grille: height objet%, 4* h_carre_grille
' Création des 7 pièces dans les 4 directions
for iter% = 0 to 6
objet% = objet% + 1 : if iter%= 0 then p_carre = objet%
picture objet% : 2d_target_is objet% : hide objet% top objet%, -400: width objet%, h_carre_grille : height objet%, h_carre_grille dessine_carre(iter%)
picture objet%+7 : hide objet% +7 width objet%+7, 4*h_carre_grille: height objet%+7, 4*h_carre_grille : top objet%+7, -400 color objet%+7,0,0,0: 2d_target_is objet%+7 : dessine_piece(iter%,1)
picture objet%+14 : hide objet% + 14 width objet%+14, 4*h_carre_grille: height objet%+14, 4*h_carre_grille: top objet%+14, -400 color objet%+14,0,0,0: 2d_target_is objet%+14 : dessine_piece(iter%,2)
picture objet%+21 : hide objet% + 21 width objet%+21, 4*h_carre_grille: height objet%+21, 4*h_carre_grille : top objet%+21, -400 color objet%+21,0,0,0: 2d_target_is objet%+21 : dessine_piece(iter%,3)
picture objet%+28 : hide objet% + 28 width objet%+28, 4*h_carre_grille: height objet%+28, 4*h_carre_grille: top objet%+28, -400 color objet%+28,0,0,0: 2d_target_is objet%+28 : dessine_piece(iter%,4)
next iter%
objet% = objet% + 28 piece = -1 : vide_grille() : Cree_piece_suivante() dll_on "kgf.dll"
' Debug Windows dim debug_mode : debug_mode = 0 : ' Active ou non le mode debug dim debug_windows if debug_mode = 1 objet% = objet% + 1 : debug_windows = objet% form debug_windows : command_target_is debug_windows left debug_windows, 700 : height debug_windows,700 : width debug_windows, 250 objet% = objet% + 1 : list objet% : width objet%, 220 height objet%, 650 command_target_is 0 : set_focus 0 end_if
' Demarrage du jeu, on lance les cycle du jeu au travers d'un timer qui va rythmer les actions
score% = 0 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 12* marge_grille + 242 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Score :"
objet% = objet% + 1 : a_score% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 12* marge_grille + 242 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000000"
nb_lignes% = 0 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 14* marge_grille + 272 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Lignes :"
objet% = objet% + 1 : a_nb_lignes% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 14* marge_grille + 272 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000000"
niveau% = 1 : objet% = objet% + 1 : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille top objet%, 16* marge_grille + 302 : width objet%,130: height objet%,30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"Niveau :"
objet% = objet% + 1 : a_niveau% = objet% : alpha objet% : left objet%, 2*marge_grille + 10 * h_carre_grille + 140 top objet%, 16* marge_grille + 302 : width objet%,130: height objet%, 30 font_size objet%,20 : font_name objet%,"Times news roman" : font_bold objet% caption objet%,"000001"
' Chargement des sons objet% = objet% + 1 : s_dep_impossible = objet% : sound objet% : file_load objet%,"sons\Deplacement impossible.mp3" objet% = objet% + 1 : s_dep_lateral = objet% : sound objet% : file_load objet%,"sons\Deplacement lateral.mp3" objet% = objet% + 1 : s_rotation = objet% : sound objet% : file_load objet%,"sons\Rotation piece.mp3" objet% = objet% + 1 : s_gameover = objet% : sound objet% : file_load objet%,"sons\Game Over.mp3" objet% = objet% + 1 : s_verouillee = objet% : sound objet% : file_load objet%,"sons\Piece verouillee.mp3" objet% = objet% + 1 : s_niveau = objet% : sound objet% : file_load objet%,"sons\Niveau superieur.mp3" objet% = objet% + 1 : s_chutte = objet% : sound objet% : file_load objet%,"sons\Chutte.mp3" objet% = objet% + 1 : s1_ligne = objet% : sound objet% : file_load objet%,"sons\Simple Ligne.mp3" objet% = objet% + 1 : s2_lignes = objet% : sound objet% : file_load objet%,"sons\Double ligne.mp3" objet% = objet% + 1 : s3_lignes = objet% : sound objet% : file_load objet%,"sons\Triple ligne.mp3" objet% = objet% + 1 : s4_lignes = objet% : sound objet% : file_load objet%,"sons\Tetris.mp3" objet% = objet% + 1 : m_gameover = objet% : sound objet% : file_load objet%,"sons\Musique - Game Over.mp3" objet% = objet% + 1 : m_theme = objet% : sound objet% : file_load objet%,"sons\Musique - Theme Tetris.mp3" objet% = objet% + 1 : m_highscore = objet% : sound objet% : file_load objet%,"sons\Musique - High Scores.mp3"
objet% = objet% + 1 : player_musique = objet% panel objet% : hide objet% : iter% = dll_call5("CreatePlayer",handle(player_musique),0,0,100,100) s$ = "sons\Musique - Theme Tetris.mp3" iter% = dll_call1("LoadFileIntoPlayer",adr(s$)) iter% = dll_call0("PlayPlayer") iter% = dll_call1("VolumePlayer",30)
objet%= objet% + 1 : t_musique = objet% timer t_musique : timer_interval t_musique,8300 : on_timer t_musique, lance_musique
objet%= objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale
' On détecte le changement d'état des touches on_key_down 0,t1
end
lance_musique: iter% = dll_call0("PlayPlayer") return
sub dessine_piece(num%,rot%) dim_local d_piece(3,3) dim_local i%,j%
select num% case 0 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_O(i%,j%) : next j% : next i% case 1 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_I(i%,j%) : next j% : next i% case 2 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_S(i%,j%) : next j% : next i% case 3 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_Z(i%,j%) : next j% : next i% case 4 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_L(i%,j%) : next j% : next i% case 5 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_J(i%,j%) : next j% : next i% case 6 : for i%= 0 to 3 : for j% = 0 to 3 : d_piece(i%,j%) = piece_T(i%,j%) : next j% : next i% end_select
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 if rot% = 1 then copie_carre(num%,i%,j%,rot%) if rot% = 2 then copie_carre(num%,3-j%,i%,rot%) if rot% = 3 then copie_carre(num%,3-i%,3-j%,rot%) if rot% = 4 then copie_carre(num%,j%,3-i%,rot%) end_if next j% next i% end_sub
sub dessine_carre(num%) dim_local c1%,c2%,c3%, k%,l%, temp1%,temp2%,temp3% c1% = couleur_piece(num%, 0) : c2% = couleur_piece(num%, 1) : c3% = couleur_piece(num%,2) for k% = 0 to h_carre-1 for l% = 0 to m_carre-1 temp1% = c1% + ind_c%*(h_carre - k%) : if temp1% > 255 then temp1% = 255 temp2% = c2% + ind_c%*(h_carre - k%) : if temp2% > 255 then temp2% = 255 temp3% = c3% + ind_c%*(h_carre - k%) : if temp3% > 255 then temp3% = 255 2d_pen_color temp1%,temp2%,temp3% if k% >= l% 2d_point k%,l% 2d_point l%,k% end_if temp1% = c1% - ind_c% * k% : if temp1% < 0 then temp1% = 0 temp2% = c2% - ind_c% * k% : if temp2% < 0 then temp2% = 0 temp3% = c3% - ind_c% * k% : if temp3% < 0 then temp3% = 0 2d_pen_color temp1%,temp2%,temp3% if k% >= l% 2d_point k%,h_carre-l% 2d_point h_carre-l%,k% end_if next l% next k% 2d_pen_color c1%,c2%,c3% : 2d_fill_color c1%,c2%,c3% 2d_rectangle m_carre, m_carre , h_carre - m_carre +1, h_carre - m_carre +1 end_sub
sub copie_carre(num%,x_dest,y_dest, rot%) 2D_target_is p_carre + num% 2D_image_copy i_temp%,0,0,h_carre,h_carre 2D_target_is p_carre+num%+7*rot% 2D_image_paste i_temp%,x_dest * h_carre_grille +1,y_dest * h_carre_grille + 1 end_sub
sub vide_grille() for iter% = 0 to 9 for iter2% = 0 to 19 grille%(iter%,iter2%) = -1 next iter2% next iter% end_sub
sub trace_grille() 2D_pen_color 180,180,255 for iter% = 1 to 10 2D_line iter%*h_carre_grille, 0, iter%*h_carre_grille,20*h_carre_grille + 300 next iter% for iter% = 1 to 20 2D_line 0, iter%*h_carre_grille + 300, 10*h_carre_grille,iter%*h_carre_grille + 300 next iter% end_sub
sub Cree_piece_suivante() p_suivante = int(rnd(6.9999)) end_sub
sub test_dep_bas()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece - 0.001) + 1 + j% temp2% = x_piece + i% if temp% = 20 then test_dep% = 0 : exit_sub if temp% >= 0 and temp2% >= 0 and temp2% <= 9 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if next j% next i%
end_sub
sub test_dep_gauche()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% -1 if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if end_if end_if next j% next i%
end_sub
sub test_rot_gauche()
dim_local i%,j%,temp%, temp2% test_dep% = 1
for i% = 0 to 3 for j% = 0 to 3 if d_piece_temp(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if next j% next i%
end_sub
sub test_dep_droite()
dim_local i%,j%,temp%, temp2% test_dep% = 1 for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% +1 if temp2% > 9 then test_dep%=0 : exit_sub if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% <= 19 if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if end_if end_if next j% next i%
end_sub
sub test_rot_droite()
dim_local i%,j%,temp%, temp2% test_dep% = 1 for i% = 0 to 3 for j% = 0 to 3 if d_piece_temp(i%,j%) = 1 temp% = int(y_piece) + j% temp2% = x_piece + i% if temp2% < 0 or temp2% > 9 then test_dep%=0 : exit_sub if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if if temp% <> y_piece + j% temp% = int(y_piece) + j% +1 if temp% > 19 then test_dep%=0 : exit_sub if temp% >= 0 if grille%(temp2%,temp%)>=0 then test_dep%=0 : exit_sub end_if end_if end_if next j% next i%
end_sub
sub test_ligne() dim_local i%,j%,ligne%, nbligne% nbligne%=0 for i% = 0 to 3 ligne%=1 for j% = 0 to 9 if y_piece + i% < 20 if grille%(j%,y_piece + i%) < 0 then ligne% = 0 : exit_for else ligne%= 0 end_if next j% if ligne%=1 then suppr_ligne(y_piece + i%) : nbligne% = nbligne% +1 next i% if nbligne% > 0 2D_target_is a_grille1% : trace_grille() file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" select nbligne% case 1 : score% = score% + niveau% * 40 : play s1_ligne case 2 : score% = score% + niveau% * 100 : play s2_lignes case 3 : score% = score% + niveau% * 300 : play s3_lignes case 4 : score% = score% + niveau% *1200 : play s4_lignes end_select caption a_score%,right$("000000" + str$(score%),6) nb_lignes% = nb_lignes% + nbligne% caption a_nb_lignes%,right$("000000" + str$(nb_lignes%),6) end_if end_sub
sub suppr_ligne(l%) dim_local i%,j% 2D_target_is a_grille1% 2D_image_copy i_temp%,0,300,10*h_carre_grille,l%*h_carre_grille + 300 2D_image_paste i_temp%,0,1 * h_carre_grille + 300 for i% = l% to 1 step -1 for j% = 0 to 9 grille%(j%,i%) = grille%(j%,i%-1) next j% next i% for j% = 0 to 9 grille%(j%,0) = -1 next j% end_sub
sub bloque_piece() dim_local i%,j%,s$ for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 and y_piece >= 0 if (int(y_piece)+j%) < 20 then grille%(x_piece + i%, int(y_piece)+j%) = piece end_if next j% next i% if debug_mode =1 clear debug_windows +1 item_add debug_windows +1,"XX | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | for i% = 0 to 19 s$=right$("0" + str$(i%),2) + " | " for j%=0 to 9 s$=s$ + right$(" " + str$(grille%(j%,i%)),2) + " | " next j% item_add debug_windows +1,s$ next i% set_focus 0 end_if for i% = 0 to 3 for j% = 0 to 3 if d_piece(i%,j%) = 1 2D_target_is p_carre + piece 2D_image_copy i_temp%,0,0,h_carre,h_carre 2D_target_is a_grille1% 2D_image_paste i_temp%,(x_piece+i%) * h_carre_grille +1,int(y_piece+j%) * h_carre_grille + 301 end_if next j% next i% file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" end_sub
boucle_principale:
timer_off t_principal off_key_down 0 set_focus 0 if esc = 1 if message_confirmation_yes_no ("Voulez-vous vraiment quitter le jeu ?") = 1 then goto quitte esc = 0 end_if
' dessin d'une pièce if piece = -1 sprite_hide sprite_piece : piece = p_suivante x_piece = x_initial : y_piece = y_initial : rotation% = 1 Cree_piece_suivante() 2d_target_is p_carre+piece+7 2d_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% sprite_position sprite_piece,x_initial * h_carre_grille,y_initial * h_carre_grille + 300 sprite_show sprite_piece 2d_target_is p_carre+p_suivante+7 2d_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille 2d_target_is a_suivante% 2d_image_paste i_temp%,0,0 2d_target_is 0 select piece case 0 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_O(iter%,iter2%) : next iter2% : next iter% case 1 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_I(iter%,iter2%) : next iter2% : next iter% case 2 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_S(iter%,iter2%) : next iter2% : next iter% case 3 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_Z(iter%,iter2%) : next iter2% : next iter% case 4 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_L(iter%,iter2%) : next iter2% : next iter% case 5 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_J(iter%,iter2%) : next iter2% : next iter% case 6 : for iter%= 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = piece_T(iter%,iter2%) : next iter2% : next iter% end_select end_if y_piece = y_piece + v_dep
if tfg = 1 test_dep_gauche() if test_dep%= 1 x_piece = x_piece - 1 play s_dep_lateral else play s_dep_impossible end_if tfg = 0 end_if
' if tfh = 1 ' test_dep% = 1 ' for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece_temp(3-iter2%,iter%) = d_piece(iter%,iter2%) : next iter2% : next iter% ' test_rot_gauche() ' if test_dep%= 1 ' rotation%=rotation%+1 ' if rotation%=5 then rotation% = 1 ' 2D_target_is p_carre+piece+7*rotation% ' 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille ' sprite_image_load sprite_piece, i_temp% ' play s_rotation ' for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = d_piece_temp(iter%,iter2%) : next iter2% : next iter% ' else ' play s_dep_impossible ' end_if ' tfh = 0 ' end_if
if tfd = 1 test_dep_droite() if test_dep%= 1 x_piece = x_piece + 1 play s_dep_lateral else play s_dep_impossible end_if tfd = 0 end_if
if esp = 1 test_dep% = 1 for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece_temp(iter2%,3-iter%) = d_piece(iter%,iter2%) : next iter2% : next iter% test_rot_droite() if test_dep%= 1 rotation%=rotation%-1 if rotation%=0 then rotation% = 4 2D_target_is p_carre+piece+7*rotation% 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille sprite_image_load sprite_piece, i_temp% play s_rotation for iter% = 0 to 3 : for iter2% = 0 to 3 : d_piece(iter%,iter2%) = d_piece_temp(iter%,iter2%) : next iter2% : next iter% else play s_dep_impossible end_if esp = 0 end_if
if tfb = 1 then play s_chutte chutte: test_dep_bas() if test_dep%=0 play s_verouillee if y_piece < 0 goto quitte else y_piece = int(y_piece) bloque_piece() tfb = 0 test_ligne() piece = -1 end_if play s_verouillee else sprite_position sprite_piece,x_piece * h_carre_grille,y_piece * h_carre_grille + 300 end_if if tfb = 1 then y_piece = y_piece + v_dep : wait 10 : goto chutte temps% = 80 - niveau% * 2 : v_dep = 1 - (0.85 - niveau% / 10) : timer_interval t_principal,temps% if int(nb_lignes% / 30) + 1 > niveau% then play s_niveau niveau% = int(nb_lignes% / 30) + 1 : caption a_niveau%,right$("000000" + str$(niveau%),6) timer_on t_principal on_key_down 0,t1 return
' ****** Gestion du clavier
t1: if key_down_code=cesp then esp=1 if key_down_code=cesc then esc=1 if key_down_code=ctfg then tfg=1 if key_down_code=ctfh then tfh=1 if key_down_code=ctfd then tfd=1 if key_down_code=ctfb then tfb=1 return
quitte: timer_off_all iter% = dll_call0("PausePlayer") : wait 50 play s_gameover : wait 300 play m_gameover Message "Partie terminée" wait 4000 iter% = dll_call1("KillProcessByHandle",handle(0)) dll_off end Plus qu'à expliquer un peu tout ça dans l'article. Sinon Ygeronimi, tous les jeux qui viennent d'être fait (en dehors du Tetris), tu vas les rajouter dans les téléchargements du mag (ça fait quelques trucs sympa) ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tetris Dim 22 Fév 2015 - 13:51 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Dim 22 Fév 2015 - 14:52 | |
| Dans ce cas, je vais rajouter une petite procédure d'initialisation | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Dim 22 Fév 2015 - 15:47 | |
| Hum, non en fait, j'ai regardé, je ne comprends pas ce qui ce passe quand tu le fait. A priori, l'initialisation a bien lieu... | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 22 Fév 2015 - 15:52 | |
| - Jicehel a écrit:
- Sinon Ygeronimi, tous les jeux qui viennent d'être fait (en dehors du Tetris), tu vas les rajouter dans les téléchargements du mag (ça fait quelques trucs sympa) ?
Je le répète, je peux tout mettre sur le site ou presque. Pour ajouter un jeu, une sub ou ..... l' auteur fait un zip qu' il place sur mon webdav. Dans le zip (cas d' un programme ) il faut que tout y soit pour que le soit executable ( Sources, images) + un petit fichier *.txt style "lisez moi" ( vous savez, c' est celui que personne ne lit) Bref le seul élément qui peut être absent c' est la dll de Klaus mais en spécifiant qu' il en a besoin et le lieu où l' utilisateur peut la télécharger. Dans le cas du Tétris, ou du Taquin, j' ai lu que vous souhaitiez faire des articles sur ces jeux. Donc, je pense que leur publication devrait se faire en même temps que celle des articles. Pour l' "âne rouge", j' ai peur que l' on finisse par remplir un asile psychiatrique en très peu de temps et que l' on finisse avec un procès du ministère de la santé. | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Dim 22 Fév 2015 - 16:02 | |
| mdr Mais il est très bien (dur, mais très bien) | |
| | | papydall
Nombre de messages : 7006 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tetris Dim 22 Fév 2015 - 16:42 | |
| On finira par en trouver plus coriace ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tetris Dim 22 Fév 2015 - 19:57 | |
| @Jicehel, - Citation :
- Quand je transforme en application (exe) la piste n'est pas vierge (il reste plein d'objets)
Ne cherche pas, j'ai recommencé la transformation du code.bas en application exe et tout va bien, il y a certainement eu un incident la première fois que je l'ai fait. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tetris Dim 22 Fév 2015 - 20:24 | |
| Ah tant mieux, ça me rassure, je ne voyais vraiment pas pourquoi et je n'arrivais pas à le reproduire... Content que ça marche bien. | |
| | | Contenu sponsorisé
| Sujet: Re: Tetris | |
| |
| | | | Tetris | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |