FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» SineCube
Remise à la programmation - je clignote encore ... Emptypar Marc Hier à 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Remise à la programmation - je clignote encore ... Emptypar Marc Hier à 12:22

» Philharmusique
Remise à la programmation - je clignote encore ... Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Remise à la programmation - je clignote encore ... Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Remise à la programmation - je clignote encore ... Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Remise à la programmation - je clignote encore ... Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Remise à la programmation - je clignote encore ... Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Remise à la programmation - je clignote encore ... Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Remise à la programmation - je clignote encore ... Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0
Remise à la programmation - je clignote encore ... Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Remise à la programmation - je clignote encore ... Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Remise à la programmation - je clignote encore ... Emptypar Klaus Lun 6 Mai 2024 - 10:23

» @Jack
Remise à la programmation - je clignote encore ... Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Remise à la programmation - je clignote encore ... Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Remise à la programmation - je clignote encore ... Emptypar leclode Sam 27 Avr 2024 - 17:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment :
Réassort du coffret Pokémon 151 ...
Voir le deal

 

 Remise à la programmation - je clignote encore ...

Aller en bas 
+2
Minibug
Jicehel
6 participants
Aller à la page : 1, 2, 3  Suivant
AuteurMessage
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptyVen 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.

Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptyVen 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 Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptyVen 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).
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Remise à la programmation - je clignote encore ... Empty
MessageSujet: re    Remise à la programmation - je clignote encore ... EmptyVen 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...
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptyVen 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
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptyVen 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.
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptyVen 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.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptyVen 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.
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Remise à la programmation - je clignote encore ... Empty
MessageSujet: re   Remise à la programmation - je clignote encore ... EmptyVen 13 Fév 2015 - 21:46

Tu remets la chasse au "Dahut" en route ?...
Laughing
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptyVen 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 14 Fév 2015 - 1:07

Pas mal, voyons si quelqu'un trouvera encore mieux...
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 14 Fév 2015 - 11:29

Sans conteste ! Très bien !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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 Wink
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 14 Fév 2015 - 13:03

Quand Minibug se manifeste, tous les bugs se retirent !
Merci SuperMinibug.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Remise à la programmation - je clignote encore ... Empty
MessageSujet: re   Remise à la programmation - je clignote encore ... EmptySam 14 Fév 2015 - 13:03

Félicitations !

C' est la meilleur !
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 14 Fév 2015 - 13:38

@Jicehel : Je suis surpris que tu n'y a pas pensé avant. What a Face
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...
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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...
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Remise à la programmation - je clignote encore ... Empty
MessageSujet: re    Remise à la programmation - je clignote encore ... EmptySam 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. Wink

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.
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... EmptySam 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 ...
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Contenu sponsorisé





Remise à la programmation - je clignote encore ... Empty
MessageSujet: Re: Remise à la programmation - je clignote encore ...   Remise à la programmation - je clignote encore ... Empty

Revenir en haut Aller en bas
 
Remise à la programmation - je clignote encore ...
Revenir en haut 
Page 1 sur 3Aller à la page : 1, 2, 3  Suivant
 Sujets similaires
-
» Port série COM RS232
» Les pentaminos
» Méthode de programmation
» programmation modulaire
» Petit défi de programmation.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: