Seite 1 von 4

ÐrawMania • (2D-Drawing-Spiele-Serie)

Verfasst: 05.05.2007 00:14
von STARGÅTE
So, damit Beiträge zu diesem Thema nicht zu DontDrop kommen mache ich jetzt hier ein Thema auf und werde hier ein paar CODEs reinstellen bezüglich 2D-Drawing.

Jetzt ist noch nix zu sehen, weil ich erst ein bisschen was vorbereiten muss, wenn ihr aber schon fragen habt zur SERIE "DrawMania", dann könnt ihr die Hier ruhig stellen. auch wenn ihr Fragen habt wie man das eine oder andere nur mit LineXY realisieren könnte.

DrawMania
  • DrawMania ist eine Spiele-Serie für PureBasic die versucht nur mit ganz einfachen Mitteln interessante Spiele und Effekte zu entwickeln. Zu den einfachen Mitteln gehören bei Grafik "2D-Drawing" und bei Audio "Beep".
    In dieses Spielen ist es verboten mit Sprites zu Arbeiten oder gar Sprites3D, auch dürfen keine Sound oder Movie Befehle verwendet werden. (InitSprite darf verwendet werden um einem Screen zu benutzen)
Topic sticky - Kaeru fecit :allright:

Verfasst: 05.05.2007 01:19
von Fluid Byte
Keine Sound Befehle? Du meinst das einbinden und abspielen exterener sounds? Was mit sound effekten die "on-the-fly" erzeugt werden?

Verfasst: 05.05.2007 01:39
von STARGÅTE
Ich meine damit das du nicht schreiben sollst PlaySound, egal was Sound ist.

Sondern es soll nur mit Hilfe von Beep(Frequenz, Dauer) ein Ton/Effekt/Lied erzeugt werden

Verfasst: 05.05.2007 01:55
von Fluid Byte
Na dann schaffe, schaffe, Häusle baue! Ein "Lied" mit Beep_(). Naja, wir haben ja gesehen das es geht aber ist den Aufwand dann wohl nicht wert und ich werde mich auf einfache Sound Effekte beschränken. Wie auch immer, ich finde den Contest dufte und werd' versuchen mal was zusammen zuschrauben. Bild

Verfasst: 05.05.2007 03:58
von TomS
Das mit dem Sound versteh ich nicht.
Ich mag keine Anwendungen die Beep_() verwenden. Egal ob ein Spiel oder der dumme Virenscanner.
Warum schließt du PlaySound() aus? Klar, wenn das Spiel "oldschool" aussieht, dass man nicht mit 1a klingenden MP3's ankommt. Aber On-The-Fly erstellte Sounds unterstreichen das doch eigentlich (*denk an die neue Lib von Hroudtwolf*)

Verfasst: 05.05.2007 05:07
von STARGÅTE
Sagen wir mal so, die Überschrift heißt ja "DrawMania", es geht mir also vorallem um die Draw-Befehle. Wenn du/ihr nun das BEEP nicht mögt ^^ dann könnt ihr eben Sounds benutzen und wenn dieser Sound einem "altertümlichen" Spiel nahe kommt ist das denke ich mal ok.

@Admin/Mod : Ich glaube ich habe das Thema im falschen Sub-Forum gepostet, vllt wäre es in "Ankündigungen" besser aufgehoben, wwil es ja eine Art Contest geworden ist.

Verfasst: 05.05.2007 05:28
von ts-soft
Ich würde sagen, Du haust mal einen Admin an, wie es mit einem Contest
aussieht, haben ja lange keinen gehabt. Wenn Rob mitspielt, wir Sponsoren
finden, wird bestimmt Interessant, obwohl schon wieder nix für mich :mrgreen:
Bis zur Klärung lassen wir den Thread mal hier stehen, denke ich.

Verfasst: 05.05.2007 11:36
von Macros
Natürlich kann man mit Beep schöne Lieder schreiben,
ich hab da noch ein uraltes Projekt aus den Anfängen
meiner Programmierertage auf dem Webspace:
www.10a.rshost.de/load/files/notenspieler.exe

(das Startlied heißt Üsküdara,
kommt glaube ich aus der Türkei und wir
hatte es irgendwann mal im Musikunterricht)

Verfasst: 05.05.2007 14:09
von STARGÅTE
....

Vorgeschichte :HIER

...

Also, das mit den DLL und LIB geht leider nicht wegen 3.3, auf dieses Thema gehe ich nicht weiter ein!

So wie ich das jetzt heraus lesen konnte geht es eigendlich nicht mehr nur um Spiele mit 2D Drawing sonder auch andere Spiele und dnan ganz allemeine sachen wie : Explosion, Menü.

Ich selber tue mich immer schwer meine CODE so zu programmieren das ich feste Proceduren habe, aber ich wede die Explosionroutiene mal für euch sauber abschreiben.

PS: Aber es wäre natürlich auch nicht schlecht wenn sich alle ein paar gedanken machen wie sie sowas machen könnten :wink:

Verfasst: 05.05.2007 14:44
von STARGÅTE
[Sry wegen DoppelPost]

So ich habe mal hier eine einfache darstellung einer Explosion von Linien :

Code: Alles auswählen

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

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, #PB_Window_MinimizeGadget, "2D-Drawing")
 OpenWindowedScreen(WindowID(1), 0, 0, 600, 600, 0, 0, 0)

Repeat

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

 ClearScreen(0,0,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()
 WMy = WindowMouseY()
 
 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