Seite 1 von 2

Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 14.09.2009 22:45
von Kurzer
Hallo zusammen,

im englischen Forum gibts ja den 20 lines Contest, bei dem das Ziel ist, möglichst tolle Programme verschiedener Kategorien in einem 20-Zeiler unterzubringen.

Ich hatte mich zu diesem Contest an ein Ballergame gemacht.
Leider habe ich es nicht auf weniger als 29 Codezeilen a 80 Zeichen gebracht ohne das Gameplay vollends zu ruinieren.
Damit bin ich leider disqualifiziert im 20-Zeilen-Contest.

Aber macht nix, hat trotzdem Spaß gemacht.

Und damit auch die Leute was davon haben, die nicht in das englische Forum gucken, poste ich das hier einfach mal.
Der Code ist compilierbar mir PB 4.31. Das Game benötigt noch eine Bild- und eine Sounddatei.
Die bekommt ihr HIER

Die Bedienung ist recht einfach:
- Mit der Maus steuert Ihr Euer Raumschiff
- Mit Space feuert man seine Laserwaffe ab
- ESC beendet das Spiel

Hier noch ein paar Screenshoots:
Bild

Bild

So und hier das wichtigste... 29 Zeilen Ballergame. ;)

Viel Spaß

Code: Alles auswählen

;*******************************************************************************
;*
;* Name     : Alien-Invasion
;* Author   : Kurzer
;* Category : Game
;* Date     : 12. September 2009
;*
;* Notes    : At first: Sorry, I know I exceed the limit of 20 lines. This game
;*            needs 29 lines. But I don't want to remove some of the functions,
;*            because the gameplay would fall in quality.
;*
;*            So I'm disqualified for this contest, but hey... never mind!
;*            It was a big challenge for me and it was a lot of fun even it was
;*            really hard work (especially downsizing the code).
;*            And finally you can play an exciting arcade game . ;-)
;*
;*            The game was exclusively written for the 20 lines contest!
;*
;* Gameplay : You are the commander of a small, fast spaceship and your order
;*            is to save the earth. :-) Enemy troops from outer space try to
;*            attack our planet. Go and save the mankind, Warrior! ;-)
;*
;* Control  : Control your ship with your mouse. Fire your missiles with the
;*            SPACE-key. To quit the game simply press the ESC-key.
;*
;*            The aliens appears at the top of the screen. They attack you
;*            in serveral stages/waves.
;*
;*            Try to destroy as many alien ships as possible. But keep an eye
;*            on your energy. Every shoot you fire off will cost you 2 energy
;*            points. But every hit to an alien ship will credit 1 point.
;*            If you destroy a ship your energy will increase by [level] points.
;*            That means if you destroy a ship in level 14 you will get 14 points.
;*            If you collide with an alien ship this will cost 40 points in every
;*            level.
;*
;*            The goal of the game is to solve all 35 Levels and get as many energy
;*            points as possible.
;*            The game ends if your energy falls below 0 points.
;*            (you start your mission with 50 points)
;*            The game also ends if you mastered all the levels. The animation
;*            will stop then and only the backgroundmusic will play furthermore.
;*
;*            And now... good luck and much fun! 
;*
;*            Kind Regards, Kurzer.
;*
;* Ressources:
;*            You need a bitmapfile named "P.bmp" and a aoundfile named "S.ogg".
;*            Attend the link in my forum-posting.
;*
;*            Sounds: www.freesound.org
;*            Music:  www.podsafeaudio.com, Title: Proteus, Artist: George Wood
;*            Grafix: Grabbed somewhere from the internet. ;^)
;*******************************************************************************

;<-------------------------------- 80 chars ----------------------------------->
Macro M(a,b):Macro a:b:EndMacr:EndMacro:#D=600:J=20:Macro O(a,b,c):Macro a(b):c:
EndMacr:EndMacro:Dim B.f(50,3):Dim C.f(#D,2):Dim A(50,1):D=50:InitKeyboard();...
M(Z,ClipSprite)o:M(K,KeyboardPushed)o:M(S,CatchSound)o:M(R,SpriteCollision)o;...   
M(P,PlaySound)o:M(V,DisplayTransparentSprite)o:O(AA,n,For n=0 To)o:M(AB,Next)o;.
M(AF,StartDrawing(ScreenOutput()))o:M(AH,DrawingMode(1))o:M(AK,Random)o:#C=650;.
M(AD,EndIf)o:M(AE,PlaySound)o:M(AG,StopDrawing())o:M(AI,DrawText)o:M(Q,If)o:I=64
InitSound():InitSprite():O(L,n,LoadSprite(n,"P.bmp"))o:OpenScreen(800,#D,16,"");
M(AJ,And)o:UseOGGSoundDecoder():H=32:InitMouse():AA(T)#D:C(T,0)=AK(799):#B=512;.
C(T,1)=AK(599):C(T,2)=0.1+(AK(10)/20):AB:S(1,?S+$2AAB,$4D38):S(2,?S+$77E3,$193E)
L(1):Z(1,0,0,H,H):L(0):Z(0,H,0,H,H):L(2):Z(2,I,0,H,H):L(3):Z(3,96,0,H,H):L(4);..
L(5):L(6):L(7):L(8):Z(4,128,0,I,H):Z(5,192,0,I,H):Z(6,256,0,I,H):Z(7,320,0,I,H);
L(9):L(10):Z(8,384,0,I,H):Z(9,256,H,210,H):S(3,?S+$9121,$3B02):Z(10,0,I,#B,448);
S(4,?S+$CC23,$84D0B):P(4,1):AA(T) 7:L(T+J):Z(T+J,T*H,H,H,H):AB:*A.WORD=?S+$9192E
S(0,?S,$2AAB):Repeat:ExamineMouse():ExamineKeyboard():X=MouseX():Y=MouseY();....
Q X>768:X=768:AD:Q Y<400:Y=400:AD:Q Y>568:Y=568:AD:MouseLocate(X,Y):G=K(57);....
Q D>=0 AJ F>-1:Q G:Q J=0:AE(0):S+1:D-2:A(S,0)=X:A(S,1)=Y:Q S=50:S=0:AD:AD:J+1:AD
Q G=0 Or J=15-O:J=0:AD:E+1:Q E>=F:F=*A\w:*A+2:W+1:Q F>0:AE(3):U=*A\w:*A+2:P=*A\w
*A+2:O=*A\w:*A+2:N=*A\w:*A+2:M=*A\w:*A+2:AA(T) M:B(T,0)=60+AK(#D):B(T,2)=U:;....
B(T,1)=AK(15*M)*-1:B(T,3)=O:AB:AD:AD:ClearScreen(0):AF:AA(T)#D:H=288:I=152;.....
Plot(C(T,0),C(T,1),$111111*Round(C(T,2)*15,0)):Q C(T,0)<797:C(T,0)+C(T,2):Else;.
C(T,0)=0:AD:AB:AG:V(10,H,I):AA(T) M:Q B(T,1)<#C:Z=Sin((B(T,1))/70)*(N+C(T,1)/15)
H=B(T,0)+Z:I=B(T,1)+Sin(H/70)*80:V(B(T,2),H,I):B(T,1)+P/2:AF:AH:#E=570:#F=$88ff;
AI(H+9,I-15,Str(B(T,3)),#F):AG:Q R(B(T,2),H,I,0,X,Y)<>0 AJ B(T,3)>0:B(T,3)=0;...
D-50:AD:AA(U) 50:Q R(B(T,2),H,I,1,A(U,0),A(U,1))<>0 AJ A(U,1)>0 AJ B(T,3)>0
B(T,1)-2:B(T,3)-1:A(U,1)=-1:D+1:AE(2):AD:AB:Q B(T,3)=0 AJ E%4=0:Q B(T,2)<20;....
AE(1):B(T,2)=20:AD:B(T,2)+1:Q B(T,2)=28:B(T,1)=#C:D+W:AD:AD:AD:AB:AA(T) 50;.....
Q A(T,1)>0:V(1,A(T,0),A(T,1)):Q A(T,1)>0:A(T,1)-15:AD:AD:AB:V(0,X,Y):V(9,#E,10);
AF:AH:AI(110,12,"Energy: "+Str(D),#F,0):AI(10,12,"Level: "+Str(W)+"/36",#F,0):AG
FlipBuffers():AD:Until K(1):DataSection:S:IncludeBinary "S.ogg":EndDataSection;.
Edit 22.09.2009: Die Kollisionserkennung mit den Schüssen war noch falsch. Habe es jetzt korrigiert. Bitte ggf. nochmal rauskopieren.

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 15.09.2009 09:30
von rolaf
Mensch Fröschchen, nettes Ballerspiel. :allright: Fehlt nur die Maustaste als Ballerknop. :mrgreen:
Übrigens unter Win7rc bei 1024 x 600 Pixel gezockt, läuft dufte.

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 15.09.2009 10:23
von Vera
Hallo Kurzer,
ich verfolge den 20-Zeilen-Contest auch mit Spannung und hatte Deinen Beitrag dort entdeckt, aber hier antwortet es sich leichter. :wink:
Is' schon toll, was mit so knappem Code alles gemacht werden kann und dann auch noch ein echtes Spielchen :)
Da Du die 20 Zeilen ja schon überschritten hast, könntest Du vielleicht noch eine Funktion hinzufügen: Neuer Spielstart, wenn man (wie ich) immer so früh' alle Punkte verbraucht hat :mrgreen: .
Dein Code ist leider nicht Anfängerfreundlich, denn es wirft Fragen auf, wozu in der Hilfe nichts zu finden ist: wieso funktioniert EndMarc ohne 'o' (aber nicht mit) und wieso funktionieren die eingeklammerten If- EndIf-Commands?
Wünsch Dir, dass Dir noch was kleines witziges einfällt und Du doch noch an dem Contest teilnehmen kannst.

Gruß ~ Vera

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 15.09.2009 11:08
von Thorium
Sehr schönes Spiel, nur viel zu einfach, vorallem die letzen Level, ich glaub da stimmt was nicht. Ich glaube Level 32 oder 33 da kommen Ufos mit nur 3 Hitpoints die zudem auch noch ziemlich langsam sind. Habs beim ersten Versuch mit 1880 Energie geschaft. Könntest vieleicht noch nen anderen Schwierigkeitsgrad einbauen, bei dem es weniger Energie durch Abschüsse gibt.

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 15.09.2009 11:52
von Kurzer
Danke für Euer feedback. :allright: Freu mich.

@Thorium: Ja, die letzen Level vor dem allerletzen waren so als "Leckerlie" gedacht, um nochmal ordentlich draufhalten zu können.

Evtl. setz ich mich ja nochmal ran, auch weil Vera nen NEW GAME Button vorgeschlagen hat.
Dann werde ich aber den langen, lesbaren Code posten und die Gegenerformationen wieder in Data-Zeilen codieren, statt sie in der Sounddatei zu verstecken. :wink: (was tut man nicht alles, um Platz zu sparen)

Kann aber noch bis zum Wochenende dauern.

PS: Schön auch, daß es unter Win7 löppt.

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 16.09.2009 23:27
von Kurzer
So, hier nun der lesbare code des Games.
Jetzt mit Restartfunktion für Vera und wieder auf Data-Zeilen umgebaut für die UFO-Formationen und Leveldaten - also zum selber verfummeln.

Vorsicht, der Code ist nicht unbedingt geeignet, um sich was abzugucken. Quick und vor allen Dingen sehr dirty!

Alles wichtige sollte den Kommenaren zu entnehmen sein.
Wer Lust hat kann den source ja erweitern und wieder hier posten.

Wenn ihr die höheren Leveldaten testen wollt, müsst ihr vor dem compilieren den FrameCounter auf einen entsprechend hohen Wert stellen.

Mit der Variable Deb =0/1 kann man sich während des Spiels den FrameCounter-Wert anzeigen lassen.

Viel Spaß beim modden.

Kurzer

Code: Alles auswählen

;*************************************************************************
;*
;* Alien-Invasion written by Kurzer
;*
;*************************************************************************
;*
;* Gameplay : You are the commander of a small, fast spaceship and your order
;*            is to save the earth. :-) Enemy troops from outer space try to
;*            attack our planet. Go and save the mankind, Warrior! ;-)
;*
;* Control  : Control your ship with your mouse. Fire your missiles with the
;*            SPACE-key. To quit the game simply press the ESC-key.
;*            With F1-key you can restart the game after you have been killed 
;*            by the aliens.
;*
;*            The aliens appears at the top of the screen. They attack you
;*            in serveral stages/waves.
;*
;*            Try to destroy as many alien ships as possible. But keep an eye
;*            on your energy. Every shoot you fire off will cost you 2 energy
;*            points. But every hit to an alien ship will credit 1 point.
;*            If you destroy a ship your energy will increase by [level] points.
;*            That means if you destroy a ship in level 14 you will get 14 points.
;*            If you collide with an alien ship this will cost 40 points in every
;*            level.
;*
;*            The goal of the game is to solve all 35 Levels and get as many energy
;*            points as possible.
;*            The game ends if your energy falls below 0 points.
;*            (you start your mission with 50 points)
;*            The game also ends if you mastered all the levels. The animation
;*            will stop then and only the backgroundmusic will play furthermore.
;*
;*            And now... good luck and much fun!
;*
;*            Kind Regards, Kurzer.
;*
;* Ressources:
;*            You need a bitmapfile named "P.bmp" and a aoundfile named "S.ogg".
;*            Attend the link in my forum-posting.
;*
;*            Sounds: www.freesound.org
;*            Music:  www.podsafeaudio.com, Title: Proteus, Artist: George Wood
;*            Grafix: Grabbed somewhere from the internet. ;^)
;*************************************************************************

;..............................................................................
	
DataSection
; Erklärung der Formations- und Leveldaten.
; 
; 1 NextFramecount: Bis zu diesem internen Frame dauert der Level, -1 = Ende der Liste.
;   (Um den internen Framecounter anzeigen zu lassen, bitte die Variable Deb = 1 setzen (siehe unten))
; 2 Gegnersprite (2 bis 8 sind möglich)
; 3 Geschwindigkeit der UFOs (2 bis 6 sind reelle Werte)
; 4 Energie der UFOs (so oft müssen sie getroffen werden, bis sie platzen)
; 5 Y-Sinusfaktor der UFOs (20 - 300 sind reelle Werte, je größer desto heftiger schlingern die UFOs)
; 6 Anzahl der UFOs, die in diesem Level erscheinen.
R:
;       1, 2,3,4,5, 6    1, 2,3,4,5, 6
Data.w 800,2,2,1,20,9, 1700,2,3,1,40,15, 2500,2,3,1,70,29, 3200,2,4,1,110,29, 5000,2,1,2,270,39
Data.w 5900,3,2,3,110,15, 6500,3,3,3,120,15, 7300,3,3,3,100,29, 8000,3,4,3,130,29
Data.w 9600,4,1,4,30,20, 10500,4,2,4,80,10, 11100,4,3,4,90,10, 11600,4,5,4,120,20, 12800,4,2,5,120,36
Data.w 13800,5,2,5,10,15, 14500,5,3,5,30,20, 15200,5,4,5,70,25, 16100,5,3,5,137,35 
Data.w 17000,6,2,6,35,9, 17900,6,2,6,60,15, 18600,6,3,6,70,15, 19300,6,3,6,50,20, 20600,6,2,8,40,36
Data.w 21200,7,3,8,80,9, 22300,7,2,8,30,20, 23400,7,2,8,75,25, 24500,7,2,8,275,29
Data.w 25200,8,3,10,85,5, 25800,8,3,10,43,10, 26500,8,3,10,76,15, 27600,8,2,10,334,20 
Data.w 28400,2,3,3,128,29, 30000,2,2,3,83,49, 30900,8,3,10,133,30, 32200,8,2,10,49,30, -1

S:
IncludeBinary "S.ogg"
EndDataSection

Deb=1
FrameCounter.i = 0
Punkte = 50

;..............................................................................
; Basisadresse der Leveldaten
*Adresse.WORD=?R

; Schüsse: X, Y
Dim SchussPosition.i(50,1)
; Gegener: X, Y, Sprite, Energy, Speed
Dim Gegner.f(50,3)
; Sterne/Hintergrund: X, Y, Speed, Farbe
Dim Sterne.f(600,2)

For T = 0 To 600
	Sterne(T,0)= Random(799)
	Sterne(T,1)= Random(599)
	Sterne(T,2)= 0.1 + (Random(10)/20)
Next

InitSprite():InitKeyboard():InitMouse():InitSound()
UseOGGSoundDecoder()

OpenWindow(0, 0, 0, 800, 600, "Contest", 1)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
; OpenScreen(800,600,16,"")

; Eigenes Schiff
LoadSprite(0, "P.bmp", 0): ClipSprite(0, 32, 0, 32, 32)
; Schuss
LoadSprite(1, "P.bmp", 0) : ClipSprite(1, 0, 0, 32, 32)

; Gegener 1
LoadSprite(2, "P.bmp", 0) : ClipSprite(2, 64, 0, 32, 32)
; Gegener 2
LoadSprite(3, "P.bmp", 0) : ClipSprite(3, 96, 0, 32, 32)
; Gegener 3
LoadSprite(4, "P.bmp", 0) : ClipSprite(4, 128, 0, 64, 32)
; Gegener 4
LoadSprite(5, "P.bmp", 0) : ClipSprite(5, 192, 0, 64, 32)
; Gegener 5
LoadSprite(6, "P.bmp", 0) : ClipSprite(6, 256, 0, 64, 32)
; Gegener 6
LoadSprite(7, "P.bmp", 0) : ClipSprite(7, 320, 0, 64, 32)
; Gegener 7
LoadSprite(8, "P.bmp", 0) : ClipSprite(8, 384, 0, 64, 32)

; Logo
LoadSprite(9, "P.bmp", 0) : ClipSprite(9, 256, 32, 210, 32)
; Erde
LoadSprite(19, "P.bmp", 0) : ClipSprite(19, 0, 64, 512, 448)

; Explosion
For T = 0 To 7
LoadSprite(T+20, "P.bmp", 0) :ClipSprite(T+20, T*32, 32, 32, 32)
Next

CatchSound(0,?S, 10923)
CatchSound(1,?S+10923, 19768)
CatchSound(2,?S+30691, 6462)
CatchSound(3,?S+37153, 15106)
CatchSound(4,?S+52259, 544011)

PlaySound(4, #PB_Sound_Loop)

Repeat
	While WindowEvent():Wend

	; Mauskoordinaten abfragen
	ExamineMouse(): ExamineKeyboard()
	SpielerX = MouseX(): SpielerY = MouseY()
	If SpielerX > 768 : SpielerX = 768 : EndIf
	If SpielerY < 400 : SpielerY = 400 : EndIf
	If SpielerY > 568 : SpielerY = 568 : EndIf
	MouseLocate(SpielerX, SpielerY)
	
	; Schussroutine
	Taste=KeyboardPushed(#PB_Key_Space)

	If Punkte >= 0 And NextEventFrame > -1
 	
		If Taste 
			If SchussCounter = 0
				PlaySound(0)
				S+1
				Punkte - 2
				SchussPosition(S,0) = SpielerX : SchussPosition(S,1) = SpielerY
				If  S = 50 : S = 0 : EndIf
			EndIf
			SchussCounter + 1 
		EndIf
		If Taste=0 Or SchussCounter = 15-Energie : SchussCounter = 0 : 
		EndIf

 		FrameCounter + 1
 		If FrameCounter >= NextEventFrame
			; Gegenerformation laden
			NextEventFrame=*Adresse\w
			*Adresse+2
	 		Stage+1

		 	If NextEventFrame > 0
		 		PlaySound(3)
	 		 	Sprite= *Adresse\w
				*Adresse+2
	 		 	Speed= *Adresse\w
				*Adresse+2
	 		 	Energie= *Adresse\w
				*Adresse+2
	 		 	Faktor= *Adresse\w
				*Adresse+2
	 		 	Anzahl= *Adresse\w
				*Adresse+2
	
			 	For T = 0 To Anzahl
			 	  Gegner(T,0)=60+Random(600) ;Random(768)
			 	  Gegner(T,1)=Random(15*Anzahl)*-1
			 	  Gegner(T,2)=Sprite
			 	  Gegner(T,3)=Energie
			 	Next
		 	EndIf
	 	EndIf
	 	
	 		
	 	;Frames zeichnen
	  ClearScreen(0)
	  
	  
		; Sterne/Hintergrund
		StartDrawing(ScreenOutput())
			For T = 0 To 600
				Plot(Sterne(T,0),Sterne(T,1),$111111*Round(Sterne(T,2)*15,#PB_Round_Down))
				If Sterne(T,0) < 797
					Sterne(T,0)+Sterne(T,2)
				Else 
					Sterne(T,0)=0
				EndIf
			Next
		StopDrawing()
			
	  ;Erde
	  DisplayTransparentSprite(19,288,152)

		; Gegener zeichnen
		For T = 0 To Anzahl
			If Gegner(T,1) < 650
				X=Gegner(T,0) + Sin((Gegner(T,1))/70)*(Faktor + Sterne(T,1)/15 ) ;Sin((Gegner(T,1))/70)*200
				Y=Gegner(T,1) + Sin(X/70)*80
				DisplayTransparentSprite(Gegner(T,2), X, Y)
				Gegner(T,1) + Speed/2
				StartDrawing(ScreenOutput())
					DrawingMode(#PB_2DDrawing_Transparent)
					DrawText(X+10,Y-15, Str(Gegner(T,3)),$88ff)
				StopDrawing()

				; Collosion mit Schiff?
				If SpriteCollision(Gegner(T,2), X, Y, 0, SpielerX, SpielerY) <> 0 And Gegner(T,3) > 0
					Gegner(T,3)=0: Punkte - 50
				EndIf

				; Kollision mit Schuß?
				For J = 0 To 50
					If SpriteCollision(Gegner(T,2), X, Y, 1, SchussPosition(J,0), SchussPosition(J,1)) <> 0 And SchussPosition(J,1) > 0 And Gegner(T,3) > 0
						Gegner(T,1)-2 : Gegner(T,3)-1 : SchussPosition(J,1) = -1 : Punkte + 1
						PlaySound(2)
					EndIf
				Next
				If Gegner(T,3) = 0 And FrameCounter % 4 = 0
					If Gegner(T,2) < 20 
						PlaySound(1)
						Gegner(T,2) = 20
					EndIf
					Gegner(T,2) + 1
						If Gegner(T,2) = 28
							Gegner(T,1) = 650
							Punkte + Stage*2
						EndIf
				EndIf
			EndIf
		Next
		
	  ; Schüsse
		For T = 0 To 50
			If SchussPosition(T,1) > 0
				DisplayTransparentSprite(1, SchussPosition(T,0), SchussPosition(T,1)) 
				If SchussPosition(T,1) > 0
					SchussPosition(T,1)-15
				EndIf
			EndIf
		Next

	  ; Schiff
	  DisplayTransparentSprite(0, SpielerX, SpielerY)

	  ; Logo oben rechts
	  DisplaySprite(9, 570, 10)

		StartDrawing(ScreenOutput())
		DrawingMode(#PB_2DDrawing_Transparent)
		DrawText(110,12, "Energy: " + Str(Punkte),$77ffff, 0)
		DrawText(10,12, "Level: " + Str(Stage) + "/36",$77ffff, 0)
		If Deb = 1: DrawText(10,435, "Debug: " + StrU(FrameCounter),$ffffff, 0) : EndIf
		StopDrawing()

	  FlipBuffers()

	Else ; Wenn Punkte < 0 sind ###################################
	
	 	;Frames zeichnen
	  ClearScreen(0)
	  
		; Sterne/Hintergrund
		StartDrawing(ScreenOutput())
			For T = 0 To 600
				Plot(Sterne(T,0),Sterne(T,1),$111111*Round(Sterne(T,2)*15,#PB_Round_Down))
				If Sterne(T,0) < 797
					Sterne(T,0)+Sterne(T,2)
				Else 
					Sterne(T,0)=0
				EndIf
			Next
		StopDrawing()
			
	  ;Erde
	  DisplayTransparentSprite(19,288,152)

	  ; Logo oben rechts
	  DisplaySprite(9, 570, 10)


		For T = 0 To Anzahl
			If Gegner(T,1) < 650
				X=Gegner(T,0) + Sin((Gegner(T,1))/70)*(Faktor + Sterne(T,1)/15 ) ;Sin((Gegner(T,1))/70)*200
				Y=Gegner(T,1) + Sin(X/70)*80
				DisplayTransparentSprite(Gegner(T,2), X, Y)

				StartDrawing(ScreenOutput())
					DrawingMode(#PB_2DDrawing_Transparent)
					DrawText(X+10,Y-15, Str(Gegner(T,3)),$88ff)
				StopDrawing()
			EndIf
		Next T

	  ; Schiff
	  DisplayTransparentSprite(0, SpielerX, SpielerY)

		StartDrawing(ScreenOutput())
			DrawingMode(#PB_2DDrawing_Transparent)
			DrawText(110,12, "Energy: " + Str(Punkte),$77ffff, 0)
			DrawText(10,12, "Level: " + Str(Stage) + "/36",$77ffff, 0)
			If Deb = 1: DrawText(10,435, "Debug: " + StrU(FrameCounter),$ffffff, 0) : EndIf
			DrawText(350,300, "F1    = Neues Spiel", $77ffff, 0)
			DrawText(350,320, "ESC = Ende", $77ffff, 0)
		StopDrawing()

	  FlipBuffers()
	  
	  If KeyboardPushed(#PB_Key_F1)
	  	Punkte = 50
	  	*Adresse.WORD=?R
	  	FrameCounter = 0
	  	NextEventFrame = 0
	  	Stage = 0
	  EndIf
	EndIf

Until KeyboardPushed(#PB_Key_Escape)

Edit 22.09.2009: Die Kollisionserkennung mit den Schüssen war noch falsch. Habe es jetzt korrigiert. Bitte ggf. nochmal rauskopieren.

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 17.09.2009 00:19
von Vera
Hi Kurzer,

ich sach schomma vorab Danke :)

aber eigendlich möchte ich Dir jetzt eine kleine Hochachtung dafür ausprechen, dass Du den 'tricky bastard' hochgenommen hast :allright:

escht goil ~ Vera

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 17.09.2009 10:09
von Kurzer
Hallo Vera,
Vera hat geschrieben:dass Du den 'tricky bastard' hochgenommen hast :allright:
Na ja, das reichlich mit Gadgets gefüllte Settingswindow bei rechtsklick war einfach zu auffällig. :)

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 17.09.2009 20:27
von rolaf
Auch von mir Dank. Schon interessant zu sehen wie man mit so wenig Kot Brauchbares knetet. :lol:

Re: Ballergame "Alien-Invasion" für den 20 Lines Contest

Verfasst: 15.11.2009 13:33
von PureProgger
Hi,

was ist eigentlich der Sinn des 20 Lines Contest!
Dies war doch nur bei 8bit Rechnern sinnvoll, wo jedes einzelne Leerzeichen Speicherverbrauch verursachte. Hier mit Purebasic ist es doch egal ob ich mit 20 oder 100 Zeilen ein Programm erstelle.
Es soll doch lesbarer Code rauskommen...

gruß Michael