Page 1 of 3

le plus petit snake...

Unread postPosted: 29 Sep 2007, 16:55
by natha
C'est une sorte de petit concours...

En fait c'est en faisant mon 1er "bon" jeu sur ti 68k que je me suis demandé, comme il y a des millions de façons différentes de faire un programme, comment auriez vous fait, (sachant que vous êtes surement plus fort que moi :)), pour faire le snake le plus rapide, et le plus petit. détaillez si besoin est, par exemple si telle fonction est plus rapide qu'une autre ou telle librairie est plus rapide que celle utilisée (flib).

Voici mon prog, donc pas très rapide, a modifier:

Code: Select all
Prgm
{153}--lx:{78}--ly:9--x:10--y:5--vx:0--vy:0--v:0--p
rand(31)*5-1--rx:rand(18)*5--ry
ClrDraw
DispG
flib("fillrect:0,0,159,99","fillrect:2,3,156,92,0","font:0","drawstr:5,94,4,"string(p)" points","breakoff")
Loop
flib("pixtest: x, y")
If fl[1]=1 Then
If x=rx and y=ry Then
p+1--p
Lbl a
rand(31)*5-1--rx:rand(18)*5--ry
flib("pixtest: rx, ry")
If fl[1]=1
Goto a
flib("fillrect: rx-2, ry-2, rx+2, ry+2","drawstr:5,94,4,"string(p)" points")
Else
Exit
EndIf
EndIf
lx[dim(lx)]--dx:ly[dim(ly)]--dy
flib("keylow","fillrect: rx-2, ry-2, rx+2, ry+2","fillrect: x-2, y-2, x+2, y+2","fillrect: dx-2, dy-2, dx+2, dy+2,0")
augment({x},left(lx,p+2))--lx:augment({y},left(ly,p+2))--ly
If fl[1]"00000000" Then
­5*expr(mid(fl[1],5,1))+5*expr(mid(fl[1],6,1))vx
­5*expr(mid(fl[1],7,1))+5*expr(mid(fl[1],8,1))vy
EndIf
x+vx--x:y+vy--y
EndLoop
flib("msg:GAME OVER|"string(p)" points","slclr","slrcl","clrscr")
DispHome
EndPrgm

allez, prenez votre cerveau ou vos anciens progs à 2 mains, et bon courage!! :D:

Re: le plus petit snake...

Unread postPosted: 29 Sep 2007, 16:57
by tama
euh c'est pas possible de prendre mon cerveau à 2 mains je suis pas E.T :;):


tu peux expliquer vite fait sinon comment marche ton prog ?

Re: le plus petit snake...

Unread postPosted: 30 Sep 2007, 13:41
by natha
voila ce que ça donne après quelques modifs...
cependant, j'ai appris que vertel est plus puissante que flib, je vais peut être changer de librairie pour augmenter la rapidité... le tout ne dépasse pas le Ko sur la Ti

Code: Select all
():Prgm
{150}--lx:{90}--ly:7--x:7--y:5--vx:0--vy:0--v:0--p:rand(31)*5+2--rx:rand(18)*5+2--ry
flib("savscr:s","clrscr","line:0,95,198,95","font:0","drawstr:5,95,4,"string(p)" points","breakoff")
While 0x160 and 0y95
Lbl a
flib("pixtest: x, y")
If fl[1]=1 Then
If x=rx and y=ry Then
p+1--p:rand(31)*5+2--rx:rand(18)*5+2--ry
flib("pixtest: rx, ry")
If fl[1]=1:Goto a
flib("fillrect: rx-2, ry-2, rx+2, ry+2","drawstr:5,95,4,"string(p)" points")
Else:Goto go:EndIf:EndIf
lx[dim(lx)]--dx:ly[dim(ly)]--dy
flib("keylow","fillrect: rx-2, ry-2, rx+2, ry+2","fillrect: x-2, y-2, x+2, y+2","fillrect: dx-2, dy-2, dx+2, dy+2,0")
augment({x},left(lx,p+2))--lx:augment({y},left(ly,p+2))--ly
If fl[1]"00000000" Then
­5*expr(mid(fl[1],5,1))+5*expr(mid(fl[1],6,1))--vx
­5*expr(mid(fl[1],7,1))+5*expr(mid(fl[1],8,1))--vy
EndIf
x+vx--x:y+vy--y
EndWhile
If x2:157--x:If x157:2--x:If y2:92--y:If y92:2--y
Goto a:Lbl go
flib("msg:GAME OVER|"string(p)" points","rclscr:s")
DelVar x,y,rx,ry,lx,ly,p,s:EndPrgm


Qu'est ce qu'il y a besoin d'expliquer?
lx, ly c'est les listes pour le snake
x,y c'est la position courante de la tete de snake
rx, ry c'est la position du truc a attraper

"fillrect: rx-2, ry-2, rx+2, ry+2"
ça fait un carré au lieu d'un pix, c'est plus joli
(on peut mettre aussi "rect: rx-2, ry-2, rx+2, ry+2,XX")
XX étant mode, on peut afficher un carré avec un effet particulier ou le faire clignoter en mettant 2 par ex.)

5*expr(mid(fl[1],5,1))+5*expr(mid(fl[1],6,1))--vx
­Ca c'est pour faire avancer le snake (fl[1] étant la liste d'état des touches de directions

voila vous avez des idées?

Re: le plus petit snake...

Unread postPosted: 30 Sep 2007, 14:16
by loko
Heu, juste pourquoi vouloir faire le snake le plus petit possible?

Re: le plus petit snake...

Unread postPosted: 30 Sep 2007, 15:12
by ProgVal
Bon déjà, tu fais dégager Flib et tu remplace par keyget...
C'est déjà plus portable, et éventuellement plus rapide....

Re: le plus petit snake...

Unread postPosted: 30 Sep 2007, 16:06
by Yak
oiui mais flib est lourd. ce n'est pas le but de ce snake

Re: le plus petit snake...

Unread postPosted: 30 Sep 2007, 16:11
by ProgVal
En plus l'analyse d'une chaîne(2040 bits) est plus longue que celle d'un nombre décimal (ici, 13 bits maxi)

Re: le plus petit snake...

Unread postPosted: 30 Sep 2007, 17:59
by tama
arg des goto dans une boucle While x__x

Re: le plus petit snake...

Unread postPosted: 30 Sep 2007, 18:02
by ProgVal
Tama>> ici, c'est du Basic, et pas du C. Tous les coups sont permis.

Re: le plus petit snake...

Unread postPosted: 30 Sep 2007, 18:03
by tama
on s'en fout en basic ou en C les goto sont à éviter x_x