PB 5.20 - Pure Snake - Schlangensimulation

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von STARGÅTE »

Hallo Leute,

eigentlich wollte ich ein Minigame schreiben (PureSnake), doch leider hab ich die lust verloren.
Damit der Code für die Schlangensimulation aber nicht verloren geht, möchte ich ihn mit euch teilen:
Bild

Die Schlange bewegt sich immer zur Maus.

Code: Alles auswählen

;- Vector-Include

Structure Vector
	X.f : Y.f
EndStructure

Procedure.i V_Set(*Use.Vector, X.f, Y.f)
	*Use\X = X
	*Use\Y = Y
	ProcedureReturn *Use
EndProcedure

Procedure.i V_Copy(*Use.Vector, *Source.Vector)
	*Use\X = *Source\X
	*Use\Y = *Source\Y
	ProcedureReturn *Use
EndProcedure

Procedure.i V_Add(*Use.Vector, *Source.Vector, Factor.f=1.0)
	*Use\X + *Source\X*Factor
	*Use\Y + *Source\Y*Factor
	ProcedureReturn *Use
EndProcedure

Procedure.i V_Multiply(*Use.Vector, Value.f)
	*Use\X * Value
	*Use\Y * Value
	ProcedureReturn *Use
EndProcedure

Procedure.i V_Addition(*Destination.Vector, *Source1.Vector, *Source2.Vector)
	*Destination\X = *Source1\X + *Source2\X
	*Destination\Y = *Source1\Y + *Source2\Y
	ProcedureReturn *Destination
EndProcedure

Procedure.i V_Subtraction(*Destination.Vector, *Source1.Vector, *Source2.Vector)
	*Destination\X = *Source1\X - *Source2\X
	*Destination\Y = *Source1\Y - *Source2\Y
	ProcedureReturn *Destination
EndProcedure

Procedure.f V_Length(*Source.Vector)
	ProcedureReturn Sqr(*Source\X * *Source\X + *Source\Y * *Source\Y)
EndProcedure

Procedure.i V_Normalize(*Use.Vector)
	Protected Length.f = V_Length(*Use)
	If Length
		*Use\X / Length
		*Use\Y / Length
	EndIf
	ProcedureReturn *Use
EndProcedure

Procedure V_Orthogonalize(*Use.Vector)
	V_Normalize(*Use)
	Swap *Use\X, *Use\Y
	*Use\X = -*Use\X
EndProcedure

Procedure.i V_SetLength(*Use.Vector, Length.f)
	V_Normalize(*Use)
	V_Multiply(*Use, Length)
	ProcedureReturn *Use
EndProcedure



;- Snake

#SnakeLength   = 20 ; Schlagenteile
#SnakeVelocity = 100 ; Geschwindigkeit

Structure Snake
	Sprite.i
	Array Node.Vector(2)
	Velocity.Vector
EndStructure

Global TimeFactor.f, Time.i = ElapsedMilliseconds()

Procedure MoveSnake(*Snake.Snake, TargetX.f, TargetY.f)
	
	Protected I.i, Last.i = ArraySize(*Snake\Node())
	Protected Line.Vector
	
	With *Snake
		
		; Kopf bewegen
		V_Set(\Velocity, TargetX-\Node(0)\X, TargetY-\Node(0)\Y)
		V_SetLength(\Velocity, 24)
		V_Subtraction(Line, \Node(0), \Node(1))
		V_Add(\Velocity, Line, 4)
		V_SetLength(\Velocity, #SnakeVelocity)
		
		; Schlagenteile hinterher ziehen
		V_Add(\Node(0), \Velocity, TimeFactor)
		For I = 1 To Last
			V_Subtraction(Line, \Node(I-1), \Node(I))
			V_SetLength(Line, V_Length(Line)-16)
			V_Add(\Node(I), Line)
		Next
		
	EndWith
	
EndProcedure

Procedure DisplaySnake(*Snake.Snake)
	
	Protected I.i, Last.i = ArraySize(*Snake\Node())
	Protected Line.Vector, Line2.Vector, Orth.Vector, Orth2.Vector
	Protected Dim Node.Vector(Last)
	
	With *Snake
		
		CopyArray(\Node(), Node())
		For I = 1 To Last-1
			V_Normalize(V_Subtraction(Line, Node(I-1), Node(I+1)))
			V_Add(Node(I), Line, Sin(I-ElapsedMilliseconds()*0.005)*5)
		Next
		
		; Kopf
		ClipSprite(\Sprite, 80, 0, 48, 64)
		V_Normalize(V_Subtraction(Line, Node(0), Node(1)))
		V_Normalize(V_Subtraction(Line2, Node(1), Node(2)))
		V_Orthogonalize(V_Copy(Orth, Line))
		V_Orthogonalize(V_Addition(Orth2, Line, Line2))
		TransformSprite(\Sprite, 
			Node(1)\X-Orth2\X*16, Node(1)\Y-Orth2\Y*16,
			Node(0)\X-Orth\X*16+Line\X*24, Node(0)\Y-Orth\Y*16+Line\Y*24,
			Node(0)\X+Orth\X*16+Line\X*24, Node(0)\Y+Orth\Y*16+Line\Y*24,
			Node(1)\X+Orth2\X*16, Node(1)\Y+Orth2\Y*16)
		DisplayTransparentSprite(\Sprite, 0, 0)
		
		; Schwanz
		ClipSprite(\Sprite, 0, 0, 40, 64) 
		V_Normalize(V_Subtraction(Line, Node(Last-1), Node(Last)))
		V_Normalize(V_Subtraction(Line2, Node(Last-2), Node(Last-1)))
		V_Orthogonalize(V_Copy(Orth, Line))
		V_Orthogonalize(V_Addition(Orth2, Line, Line2))
		TransformSprite(\Sprite,
			Node(Last)\X-Orth\X*16-Line\X*16, Node(Last)\Y-Orth\Y*16-Line\Y*16,
			Node(Last-1)\X-Orth2\X*16, Node(Last-1)\Y-Orth2\Y*16,
			Node(Last-1)\X+Orth2\X*16, Node(Last-1)\Y+Orth2\Y*16,
			Node(Last)\X+Orth\X*16-Line\X*16, Node(Last)\Y+Orth\Y*16-Line\Y*16)
		DisplayTransparentSprite(\Sprite, 0, 0)
		
		; Mittelteil
		ClipSprite(\Sprite, 40, 0, 16, 64) 
		For I = 1 To Last-2
			V_Normalize(V_Subtraction(Line, Node(I), Node(I+1)))
			V_Normalize(V_Subtraction(Line2, Node(I+1), Node(I+2)))
			V_Orthogonalize(V_Addition(Orth, Line, Line2))
			V_Normalize(V_Subtraction(Line2, Node(I-1), Node(I)))
			V_Orthogonalize(V_Addition(Orth2, Line, Line2))
			TransformSprite(\Sprite,
				Node(I+1)\X-Orth\X*16, Node(I+1)\Y-Orth\Y*16,
				Node(I)\X-Orth2\X*16, Node(I)\Y-Orth2\Y*16,
				Node(I)\X+Orth2\X*16, Node(I)\Y+Orth2\Y*16,
				Node(I+1)\X+Orth\X*16, Node(I+1)\Y+Orth\Y*16)
			DisplayTransparentSprite(\Sprite, 0, 0)
		Next
		
	EndWith
	
EndProcedure






InitSprite()
InitKeyboard()

UsePNGImageDecoder()

Enumeration
	#Window
	#Sprite_Snake
EndEnumeration

OpenWindow(#Window, 0, 0, 800, 600, "Pure Snake", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window), 0, 0, WindowWidth(#Window), WindowHeight(#Window), 0, 0, 0)

SpriteQuality(#PB_Sprite_BilinearFiltering)
CatchSprite(#Sprite_Snake, ?Snake, #PB_Sprite_AlphaBlending)


Define Snake.Snake, I.i
ReDim Snake\Node(#SnakeLength)
Snake\Sprite = #Sprite_Snake

For I = 0 To #SnakeLength
	V_Set(Snake\Node(I), 400-I*16, 100)
	V_Set(Snake\Velocity, 20, 0)
Next



Repeat
	
	Repeat
		
		Select WindowEvent()
			Case #PB_Event_CloseWindow
				End
			Case #Null
				Break
		EndSelect
		
	ForEver
	
	TimeFactor = (ElapsedMilliseconds()-Time)/1000
	Time = ElapsedMilliseconds()
	
	ClearScreen($E0E0E0)
	
	MoveSnake(Snake, WindowMouseX(#Window), WindowMouseY(#Window))
	DisplaySnake(Snake)
	
	FlipBuffers()
	
ForEver

DataSection
	Snake:
	Data.q $0A1A0A0D474E5089,$524448490D000000,$2000000080000000,$7022DA0000000608,$4942730400000025
	Data.q $64087C0808080854,$5948700900000088,$1B0000AF1B000073,$00001C911A5E01AF,$6F53745845741900
	Data.q $7700657261777466,$63736B6E692E7777,$9B67726F2E657061,$49310E00001A3CEE,$6D5BED9C78544144
	Data.q $BF74FA7E95C59590,$C3B0CC0CEE6BF71F,$2446E1289DD1A8CC,$9A5B535B1650AE0B,$FF1258C62823F32C
	Data.q $4DC4D64FE4D92668,$36B18A98881A5AC9,$CA8B446D49553465,$540CA4525C4D71AE,$02C9658A4A76B661
	Data.q $066218D65D64E085,$3F7AFDCB99981818,$BDCEE6778FECFBBA,$BAA9E1015D9820C0,$7DDDBF774F3BEF35
	Data.q $33305A7DD39F774E,$F87C82E21084042E,$3E4D0DF686DAC303,$874A943EBEBE8A8F,$5A14EC308B8C1045
	Data.q $309B6D6115D68497,$44C532913EC676A6,$F58A99338654ACE3,$60E0F00EE5CE36FD,$C02030D606050307
	Data.q $66015AFFE29843EF,$E85487E6F8032C16,$340032169AED0D43,$5A26A6325C8A3A0A,$C9975A45638A1D5B
	Data.q $8C2D662494A94518,$0000B56B0AECC491,$A56FA52C508588A2,$71A575D6355AB6B4,$B2375C65254B6D1C
	Data.q $605A8D0D0EC54C99,$1FC228F9F2D6194A,$D3C0553EC2CD00A5,$31D5329D8D000F5A,$EFFF93CB0C332A67
	Data.q $24753810BAF5DF7D,$6B49161844E7B7B7,$E38A4B4E9496B487,$D6A5638E4736B492,$2D6A5871D2C3195A
	Data.q $0415AC89992C5295,$10ACA44C303EC9D8,$631B5A94B4A31AD6,$98E38831B178E3B4,$E9D19AB5740FDF63
	Data.q $C1C19B667A7A67B4,$698056F38452F3A1,$05C052687C094FA1,$A29D530006D4D331,$0091B585098C2075
	Data.q $77FE99C66DFC90DA,$8B1CC1236B0F22F1,$966B48D4C617C64C,$94AE31A42EB910C6,$632A52928C632B52
	Data.q $244384631D8A22A4,$38C88A4B58E0211C,$040209110404B2D6,$5ADA444B60196B5B,$1B010C94A44599AB
	Data.q $8086C002006B210A,$5CE266AD51918D0E,$65AC0B008A2755AE,$CE0149CE1A5D6700,$1D1D1882BEBEF424
	Data.q $7142304114EC30A2,$188754DB53A9D3EC,$4F3C2D662218C923,$011B3112D611B312,$B3069E7922B66078
	Data.q $CD16FBDE00079E11,$612B3056DEA48107,$44490B5A58A54B0C,$4C18C70910ED18CA,$2E4108E16B5D9B0A
	Data.q $5D6AE402EC109EC0,$3E0DADF3E3C30F6B,$9D7A4A5B3367ACC2,$085141B5B49C211C,$DACD4A903A944235
	Data.q $52D62A644A3D9445,$AB888550C6CA8899,$E2010615398D5144,$5EF304343D71B6B6,$6BF05A601559C1B3
	Data.q $3356A864A95E849B,$FBE57C0832B39732,$9A6FC71CAC71C656,$49F9243B27718CDA,$0D9882CC965AC829
	Data.q $60024CC160082949,$FBD4C28015A87491,$92829480AEA48CC5,$4250AD656224B136,$4DC089BB37464DC0
	Data.q $47EAA28BAEC78E2A,$8210EE36B2AE0DAD,$69FBE73665D9985B,$64CB6ECCA595042B,$454CCE392247FEAE
	Data.q $6A0CA4941C72516B,$7EDF8CA18416D38E,$304A4CECFA01BF7B,$68BF044FC22402A3,$134A951E8B151B51
	Data.q $5294A6185409932A,$8E371C211C9295D6,$344DD610AEC44BAD,$F254888AB36A6A7E,$3241274956664A57
	Data.q $02529BBA72633243,$F93B26800B3C1120,$5998244416045762,$C70C2ABA5B5A4332,$30E78DAC7B0DAD7B
	Data.q $AD9E58029B66169B,$B3A0B7CF9071C714,$513130089C4E0E73,$57307D5B5A04649B,$CD4E8A2881363630
	Data.q $F3CF7EF8DFBC896A,$551C731E0086E54A,$3B5AAB8A9594C634,$704A4CF50783C1D1,$681F5F7E12980546
	Data.q $2A5426952C84F878,$01E4442794211D25,$C692A6D98A5599F0,$A992F084252807C1,$8F6298DA4D6B5C8D
	Data.q $3D01DB0E38AEB531,$A7332C9802DD5ACB,$D6648401C201EB01,$5FBFE4614BD8D53C,$1CBCF0F94A902108
	Data.q $161E441F4A424082,$3D52FA9EA7879C2E,$7D1F478DFFDDEEDD,$4BD2F0A5CB9EFEA1,$73B10820894A418F
	Data.q $7063AF57EAFC2EE7,$F2F94371C711DFF0,$EDB74E9E3F77EF98,$452A4E23198EDAD5,$9E216F6F612BAD15
	Data.q $120149A0951A0BB2,$6D45A2D2CF8033C1,$6CC387DF1C08E474,$2889A53334C36B7D,$66D99652D6B3644B
	Data.q $91952AB336619089,$D65D44C60DEA819B,$2F3FB9FFEAC01C9A,$C0C9C70BAEB80852,$05D6F5B87A520718
	Data.q $74D735C4EFE7FCF8,$C0C0C51A1D0E0003,$FFD7EB0210E74FDF,$18C60001DABABA2D,$7AB54A943AEF7BDC
	Data.q $37C5E2C01EEB759A,$BC15E4FC9FB5F69C,$553631389C46E2F8,$E7BF7DE7B6BCF59A,$75DC78E6519D6B25
	Data.q $2560F07851B5B2FD,$420CE0151B667E06,$35C3C3900A152CFA,$B32318C803E12947,$6ADC03C8913C8842
	Data.q $FC32A56E7081E52D,$67D38DAC0B6B6B29,$5294142105220AEA,$6D05BE7C832B3598,$8E0F07199728AD6D
	Data.q $1F19322421050841,$C2C9696803D6FADF,$FCBC4EEAFABC5D75,$4B9720440B1220F2,$007DA748D586C361
	Data.q $E3FC7E2BFD2F4BC0,$6F5BFCEC5CEFF5AD,$777BFAECC747471D,$DFEC3AF1BC6E0777,$F379B19980000EFF
	Data.q $5290000FD03031AF,$55DD6EB602D2E962,$C02A33BEDB6DB3CF,$C19F55AAC19F55AA,$26FF5FEBE06F3D9E
	Data.q $B417D8E1852A952A,$663BFFCECD94DCAE,$50B6BBEFAD54C6C1,$6F4C42CB5A1A1D80,$9BBFE8C94154D11A
	Data.q $D2A72E6E0048050A,$6EE01DB231BCAA52,$8C106F44211AE821,$E2626A7BEE2C51DC,$7C2249727D68D6BF
	Data.q $DB85D3D3D0F1C701,$685DC771DC0BFB6E,$969680BE7C805B6B,$BE060629FF4E901B,$5E9FA78FBE1B0D8C
	Data.q $73ADAD14799E6787,$8B356A2E440A6520,$745CF77745DF7BBD,$7225FCF73DC6CC74,$6A952801259234B9
	Data.q $562BD1BD7B69B4D8,$D4BF7F55366C8ADC,$FDE9A5BFEFE80078,$C18DA78E2176D7B5,$0C763BF13416CB65
	Data.q $D58639191F84DAC1,$F7F45EFFBFA1D7AB,$6BABA1D7ABD58BDF,$F79BCC67F96CB62E,$8B179FE131800051
	Data.q $55295AE5442CBC6F,$20C0908B15E6B996,$68BF9AF4C04B9635,$98613BEE3F1D1B51,$220EE2279C41054D
	Data.q $8B8BAA6311F006EE,$CC3DC8C104D737C5,$DD3A4195286005A6,$FBCAE5618FD6D68D,$1E2789E02F2BCAF0
	Data.q $9A9BA6E00F0FC3C1,$D1D18CDFAFD67237,$C562B1F69D200022,$A950DB8DC6FC4DAD,$C356A82E7F059704
	Data.q $6BCF26D6082177A6,$1B18EDC1C1853CD6,$B7070638D8D8C71B,$D8BAEB871F87E1E3,$242EEAB558FBE1B0
	Data.q $17FDBF8B17B6C783,$A7264CBC70166C63,$D06EA6DC6A0E850A,$8E395C747A3A4186,$036AAEBACEB1C5EB
	Data.q $0F3BDAB5D5F009D0,$0EDC6D66BE074A94,$FF07C1E2D7BDBD00,$421DAF3C2F5CB906,$C998C60863B1D838
	Data.q $3536D7E3FC7C0ACA,$D3EDC5CC990871C0,$FBD36779BCD8907F,$FE06C8E3862FB7ED,$F66CF84A95E34E3F
	Data.q $F3FACEDCEE7715F4,$3AF4FD3C05F2BE57,$185F1F5ABB3C5E24,$9D861502D5ABCA04,$C3FE8F4D5AEB71A2
	Data.q $9E91932AD7BFF7E2,$ACE803662D6B3294,$0025C9F1C4578756,$0D7E8FA3C392D2D0,$6FAC8F23C12D96CB
	Data.q $7C8072E516D680AA,$D17E2FC0356A833E,$1AFAB2E779DDE53C,$572B894DA706AD59,$0E87F0797326432E
	Data.q $7E5F2C29FFD7D68D,$B7D8E3E1F0F9FD73,$EF1C7DDFBBFE666F,$8725A5A3174BA585,$C997D8A8A224F162
	Data.q $8EAD5959BAE1D9CC,$2890E04693012D34,$7910248D9B293B16,$17470C35A00322D6,$FCFE6000DB89E187
	Data.q $B44802CF0BC2F1EB,$30383E9BB7DEEF73,$B4D800033E7C8FD0,$9AA6CD9B05937B69,$BE5CA3B69B4DC4A6
	Data.q $B88D13FE5B2DF97C,$C0D1DDDDD0EBC6F1,$AE7F2A7677A344EF,$D61278B142E9E9E8,$AD2B6389C1123746
	Data.q $025F4E077D7D136D,$08054A52497BBD92,$FDD0ED5ADCEA98CF,$D1FA3F1E6B6B4400,$7EB026C7638000D3
	Data.q $8BD85C2D0FA6E6FD,$B00952A6A313CBE5,$5B8AC57E26B6E371,$E0D8E3E772FFA3EB,$61068DF13576D7B5
	Data.q $FE467BBADD6C1B1C,$6B580003CC28507C,$009AC713C9A662AE,$9853BC866869EAFA,$E1F057A05BA84C3A
	Data.q $C652B1CA94015D42,$C39994A1C034631A,$F162E003CFD5F4E9,$60DAD0CBEFBBEE24,$BD853ABFBAD69CCE
	Data.q $9351892D96C6DF7B,$BF135972B958F8C9,$1E15C1AB5476D369,$26E2FB7EDC48E380,$7E4F891C7420D1BE
	Data.q $E86860F9FC8CD172,$D61083FC9100002D,$69EB06062905B126,$2B687CF9C0A01526,$002A1121D666B495
	Data.q $F9CDE78F75AF3C26,$76DC21EEFBBC0025,$97CB05B4DA6C4ADB,$8AF3774F0B8582DF,$A6E5CBCA64800AC5
	Data.q $E5F27EECF972E0FD,$FF7FB000741A37C6,$05BF81B46874383B,$E18AE7F2A716A18D,$B5BF77220000C3E1
	Data.q $2464F8D10C871D88,$EEF2D684764A0251,$5CE66AA9933807DD,$46001388C64A2D60,$6FF6D38ECDEEA952
	Data.q $CFDBFB7C42083800,$7F79BCC7EEBBAEE0,$B26CD908A531F4D2,$66E9FD3E3ED3A5CE,$051F56DF3FE7F83F
	Data.q $4ED4FCD0BF0FDA17,$76AEAEC30D1A2360,$13F57ABF3330582C,$3D0F7E9AAFE4B258,$C2EC763BF4A68DF4
	Data.q $07E6EB80002593C9,$3BF7C6CA0828A5AD,$CECFA01B06BA636D,$894A472C309AED9E,$1FC2211E01C6600A
	Data.q $786EE5CC5FABE9D2,$4787C380011DC892,$01D2A500FE1FC3F0,$D2E9611B5831C104,$9BC66654FC4CA402
	Data.q $516C7142A9AEFE6F,$AF78CE5C6E6F34A9,$5AF1A725FEFEC09D,$5795A7232391FC27,$1CFB3ECFCFEB572E
	Data.q $11093D26C7D5FABE,$4A9875F7D7BED529,$1286232646F3DAF9,$F760421118892028,$0D401880A16DBBEE
	Data.q $B6663805A58E22C8,$BAFE6E5CE5D32935,$60AC8E18737E3A28,$B50D75A0D75A6DB6,$FEBC5BF8DC6C11DA
	Data.q $9B21D7F5FD712FFA,$D31083BFBDDEC76D,$3C8E8E8FD03035FA,$5CFE685F87EF0B80,$D05B319A6F374E90
	Data.q $F7C0DF3BE77E7764,$0037EFB7D80FF7BE,$FF07C1E3E60B0580,$087C5F8BE114511A,$78E8B9933FF5BD6F
	Data.q $08195252FDDD7F3E,$27478787A6A54AC3,$9A0C386800D68523,$050A3774343B0254,$7DF58CA56692A544
	Data.q $88422A2001B6B5A9,$77B3FBE138EBCF09,$5A53F870C3DBAD68,$08E38D9D5ACCFED7,$1210A769348C8E47
	Data.q $FB9EE7851C703842,$59ACC27FD3FA7E01,$61D378C4C4D061C9,$23A1D0E35785C2D0,$1874DAA952A0C3F5
	Data.q $F781E352FB3F3674,$BF135F6DB6DC09DE,$39D9DF0944016974,$67BF1358F93E4F07,$4A84BEE7DCF81BCF
	Data.q $1C9D7EF4A4099925,$A4E3B2E8C6A3D906,$6CFB878664BE7CC2,$A1D4C03C5A7811A3,$B8E8F4746D45A2D0
	Data.q $8C679A885736DD72,$B5AC9A52D22B5B4C,$319089645848F272,$5C7145B1D146B746,$CCF2601761B598F9
	Data.q $3C1C7E25C4B2E0EC,$038196BDDEEC1335,$4E9AA54B69DBDBDC,$B28B32AE8E3910A5,$98A5042F8667C694
	Data.q $DB7CEBCF7CA44539,$D6AEC10BE003C9F7,$1EB08847A575AFB1,$D673A10BCE8C6210,$0FA007003EC014DA
	Data.q $D144428A23084059,$BAD8BBEB75B3BDB4,$1F094C8406B3D5F5,$2972E7E146EADC48,$013E75D78913E27C
	Data.q $4512A8A549F1CC21,$083C1F416F6F51E3,$090AF3DB54D67E06,$AD54574E994356AB,$42BAC88721C71D26
	Data.q $225D88971D8E3758,$A0E99C244BB35A38,$2575084290CC5248,$4D6121545C666C24,$A142882801141A09
	Data.q $A7AEBA588A342839,$CE76B4AC54A966B4,$1412B8B310D42821,$1F7A25368507317A,$E92D3A44A6D6E161
	Data.q $C67E161C25F8584A,$B581E8043179E70C,$317C25C862E57115,$380C3574E7CCC664,$25D86AE5701CBEF5
	Data.q $3972BC0B3DEC357B,$CAE0C7FA1CB9F2F4,$02FFF87AE38BF0F5,$3646C3E924DA3596,$444E454900000000
	Data.q $00000000826042AE
EndDataSection
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von RSBasic »

:allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von ts-soft »

:allright: gefällt mir!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von NicTheQuick »

Da scheint irgendwas falsch zu sein:
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von STARGÅTE »

Jo, weil es selbst in PB 5.20 immer noch nicht geschaft wurde, dass TransformSprite() auch unter DX11 oder OpenGL läuft -.-
Eine einfache Vertex-Vertauschung (wie es damals der Fall war) tuts leider auch nicht.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von True29 »

netter Code ;) echt schick.
Vielleicht machste ja doch irgendwann weiter.
Was genau war denn dein ziel ? einfach ein snake clone ?
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von STARGÅTE »

Jo, ein snake clone, wo sich die Schlange frei bewegen kann.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von DrShrek »

STARGÅTE hat geschrieben:Jo, weil es selbst in PB 5.20 immer noch nicht geschaft wurde, dass TransformSprite() auch unter DX11 oder OpenGL läuft -.-
Eine einfache Vertex-Vertauschung (wie es damals der Fall war) tuts leider auch nicht.
Ist das schon gemeldet als Bug?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von STARGÅTE »

Eigentlich schon, aber ich werde einen der Topics noch mal anstupsen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: PB 5.20 - Pure Snake - Schlangensimulation

Beitrag von True29 »

Hi , da ich die idee ein snake zu clonen cool fand hab ich es mal etwas erweitert.

das ganze wurde mit pb 5.20 final geändert.

was is nun neu ?
- items zum einsammeln = 30
- items haben effekt auf schlange
3 items Grünes Positiv "langsamer werden,weniger notes", Rote Negativ "gegenteil von grün" ,schwarzes "sowas wie game over"
- Zufällig werden nach der respawnrate nach dem aufsammeln hinzugefügt.
- man kann gewinne und verlieren.
mit einer einfache collsion kontrolle.

ps: der Code is nich perfekt ;) ihr dürft das ganze natürlich gerne weiterbauen.
Trotzdem viel spaß.

Code: Alles auswählen

;- Vector-Include

Structure Vector
   X.f : Y.f
EndStructure

Procedure.i V_Set(*Use.Vector, X.f, Y.f)
   *Use\X = X
   *Use\Y = Y
   ProcedureReturn *Use
EndProcedure

Procedure.i V_Copy(*Use.Vector, *Source.Vector)
   *Use\X = *Source\X
   *Use\Y = *Source\Y
   ProcedureReturn *Use
EndProcedure

Procedure.i V_Add(*Use.Vector, *Source.Vector, Factor.f=1.0)
   *Use\X + *Source\X*Factor
   *Use\Y + *Source\Y*Factor
   ProcedureReturn *Use
EndProcedure

Procedure.i V_Multiply(*Use.Vector, Value.f)
   *Use\X * Value
   *Use\Y * Value
   ProcedureReturn *Use
EndProcedure

Procedure.i V_Addition(*Destination.Vector, *Source1.Vector, *Source2.Vector)
   *Destination\X = *Source1\X + *Source2\X
   *Destination\Y = *Source1\Y + *Source2\Y
   ProcedureReturn *Destination
EndProcedure

Procedure.i V_Subtraction(*Destination.Vector, *Source1.Vector, *Source2.Vector)
   *Destination\X = *Source1\X - *Source2\X
   *Destination\Y = *Source1\Y - *Source2\Y
   ProcedureReturn *Destination
EndProcedure

Procedure.f V_Length(*Source.Vector)
   ProcedureReturn Sqr(*Source\X * *Source\X + *Source\Y * *Source\Y)
EndProcedure

Procedure.i V_Normalize(*Use.Vector)
   Protected Length.f = V_Length(*Use)
   If Length
      *Use\X / Length
      *Use\Y / Length
   EndIf
   ProcedureReturn *Use
EndProcedure

Procedure V_Orthogonalize(*Use.Vector)
   V_Normalize(*Use)
   Swap *Use\X, *Use\Y
   *Use\X = -*Use\X
EndProcedure

Procedure.i V_SetLength(*Use.Vector, Length.f)
   V_Normalize(*Use)
   V_Multiply(*Use, Length)
   ProcedureReturn *Use
 EndProcedure
 
Enumeration ;window
   #Window
EndEnumeration

Enumeration 
    #Window
   #Sprite_Snake
   #Sprite_square_red
   #Sprite_square_green
   #Sprite_square_black  
   #givespeed 
   #reducespeed
   #givenote 
   #reducenote 
   #doublespeed
EndEnumeration



;- Snake

Global SnakeLength   = 3 ; Schlagenteile
Global SnakeVelocity = 100 ; Geschwindigkeit

#MaxSnakeVelocity = 1000
#MinSnakeVelocity = 50
#MaxSnakeLength = 30
#MinSnakeLength = 2
#MaxFeatures = 5
#ItemRespawnRate = 2
#notestocollect = 30


Structure item
  sprite.i
  posx.i
  posy.i
  color.i
  feature.i
EndStructure

Structure Snake
   Sprite.i
   Array Node.Vector(2)
   Velocity.Vector
EndStructure

Define NewList Items.item()
Global NotesCollected.i
Global TimeFactor.f, Time.i = ElapsedMilliseconds()

Procedure MoveSnake(*Snake.Snake, TargetX.f, TargetY.f)
   
   Protected I.i, Last.i = ArraySize(*Snake\Node())
   Protected Line.Vector
   
   With *Snake
      
      ; Kopf bewegen
      V_Set(\Velocity, TargetX-\Node(0)\X, TargetY-\Node(0)\Y)
      V_SetLength(\Velocity, 24)
      V_Subtraction(Line, \Node(0), \Node(1))
      V_Add(\Velocity, Line, 4)
      V_SetLength(\Velocity,SnakeVelocity)
      
      ; Schlagenteile hinterher ziehen
      V_Add(\Node(0), \Velocity, TimeFactor)
      For I = 1 To Last
         V_Subtraction(Line, \Node(I-1), \Node(I))
         V_SetLength(Line, V_Length(Line)-16)
         V_Add(\Node(I), Line)
      Next
      
   EndWith
   
EndProcedure

Procedure DisplaySnake(*Snake.Snake)
   
   Protected I.i, Last.i = ArraySize(*Snake\Node())
   Protected Line.Vector, Line2.Vector, Orth.Vector, Orth2.Vector
   Protected Dim Node.Vector(Last)
   
   With *Snake
      
      CopyArray(\Node(), Node())
      For I = 1 To Last-1
         V_Normalize(V_Subtraction(Line, Node(I-1), Node(I+1)))
         V_Add(Node(I), Line, Sin(I-ElapsedMilliseconds()*0.005)*5)
      Next
      
      ; Kopf
      ClipSprite(\Sprite, 80, 0, 48, 64)
      V_Normalize(V_Subtraction(Line, Node(0), Node(1)))
      V_Normalize(V_Subtraction(Line2, Node(1), Node(2)))
      V_Orthogonalize(V_Copy(Orth, Line))
      V_Orthogonalize(V_Addition(Orth2, Line, Line2))
      TransformSprite(\Sprite,
         Node(1)\X-Orth2\X*16, Node(1)\Y-Orth2\Y*16,
         Node(0)\X-Orth\X*16+Line\X*24, Node(0)\Y-Orth\Y*16+Line\Y*24,
         Node(0)\X+Orth\X*16+Line\X*24, Node(0)\Y+Orth\Y*16+Line\Y*24,
         Node(1)\X+Orth2\X*16, Node(1)\Y+Orth2\Y*16)
      DisplayTransparentSprite(\Sprite, 0, 0)
      
      ; Schwanz
      ClipSprite(\Sprite, 0, 0, 40, 64)
      V_Normalize(V_Subtraction(Line, Node(Last-1), Node(Last)))
      V_Normalize(V_Subtraction(Line2, Node(Last-2), Node(Last-1)))
      V_Orthogonalize(V_Copy(Orth, Line))
      V_Orthogonalize(V_Addition(Orth2, Line, Line2))
      TransformSprite(\Sprite,
         Node(Last)\X-Orth\X*16-Line\X*16, Node(Last)\Y-Orth\Y*16-Line\Y*16,
         Node(Last-1)\X-Orth2\X*16, Node(Last-1)\Y-Orth2\Y*16,
         Node(Last-1)\X+Orth2\X*16, Node(Last-1)\Y+Orth2\Y*16,
         Node(Last)\X+Orth\X*16-Line\X*16, Node(Last)\Y+Orth\Y*16-Line\Y*16)
      DisplayTransparentSprite(\Sprite, 0, 0)
      
      ; Mittelteil
      ClipSprite(\Sprite, 40, 0, 16, 64)
      For I = 1 To Last-2
         V_Normalize(V_Subtraction(Line, Node(I), Node(I+1)))
         V_Normalize(V_Subtraction(Line2, Node(I+1), Node(I+2)))
         V_Orthogonalize(V_Addition(Orth, Line, Line2))
         V_Normalize(V_Subtraction(Line2, Node(I-1), Node(I)))
         V_Orthogonalize(V_Addition(Orth2, Line, Line2))
         TransformSprite(\Sprite,
            Node(I+1)\X-Orth\X*16, Node(I+1)\Y-Orth\Y*16,
            Node(I)\X-Orth2\X*16, Node(I)\Y-Orth2\Y*16,
            Node(I)\X+Orth2\X*16, Node(I)\Y+Orth2\Y*16,
            Node(I+1)\X+Orth\X*16, Node(I+1)\Y+Orth\Y*16)
         DisplayTransparentSprite(\Sprite, 0, 0)
      Next
      
   EndWith
   
 EndProcedure
 
 
Procedure Additem(List items.item(),color,feature,sprite)
AddElement(items())
items()\posx = Random(WindowWidth(#Window),10)
items()\posy = Random(WindowHeight(#Window),10)
items()\color = color
items()\feature = feature
items()\sprite = sprite
EndProcedure


Procedure Displayitem(List items.item())  
  With items()
    ForEach items()     
      DisplayTransparentSprite(\sprite,\posx,\posy)
    Next
  EndWith
EndProcedure

Procedure Get_Color_for_sprite(feature)
  Protected color.i
  
Select feature
  Case #givespeed
    color = #Red
  Case #givenote 
    color = #Red
  Case #reducespeed
    color = #Green
  Case #reducenote  
    color = #Green
  Case #doublespeed  
    color = #Black
EndSelect 

ProcedureReturn color
EndProcedure

Procedure Get_sprite_name(feature)
  Protected sprite.i
  
Select feature
  Case #givespeed
    sprite = #Sprite_square_red
  Case #givenote 
    sprite = #Sprite_square_red
  Case #reducespeed
    sprite = #Sprite_square_green
  Case #reducenote  
    sprite = #Sprite_square_green
  Case #doublespeed  
    sprite = #Sprite_square_black
EndSelect 

ProcedureReturn sprite
EndProcedure





InitSprite()
InitKeyboard()

UsePNGImageDecoder()



OpenWindow(#Window, 0, 0, 800, 600, "Pure Snake", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window), 0, 0, WindowWidth(#Window), WindowHeight(#Window), 0, 0, 0)


;// Sprites erstellen
SpriteQuality(#PB_Sprite_BilinearFiltering)
CatchSprite(#Sprite_Snake, ?Snake, #PB_Sprite_AlphaBlending)

CreateSprite(#Sprite_square_Red,10,10,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#Sprite_square_red))        
      LineXY(5, 5, 5+Cos(Radian(90))*5, 5+Sin(Radian(90))*5,#Red)
      LineXY(5, 5, 5+Cos(Radian(180))*5, 5+Sin(Radian(180))*5,#Red)    
      LineXY(5, 5, 5+Cos(Radian(270))*5, 5+Sin(Radian(90))*5,#Red)
      LineXY(5, 5, 5+Cos(Radian(360))*5, 5+Sin(Radian(180))*5,#Red)    
StopDrawing()
      
CreateSprite(#Sprite_square_Green,10,10,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#Sprite_square_Green))        
      LineXY(5, 5, 5+Cos(Radian(90))*5, 5+Sin(Radian(90))*5,#Green)
      LineXY(5, 5, 5+Cos(Radian(180))*5, 5+Sin(Radian(180))*5,#Green)    
      LineXY(5, 5, 5+Cos(Radian(270))*5, 5+Sin(Radian(90))*5,#Green)
      LineXY(5, 5, 5+Cos(Radian(360))*5, 5+Sin(Radian(180))*5,#Green)    
StopDrawing()
      
CreateSprite(#Sprite_square_Black,10,10,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#Sprite_square_Black))        
      LineXY(5, 5, 5+Cos(Radian(90))*5, 5+Sin(Radian(90))*5,#Black)
      LineXY(5, 5, 5+Cos(Radian(180))*5, 5+Sin(Radian(180))*5,#Black)    
      LineXY(5, 5, 5+Cos(Radian(270))*5, 5+Sin(Radian(90))*5,#Black)
      LineXY(5, 5, 5+Cos(Radian(360))*5, 5+Sin(Radian(180))*5,#Black)    
StopDrawing()

Define Snake.Snake, I.i
ReDim Snake\Node(SnakeLength)

Snake\Sprite = #Sprite_Snake

For I = 0 To SnakeLength
   V_Set(Snake\Node(I), 400-I*16, 100)
   V_Set(Snake\Velocity, 20, 0)
Next

Additem(items(),#Blue,#givespeed,#Sprite_square_red)

Repeat
   
   Repeat
      
      Select WindowEvent()
         Case #PB_Event_CloseWindow
            End
         Case #Null
            Break
      EndSelect
      
   ForEver
   
   TimeFactor = (ElapsedMilliseconds()-Time)/1000
   Time = ElapsedMilliseconds()
   
   ClearScreen($E0E0E0)
   
   MoveSnake(Snake, WindowMouseX(#Window), WindowMouseY(#Window))
   DisplaySnake(Snake)
   Displayitem(items())   
   
   With items()
    ForEach items()

      ;// check collision      
      If SpriteCollision(\sprite,\posx,\posy,#Sprite_Snake,snake\Node(0)\X,snake\Node(0)\Y)                
        
        ;// effect auslösen
        Select \feature
          Case #givespeed
            If SnakeVelocity + 50 < #MaxSnakeVelocity
              SnakeVelocity + 50
            EndIf
          Case #givenote 
            If SnakeLength + 1 < #MaxSnakeLength
              SnakeLength + 1
              ReDim Snake\Node(SnakeLength)
            EndIf
          Case #reducespeed
            If SnakeVelocity - 20 > #MinSnakeVelocity
              SnakeVelocity - 20
            EndIf
          Case #reducenote  
            If SnakeLength - 1 > #MinSnakeLength
              SnakeLength - 1
              ReDim Snake\Node(SnakeLength)
            EndIf
          Case #doublespeed  
            If SnakeVelocity + 100 < #MaxSnakeVelocity
              SnakeVelocity + 100
            EndIf
        EndSelect    
        
        ;// element löschen
        DeleteElement(items())
        ;// element zählen
        NotesCollected + 1
        ;// neues element
        For i = 0 To Random(#ItemRespawnRate,1)
          Define nextitem = Random(4+#MaxFeatures,5)
          Additem(items(),Get_Color_for_sprite(nextitem),nextitem,Get_sprite_name(nextitem))
        Next i
      EndIf
    Next
  EndWith
      
  ;Collision mit rand
  If snake\Node(0)\X >= WindowWidth(#Window) Or snake\Node(0)\X <= 0 Or snake\Node(0)\Y >= WindowHeight(#Window) Or snake\Node(0)\Y <= 0
    MessageRequester("Pure Snake","Verloren !", 0)    
    End
  EndIf
  
  ;Finish
  If #notestocollect = NotesCollected
    MessageRequester("Pure Snake","Erfolg !", 0)    
    End
  EndIf
  
  ;// Draw GUI   
  StartDrawing(ScreenOutput())
  DrawingMode(#PB_2DDrawing_Transparent )
  DrawText(0,0,"Eingesammelt: "+Str(NotesCollected) +" noch zu sammeln: "+ Str(#notestocollect - NotesCollected))
  StopDrawing()
  
  FlipBuffers()
   
ForEver

DataSection
   Snake:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$2000000080000000,$7022DA0000000608,$4942730400000025
   Data.q $64087C0808080854,$5948700900000088,$1B0000AF1B000073,$00001C911A5E01AF,$6F53745845741900
   Data.q $7700657261777466,$63736B6E692E7777,$9B67726F2E657061,$49310E00001A3CEE,$6D5BED9C78544144
   Data.q $BF74FA7E95C59590,$C3B0CC0CEE6BF71F,$2446E1289DD1A8CC,$9A5B535B1650AE0B,$FF1258C62823F32C
   Data.q $4DC4D64FE4D92668,$36B18A98881A5AC9,$CA8B446D49553465,$540CA4525C4D71AE,$02C9658A4A76B661
   Data.q $066218D65D64E085,$3F7AFDCB99981818,$BDCEE6778FECFBBA,$BAA9E1015D9820C0,$7DDDBF774F3BEF35
   Data.q $33305A7DD39F774E,$F87C82E21084042E,$3E4D0DF686DAC303,$874A943EBEBE8A8F,$5A14EC308B8C1045
   Data.q $309B6D6115D68497,$44C532913EC676A6,$F58A99338654ACE3,$60E0F00EE5CE36FD,$C02030D606050307
   Data.q $66015AFFE29843EF,$E85487E6F8032C16,$340032169AED0D43,$5A26A6325C8A3A0A,$C9975A45638A1D5B
   Data.q $8C2D662494A94518,$0000B56B0AECC491,$A56FA52C508588A2,$71A575D6355AB6B4,$B2375C65254B6D1C
   Data.q $605A8D0D0EC54C99,$1FC228F9F2D6194A,$D3C0553EC2CD00A5,$31D5329D8D000F5A,$EFFF93CB0C332A67
   Data.q $24753810BAF5DF7D,$6B49161844E7B7B7,$E38A4B4E9496B487,$D6A5638E4736B492,$2D6A5871D2C3195A
   Data.q $0415AC89992C5295,$10ACA44C303EC9D8,$631B5A94B4A31AD6,$98E38831B178E3B4,$E9D19AB5740FDF63
   Data.q $C1C19B667A7A67B4,$698056F38452F3A1,$05C052687C094FA1,$A29D530006D4D331,$0091B585098C2075
   Data.q $77FE99C66DFC90DA,$8B1CC1236B0F22F1,$966B48D4C617C64C,$94AE31A42EB910C6,$632A52928C632B52
   Data.q $244384631D8A22A4,$38C88A4B58E0211C,$040209110404B2D6,$5ADA444B60196B5B,$1B010C94A44599AB
   Data.q $8086C002006B210A,$5CE266AD51918D0E,$65AC0B008A2755AE,$CE0149CE1A5D6700,$1D1D1882BEBEF424
   Data.q $7142304114EC30A2,$188754DB53A9D3EC,$4F3C2D662218C923,$011B3112D611B312,$B3069E7922B66078
   Data.q $CD16FBDE00079E11,$612B3056DEA48107,$44490B5A58A54B0C,$4C18C70910ED18CA,$2E4108E16B5D9B0A
   Data.q $5D6AE402EC109EC0,$3E0DADF3E3C30F6B,$9D7A4A5B3367ACC2,$085141B5B49C211C,$DACD4A903A944235
   Data.q $52D62A644A3D9445,$AB888550C6CA8899,$E2010615398D5144,$5EF304343D71B6B6,$6BF05A601559C1B3
   Data.q $3356A864A95E849B,$FBE57C0832B39732,$9A6FC71CAC71C656,$49F9243B27718CDA,$0D9882CC965AC829
   Data.q $60024CC160082949,$FBD4C28015A87491,$92829480AEA48CC5,$4250AD656224B136,$4DC089BB37464DC0
   Data.q $47EAA28BAEC78E2A,$8210EE36B2AE0DAD,$69FBE73665D9985B,$64CB6ECCA595042B,$454CCE392247FEAE
   Data.q $6A0CA4941C72516B,$7EDF8CA18416D38E,$304A4CECFA01BF7B,$68BF044FC22402A3,$134A951E8B151B51
   Data.q $5294A6185409932A,$8E371C211C9295D6,$344DD610AEC44BAD,$F254888AB36A6A7E,$3241274956664A57
   Data.q $02529BBA72633243,$F93B26800B3C1120,$5998244416045762,$C70C2ABA5B5A4332,$30E78DAC7B0DAD7B
   Data.q $AD9E58029B66169B,$B3A0B7CF9071C714,$513130089C4E0E73,$57307D5B5A04649B,$CD4E8A2881363630
   Data.q $F3CF7EF8DFBC896A,$551C731E0086E54A,$3B5AAB8A9594C634,$704A4CF50783C1D1,$681F5F7E12980546
   Data.q $2A5426952C84F878,$01E4442794211D25,$C692A6D98A5599F0,$A992F084252807C1,$8F6298DA4D6B5C8D
   Data.q $3D01DB0E38AEB531,$A7332C9802DD5ACB,$D6648401C201EB01,$5FBFE4614BD8D53C,$1CBCF0F94A902108
   Data.q $161E441F4A424082,$3D52FA9EA7879C2E,$7D1F478DFFDDEEDD,$4BD2F0A5CB9EFEA1,$73B10820894A418F
   Data.q $7063AF57EAFC2EE7,$F2F94371C711DFF0,$EDB74E9E3F77EF98,$452A4E23198EDAD5,$9E216F6F612BAD15
   Data.q $120149A0951A0BB2,$6D45A2D2CF8033C1,$6CC387DF1C08E474,$2889A53334C36B7D,$66D99652D6B3644B
   Data.q $91952AB336619089,$D65D44C60DEA819B,$2F3FB9FFEAC01C9A,$C0C9C70BAEB80852,$05D6F5B87A520718
   Data.q $74D735C4EFE7FCF8,$C0C0C51A1D0E0003,$FFD7EB0210E74FDF,$18C60001DABABA2D,$7AB54A943AEF7BDC
   Data.q $37C5E2C01EEB759A,$BC15E4FC9FB5F69C,$553631389C46E2F8,$E7BF7DE7B6BCF59A,$75DC78E6519D6B25
   Data.q $2560F07851B5B2FD,$420CE0151B667E06,$35C3C3900A152CFA,$B32318C803E12947,$6ADC03C8913C8842
   Data.q $FC32A56E7081E52D,$67D38DAC0B6B6B29,$5294142105220AEA,$6D05BE7C832B3598,$8E0F07199728AD6D
   Data.q $1F19322421050841,$C2C9696803D6FADF,$FCBC4EEAFABC5D75,$4B9720440B1220F2,$007DA748D586C361
   Data.q $E3FC7E2BFD2F4BC0,$6F5BFCEC5CEFF5AD,$777BFAECC747471D,$DFEC3AF1BC6E0777,$F379B19980000EFF
   Data.q $5290000FD03031AF,$55DD6EB602D2E962,$C02A33BEDB6DB3CF,$C19F55AAC19F55AA,$26FF5FEBE06F3D9E
   Data.q $B417D8E1852A952A,$663BFFCECD94DCAE,$50B6BBEFAD54C6C1,$6F4C42CB5A1A1D80,$9BBFE8C94154D11A
   Data.q $D2A72E6E0048050A,$6EE01DB231BCAA52,$8C106F44211AE821,$E2626A7BEE2C51DC,$7C2249727D68D6BF
   Data.q $DB85D3D3D0F1C701,$685DC771DC0BFB6E,$969680BE7C805B6B,$BE060629FF4E901B,$5E9FA78FBE1B0D8C
   Data.q $73ADAD14799E6787,$8B356A2E440A6520,$745CF77745DF7BBD,$7225FCF73DC6CC74,$6A952801259234B9
   Data.q $562BD1BD7B69B4D8,$D4BF7F55366C8ADC,$FDE9A5BFEFE80078,$C18DA78E2176D7B5,$0C763BF13416CB65
   Data.q $D58639191F84DAC1,$F7F45EFFBFA1D7AB,$6BABA1D7ABD58BDF,$F79BCC67F96CB62E,$8B179FE131800051
   Data.q $55295AE5442CBC6F,$20C0908B15E6B996,$68BF9AF4C04B9635,$98613BEE3F1D1B51,$220EE2279C41054D
   Data.q $8B8BAA6311F006EE,$CC3DC8C104D737C5,$DD3A4195286005A6,$FBCAE5618FD6D68D,$1E2789E02F2BCAF0
   Data.q $9A9BA6E00F0FC3C1,$D1D18CDFAFD67237,$C562B1F69D200022,$A950DB8DC6FC4DAD,$C356A82E7F059704
   Data.q $6BCF26D6082177A6,$1B18EDC1C1853CD6,$B7070638D8D8C71B,$D8BAEB871F87E1E3,$242EEAB558FBE1B0
   Data.q $17FDBF8B17B6C783,$A7264CBC70166C63,$D06EA6DC6A0E850A,$8E395C747A3A4186,$036AAEBACEB1C5EB
   Data.q $0F3BDAB5D5F009D0,$0EDC6D66BE074A94,$FF07C1E2D7BDBD00,$421DAF3C2F5CB906,$C998C60863B1D838
   Data.q $3536D7E3FC7C0ACA,$D3EDC5CC990871C0,$FBD36779BCD8907F,$FE06C8E3862FB7ED,$F66CF84A95E34E3F
   Data.q $F3FACEDCEE7715F4,$3AF4FD3C05F2BE57,$185F1F5ABB3C5E24,$9D861502D5ABCA04,$C3FE8F4D5AEB71A2
   Data.q $9E91932AD7BFF7E2,$ACE803662D6B3294,$0025C9F1C4578756,$0D7E8FA3C392D2D0,$6FAC8F23C12D96CB
   Data.q $7C8072E516D680AA,$D17E2FC0356A833E,$1AFAB2E779DDE53C,$572B894DA706AD59,$0E87F0797326432E
   Data.q $7E5F2C29FFD7D68D,$B7D8E3E1F0F9FD73,$EF1C7DDFBBFE666F,$8725A5A3174BA585,$C997D8A8A224F162
   Data.q $8EAD5959BAE1D9CC,$2890E04693012D34,$7910248D9B293B16,$17470C35A00322D6,$FCFE6000DB89E187
   Data.q $B44802CF0BC2F1EB,$30383E9BB7DEEF73,$B4D800033E7C8FD0,$9AA6CD9B05937B69,$BE5CA3B69B4DC4A6
   Data.q $B88D13FE5B2DF97C,$C0D1DDDDD0EBC6F1,$AE7F2A7677A344EF,$D61278B142E9E9E8,$AD2B6389C1123746
   Data.q $025F4E077D7D136D,$08054A52497BBD92,$FDD0ED5ADCEA98CF,$D1FA3F1E6B6B4400,$7EB026C7638000D3
   Data.q $8BD85C2D0FA6E6FD,$B00952A6A313CBE5,$5B8AC57E26B6E371,$E0D8E3E772FFA3EB,$61068DF13576D7B5
   Data.q $FE467BBADD6C1B1C,$6B580003CC28507C,$009AC713C9A662AE,$9853BC866869EAFA,$E1F057A05BA84C3A
   Data.q $C652B1CA94015D42,$C39994A1C034631A,$F162E003CFD5F4E9,$60DAD0CBEFBBEE24,$BD853ABFBAD69CCE
   Data.q $9351892D96C6DF7B,$BF135972B958F8C9,$1E15C1AB5476D369,$26E2FB7EDC48E380,$7E4F891C7420D1BE
   Data.q $E86860F9FC8CD172,$D61083FC9100002D,$69EB06062905B126,$2B687CF9C0A01526,$002A1121D666B495
   Data.q $F9CDE78F75AF3C26,$76DC21EEFBBC0025,$97CB05B4DA6C4ADB,$8AF3774F0B8582DF,$A6E5CBCA64800AC5
   Data.q $E5F27EECF972E0FD,$FF7FB000741A37C6,$05BF81B46874383B,$E18AE7F2A716A18D,$B5BF77220000C3E1
   Data.q $2464F8D10C871D88,$EEF2D684764A0251,$5CE66AA9933807DD,$46001388C64A2D60,$6FF6D38ECDEEA952
   Data.q $CFDBFB7C42083800,$7F79BCC7EEBBAEE0,$B26CD908A531F4D2,$66E9FD3E3ED3A5CE,$051F56DF3FE7F83F
   Data.q $4ED4FCD0BF0FDA17,$76AEAEC30D1A2360,$13F57ABF3330582C,$3D0F7E9AAFE4B258,$C2EC763BF4A68DF4
   Data.q $07E6EB80002593C9,$3BF7C6CA0828A5AD,$CECFA01B06BA636D,$894A472C309AED9E,$1FC2211E01C6600A
   Data.q $786EE5CC5FABE9D2,$4787C380011DC892,$01D2A500FE1FC3F0,$D2E9611B5831C104,$9BC66654FC4CA402
   Data.q $516C7142A9AEFE6F,$AF78CE5C6E6F34A9,$5AF1A725FEFEC09D,$5795A7232391FC27,$1CFB3ECFCFEB572E
   Data.q $11093D26C7D5FABE,$4A9875F7D7BED529,$1286232646F3DAF9,$F760421118892028,$0D401880A16DBBEE
   Data.q $B6663805A58E22C8,$BAFE6E5CE5D32935,$60AC8E18737E3A28,$B50D75A0D75A6DB6,$FEBC5BF8DC6C11DA
   Data.q $9B21D7F5FD712FFA,$D31083BFBDDEC76D,$3C8E8E8FD03035FA,$5CFE685F87EF0B80,$D05B319A6F374E90
   Data.q $F7C0DF3BE77E7764,$0037EFB7D80FF7BE,$FF07C1E3E60B0580,$087C5F8BE114511A,$78E8B9933FF5BD6F
   Data.q $08195252FDDD7F3E,$27478787A6A54AC3,$9A0C386800D68523,$050A3774343B0254,$7DF58CA56692A544
   Data.q $88422A2001B6B5A9,$77B3FBE138EBCF09,$5A53F870C3DBAD68,$08E38D9D5ACCFED7,$1210A769348C8E47
   Data.q $FB9EE7851C703842,$59ACC27FD3FA7E01,$61D378C4C4D061C9,$23A1D0E35785C2D0,$1874DAA952A0C3F5
   Data.q $F781E352FB3F3674,$BF135F6DB6DC09DE,$39D9DF0944016974,$67BF1358F93E4F07,$4A84BEE7DCF81BCF
   Data.q $1C9D7EF4A4099925,$A4E3B2E8C6A3D906,$6CFB878664BE7CC2,$A1D4C03C5A7811A3,$B8E8F4746D45A2D0
   Data.q $8C679A885736DD72,$B5AC9A52D22B5B4C,$319089645848F272,$5C7145B1D146B746,$CCF2601761B598F9
   Data.q $3C1C7E25C4B2E0EC,$038196BDDEEC1335,$4E9AA54B69DBDBDC,$B28B32AE8E3910A5,$98A5042F8667C694
   Data.q $DB7CEBCF7CA44539,$D6AEC10BE003C9F7,$1EB08847A575AFB1,$D673A10BCE8C6210,$0FA007003EC014DA
   Data.q $D144428A23084059,$BAD8BBEB75B3BDB4,$1F094C8406B3D5F5,$2972E7E146EADC48,$013E75D78913E27C
   Data.q $4512A8A549F1CC21,$083C1F416F6F51E3,$090AF3DB54D67E06,$AD54574E994356AB,$42BAC88721C71D26
   Data.q $225D88971D8E3758,$A0E99C244BB35A38,$2575084290CC5248,$4D6121545C666C24,$A142882801141A09
   Data.q $A7AEBA588A342839,$CE76B4AC54A966B4,$1412B8B310D42821,$1F7A25368507317A,$E92D3A44A6D6E161
   Data.q $C67E161C25F8584A,$B581E8043179E70C,$317C25C862E57115,$380C3574E7CCC664,$25D86AE5701CBEF5
   Data.q $3972BC0B3DEC357B,$CAE0C7FA1CB9F2F4,$02FFF87AE38BF0F5,$3646C3E924DA3596,$444E454900000000
   Data.q $00000000826042AE
EndDataSection
i7,12gb ram , Windows 10 ,Purebasic 5.50
Antworten