Page 10 sur 22

Re: Compétition PurePunch Juillet-Août 2014

Publié : mar. 22/juil./2014 14:41
par Ar-S
Mon code est pour le moment bien aéré mais c'est la suite qui m'inquiète ^^
En tout cas j'ai bien avancé et enfin résolu un soucis de positionnement qui me cassait les noix. :mrgreen:

Re: Compétition PurePunch Juillet-Août 2014

Publié : mar. 22/juil./2014 15:27
par majikeyric
Le code non punché de mon cruncher fait 400 lignes.

Re: Compétition PurePunch Juillet-Août 2014

Publié : mar. 22/juil./2014 23:07
par G-Rom
majikeyric a écrit :Voici mon premier punch, l'utilitaire ultime pour compresser ...

.......... vos sources en punchs ! :mrgreen:

Il est supposé être multi-plateforme avec gestion des differents formats de fin de ligne (testé seulement sous windows).
Il supprime les commentaires, les espaces superflus et tronque les lignes "intelligemment".

Il a été codé pour fichiers ASCII et ne gère pas les labels.

...
La classe, plus besoin de se prendre la tête, peu être bien grâce à toi je vais peu être re-participer :)

Re: Compétition PurePunch Juillet-Août 2014

Publié : mar. 22/juil./2014 23:28
par majikeyric
G-Rom a écrit :La classe, plus besoin de se prendre la tête, peu être bien grâce à toi je vais peu être re-participer :)
mince... :wink:

Re: Compétition PurePunch Juillet-Août 2014

Publié : mer. 23/juil./2014 8:18
par djes
:lol:

Re: Compétition PurePunch Juillet-Août 2014

Publié : mer. 23/juil./2014 9:42
par Ar-S
@majikeyric
Très sympa le cruncher. J'ai testé mon code (qui passe à 66 lignes :( sans etre terminé, va falloir tailler dans le gras)..
Mais par contre, le resultat à la compilation est buggé enfin mes sprites perdent leurs transparences (testé en 5.30) donc le resultat est tout laid.
Désolé je peux pas mettre de screenshot pour le moment..

Re: Compétition PurePunch Juillet-Août 2014

Publié : mer. 23/juil./2014 15:12
par majikeyric
Ar-S a écrit :Mais par contre, le resultat à la compilation est buggé enfin mes sprites perdent leurs transparences (testé en 5.30) donc le resultat est tout laid.
Désolé je peux pas mettre de screenshot pour le moment..
J'ai pas compris, tu veux dire qu'après crunchage tu as un prob de transparence ?

Re: Compétition PurePunch Juillet-Août 2014

Publié : mer. 23/juil./2014 15:21
par Ar-S
@majikeyric
Oui.

En gros mon code contient des qques macros, le reste n'est pas encore punché

Code : Tout sélectionner

Macro M : Macro : EndMacro
M dts(id,x,y,c):DisplayTransparentSprite(id,x,y,c):
TransparentSpriteColor(id, $FC00FC)
EndMacro
M ds(id,x,y):DisplaySprite(id,x,y):EndMacro
M cs(id,x,y,w,l):ClipSprite(id,x,y,w,l):EndMacro
ça vient peut être de là, mais le resultat est visuellement très surprenant.
Mes sprites transparents ne le sont plus et pire, les clipsprites sont foireux (mélange de 2 sprites en un).

Re: Compétition PurePunch Juillet-Août 2014

Publié : mer. 23/juil./2014 15:30
par majikeyric
J'ai rencontré quelques problèmes avec les macros et l'IDE. Tout dépend comment je rédigeais les macros.

Par contre je ne vois pas pourquoi cela viendrait du crunchage.Tu dois bien pouvoir voir dans le punch ce qui ne va pas ?

Re: Compétition PurePunch Juillet-Août 2014

Publié : mer. 23/juil./2014 17:49
par Ar-S
Je n'ai pas du tout le temps d'analyser le punch, j'ai déjà du mal a trouver le temps d'avancer dans mon code ;) je constate seulement pour le moment.
Lorsque j'aurai avancé, je te donnerai plus d'infos.

Re: Compétition PurePunch Juillet-Août 2014

Publié : mer. 23/juil./2014 21:22
par graph100
Effectivement, les macros sont traitées de manières très aléatoire, d'ou mon post il y a quelques jours dans les suggestions.

Par exemple, une macro utilisant un truc du genre E#M pour EndMacro, comme tout le monde le fait, doit tenir sur une seule ligne, sinon le PB ne détecte pas le EndMacro.
Il y a d'autres problèmes plus subtils, liés aux procédures sur plusieurs lignes, et aux macros, et d'autres encore avec les structures.

En gros c'est le changement de ligne qui génère les problèmes. Je ne sais pas comment c'est codé, mais le traitement doit être fait ligne de code par ligne de code, au lieu de mot par mot.
Bon, il faut faire avec :roll: ...

Sinon, comme je l'avais dis à G-Rom, le plus gros ratio de crunch possible doit être au alentour de 1:10
Le code normal de Moonlander fait 475 lignes. Par normal j'entends lisible, commenté, et aéré.

Une autre astuce pour coder : Dès le début utilisez des noms de variables, de macro, de procedure, de structure, reconnaissables.
Du genre : _ma_variable_
Pour pouvoir ensuite les remplacer par une lettre ou 2 lettres, en fonction du nombre de leurs emplois.

@PureCruncher : je passe de 475 lignes à 94 :D , c'est pas mal !

[EDIT] Version linux de mon moonlander.
Avec l'ajout du compiler IF / ENDIF ca ne tenait plus dans 50 lignes (51 !), du coup je le met à part, pour ceux qui voudraient tester.
En plus de cela, la collision des sprites n'est pas effectuée avec spritepixelcollision() - qui ne fonctionne pas sur linux / mac - , mais avec spritecollision().

code linux / mac

Code : Tout sélectionner

Macro M:Macro:EndMacro:M E:End:End#M:M St:Structure:End#M:M Sp:Sprite:End#M:C.d;
M H:Element:E#M:M Q:#PB_Key_:E#M:M R:Window:E#M:M U:Random:E#M:M Ke:Keyboard:E#M
Init#Sp():M SM:x.d:y.d:a.d:u.d:v.d:m.d:l.d:b.d:E#St:E#M:UsePNGImageDecoder():T.d
St Mo:SM:St Ob:w.d:I.d:List f.Mo():SM:K.Ob:B.Ob:L.Ob:Open#R(0,0,0,800,600,"M",;#
#PB_#R#_ScreenCentered|#PB_#R#_SystemMenu):Open#R#edScreen(R#ID(0),0,0,800,600);
Load#Sp(0,"M.png"):M N:Next:E#M:Init#Ke():x.d:y.d:M CC(i,x,y,k,l,b=2):Copy#Sp(0,
i,4):Clip#Sp(i,x,y,k,l):Zoom#Sp(i,k*b,l*b):E#M:Clip#Sp(0,2,21,55,42):CC(1,61,38,
15,25,1):For i=0 To 9:CC(10+i,80,3+i*6,5,7):N:CC(9,80,9,13,7):CC(6,56,3,25,7);##
CC(7,60,9,21,7):CC(8,1,9,53,9,4):Create#Sp(4,10,10):F.d:Procedure DN(L,x,y):i=0+
Int(Log10(L)):p=Pow(10,i):For j=0 To i:r=Int(L/p):L-r*p:p/10:Display#Sp(10+r,x,;
y):x+8:N:E#Procedure:DB: :NewList S.Ob():Clear#St(L,Ob):Initialize#St(L,Ob):D.d;
L\x=400:L\b=50000000:L\y=300:L\m=1206:L\I=43172:#P=#PI/2:*d.Mo=Add#H(L\f()):CR=0
*g.Mo=Add#H(L\f()):*d\a=0.715743:*d\l=30.479501:*c.Mo=Add#H(L\f()):*d\b=-#P:CS=5
*g\a=2.425849:*g\l=30.4:*g\b=-#P:Initialize#St(K,Ob):*o.Mo=Add#H(K\f()):*c\b=-#P
M El:ElapsedMilliseconds():E#M:K\x=-10:K\y=300:*c\m=0:*c\a=#P:*o\m=50:Ke#Mode(1)
CB=50:*c\l=5:*o\a=0:*o\l=300:ti=El:Repeat:*d\m=0:*g\m=0:Z.d=(El-ti)/1000:*c\m=0;
Repeat:EV=R#Event():If EV=#PB_Event_Close#R:E:E#If:Until EV=0:Examine#Ke():ti=El
If Ke#Pushed(Q#Escape):E:E#If:If CR:Z=0:If Ke#Pushed(Q#Space):Goto DB:E#If:Else;
If Ke#Pushed(Q#Up):*d\m=10000:*g\m=10000:D=0:E#If:If Ke#Pushed(Q#Left):*d\m+5000
E#If:A.d=0:If Ke#Pushed(Q#Right):*g\m+5000:E#If:If Ke#Pushed(Q#Down):*c\m=50000;
E#If:E#If:C=0:CT+1:ForEach L\f():*m.Mo=L\f():L\b-*m\m:If L\b<0:L\b=0:Break:E#If;
T=L\a+*m\a:*m\x=*m\l*Cos(T):G.d:*m\y=*m\l*Sin(T):T=L\a+*m\b:*m\u=*m\m*Cos(T);###
*m\v=*m\m*Sin(T):D+*m\x**m\v-*m\u**m\y:A+*m\u:C+*m\v:N:A/L\m:C/L\m+10:D/L\I:L\u+
A*Z:L\v+C*Z:L\w+D*Z:L\a+L\w*Z:T=L\u*Z:B\x-T:K\x-T:T=L\v*Z:B\y-T:ClearScreen(0);#
K\y-T:Rotate#Sp(0,L\a*90/#P,0):DisplayTransparent#Sp(0,L\x-27,L\y-21):Grab#Sp(2,
L\x-34,L\y-34,68,68,4):ClearScreen($FFFFFF):Repeat:If F>=-200 And F<=1000 And;##
G>=-200 And G<=800:x1.d:*e.Mo=Add#H(K\f()):*e\a=*o\a+(U(20)-10)/#P/20:*e\l=*o\l+
U(20)-10:If *e\l<100:*e\l=100:E#If:If *e\l>400:*e\l=400:E#If:CB-1:CS-1:*e\m=0+;#
U(20)+40:*e=*o:E#If:F=K\x:G=K\y:ForEach K\f():T=K\f()\a+#P:x=F+K\f()\l*Cos(T)/2;
y=G+K\f()\l*Sin(T)/2:T=K\f()\a-#P:x1=F+K\f()\l*Cos(T)/2:F+K\f()\m*Cos(K\f()\a);#
y1.d=G+K\f()\l*Sin(T)/2:G+K\f()\m*Sin(K\f()\a):If ListIndex(K\f())>0;###########
Transform#Sp(4,x1,y,ox.d,y-oy1.d+y1,J.d,y-oy.d+y1,x.d,y1):E#If:Display#Sp(4,0,0)
ox=x:oy=y:J=x1:oy1=y1:N:If CB<0:CB=30:T=K\f()\l-60:T=(U(T)-T/2):B\x=F+T*Cos(#P+;
K\f()\a):B\y=G+T*Sin(K\f()\a+#P):B\l=1:E#If:If CS<0:CS=5:Last#H(S()):Add#H(S());
T=K\f()\l-60:T=(U(T)-T/2):S()\x=F+T*Cos(K\f()\a+#P):S()\y=G+T*Sin(K\f()\a+#P);##
S()\v=100*Abs(T)/(K\f()\l/2-50):S()\l=1:E#If:If ListSize(K\f())>40;#############
First#H(K\f()):K\x=K\x+K\f()\m*Cos(K\f()\a):K\y=K\y+K\f()\m*Sin(K\f()\a);#######
Delete#H(K\f()):*o=Last#H(K\f()):E#If:Until F<-200 Or F>1000 Or G<-200 Or G>800;
StartDrawing(ScreenOutput()):For i=0 To 15:T=i*2*#PI/15:If Point(400+22*Cos(T),;
300+22*Sin(T)):CR=1:E#If:Next:If Point(400+34*Cos(0.64+L\a),300+34*Sin(0.64+;###
L\a)) Or Point(400+34*Cos(2.5+L\a),300+34*Sin(2.5+L\a)):CR=1:E#If:If L\b:;######
ForEach L\f():For i=-5 To 5:T=L\a+L\f()\b+i/10:LineXY(L\x+L\f()\x,L\y+L\f()\y,;#
L\x+L\f()\x-L\f()\m*Cos(T)/500,L\y+L\f()\y-L\f()\m*Sin(T)/500,$88FF):N:N:E#If:;#
StopDrawing():DisplayTransparent#Sp(2,L\x-34,L\y-34):If B\l:If Sp#Collision(1,;#
B\x-7,B\y-12,2,L\x-34,L\y-34):L\b+25000000:B\l=0:E#If:DisplayTransparent#Sp(1,;#
B\x-7,B\y-12):E#If:ForEach S():S()\x-L\u*Z:S()\y-L\v*Z:If S()\l:;###############
If Sp#Collision(9,S()\x-6,S()\y-3,2,L\x-34,L\y-34):S()\l=0:L\l+S()\v:E#If;######
DN(S()\v,S()\x-6,S()\y-3):E#If:N:Display#Sp(6,352,5):DN(L\l,400,5);#############
Display#Sp(7,360,19):DN(L\b/5000,400,19):If CR And CT%50<30:Display#Sp(8,294,;##
282):E#If:FlipBuffers():ForEver;#PURE#PUNCH##AOUT#2014###MOONLANDER#BY#GRAPH100#

Re: Compétition PurePunch Juillet-Août 2014

Publié : jeu. 24/juil./2014 20:09
par SPH
@Graph100: ton jeu a un gros probleme. Les passages sont trop etroits :!:

Re: Compétition PurePunch Juillet-Août 2014

Publié : ven. 25/juil./2014 7:58
par graph100
Si tu as le résultat graphique comme le montre mon screenshot, c'est le résultat voulu ! Sinon, c'est que tu lance la version linux / mac (le dernier code que j'ai posté) sur window !!!
Et là ça bug, puisque c'est une version spéciale Linux / mac !!!!

Re: Compétition PurePunch Juillet-Août 2014

Publié : ven. 25/juil./2014 9:24
par Backup
pourquoi vous terminez vos lignes de code par des ",#####" ou des " ;;;;;;;;"

votre editeur ne vous indique pas le nombre de caractere lorsque vous etes en bout de ligne ?? 8O

Re: Compétition PurePunch Juillet-Août 2014

Publié : ven. 25/juil./2014 10:07
par Ar-S
Sans doute pour faire un "carré de code" de 50L x 80car. :wink: