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 |
|
| | Remise à la programmation - je clignote encore ... | |
| | |
Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Remise à la programmation - je clignote encore ... Ven 13 Fév 2015 - 17:29 | |
| Bonjour, Je voulais commencer un petit Tétris car ça manque à la collection (sauf erreur de ma part). Le jeu est loin d'être fini, mais j'ai commencé à créer les pièces, l'affichage et la descente automatique (ce n'est pas le plus difficile ...) , mais voilà, comme souvent, je clignote. Je voudrais une solution propre pour que cela s'affiche correctement sans clignotement. Je lance donc un défit à toute notre petite communauté pour voir celui qui me trouvera le truc le plus propre et le plus malin pour avoir un affichage fluide et sans clignotement... Source de base à modifier: - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 '
' Déclaration des sous-programmes évenementiels label boucle_principale
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 600 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)
' 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 de la pièce 0, 6 autres objets seront créés pour stockés les carrés des différentes pièces dim i_temp% : ' Image servant à faire la copie du carré correspondant à la pièce
' définition des noms d'obhets dim a_grille% : ' nom de la grille sur laquelle on affiche les pièces dim a_suivante% : ' nom de l'endroit ou 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
' 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% = 100 : ' temps d'une boucle principale dim v_dep : v_dep = 0.25 : ' Vitesse de descente de la pièce dim t_principal : ' Numéro du timer principal
' initialisation de la fenêtre de jeu width 0, l_fenetre : height 0,h_fenetre objet% = objet% + 1: a_grille% = objet% picture a_grille% : left a_grille%, marge_grille : top a_grille%, marge_grille width a_grille%, 10*h_carre_grille : height a_grille%,20*h_carre_grille color a_grille%,200, 150, 150 : trace_grille()
objet% = objet% + 1: i_temp% = objet% : image i_temp%
' Création des 7 carrés + carré 'vide' 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%) next iter% objet% = objet% + 1 : picture objet% : 2d_target_is objet% top objet%, -400 : width objet%, h_carre_grille : height objet%, h_carre_grille : color objet%,200, 150, 150 piece = -1 objet% = objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale
end
sub dessine_piece(num%,x%,y%) 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 y%+j% >= 0 then copie_carre(num%,x%+i%,y%+j%) end_if next j% next i% end_sub
sub efface_piece(num%,x%,y%) 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 y%+j% >= 0 then copie_carre(7,x%+i%,y%+j%) 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) 2D_target_is p_carre + num% 2D_image_copy i_temp%,0,0,h_carre,h_carre 2D_target_is a_grille% 2D_image_paste i_temp%,x_dest * h_carre_grille +1,y_dest * h_carre_grille +1 end_sub
sub trace_grille() 2D_target_is a_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
boucle_principale:
timer_off t_principal
' dessin d'une pièce if piece = -1 piece = p_suivante x_piece = x_initial : y_piece = y_initial Cree_piece_suivante() end_if efface_piece(piece,x_piece,y_piece) y_piece = y_piece + v_dep dessine_piece(piece,x_piece,y_piece) if y_piece=19 then piece = -1 timer_on t_principal
return PS: Le jeu n'est pas jouable, on est d'accord. Là, ce sont juste des pièces qui descendent... Je continuerais le jeu une fois que l'affichage sera bien. | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Remise à la programmation - je clignote encore ... Ven 13 Fév 2015 - 17:37 | |
| bonjour Jicehel et bonsoir a tous c'est une bonne idée que tu as là ! J'avais commencer une étude sur ce jeu il y a déjà un certain temps. j'étais parti sur le principe des sprites qui sont plus facile a manipuler et donc pas de scintillement sur l'écran mais chacun a sa façon de faire... Bon courage | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Ven 13 Fév 2015 - 17:42 | |
| Oui, les sprites sont sympa, mais c'est un peu limité dans les fonctions disponibles. Là, je lance un défit avec le source. Je garderais la meilleure solution proposée que ce soit avec les sprites ou autre. Pas besoin de faire les fonctions supplémentaires du jeu, juste reprendre cet affichage et faire une version qui s'affiche de manière très fluide (d'ailleurs pas forcément avec des déplacement par pas entier).
| |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 13 Fév 2015 - 17:50 | |
| Et si, tu dessinais le carré de base puis l' enregistrais dans un bmp à l' initialisation. Ensuite, tu créés des pictures dans les quels tu charges ton fichier *.bmp avant qu' ils soient visibles... | |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Remise à la programmation - je clignote encore ... Ven 13 Fév 2015 - 17:59 | |
| Essaye de créer tes PICTURE dans un panel et non dans un FORM. Il me semble qu’un PANEL représente le moins de clignotement ! J’en ais parlé sur ce post | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Ven 13 Fév 2015 - 18:01 | |
| OK, je testerais de mon côté. Je lançais un petit défit pour faire programmer un peu tout le monde comme tu avais fait. C'est toujours les mêmes qui publient en ce moment... Un petit défit, ça peut motiver. | |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Remise à la programmation - je clignote encore ... Ven 13 Fév 2015 - 18:17 | |
| Ouais ! Moi je connais quelqu’un qui aime relever les défis. Il ne tardera pas de se manifester. | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Ven 13 Fév 2015 - 21:19 | |
| J'espère qu'il ne sera pas seul. Je cherche surtout à débusquer ceux qui savent faire mais qui n'ont pas l'occasion d'écrire ou qui n'osent pas poster. | |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 13 Fév 2015 - 21:46 | |
| Tu remets la chasse au "Dahut" en route ?... | |
| | | Klaus
Nombre de messages : 12295 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Remise à la programmation - je clignote encore ... Ven 13 Fév 2015 - 22:15 | |
| J'ai regardé ton code. Actuellement, tu utilises un PICTURE dans lequel tu dessines un fond, puis tu copies les pièces dessus. Et l'illusion de déplacement est obtenue en effaçant la pièce et en la redessinant à un autre endroit.
Cela paraît simple et logique, mais en fait, ce ne l'est pas. Il faut savoir que le PICTURE complet est réaffiché à la moindre modification. Et c'est ce qui provoque le clignotement. Inévitable.
Tu peux tenter d'utiliser un SCENE2D avec des SPRITE, mais en réalité, le problème est le même. Tel que le SCENE2D est codé, il est également réaffiché en entier dès que tu y effectues une modification. Et donc, clignotement.
De manière générale, tu aggraves le problème du clignotement en dessinant chaque pièce carré par carré. Et pour chaque carré dessiné, le PICTURE est réaffiché en totalité. Et c'est pareil pour chaque carré effacé - réaffichage total. Tu commences à avoir une idée, je suppose...
La solution à ce problème passe par la construction d'un PICTURE caché, aux mêmes dimensions que ton terrain de jeu. Tu y prépares la nouvelle image, et lorsqu'elle est prête, tu copies son contenu d'un seul coup dans ton terrain de jeu. Du coup, tu n'as (pratiquement) plus de clignotement.
Encore mieux: tu définis deux terrains de jeu, exactement aux mêmes positions, avec a_grille% comme premier picture et a_grille%+1 comme deuxième grille. Et tu en caches un par HIDE. Tu prépares la prochaine phase dans le deuxième PICTURE, tu me montres par SHOW et tu caches le premier par HIDE. Et au prochain coup, tu utilises le premier pour préparer la nouvelle image, etc. Et afin de toujours savoir quelle image est affichée, tu définis une variable n_picture%=0 au début, et à chaque changement de phase, tu fais n_picture%=1 - n_picture%. Ainsi, a_picture%+n_picture% est toujours ton image actuellement affichée, et a_picture%+1-n_picture%) est toujours celle de l'étape suivante, à construire.
Dans Panoramic, en l'état, c'est la solution optimale. | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 0:14 | |
| OK merci pour vos commentaires. Je suis parti sur l'idée de Klaus, comment l'optimiseriez vous pour réduire encore le clignotement ? - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 '
' Déclaration des sous-programmes évenementiels label boucle_principale
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 600 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)
' 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 de la pièce 0, 6 autres objets seront créés pour stockés les carrés des différentes pièces dim i_temp% : ' Image servant à faire la copie du carré correspondant à la pièce
' définition des noms d'obhets dim a_grille1% : ' nom de la grille 1 sur laquelle on affiche les pièces quand la 2 est affichée dim a_grille2% : ' nom de la grille 2 sur laquelle on affiche les pièces quand la 1 est affichée dim a_suivante% : ' nom de l'endroit ou 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
' 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% = 200 : ' temps d'une boucle principale dim v_dep : v_dep = 0.5 : ' Vitesse de descente de la pièce dim t_principal : ' Numéro du timer principal
dim grille_active% : grille_active%=2 : ' Définit la grille de travail
' 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
objet% = objet% + 1: a_grille2% = objet% picture a_grille2% : hide 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 color a_grille2%,200, 150, 150
objet% = objet% + 1: i_temp% = objet% : image i_temp%
' Création des 7 carrés + carré 'vide' 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%) next iter% objet% = objet% + 1 : picture objet% : 2d_target_is objet% top objet%, -400 : width objet%, h_carre_grille : height objet%, h_carre_grille : color objet%,200, 150, 150 piece = -1 objet% = objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale
end
sub dessine_piece(num%,x,y) 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 y+j% > 0-v_dep then copie_carre(num%,x+i%,y+j%) end_if next j% next i% end_sub
sub efface_piece(num%,x,y) 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 y+j% > 0-v_dep then copie_carre(7,x+i%,y+j%) 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) 2D_target_is p_carre + num% 2D_image_copy i_temp%,0,0,h_carre,h_carre if grille_active%=2 2D_target_is a_grille1% else 2D_target_is a_grille2% end_if 2D_image_paste i_temp%,x_dest * h_carre_grille +1,y_dest * h_carre_grille +1 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
boucle_principale:
timer_off t_principal
' dessin d'une pièce if piece = -1 piece = p_suivante x_piece = x_initial : y_piece = y_initial Cree_piece_suivante() end_if trace_grille() efface_piece(piece,x_piece,y_piece - v_dep) y_piece = y_piece + v_dep dessine_piece(piece,x_piece,y_piece) if y_piece>19 then piece = -1 if grille_active%=2 hide a_grille1% :show a_grille2% grille_active%=1 : 2D_target_is a_grille1% else hide a_grille2% :show a_grille1% grille_active%=2 : 2D_target_is a_grille2% end_if timer_on t_principal
return | |
| | | Klaus
Nombre de messages : 12295 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 0:46 | |
| Comme ça, déjà, c'est moins visible: - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 '
' Déclaration des sous-programmes évenementiels label boucle_principale
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 600 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)
' 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 de la pièce 0, 6 autres objets seront créés pour stockés les carrés des différentes pièces dim i_temp% : ' Image servant à faire la copie du carré correspondant à la pièce
' définition des noms d'obhets dim a_grille1% : ' nom de la grille 1 sur laquelle on affiche les pièces quand la 2 est affichée dim a_grille2% : ' nom de la grille 2 sur laquelle on affiche les pièces quand la 1 est affichée dim a_suivante% : ' nom de l'endroit ou 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
' 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% = 200 : ' temps d'une boucle principale dim v_dep : v_dep = 0.5 : ' Vitesse de descente de la pièce dim t_principal : ' Numéro du timer principal
dim grille_active% : grille_active%=2 : ' Définit la grille de travail
' 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
objet% = objet% + 1: a_grille2% = objet% picture a_grille2% : hide 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 ' color a_grille2%,200, 150, 150
objet% = objet% + 1: i_temp% = objet% : image i_temp%
' Création des 7 carrés + carré 'vide' 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%) next iter% objet% = objet% + 1 : picture objet% : 2d_target_is objet% top objet%, -400 : width objet%, h_carre_grille : height objet%, h_carre_grille : ' color objet%,200, 150, 150 piece = -1 objet% = objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale
end
sub dessine_piece(num%,x,y) 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 y+j% > 0-v_dep then copie_carre(num%,x+i%,y+j%) end_if next j% next i% end_sub
sub efface_piece(num%,x,y) 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 y+j% > 0-v_dep then copie_carre(7,x+i%,y+j%) 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) 2D_target_is p_carre + num% 2D_image_copy i_temp%,0,0,h_carre,h_carre if grille_active%=2 2D_target_is a_grille1% else 2D_target_is a_grille2% end_if 2D_image_paste i_temp%,x_dest * h_carre_grille +1,y_dest * h_carre_grille +1 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
boucle_principale:
timer_off t_principal
' dessin d'une pièce if piece = -1 piece = p_suivante x_piece = x_initial : y_piece = y_initial Cree_piece_suivante() end_if trace_grille() efface_piece(piece,x_piece,y_piece - v_dep) y_piece = y_piece + v_dep dessine_piece(piece,x_piece,y_piece) if y_piece>19 then piece = -1 if grille_active%=2 show a_grille2% : hide a_grille1% grille_active%=1 : 2D_target_is a_grille1% else show a_grille1% : hide a_grille2% grille_active%=2 : 2D_target_is a_grille2% end_if timer_on t_principal
return J'ai inversé l'ordre des HIDE/SHOW. Et tant pis pour la couleur de fond... Il y a peut-être encore moyen d'améliorer... | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 1:07 | |
| Pas mal, voyons si quelqu'un trouvera encore mieux... | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 9:17 | |
| Je propose cela : - Code:
-
DIM n%
WIDTH 0,650 : HEIGHT 0,625 : HIDE 0 PICTURE 1 : PARENT 1,0 : LEFT 1,5 : TOP 1,5 : WIDTH 1,42 : HEIGHT 1,42 2D_TARGET_IS 1
' forme 1 2D_FILL_COLOR 220,0,0 2D_RECTANGLE 0,0,20,20 : 2D_RECTANGLE 22,0,42,20 : 2D_RECTANGLE 0,22,20,42 : 2D_RECTANGLE 22,22,42,42 FILE_SAVE 1,"C:\temp\form1.bmp"
2D_CLEAR
' Fond d'écran WIDTH 1,600 : HEIGHT 1,600 : COLOR 1,255,255,255 2D_PEN_COLOR 180,180,255 for n% = 1 to 30 2D_line 0, n%*20,400,n%*20 IF n%<21 THEN 2D_line n%*20, 0,n%*20,600 next n% FILE_SAVE 1,"C:\temp\fond.bmp"
2D_TARGET_IS 0 : DELETE 1 SCENE2D 1 : PARENT 1,0 : LEFT 1,5 : TOP 1,5 : WIDTH 1,600 : HEIGHT 1,600 FILE_LOAD 1,"C:\temp\fond.bmp" SHOW 0
SPRITE 10 : SPRITE_FILE_LOAD 10,"C:\temp\form1.bmp" FOR n%=1 to 600 STEP 5 SPRITE_X_POSITION 10,100 SPRITE_Y_POSITION 10,n% PAUSE 20 NEXT n%
END
| |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 11:00 | |
| Bravo Minibug, c'est toi le vainqueur Je mets le code avec ton principe donne pour que les autres puissent tester dans les mêmes conditions : - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 '
' Déclaration des sous-programmes évenementiels label boucle_principale
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 600 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)
' 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 de l'endroit ou 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
' 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 sprite_piece : sprite_piece = 1 : ' Le sprite de la pièce !!
dim grille_active% : grille_active%=2 : ' Définit la grille de travail
' 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%
' Création des 7 carrés 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
picture objet%+21 : hide objet% + 21: width objet%+21, 4*h_carre_grille: height objet%+21, 4*h_carre_grille top objet%+21, -400
picture objet%+28 : hide objet% + 28 : width objet%+28, 4*h_carre_grille: height objet%+28, 4*h_carre_grille top objet%+28, -400 next iter% objet% = objet% + 28 piece = -1 objet% = objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale
end
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 copie_carre(num%,i%,j%,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 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
boucle_principale:
timer_off t_principal
' dessin d'une pièce if piece = -1 sprite_hide sprite_piece : piece = p_suivante x_piece = x_initial : y_piece = y_initial 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 end_if y_piece = y_piece + v_dep if y_piece>19 then piece = -1 sprite_position sprite_piece,x_piece * h_carre_grille,y_piece * h_carre_grille timer_on t_principal
return | |
| | | Klaus
Nombre de messages : 12295 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 11:29 | |
| Sans conteste ! Très bien ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 11:48 | |
| En tout cas merci à tous pour votre participation qui permet d'obtenir un résultat satisfaisant. On ait meilleur en travaillant ensemble | |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 13:03 | |
| Quand Minibug se manifeste, tous les bugs se retirent ! Merci SuperMinibug. | |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 14 Fév 2015 - 13:03 | |
| Félicitations !
C' est la meilleur ! | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 13:38 | |
| @Jicehel : Je suis surpris que tu n'y a pas pensé avant. Si tu reprends les anciens post, tu avais commencé un jeu qui se nommé BARBARIAN, et le principe était là ! Je crois bien d'ailleurs que c'est d'ici que j'ai tiré les bases de ce test de TETRIS que j'ai réalisé il y a déjà de nombreux mois mais je n'ai pas continué, certainement par manque de temps... | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 13:41 | |
| Hum là par contre, je crois que je vais avoir besoin de Klaus pour retrouver comment faire la copie de blocs en gérant la transparence. Je mets le code source: - Code:
-
' Tetris par Jicehel ' Version 1.0 ' Ecrit en Panoramic, le 13/02/2015 '
' Déclaration des sous-programmes évenementiels label boucle_principale
' variables de la fenêtre principale dim l_fenetre : l_fenetre = 600 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)
' 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 de l'endroit ou 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
' 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 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 grille_active% : grille_active%=2 : ' Définit la grille de travail
' 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%
' Création des 7 carrés 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
picture objet%+21 : hide objet% + 21: width objet%+21, 4*h_carre_grille: height objet%+21, 4*h_carre_grille top objet%+21, -400
picture objet%+28 : hide objet% + 28 : width objet%+28, 4*h_carre_grille: height objet%+28, 4*h_carre_grille top objet%+28, -400 next iter% objet% = objet% + 28 piece = -1 : vide_grille() objet% = objet% + 1 : t_principal = objet% timer t_principal : timer_interval t_principal,temps% : on_timer t_principal, boucle_principale end
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 copie_carre(num%,i%,j%,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(num%)
dim_local d_piece(3,3) dim_local i%,j%,temp%, temp2% test_dep% = 1
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 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 bloque_piece(num%)
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 y_piece > 0 then grille%(x_piece + i%, int(y_piece)+j%) = num% end_if next j% next i% 2D_target_is p_carre+piece+7 : 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille 2D_target_is a_grille1% : 2D_image_paste i_temp%,x_piece*h_carre_grille, int(y_piece)*h_carre_grille file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp"
end_sub
boucle_principale:
timer_off t_principal
' dessin d'une pièce if piece = -1 sprite_hide sprite_piece : piece = p_suivante x_piece = x_initial : y_piece = y_initial 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 end_if y_piece = y_piece + v_dep test_dep_bas(piece) if test_dep%=0 if y_piece < 0 quitte() else bloque_piece(piece) piece = -1 end_if end_if sprite_position sprite_piece,x_piece * h_carre_grille,y_piece * h_carre_grille timer_on t_principal return
sub quitte() Message "Demo terminée" wait 2000 Terminate end_sub L'idée serait d'utiliser la fonction dont je ne me rapelle plus de KGF pour remplacer dans la procédure bloque_pièce, les lignes: - Code:
-
2D_target_is p_carre+piece+7 : 2D_image_copy i_temp%,0,0,4*h_carre_grille,4*h_carre_grille 2D_target_is a_grille1% : 2D_image_paste i_temp%,x_piece*h_carre_grille, int(y_piece)*h_carre_grille file_save a_grille1%,"fond.bmp" : file_load a_grille2%,"fond.bmp" afin que le noir soit transparent lors de la copie Note pour Jack - dommage que l'on ne puisse pas charger le scene_2d sans avoir à créer des images bmp, juste en utilisant une image déjà en mémoire comme pour les pictures ou les sprites | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 13:43 | |
| C'est le problème de la mémoire Minibug. On trouve des astuces mais en faisant d'autres choses, on oublie. Il faut avouer que c'est un des points noirs de Panoramic pour la création simple de jeux. Il y a quelques manques qui font que ce n'est souvent pas si intuitifs que ça et que l'on est assez souvent obligé de trouver des astuces... | |
| | | Klaus
Nombre de messages : 12295 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 14:26 | |
| Je ne comprends pas bien ton problème, Jicehel. Je crois que tu fais une confusion.
L'idée de Minbug en utilisant un Scene2d avec un Sprite, conduit à remplacer les deux PICTURE par un seu SCENE2D. Par contre, à chaque nouvelle apparition d'une pièce, tu crées un nouveau SPRITE. Lorsqu'un SPRITE est arrivé à sa position définitive, tu le laisses tel qu'il est. Et surtout, tu ne recopies rien dans l'image de fond qui devrait rester fixe, juste avec la couleur et le quadrillage. Ce sont les SPITE qui se déplacent dessus, et arrivés à destination, ils restent figés, et un nouveau SPRITE apparaît. Ainsi, tu n'as aucun problème de trandparence, et ton "halo" noir disparaît automatiquement. | |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 14 Fév 2015 - 14:40 | |
| Pour les problèmes d' Alzheimer, il me semble que l' on a une rubrique dans "Le Mag".... ...il suffit de l' alimenter. Une sub + un petit texte d' explication, le tout dans un zip >>>>mon webdav A moins de gros souci, c' est sur le site dans les 48h. | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Remise à la programmation - je clignote encore ... Sam 14 Fév 2015 - 14:46 | |
| Klaus a raison.
Il faut créer autant de sprites que de pièces a afficher.
Ensuite tu crée un fond d'écran, c'est le scene2D avec l'image de ton choix.
Puis un picture te servira a stocker les sprites arrivés au sol qui s'additionneront sur le picture. lorsqu'une ligne est remplie, il te suffit de supprimé les dernières lignes du picture et de le décalé d'autant de pixels vers le bas.
J'espère que mes explications sont claires ... | |
| | | Contenu sponsorisé
| Sujet: Re: Remise à la programmation - je clignote encore ... | |
| |
| | | | Remise à la programmation - je clignote encore ... | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |