  | 
					
						Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!   
						
						
					 | 
				 
			 
			 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		Westbeam
 
  
  Anmeldungsdatum: 22.12.2009 Beiträge: 760
 
  | 
		
			
				 Verfasst am: 23.06.2015, 18:10    Titel: Peacekeeper | 
				     | 
			 
			
				
  | 
			 
			
				Peacekeeper
 
Ich hielt es für völlig richtig, mein Spiel nach einer Plattform für Massenvernichtungswaffen zu benennen.
 
 
Das Spielprinzip ist einfach: Man startet auf einer zufallsgenerierten Karte zusammen mit einem blauen Feind, den es gilt zu zerstören. Dieser lässt sich deine Aggressionen selbstverständlich nicht gefallen und schießt zurück mit allem was sein Arsenal bietet. Zwischen dir und dem Feind liegen allerdings Berge, Hügel und jede Menge Bugs. Schieße über sie hinweg oder nutze deine gefährlichen Waffen um sie freundlich zu entfernen. 
 
 
Screenshot 1
 
Screenshot 2
 
 
Waffen
 
Im Spiel gibt es 4 Waffen um seine Umgebung oder auch den Feind platt zu machen. Die Munition ist, außer bei den Steinen, begrenzt:
 
- Steine machen wenig Schaden, weder am Feind noch an der Landschaft, dafür hat man hier keinen Munitionsmangel
 
- Raketen machen doppelt so viel Schaden wie Steine
 
- Daisy Cutter reißt große Löcher in den Boden aber nicht in den Gegner
 
- Peacekeeper lässt deine Feinde in einer nuklearen Wolke vergehen, oder auch dich
 
 
Steuerung
 
Mit [A] und [D] stellt man seinen Abschusswinkel ein
 
Mit [W] und [S] die Projektilgeschwindigkeit
 
[SPACE] feuert die Kanone ab
 
[1]-[4] ist die Waffenauswahl
 
[ESC] beendet das Spiel
 
 
Download
 
Link(133kB)
 
32bit Linux und Windows binary sind enthalten, ebenso der Sourcecode.
 
 
Das Spiel ist für den BCC geschrieben wurden. Der Code ist leider nicht sehr schön, da ich gegen Ende viel aufräumen musste um auf die 9kB zu kommen. Durch einen Bug ist es möglich, dass man bei Spielstart an der "Decke" der Map hängt. Ebenfalls möglich ist, dass der Gegner nicht zurück schießt. Bei beiden Fällen einfach neustarten. Die Windows-exe ist ungetestet, bitte Feedback ob alles klappt.
 
 
mfg, West   | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		grindstone
 
 
  Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 23.06.2015, 22:20    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Westbeam!
 
 
Nach einigen Testspielen habe ich folgende Anmerkungen:
 
 
- Wenn eine Partei gewonnen hat, sollte das Spiel auch zuende sein. Im Augenblick kann man es theoretisch bis zum Sankt-Nimmerleins-Tag fortsetzen.
 
 
- Zu Spielbeginn ist keine Waffe ausgewählt. Es fliegt zwar ein Geschoss, das aber keinerlei Wirkung hat.
 
 
- Bei einem Spiel befand sich meine Abschussvorrichtung in einem Hügel unter der Erde - Bug oder Feature?
 
 
- Wer keinen Boden mehr unter sich hat, sollte herunterfallen, mit entsprechender Beschädigung, je nach Fallhöhe.
 
 
- Um ein echtes Geschicklichkeitsspiel daraus zu machen, schlage ich vor: Bei jedem Schuß Beginn der Projektilgeschwindikeit bei 0, Steigerung der Projektilgeschwindigkeit bei Druck auf die Space - Taste, Abschuß beim Loslassen der Space - Taste.
 
 
Gruß
 
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Westbeam
 
  
  Anmeldungsdatum: 22.12.2009 Beiträge: 760
 
  | 
		
			
				 Verfasst am: 23.06.2015, 22:29    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ja, Features waren viele geplant. Die Codebegrenzung bei dem BCC-Wettbewerb(wofür das Spiel geschrieben wurde) lag aber bedauerlicherweise bei 9kb, das ich schon erreicht habe. Sicher könnte ich hier und da noch ein wenig Code kürzen, aber reichen wird es für nicht viel, erst recht nicht für Fallphysik. 
 
 
Die beiden Bugs, Gummikugeln und Bergwerk, werde ich aber bei Gelegenheit noch entfernen. Danke dafür.    | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		grindstone
 
 
  Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 24.06.2015, 09:05    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ich habe mir einmal den Spaß gemacht, das Programm auf 7,7kB zu kürzen, nur durch Umformulieren, Zusammenfassen und ein paar andere Tricks, die mir ganz spontan eingefallen sind, ohne etwas an der Funktionalität zu ändern (hoffe ich zumindest). Jetzt ist wieder viiiiiiel Platz für neue Features   : 	  | Code: | 	 		  Const xmax=800,ymax=600,wt=RGB(255,255,255),rd=RGB(255,0,0),bl=RGB(0,0,255)
 
Type TBox
 
   As Integer typ,x,y,damage
 
End Type
 
Dim Shared As TBox Box(1024)
 
Dim Shared As Integer i,i2,anzbox,tim,player1x,player1y,player1life,player2x,player2y,player2life,angle,power,et,shoottyp,e2,d,ar,adc,an,ma
 
Dim As Any Ptr s,stone(3),grass(2),e,a
 
Dim As Double ex,ey,ex2,ey2,shootx,shooty,grav
 
Dim As Integer switcher,shoot,player,r,ps
 
Sub AddBox(typ As Double, x As Integer, y As Integer)
 
   For i As Integer=1 To anzbox
 
      If Box(i).x>x And Box(i).x<x+9 And Box(i).y>y-9 And Box(i).y<y+9 And Box(i).y<y+9 Then
 
         Box(i).typ=Int(typ)
 
         Box(i).x=x
 
         Box(i).y=y
 
         Exit Sub
 
      End If
 
   Next
 
   anzbox+=1
 
   With Box(anzbox)
 
      .typ=Int(typ)
 
      .x=x
 
      .y=y
 
   End With
 
End Sub
 
player1life=100
 
player2life=100
 
Randomize
 
For i=1 To xmax/20
 
   For i2=1 To 6
 
      AddBox(Rnd*3+3,(i-1)*20,ymax-i2*20)
 
   Next
 
Next
 
For i=1 To xmax/20
 
   AddBox(Rnd*2+1,(i-1)*20,ymax-140)
 
Next
 
Var rx=Int(Rnd*xmax)
 
For i=1 To 10
 
   AddBox(Rnd*3+3,i*20+rx,ymax-140)
 
Next
 
AddBox(Rnd*2+1,20+rx,ymax-160)
 
AddBox(Rnd*2+1,10*20+rx,ymax-160)
 
For i=1 To 8
 
   AddBox(Rnd*3+3,(i+1)*20+rx,ymax-160)
 
Next
 
AddBox(Rnd*2+1,2*20+rx,ymax-180)
 
AddBox(Rnd*2+1,9*20+rx,ymax-180)
 
For i=1 To 6
 
   AddBox(Rnd*3+3,(i+2)*20+rx,ymax-180)
 
Next
 
AddBox(Rnd*2+1,3*20+rx,ymax-200)
 
AddBox(Rnd*2+1,8*20+rx,ymax-200)
 
For i=1 To 4
 
   AddBox(Rnd*3+3,(i+3)*20+rx,ymax-200)
 
   AddBox(Rnd*2+1,(i+3)*20+rx,ymax-220)
 
Next
 
rx=Rnd*xmax
 
For i=1 To 7
 
   AddBox(Rnd*3+3,i*20+rx,ymax-140)
 
Next
 
rx=Rnd*xmax
 
For i=1 To 6
 
   AddBox(Rnd*3+3,i*20+rx,ymax-140)
 
Next
 
For i=1 To 3
 
   AddBox(Rnd*3+3,(i+1)*20+rx,ymax-160)
 
Next
 
rx=Rnd*xmax
 
For i=1 To 6
 
   AddBox(Rnd*3+3,i*20+rx,ymax-140)
 
Next
 
AddBox(Rnd*2+1,20+rx,ymax-160)
 
For i=1 To 5
 
   AddBox(Rnd*3+3,(i)*20+rx,ymax-160)
 
Next
 
For i=1 To 4
 
   AddBox(Rnd*3+3,(i+1)*20+rx,ymax-180)
 
Next
 
For i=1 To 3
 
   AddBox(Rnd*3+3,(i+1)*20+rx,ymax-200)
 
   AddBox(Rnd*3+3,(i+1)*20+rx,ymax-220)
 
   AddBox(Rnd*2+1,(i+1)*20+rx,ymax-240)
 
Next
 
rx=Rnd*xmax
 
For i=1 To 6
 
   AddBox(Rnd*3+3,i*20+rx,ymax-140)
 
Next
 
AddBox(Rnd*2+1,20+rx,ymax-160)
 
For i=1 To 5
 
   AddBox(Rnd*3+3,(i)*20+rx,ymax-160)
 
   AddBox(Rnd*3+3,(i)*20+rx,ymax-180)
 
Next
 
For i=1 To 4
 
   AddBox(Rnd*3+3,(i)*20+rx,ymax-200)
 
Next
 
For i=1 To 3
 
   AddBox(Rnd*3+3,(i+1)*20+rx,ymax-220)
 
Next
 
For i=1 To 2
 
   AddBox(Rnd*3+3,(i+1)*20+rx,ymax-240)
 
   AddBox(Rnd*3+3,(i+1)*20+rx,ymax-260)
 
   AddBox(Rnd*2+1,(i+1)*20+rx,ymax-280)
 
Next
 
player1x=Rnd*xmax/3
 
For i=1 To anzbox
 
   If Box(i).x>player1x-10 And Box(i).x<player1x+10 Then
 
      player1y=Box(i).y-20
 
   End If
 
Next
 
player2x=xmax-Rnd*xmax/3-30
 
For i=1 To anzbox
 
   If Box(i).x>player2x-10 And Box(i).x<player2x+10 Then
 
      player2y=Box(i).y-20
 
   End If
 
Next
 
ScreenRes xmax,ymax,32
 
s=ImageCreate(1,600)
 
BLoad "a.bmp",s
 
For i=1 To 3
 
   stone(i)=ImageCreate(20,20)
 
Next
 
BLoad "s.bmp",stone(1)
 
BLoad "s2.bmp",stone(2)
 
BLoad "s3.bmp",stone(3)
 
grass(1)=ImageCreate(20,20)
 
grass(2)=ImageCreate(20,20)
 
BLoad "g.bmp",grass(1)
 
BLoad "g2.bmp",grass(2)
 
e=ImageCreate(10,10)
 
Line e,(0,0)-(10,10),RGB(64,64,64),BF
 
a=ImageCreate(20,20)
 
Line a,(0,0)-(20,20),RGB(64,64,64),BF
 
player=1
 
ar=8
 
adc=5
 
an=1
 
Do
 
   Sleep 1,1
 
   ScreenLock
 
   Cls
 
   For i=1 To xmax
 
      Put (i-1,0),s,Trans
 
   Next
 
   For i=1 To anzbox
 
      With Box(i)
 
         Select Case .typ
 
            Case 1:Put(.x,.y),grass(1),Trans
 
            Case 2:Put(.x,.y),grass(2),Trans
 
            Case 3:Put(.x,.y),stone(1),Trans
 
            Case 4:Put(.x,.y),stone(2),Trans
 
            Case 5:Put(.x,.y),stone(3),Trans
 
         End Select
 
         If .damage=1 And .typ<>0 Then Put(.x,.y),a,Alpha,128
 
      End With
 
   Next
 
   Line (player1x,player1y)-(player1x+20,player1y+20),rd,BF
 
   Line (player2x,player2y)-(player2x+20,player2y+20),bl,BF
 
   Draw String(player1x,player1y-20),Str(player1life),rd
 
   Draw String(player2x,player2y-20),Str(player2life),bl
 
   Draw String(10,30),"[1] Stein",IIf(ps=1,rd,wt)
 
   Draw String(10,40),"[2] Rakete("+Str(ar)+")",IIf(ps=2,rd,wt)
 
   Draw String(10,50),"[3] Daisy Cutter("+Str(adc)+")",IIf(ps=3,rd,wt)
 
   Draw String(10,60),"[4] Peacekeeper("+Str(an)+")",IIf(ps=4,rd,wt)
 
   Line (10,10)-(10+power,20),rd,BF
 
   Line (10,10)-(210,20),rd,B
 
   If player=1 And shoot=0 Then
 
      Line (player1x+10,player1y+10)-((player1x+10) + (Cos(ma*3.141/180))*50,(player1y+10) + (Sin(ma*3.141/180))*50),rd
 
      If MultiKey(&h11) And power<=200 And shoot=0 Then power+=1
 
      If MultiKey(&h1F) And power>=0 And shoot=0 Then power-=1
 
      If MultiKey(&h1E) And ma>=-180 And shoot=0 Then ma-=1
 
      If MultiKey(&h20) And ma<=0 And shoot=0 Then ma+=1
 
      If MultiKey(&h02) Then ps=1
 
      If MultiKey(&h03) And ar>0 Then ps=2
 
      If MultiKey(&h04) And adc>0 Then ps=3
 
      If MultiKey(&h05) And an>0 Then ps=4
 
      If (ps=2 And ar=0) Or (ps=3 And adc=0) Or (ps=4 And an=0) Then ps=1
 
      If MultiKey(&h39) And shoot=0 Then
 
         grav=0
 
         shoot=1
 
         shootx=(player1x+10) + (Cos(ma*3.141/180))*50
 
         shooty=(player1y+10) + (Sin(ma*3.141/180))*50
 
         angle=ma
 
         d=1
 
         player=2
 
         shoottyp=ps
 
         If shoottyp=2 Then ar-=1
 
         If shoottyp=3 Then adc-=1
 
         If shoottyp=4 Then an-=1
 
      End If
 
   Else
 
      If shoot=0 Then
 
         If r=1 Then shoottyp=3
 
         If r>1 Then shoottyp=1
 
         angle=-45
 
         power=Rnd*150+50
 
         grav=0
 
         shoot=1
 
         shootx=(player2x+10) + (Cos(angle*3.141/180))*50
 
         shooty=(player2y+10) + (Sin(angle*3.141/180))*50
 
         d=2
 
         player=1
 
         r+=1
 
      End If
 
   End If
 
   If shoot=1 Then
 
      grav+=0.01
 
      Line (shootx-3,shooty-3)-(shootx+3,shooty+3),RGB(0,0,0),BF
 
      If d=1 Then shootx+=(10+power)/80*Cos(Abs(angle-1)*3.141/180)
 
      If d=2 Then shootx-=(10+power)/80*Cos(Abs(angle)*3.141/180)
 
      shooty-=(power/80-grav)*Sin(Abs(angle)*3.141/180)
 
      If shooty>ymax Or shooty<0 Or shootx>xmax Or shootx<0 Then shoot=0
 
      If shootx>player1x-21 And shootx<player1x+41 And shooty>player1y-21 And shooty<player1y+41 And shoottyp>3 Then
 
         If shoottyp=3 Then player1life-=10
 
         If shoottyp=4 Then player1life-=80
 
         shoot=0
 
      End If
 
      If shootx>player2x-21 And shootx<player2x+41 And shooty>player2y-21 And shooty<player2y+41 And shoottyp>3 Then
 
         If shoottyp=3 Then player2life-=10
 
         If shoottyp=4 Then player2life-=80
 
         shoot=0
 
      End If
 
      If shootx>player1x-21 And shootx<player1x+21 And shooty>player1y-11 And shooty<player1y+21 Then
 
         If shoottyp=1 Then player1life-=15
 
         If shoottyp=2 Then player1life-=30
 
         shoot=0
 
      End If
 
      If shootx>player2x-21 And shootx<player2x+21 And shooty>player2y-11 And shooty<player2y+21 Then
 
         If shoottyp=1 Then player2life-=15
 
         If shoottyp=2 Then player2life-=30
 
         shoot=0
 
      End If
 
      For i=1 To anzbox
 
         If shootx>Box(i).x-1 And shootx<Box(i).x+20 And shooty>Box(i).y-1 And shooty<Box(i).y+20 And Box(i).typ<>0 Then
 
            If shoottyp=3 Or shoottyp=4 Then
 
               For i2=1 To anzbox
 
                  If (shoottyp=3 Or shoottyp=4) And Box(i2).x>shootx-41 And Box(i2).x<shootx+61 And Box(i2).y>shooty-41 And Box(i2).y<shooty+61 Then Box(i2).damage=1
 
                  If (shoottyp=3 Or shoottyp=4) And Box(i2).x>shootx-21 And Box(i2).x<shootx+41 And Box(i2).y>shooty-21 And Box(i2).y<shooty+41 Then Box(i2).typ=0
 
               Next
 
            End If
 
            If (shoottyp=1 Or shoottyp=2) Then
 
               If Box(i).typ=1 Or Box(i).typ=2 Then Box(i).typ=0
 
               If Box(i).typ=3 Or Box(i).typ=4 Or Box(i).typ=5 Then
 
                  If Box(i).damage=0 Then
 
                     Box(i).damage=1
 
                  ElseIf Box(i).damage=1 Then
 
                     Box(i).typ=0
 
                  End If
 
               End If
 
            End If
 
            ex=shootx
 
            ey=shooty
 
            ex2=ex
 
            ey2=ey
 
            et=255
 
            shootx=0
 
            shooty=0
 
            shoot=0
 
            grav=0
 
            angle=0
 
            power=0
 
         End If
 
      Next
 
   End If
 
   If et<>0 Then
 
      et-=1
 
      ex-=0.05
 
      ey-=0.05
 
      ex2+=0.05
 
      ey2+=0.05
 
      Put (ex-5,ey-5),e,Alpha,et
 
      If et>50 Then
 
         Put (ex2+4,ey2-4),e,Alpha,et-50
 
         Put (ex2-3,ey2+3),e,Alpha,et-50
 
      End If
 
      Put (ex+5,ey+5),e,Alpha,et
 
   End If
 
   If player2life<=0 Then Draw String (xmax/2,ymax/2),"Du hast gewonnen!",rd
 
   ScreenUnLock
 
Loop Until Inkey=Chr(27) | 	  
 
Gruß
 
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		ThePuppetMaster
 
  
  Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
  | 
		 | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
  | 
   
 
     |