[Axe] Automates cellulaires 2 : le feu

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Axe] Automates cellulaires 2 : le feu

Message par matrefeytontias le Ven 9 Mar - 9:36

Salut les gens !

Cette fois-ci, avec les automates cellulaires nous allons simuler du feu !

Brûler un endroit précis de l'écran

Le principe

Le principe ici est simple :
  • On teste si un pixel est allumé

    • Dans tous les cas, on éteint le pixel au-dessus
    • Si oui, on tire un nombre aléatoire entre 0 et une valeur au choix, et s'il est différent de 0 on rallume le pixel au-dessus
    • Si non on laisse éteint le pixel du dessus
  • Et ce, pour tous les pixels composant l'aire à "brûler"


Alors allons-y, appliquons dans la joie Très Content !

Application

On a donc (bien sûr) notre boucle-conteneur, un sprite et ses coordonnées.
Code:
:.FIRE
:
:[FFFFFFFFFFFFFFFF→Pic1
:28→Y+16→X
:
:Repeat getKey(15)
:
:End

Et on a juste à appliquer les étapes bêtement ! Que diriez-vous de faire brûler la ligne du sommet de notre sprite ?
Code:
:.FIRE
:
:[FFFFFFFFFFFFFFFF→Pic1
:28→Y+16→X
:
:Repeat getKey(15)
: Pt-On(X,Y,Pic1
:
: For(A,X,X+7)
:  .Pour une flamme de 14 pixels de haut
:  For(B,Y-14,Y)
:  Pxl-Off(A,B-1        → Règle 1
:  If pxl-Test(A,B
:    If rand^6            → Règle 2
:    Pxl-On(A,B-1
:    End                    → Règle 3
:  End
:  End
: End
:
: DispGraph
:End

Résultat :

[Vous devez être inscrit et connecté pour voir cette image]

Cette méthode a pourtant quelques inconvénients : elle est lente (oooh si, pas tant les boucles For que les routines agissant sur les pixels) et la flamme risque de donner des résultats indésirables si le sprite à brûler se déplace. C'est pour pallier à tout ça qu'on va utiliser une autre méthode !

Brûler tout(e une partie de) l'écran

Le principe

Là, c'est légèrement plus compliqué : on va utiliser deux des aires de RAM pour faire brûler tout ça. L6 si on utilise le buffer, ou L3 pour le back-buffer.

On va donc avoir nos aires libres (qui sont une suite de 768 octets avec un octet = 8 pixels, un par bit) et on va les masquer : c'est à dire leur appliquer un masque dont le but est, comme son nom l'indique, modifier son apparence.

Ce masque, je vous le donne tout de suite, le voici :

Code:
[7FBFDFEFF7FBFDFE→Str1
Alors à voir comme ça, ça doit pas vous inspirer grand chose, mais si vous essayez de l'afficher comme un sprite, vous aurez vu que chaque ligne a un pixel éteint pour 7 allumés. Et bien c'est ça, c'est le masque qu'on va appliquer à L3 ou L6.

Que fait ce masque ? Hé bien il va petit à petit éteindre chaque pixel d'une ligne de 8, ou mettre à 0 chaque bit d'un octet, jusqu'à ce que tout soit éteint / désactivé. En plus de ça, on va copier notre octet sur l'octet au-dessus pour simuler une flamme.

Nous allons appliquer notre masque avec la commande AND.

Application

Allons-y tout de go, on a toutes les clés en main :
Code:
:.FIRE2
:[7FBFDFEFF7FBFDFE→Str1
:
:Repeat getKey(15)
:.Tous les pixels de l'écran
:For(A,0,767)
:{A+L6} and {rand^8+Str1}→{A-12+L6}
:Il y a 12 octets sur une ligne (96 / 8), donc l'octet du dessus est A - 12
:End
:DispGraph
:End
C'est tout ! Pas compliqué, si ?

MAIS on a oublié quelque chose ! Pour brûler, le feu doit avoir une base, un combustible !

Code:
:.FIRE2
:[7FBFDFEFF7FBFDFE→Str1
:
:.On rajoute la ligne qui va brûler
:Line(0,63,95,63
:Repeat getKey(15)
:.Tous les pixels de l'écran
:For(A,0,767)
:{A+L6} and {rand^8+Str1}→{A-12+L6}
:Il y a 12 octets sur une ligne (96 / 8), donc l'octet du dessus est A - 12
:End
:DispGraph
:End

Résultat :

[Vous devez être inscrit et connecté pour voir cette image]

Cette fois-ci, chaque particule flambante est indépendante, on peut donc remplacer la ligne par un sprite, qu'on pourra déplacer ! Je vous laisse le loisir d'essayer, mais sachez juste que tout ce qui se trouvera à l'écran lors de l'exécution de la boucle For va brûler ! Donc si vous voulez tout cramer sauf un seul sprite, veillez à l'afficher après la boucle et à l'effacer avant (avec Pt-Change par exemple).

Sachez aussi que si vous remplacez L6 par L3 et DispGraph par DispGraphr, vous aurez du feu en grayscales puisque c'est le back-buffer que vous manipulez !

Autre astuce : remplacez le code précédent par celui-ci :
Code:
:.FIRE2
:[8040201008040201→Str1
:
:.On rajoute la ligne qui va brûler
:Line(0,63,95,63
:.On inverse l'écran
:DrawInv
:Repeat getKey(15)
:.Tous les pixels de l'écran
:For(A,0,767)
:{A+L6} or {rand^8+Str1}→{A-12+L6}
:Il y a 12 octets sur une ligne (96 / 8), donc l'octet du dessus est A - 12
:End
:DispGraph
:End

Et vous aurez du feu blanc sur un fond noir ! Essayez pour voir !

Cet effet peut très bien rendre sur un menu, ou même une animation où tout brûle à l'écran ! Vous pouvez aussi changer la zone qui brûle en manipulant les 2 valeurs de la boucle For !

Faites bon usage de cet effet, et bonne programmation !

_________________
[Axe] [Vous devez être inscrit et connecté pour voir ce lien], aussi compatible 82 stats !

[Vous devez être inscrit et connecté pour voir ce lien]
[Vous devez être inscrit et connecté pour voir ce lien]

Spoiler:

matrefeytontias
Platinum 1
Platinum 1

Sexe : Masculin
Age : 19
Messages : 1383
Date d'inscription : 28/09/2011
Etudes : 1ère S SI
Points Forum : 90
Points Concours : 7
Langages :
  • - ASM TI-82 Stats / TI-83
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
  • - Lua Nspire
  • - Ndless Nspire
Calculatrices :
  • - TI-83+.fr
  • - TI-Nspire CAS

TI-83+.fr


Revenir en haut Aller en bas

Re: [Axe] Automates cellulaires 2 : le feu

Message par persalteas le Ven 9 Mar - 12:14

Le principe ici est simple :
.

Pour une fois que c'est vrai Gni

J'ai compris pour une fois, je suis content !!

Good Job, sir.

_________________
[Vous devez être inscrit et connecté pour voir cette image]

persalteas
Platinum 2
Platinum 2

Sexe : Masculin
Age : 21
Messages : 2068
Date d'inscription : 30/06/2010
Etudes : PACES (médecine)
Points Forum : 114
Points Concours : 10
Langages :
  • - TI-Basic Z80
  • - xLib
  • - Grammer
  • - TI-Basic Nspire
Calculatrices :
  • - TI-82 Stats.fr
  • - TI-83
  • - TI-83+
  • - TI-84+ SE
  • - TI-86
  • - TI-Nspire
  • - TI-Nspire CX
  • - Casio Collège
  • - Casio Graph

TI-84 Pocket.fr


http://tiemulation.kegtux.org

Revenir en haut Aller en bas

Re: [Axe] Automates cellulaires 2 : le feu

Message par matrefeytontias le Ven 9 Mar - 12:16

Comment ça "pour une fois que c'est vrai" ? T'as pas compris les explosions ? Si non bah demande ! ^^

_________________
[Axe] [Vous devez être inscrit et connecté pour voir ce lien], aussi compatible 82 stats !

[Vous devez être inscrit et connecté pour voir ce lien]
[Vous devez être inscrit et connecté pour voir ce lien]

Spoiler:

matrefeytontias
Platinum 1
Platinum 1

Sexe : Masculin
Age : 19
Messages : 1383
Date d'inscription : 28/09/2011
Etudes : 1ère S SI
Points Forum : 90
Points Concours : 7
Langages :
  • - ASM TI-82 Stats / TI-83
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
  • - Lua Nspire
  • - Ndless Nspire
Calculatrices :
  • - TI-83+.fr
  • - TI-Nspire CAS

TI-83+.fr


Revenir en haut Aller en bas

Re: [Axe] Automates cellulaires 2 : le feu

Message par persalteas le Ven 9 Mar - 12:51

Non, les explosions je l'ai même pas testé. Langue

Mais tout le monde dit toujours que le principe est simple.

ah non, pas dans ton tuto d'hexadécimal...enfin pas partout Langue

_________________
[Vous devez être inscrit et connecté pour voir cette image]

persalteas
Platinum 2
Platinum 2

Sexe : Masculin
Age : 21
Messages : 2068
Date d'inscription : 30/06/2010
Etudes : PACES (médecine)
Points Forum : 114
Points Concours : 10
Langages :
  • - TI-Basic Z80
  • - xLib
  • - Grammer
  • - TI-Basic Nspire
Calculatrices :
  • - TI-82 Stats.fr
  • - TI-83
  • - TI-83+
  • - TI-84+ SE
  • - TI-86
  • - TI-Nspire
  • - TI-Nspire CX
  • - Casio Collège
  • - Casio Graph

TI-84 Pocket.fr


http://tiemulation.kegtux.org

Revenir en haut Aller en bas

Re: [Axe] Automates cellulaires 2 : le feu

Message par matrefeytontias le Ven 9 Mar - 12:54

Bah non, la version du feu avec masking c'est pas vraiment simple, pour expliquer j'ai galéré ^^

_________________
[Axe] [Vous devez être inscrit et connecté pour voir ce lien], aussi compatible 82 stats !

[Vous devez être inscrit et connecté pour voir ce lien]
[Vous devez être inscrit et connecté pour voir ce lien]

Spoiler:

matrefeytontias
Platinum 1
Platinum 1

Sexe : Masculin
Age : 19
Messages : 1383
Date d'inscription : 28/09/2011
Etudes : 1ère S SI
Points Forum : 90
Points Concours : 7
Langages :
  • - ASM TI-82 Stats / TI-83
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
  • - Lua Nspire
  • - Ndless Nspire
Calculatrices :
  • - TI-83+.fr
  • - TI-Nspire CAS

TI-83+.fr


Revenir en haut Aller en bas

Re: [Axe] Automates cellulaires 2 : le feu

Message par noelthebest le Dim 11 Mar - 15:23

C'est plus simple que l'explosion je trouve. Mais bon, les deux sont simple vu comme t'expliques bien. ^^

_________________
[Vous devez être inscrit et connecté pour voir cette image]

[Vous devez être inscrit et connecté pour voir cette image]
[Vous devez être inscrit et connecté pour voir cette image]

noelthebest
Platinum 1
Platinum 1

Sexe : Masculin
Age : 19
Messages : 1969
Date d'inscription : 12/03/2011
Etudes : ENS Cachan
Points Forum : 20
Points Concours : 9
Langages :
  • - TI-Basic Z80
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
Calculatrices :
  • - TI-83+.fr
  • - TI-Nspire CX
  • - Casio Collège
  • - Casio Graph

TI-84+ SE


Revenir en haut Aller en bas

Re: [Axe] Automates cellulaires 2 : le feu

Message par Contenu sponsorisé Aujourd'hui à 6:49


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum