Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Peacekeeper

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.06.2015, 18:10    Titel: Peacekeeper Antworten mit Zitat

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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 23.06.2015, 22:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.06.2015, 22:29    Titel: Antworten mit Zitat

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. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 24.06.2015, 09:05    Titel: Antworten mit Zitat

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 zwinkern :
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 25.06.2015, 15:30    Titel: Antworten mit Zitat

hab ich auch mal probiert ... 6,4KB http://www.freebasic-portal.de/porticula/opti-bas-1805.html

MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz