
correction effectuée
Cordialement
Code : Tout sélectionner
;*****************************************************************************
;*
;* Season's Greetings PurePunch Demo contest
;* PureBasic 5.00
;* 80 lines of 80 chars, 1 month delay
;*
;* Name : Hanoï Towers
;* Author : Wood51
;* Date : 10/12/2012
;* Notes : But du jeu déplacer les disque d'une tour à l'autre dans
;* l'ordre croissant . Le score parfait : "0" 8o)
;*****************************************************************************
Macro Gl:Global:EndMacro:Macro SD:StartDrawing(CanvasOutput(#Canvas)):EndMacro
Enumeration:#Win:#Canvas:#Img_Base:#Disque:#Ying_Yang:#Titre:#t
#Basically_Pure:#Victoire:EndEnumeration
Gl nb_disques=3:Gl max_disque=8:Gl inMenu=1:Gl txt$:Gl old_value,old_pos
Gl old_tour,inMvt,nb_mouvements:Gl min_mvt=Pow(2,3)-1
Gl Dim t(3,nb_disques):Gl Dim disques_pos(10)
Procedure InitGraphics():UsePNGImageDecoder():LoadImage(#Img_Base,"hanoi.png")
GrabImage(#Img_Base,#Disque,160,90,220,20)
GrabImage(#Img_Base,#Ying_Yang,0,70,150,150)
GrabImage(#Img_Base,#Titre,0,0,512,70) ;Titre
GrabImage(#Img_Base,#Basically_Pure,0,220,60,255)
GrabImage(#Img_Base,#t,60,220,240,230)
GrabImage(#Img_Base,#Victoire,160,120,311,88)
For i=0 To 9:Read.i disques_pos(i):Next:EndProcedure
Procedure Menu():SD
DrawingMode(#PB_2DDrawing_Outlined):RoundBox(345,200,300,150,20,20,$3c8c0c)
RoundBox(470,305,50,30,10,10,$3c8c0c)
DrawText(462,215,"PSEUDO :",$3c8c0c,$9fba8f)
DrawText(470+15,305+7,"OK",$3c8c0c,$9fba8f)
DrawingMode(#PB_2DDrawing_Default):Box(395,245,200,30,$BDFF95)
DrawText(493,252,"|",$3c8c0c,$BDFF95):StopDrawing():EndProcedure
Procedure DrawBackGround():SD
Box(0,0,990,700,$9fba8f): DrawAlphaImage(ImageID(#Ying_Yang),160,25,255)
DrawAlphaImage(ImageID(#Titre),270,60)
DrawAlphaImage(ImageID(#Basically_Pure),860,45)
For i = 0 To 2:DrawAlphaImage(ImageID(#t),60+i*300,385):Next:StopDrawing()
EndProcedure:Procedure DrawDisques():SD:For j=0 To 2
For i=0 To nb_disques-1:If t(j,i)>0:x=j*300+170-10*t(j,i)
y=disques_pos(nb_disques-i-1):width=(t(j,i)+1)*20:height=20
DrawImage(ImageID(#Disque),x,y,width,height):EndIf:If t(j,i)<0
x=j*300+170-10*-t(j,i):y=325:width=(-t(j,i)+1)*20:height=20
DrawImage(ImageID(#Disque),x,y,width,height):EndIf:Next:Next
DrawText(10,670,"Moves : "+Str(nb_mouvements),$3c8c0c,$9fba8f):StopDrawing()
EndProcedure:Procedure DrawVictoire()
SD:Box(0,0,990,700,$9fba8f)
DrawAlphaImage(ImageID(#Victoire),339,306)
DrawAlphaImage(ImageID(#Ying_Yang),160,25,255)
DrawAlphaImage(ImageID(#Titre),270,60)
DrawAlphaImage(ImageID(#Basically_Pure),860,45)
score$="Bravo "+txt$+" Scrore : "+Str(nb_mouvements-min_mvt)
DrawText((990-TextWidth(score$))/2,390,score$,$3c8c0c,$9fba8f):StopDrawing()
EndProcedure:Procedure Initt():For i=0 To nb_disques-1:t(0,i)=i+1:t(1,i)=0
t(2,i)=0:Next
EndProcedure:Procedure Check_Victoire()
somme_t1=0:somme_t2=0:somme_victoire=(nb_disques*(nb_disques+1))/2
For i=0 To nb_disques-1:somme_t1=somme_t1+t(1,i):somme_t2=somme_t2+t(2,i)
Next:If somme_t1=somme_victoire Or somme_t2=somme_victoire
If nb_disques = max_disque:DrawVictoire():Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow:End:Else:nb_disques+1
min_mvt=min_mvt+(Pow(2,nb_disques)-1):ReDim t(3,nb_disques):Delay(400)
Initt():DrawBackGround():DrawDisques():EndIf:EndIf:EndProcedure
If OpenWindow(#Win,0,0,990,700,"Hanoï Towers")
CanvasGadget(#Canvas,0,0,990,700,#PB_Canvas_Keyboard):SetActiveGadget(#Canvas)
InitGraphics():DrawBackGround():Menu():EndIf:Repeat:Event = WaitWindowEvent()
Select EventGadget():Case #Canvas:Select EventType():Case #PB_EventType_KeyUp
If inMenu=1:If GetGadgetAttribute(#Canvas,#PB_Canvas_Key) = #PB_Shortcut_Back
txt$=Left(txt$,Len(txt$)-1):SD:Box(395,245,200,30,$BDFF95)
DrawText(395+(200-TextWidth(txt$+"|"))/2,252,txt$+"|",$3c8c0c,$BDFF95)
StopDrawing()
EndIf:If GetGadgetAttribute(#Canvas,#PB_Canvas_Key) = #PB_Shortcut_Return
If txt$<>"|":inMenu=0:Initt():DrawBackGround():DrawDisques():EndIf:EndIf
EndIf:Case #PB_EventType_Input:If inMenu=1 And Len(txt$)<13
txt$=txt$+Chr(GetGadgetAttribute(#Canvas,#PB_Canvas_Input)):SD
DrawText(395+(200-TextWidth(txt$+"|"))/2,252,txt$+"|",$3c8c0c,$BDFF95)
StopDrawing():EndIf:Case #PB_EventType_LeftClick
x=GetGadgetAttribute(#Canvas,#PB_Canvas_MouseX)
y=GetGadgetAttribute(#Canvas,#PB_Canvas_MouseY):If inMenu=0:For i=0 To 2
If x>i*300+60 And x<i*300+300 And y>250 And y<615:tour=i:Break:EndIf:Next
If inMvt=0:For i=0 To nb_disques-1:If t(tour,i)>0:old_value=t(tour,i)
old_pos=i:old_tour=tour:t(tour,i)= -t(tour,i):inMvt=1:Break:EndIf
Next:DrawBackGround():DrawDisques():Check_Victoire():Continue:EndIf:If inMvt=1
For i=0 To nb_disques-1:If t(tour,i)=0:Continue:Else:Break:EndIf:Next
If t(tour,i)>old_value Or t(tour,i)=0:t(tour,i-1)=old_value
t(old_tour,old_pos)=0:inMvt=0:nb_mouvements+1:Else:If tour=old_tour
t(old_tour,old_pos)=old_value:inMvt=0:EndIf:EndIf:DrawBackGround()
DrawDisques():Check_Victoire():Continue:EndIf:Else
If x>470 And x<520 And y>305 And y<335:If txt$<>"":inMenu=0:Initt()
DrawBackGround():DrawDisques():EndIf:EndIf:EndIf:EndSelect:EndSelect
Until Event=#PB_Event_CloseWindow:DataSection
Data.i 575,555,535,515,495,475,455,435,415,395:EndDataSection
Merci ... Ça fait plaisir sachant que moi et l'artistique ça fait 2graph100 a écrit :C'est jolie tout en vert![]()
Tu peux modifier la variable max_disque et la mettre à 6 . Je vais la mettre à 8 ce seras un peut loin long ...graph100 a écrit : ... mais on gagne quand ? (je suis allé jusqu'à 6, après c'est super long)
Il y a un bug dans le programme, il compte 1 caractère de trop sur chaque ligne, c'est lié au StringField qui n'accepte normalement qu'un seul caractère de séparation (Cf doc). Or #CRLF$ vaut 2 caractèresfalsam a écrit :Un petit code hors concours pour compter le nombre de lignes de votre code et la largeur maximum d'une ligne.
Copier le code à traiter en mémoire (hors commentaire en début de code) et lancer le code ci-dessousrésultatCode : Tout sélectionner
;***************************************************************************** ;* ;* Season's Greetings PurePunch Demo contest ;* PureBasic 5.00 ;* 80 lines of 80 chars, 1 month delay ;* ;* Name : Line Counter & Longest line ;* Author : falsam ;* Date : 29.11.2012 ;* Notes : off contest ;* ;***************************************************************************** B$=GetClipboardText():E$=#CRLF$:For i=1 To CountString(B$,E$)+1:L+1 If Len(StringField(B$,i,E$))>C:C=Len(StringField(B$,i,E$)):EndIf:Next Debug "Line Counter "+Str(L):Debug "Longest line : "+Str(C)
Line Counter 3
Longest line : 70
Code : Tout sélectionner
;******************************************************************************
;*
;* Season's Greetings PurePunch Demo contest
;* PureBasic 5.00
;* 80 lines of 80 chars, 1 month delay
;
;* Name : Pict2AsciiArt
;* Author : lepiaf31
;* Date : 11.12.2012
;* Notes : Only with PNG images
;*
;******************************************************************************
Global w,h:Procedure w():If OpenWindow(0,0,0,800,480,"Pict2AsciiArt",13238272|1)
EditorGadget(1,330,10,450,380):f.CHARFORMAT\cbSize=SizeOf(CHARFORMAT)
f\dwMask=#CFM_FACE:PokeS(@f\szFaceName,"Courier New"):ImageGadget(3,0,0,0,0,0)
SendMessage_(GadgetID(1),1092,4,@f):ButtonGadget(2,10,10,110,30,"Load Image")
TrackBarGadget(4,360,410,200,30,1,5):TextGadget(5, 330, 415, 30, 20, "Size:")
TextGadget(6,10,415,90,20,"Gamma:"):ButtonGadget(8,690,400,90,30,"Copy")
TrackBarGadget(7,110,410,200,30,0,800):ButtonGadget(8,690,400,90,30,"Copy")
ScrollAreaGadget(0,10,50,310,340,0,0):ImageGadget(3,0,0,0,0,0):CloseGadgetList()
EndIf:EndProcedure:Procedure g(a,c,v.f):Dim t(w,h):d.f=1/v
StartDrawing(ImageOutput(a)):For x=0 To w-1:For y=0 To h-1:e=Point(x,y):r=Red(e)
g=Green(e):b=Blue(e):r=255*Pow(r/255,d):g=255*Pow(g/255,d):b=255*Pow(b/255,d)
t(x,y)=RGB(r,g,b):Next:Next:StopDrawing():StartDrawing(ImageOutput(c))
For x=0 To w-1:For y=0 To h-1:Plot(x,y,t(x,y)):Next:Next:StopDrawing()
EndProcedure:Procedure.s a(i,r):s=16:Dim t.a(s):p=2*r:q=3*r
m.s=Space(Round(h/(q),1)*(Round(w/(p),1)+2)):CopyMemory(?tab,@t(),s)
StartDrawing(ImageOutput(i)):While y<h:x=0:While x<w:a=0:For j=0 To q-1
For i=0 To p-1:If x+i<w And y+j<h:c=Point(x+i,y+j)
a+Round((Red(c)+Green(c)+Blue(c))/3,2):EndIf:Next:Next:a=a/(p*q)
a=Round((a/255)*(s-1),2):If a>=s:a=s-1:EndIf:PokeA(@m+k,t(a)):k+1:x+p:Wend
PokeS(@m+k,#CRLF$):k+2:y+q:Wend:StopDrawing():ProcedureReturn m:EndProcedure
UsePNGImageDecoder():w():i=0:Repeat:Select WaitWindowEvent()
Case #PB_Event_CloseWindow:Break:Case #PB_Event_Gadget:Select EventGadget()
Case 2:f.s = OpenFileRequester("Load","","PNG|*.png",0):If f And LoadImage(0,f)
s=1:CopyImage(0,1):w=ImageWidth(0):h=ImageHeight(0):SetGadgetAttribute(0,1,w)
SetGadgetAttribute(0,2,h):SetGadgetState(3,ImageID(1)):SetGadgetState(4,5)
SetGadgetState(7,(GetGadgetAttribute(7,2)-GetGadgetAttribute(7,1))/8):t.s=a(1,s)
SetGadgetText(1,t):i=1:EndIf:Case 4:If i:s=6-GetGadgetState(4)
SetGadgetText(1,a(1,s)):EndIf:Case 8:If i:SetClipboardText(GetGadgetText(1))
EndIf:Case 7:If i:u=GetGadgetAttribute(7,2)-GetGadgetAttribute(7,1)
val.f=(GetGadgetState(7)/u)*8:If val>0 And val<8:g(0,1,val)
SetGadgetState(3,ImageID(1)):SetGadgetText(1,a(1, s)):EndIf:EndIf:EndSelect
EndSelect:ForEver:DataSection:tab:
Data.a 35,87,75,69,68,71,76,102,116,106,105,59,44,58,46,32:EndDataSection
Code : Tout sélectionner
#############################################################################################################
#############################################################################################################
#############################################################################################################
############################EffW#############################################################################
###########################GGf.:G#################Gj;jW######################################################
##########################tG##L .D##############Wj,GWjtW#####################################################
#########################Df###W: :K############K;.D##W,f#####################################################
#######################WE;W####j t#W#########D: j####t,W####################################################
#######################E;E#####E . D########WD..:W####E.D####################################################
######################W,L#######; i########E: GW#####ii####################################################
######################G:W#######D. fW#####D:. j#######E.E###################################################
#####################K;D########W: .D####K: .E########;f###################################################
#####################f,W########W: . iEDDG, jW########Li###################################################
####################W.j#W#######W, . .D#########D;###################################################
####################L.D##########, .K#########D:W##################################################
###################W;;#####EKKWEj iK########G.E##################################################
###################G G###Wt ... .,itW####G G##################################################
###################; tKWDi . . iK##Ki f##################################################
##################W. .. . . t. .,,. ;W#################################################
##################E .:ifLLft:. :K: .,jtj,. .E#################################################
###############W##L. :tW######Wi iK. .jK#####Ki . G#################################################
#################W; :E#########Wi GW,.L########Wt.. L#################################################
#################E G###########E.E#,t###########i f#################################################
###############W#j E#######fK###iK#iE###KG######G j#W###############################################
###############D, D######W,E###iK#jE###D,K#####D ,K################################################
##############D: iWW########WKLW#Li####W######f :t###############################################
##############j fW########WfK##K;tW########G. G##############################################
############W#i .,tLjLK#####DjEfjtWK;iEK###WKt.. .E##############################################
##############Ki. .D####KfttffLK#WL,iK##KGffGLfEWWDL,. j###############################################
################D:. :WW#####WttGDKK#####WKEDDEK#######D. :L################################################
#################Ei f#######WWWEDDLGGDKEEKWWWEW######L .jK#################################################
###################Df;D#KDW#########################Kt::jE#################################W##K##############
######################WLfKDWWW##################WWtfGGKW##################################WiKWtW#############
####################WLLW#LL#D;iEW##############WfEWWf;K##################################WE,ii,LEW###########
####################KD##EiWDttjij;;;;tffffftGWKDWjEW#KiE#############################KLi,: :jK#########
#####################W##WKffDDDf;,LKEDGGDKW##Kjj#WjK##KtWW#########################Wt. .L########
########################WGLLj,iLEi LW####WKDj..G#WKW##############################D, .f#######
########################Effft;:,:f.,;;jji:. .fWW##############################L. . ;#######
#######################WfK##WWWf:jKWWKGj. :G#W###########################D. . L#######
#######################Wi;W#jj##KffW####j .fW##########################W; . . :E#######
########################D.;f;W#WKjt#####t ;tfLDDDKW##################G. ,jfGGti: iK########
#########################Ef;,iftjL#####Wj. ..iLW##############W; .tW######WKDDEE##########
#############################WGK########t. .,ijff, :G#############G .G########################
#############################KtW########WKKWW####Wj. . iW##########W; i#########################
#############################tD#################Wf. ,W#########f ,K#########################
############################W,W################G: L########K: .K##########################
############################W:E###############D: :W######Wt. f###########################
#############################j,K############Wtt. ,;: t######L. jW###########################
#############################K;:E###########ti#f. .jE##WL. :W####G. :E############################
##############################Wi.E#########W,f##Ej,ijfEW######K, jLEGi. ,D#############################
###############################Wj:jG#W######i,K################D ,fK##############################
################################K:L#W######Wf iE################f .;LWW###############################
###############################Wi;########Kijtj;D###############Wi.iLtfLGK###################################
###############################E:iWWWWWWWE:GW#W##W###############f,W#########################################
################################Wfji;;;;;;,,;;,,,,:,,,::::,,,,,:::D##########################################
#################################################WWWWWWKWWWWWWWKKK###########################################
#############################################################################################################
J'aime beaucoup. Bravooooooolepiaf31 a écrit :Voici mon PurePunch. il permet de convertir une image en AsciiArt avec la possibilité de corriger le gamma de l'image et de modifier la taille de l'asciiArt. Dites moi ce que vous en pensez =)
MESSAGE SUPPRIMER PAR MOI MEME...