|
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, 19: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: 1211 Wohnort: Ruhrpott
|
Verfasst am: 23.06.2015, 23: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, 23: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: 1211 Wohnort: Ruhrpott
|
Verfasst am: 24.06.2015, 10: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: 1837 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.
|
|