Aktuelle Zeit: 23.02.2019 14:54

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: 05.05.2007 19:34 
Offline
Benutzeravatar

Registriert: 23.12.2005 15:00
Wohnort: Alling (bei FFB)
Ich erlaube mir mal, deine Codes immer nach PB 4 zu konvertieren, für die Faulen :D

Code:
InitSprite()

#b = 0.01745329
Procedure.f Abstand(x1, y1, x2, y2)
 r.f = Sqr(Pow(x1-x2,2)+Pow(y1-y2,2))
 ProcedureReturn r
EndProcedure
Procedure.f Diagonale(x.f,y.f)
 r.f = Sqr(x*x+y*y)
 ProcedureReturn r
EndProcedure
Procedure.f Winkel(x.f,y.f)
 Winkel.f
 If x = 0
  If y <  0 : Winkel = -90 : EndIf
  If y >= 0 : Winkel =  90 : EndIf
 Else
  Winkel = ATan(y/x)/#b
  If x < 0 : Winkel + 180 : EndIf
 EndIf
 If Winkel < 0 : Winkel + 360 : EndIf
 ProcedureReturn Winkel
EndProcedure



Structure P
 Farbe.l ; Farbe
 l.l     ; Teilchenlänge
 x.f     ; x-Position
 y.f     ; y-Position
 dx.f    ; Flugrichtung (in X)
 dy.f    ; Flugrichtung (in Y)
 rw.l    ; Eigenrotationswinkel
 rdw.l   ; Eigenrotationswinkeländerung
EndStructure

Global NewList P.P() ; Partikelliste

; Fügt ein Partikel hinzu mit (Farbe, Posion(x,y), Flugrichtung, Geschwindigkeit, Rotationsgeschwindigkeit)
Procedure AddParticle(Farbe, l, x, y, w.f, v.f, rdw.f)
 AddElement(P())
 P()\Farbe = Farbe
 P()\l = l
 P()\x = x
 P()\y = y
 P()\dx = Cos(w*#b)*v
 P()\dy = Sin(w*#b)*v
 P()\rw = w
 P()\rdw = rdw
EndProcedure
Procedure AddExplosion(Farbe, l, x.f, y.f, Dichte.f, v.f, rdw.f)
 nn = 360*Dichte
 For n = 1 To nn
  AddParticle(Farbe, l, x, y, n/Dichte, Random(v*100)/100+v/2, rdw)
 Next n
EndProcedure

#Gravitation = 0.01 ; bei 0 keine


OpenWindow(1, 300, 0, 600, 600, "2D-Drawing",#PB_Window_MinimizeGadget )
 OpenWindowedScreen(WindowID(1), 0, 0, 600, 600, 0, 0, 0)

Repeat

 Event = WindowEvent()
 Select Event
  Case #PB_Event_CloseWindow
   End
 EndSelect

 ClearScreen(0)
 
 StartDrawing(ScreenOutput())
 
  ResetList(P())
  While NextElement(P())
   ; Gravitation
   P()\dy + #Gravitation
   ; Bewegung
   P()\x + P()\dx
   P()\y + P()\dy
   ; Eigenrotation
   P()\rw + P()\rdw
   ;Anzeige
   Winkel = Winkel(P()\dx,P()\dy)+P()\rw
   x2 = Cos(Winkel*#b)*P()\l
   y2 = Sin(Winkel*#b)*P()\l
   Line(P()\x, P()\y, x2, y2, P()\Farbe)
   ; Deletakontrolle
   If P()\y > 620 : DeleteElement(P()) : EndIf
  Wend
 
 StopDrawing()
 
 FlipBuffers()

 WMx = WindowMouseX(1)
 WMy = WindowMouseY(1)
 
 If GetAsyncKeyState_(#VK_LBUTTON) <> 0
  Druck = 1
 ElseIf Druck = 1
  Druck = 0
  Rot = Random(127)+128
  Gruen = Random(127)+128
  Blau = Random(127)+128
  Laenge = Random(10)+5 ; Wie groß soll eines Teilchens durchschnittlich sein
  Dichte.f = (Random(15)+5)/10 ; Wie viele Teilchen soll es pro 1° geben
  v.f = (Random(20)+5)/10 ; wie schnell sollen die Teilchen Durchschnittlich fliegen
  rdw.f = Random(4) ; wie schnell soll die Eigenrotation der Teilchen sein
  AddExplosion(RGB(Rot,Gruen,Blau), Laenge, WMx, WMy, Dichte, v, rdw)
 EndIf
 
ForEver

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 06.05.2007 10:31 
Offline
Benutzeravatar

Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Ich selber tue mich immer schwer meine CODE so zu programmieren das ich feste Proceduren habe

Eben deswegen wär's doch eine feine Sache ;) somit würde es nicht nur denen nützen, die ein ähnliches Spiel machen wollen, sondern Du selbst würdest auch eine Menge dabei lernen. Das würde auch Deinen zukünftigen Spielen was bringen, und wenn Du es geschickt anstellst, würdest Du auch selbst nicht immer wieder von vorn beginnen müssen.

Ich habe eigentlich mal ein Tutorial angefangen, zum Thema "wie schreibe ich vernünftigen Code", aber irgendwie hatte ich nie Zeit, das weiterzuschreiben... wenn Interesse besteht, werde ich aber auf jeden Fall mal versuchen, mir dafür ein bißchen Zeit einzurichten :)

_________________
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 06.05.2007 11:40 
Offline
Benutzeravatar

Registriert: 10.10.2004 18:56
INTERESSE!

_________________
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007 13:01 
Offline
Benutzeravatar

Registriert: 01.10.2004 10:02
Ein kleines Spiel was aus aktuellem Anlass übers Wochenende entstanden ist.

Popp-It

http://purebasic.stdojedmahr.de/projekte/Poppit.zip

Ein kleiner Shooter, mit dem man Kreise platzen lassen kann

Bild

Kommentar willkommen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007 14:44 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
:allright:

Genau so habe ich mir das Vorgestellt, n bisschen schade das du kein BEEP benutzt hats aber ok.

Verbesserungsvorschlag :
- Dauerfeuer sollt verhindert werden, weil ich kann dauerhaft die Maus gedrückt halten und durch die Nachladepakete geht mich nie die muni aus.
- vllt kannst du meine Explosionseffekte nutzen um das zerspringen eines Balls besser zu simulieren.

Was ch gut finde ist das man seine Waffer verbessern kann :-)

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007 17:06 
Offline
Benutzeravatar

Registriert: 01.10.2004 10:02
Vielen Dank für das Feedback.
Das mit dem Beep kann ich nciht so leiden. Ein paar kleine nette Sounds finde ich schon gut. Aber gehen die Geschmäcker praktisch auseinander.
Das mit dem Dauerfeuer stimmt irgendwie. Allerdings Jedesmal die Maus zu drücken - da bricht mir der Finger ab :-)

Ich werds evtl. so ändern, das man seine Energie aufläd, wenn man nicht feuert. Das könnte ein Anreiz sein, nciht dauernd zu feuern.

Die Explo-Effekte werd ich mal probieren. (Hatte am WE keinen Internetzugang, hab die heute erste entdeckt. Find ich übrigends cool. :-) )

Man gespannt ob und was noch in der Richtung kommt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007 17:15 
Offline

Registriert: 07.09.2004 03:13
@Dostej
Hättest besser die Zeit für PointOmega genutzt... *fg*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007 20:29 
Offline
Benutzeravatar

Registriert: 06.09.2004 13:26
Wohnort: Siegen
hab da auch noch ein JUX Spiel... ist noch von 3.92 Version, aber 2D <)

Code:
fo1=LoadFont(2,"Arial",10)
fo2=LoadFont(1,"Arial",80)

If InitSprite()
 InitKeyboard()
 main:
 OpenWindow(1,0,0,1024,768,#PB_Window_BorderLess|#PB_Window_ScreenCentered,"Huaa")
  OpenWindowedScreen(WindowID(),0,0,1024,768,1,0,0)
 
 neu:
  ende=0
  leben=3
  level=0
  start=10000
  pause=10
  kreise=1000
  gesamt=0
 
  weiter:
  If leben<0
   leben=0
   ende=1
  EndIf
  richtung=4
 
  StartDrawing(ScreenOutput())
   Box(0,0,1024,768,RGB(255,255,255))
   For t=1 To kreise
    x=Random(1023)
    y=Random(400)
    Circle(x,300+y,3,RGB(100,100,100))
   Next
   Circle(512,720,1,RGB(200,0,0))
   LineXY(0,50,1023,50,RGB(0,200,0))
    DrawingFont(fo1)
    Locate(10,10)
    FrontColor(100,100,200)
    DrawText("Punkte : "+Str(start-level))
     Locate(400,10)
    FrontColor(100,200,200)
    DrawText("Leben : "+Str(leben))
    Locate(800,10)
    FrontColor(200,200,200)
    DrawText("Gesamt : "+Str(gesamt))
  StopDrawing()
 
  If ende=1
   Gosub enden
   ClearScreen(255,255,255)
   Goto neu
  EndIf
 
  sx=512
  sy=720
  ax=512
  ay=720
 
  Repeat
   Delay(pause)
   ExamineKeyboard()
   If KeyboardPushed(#PB_Key_Up)
    richtung=0
   EndIf
   If KeyboardPushed(#PB_Key_Down)
    richtung=2
   EndIf
   If KeyboardPushed(#PB_Key_Left)
    richtung=3
   EndIf
   If KeyboardPushed(#PB_Key_Right)
    richtung=1
   EndIf
   If KeyboardPushed(#PB_Key_Escape)
    CloseWindow(1)
    End
   EndIf
   
   Select richtung
    Case 0
     sy-1
    Case 1
     sx+1
    Case 2
     sy+1
    Case 3
     sx-1
   EndSelect
   
   If sx>1023 Or sx<0 Or sy>767 Or sy<0
    Goto levelende
   EndIf
   
   If richtung<4
    StartDrawing(ScreenOutput())
     
     If Point(sx,sy)=51200
      level+500
      pause-1
      kreise+100
      gesamt+(start-level)
      ClearScreen(255,255,255)
      StopDrawing()
      Goto weiter
     EndIf
     
     If Point(sx,sy)=6579300
      levelende:
      StopDrawing()
      For t=1 To 100 Step 4
       StartDrawing(ScreenOutput())
        DrawingMode(4)
        Circle(sx,sy,t,RGB(255,0,0))
       StopDrawing()
       FlipBuffers()
       beep_(400-(t*2),1)
      Next
     
      For t=1 To 100 Step 4
       StartDrawing(ScreenOutput())
        DrawingMode(4)
        Circle(sx,sy,t,RGB(255,255,255))
       StopDrawing()
       FlipBuffers()
      Next
     
      Delay(500)
      ClearScreen(255,255,255)
      leben-1
      Goto weiter
     EndIf
   
     Circle(ax,ay,1,RGB(255,255,255))
     Circle(sx,sy,1,RGB(200,0,0))
     ax=sx
     ay=sy
     start-1
     DrawingFont(fo1)
     Locate(10,10)
     Box(0,0,300,38,RGB(255,255,255))
     FrontColor(100,100,200)
     DrawText("Punkte : "+Str(start-level))
     
    StopDrawing()
   EndIf
   
   FlipBuffers()
  ForEver
 
enden:
StartDrawing(ScreenOutput())
 DrawingMode(0)
 DrawingFont(fo2)
 FrontColor(0,0,0)
 Locate(200,200)
 DrawText("GAME OVER !!")
 StopDrawing()
 FlipBuffers()
 Delay(3000)
Return
 
EndIf


Ist aus meinen Anfängen damals...

_________________
PB 5.62 / Windows 10 64Bit (i5/32GB/240GBSSD+2TBHDD/960GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007 22:30 
Offline

Registriert: 10.11.2004 03:22
das mit dem "Draw only" find ich ne gute idee.
zu der gelegenheit verweise ich mal an mein rudimentäres autorennen:
http://www.purebasic.fr/german/viewtopi ... 539#136539

zum sound:
generell hätte ich interessa an MIDI-ansteuerung über API,
also, sound on-the-fly, aber eben nicht als erstellte WAVs,
sondern direkt ausm SYNTH.

dafür ne Include, dass man also explosionen, schüsse, etc.
ebenso wie nen song on-the-fly über MIDI produzieren kann,
so wie beim alten PLAY-befehl von QuickBasic....

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 08.05.2007 08:41 
Offline
Benutzeravatar

Registriert: 01.10.2004 10:02
@Stargate
Habe noch explos und ein AUfladen bei Feuerpause eingebaut. Der Links ist der gleiche

@CSprengel
Brauchte mal ne kleine Pause vom grossen Projekt und n schnelles Erfolgserlebnis :-) -> Bin nun wier dran -> mach grad die Kolonie-KI (Ächz, was es da alles zu bedenken gibt)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye