Kleines Kästchen-Spiel

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Spikespine

Betreff: Kleines Kästchen-Spiel

BeitragFr, März 18, 2005 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
hier hab ich mal ein kleines Spielchen programmiert. Nichts besonderes; sinn ist es, alle schwarzen Kästchen mit der Maus (grünes Quadrat) einzusammeln und den roten auszuweichen.
Es ist eigentlich für Anfänger gedacht, eine Möglichkeit, Types zu verwenden. Der Code ist etwas unübersichtlich vor allem wegen den vielen Kommentaren, aber die müssen sein weils eben für Anfänger ist...

voilà:
BlitzBasic: [AUSKLAPPEN]
;..Konstanten..............................................................................
Const gx=640 ;Grafikfenster auflösung
Const gy=480

Const eigenegroesse=20 ;die eigene größe

Const erstellwahrscheinlichkeit=16 ;ist sie höher, werden weniger kästchen erstellt (siehe unten)
Const maxspeed#=1.5 ;die maxdimale geschwindigkeit eines kästchens
Const maxgroesse=18 ;maximale größe eines Kästchens


Global punkte
timer = CreateTimer(100)
;..........................................................................................


Graphics gx,gy,16,2 ;Is klar - Grafikmode setzen
SeedRnd MilliSecs() ;Zufallsgenerator aktivieren

Type kaestchen
Field x#,y# ;koordinaten
Field richtung ;1 für links, 2 für rechts, 3 für hoch, 4 für runter
Field speed# ;geschwindigkeit
Field farbe ;0 - schwarz (gut); 1 - rot (böse)
Field groesse ;durchmesser
End Type

SetBuffer BackBuffer() ;ist auch klar
ClsColor 0,0,255 ;blauer Hintergrund
Repeat

Cls

mx = MouseX() ;mauskoordinaten abspeichern
my = MouseY()

;...Kästchen erstellen.................................................................
If Rand(1,erstellwahrscheinlichkeit)=1 Then
KaestchenErstellen ;startet die Funktion
EndIf
;......................................................................................

;...Kästchen abfragen..................................................................
For kaestchen.kaestchen = Each kaestchen ;eine For each schleife, die jedes Kästchen durchgeht
If kaestchen\richtung = 1 Then kaestchen\x = kaestchen\x - kaestchen\speed ;nach links
If kaestchen\richtung = 2 Then kaestchen\x = kaestchen\x + kaestchen\speed ;nach rechts

If kaestchen\richtung = 3 Then kaestchen\y = kaestchen\y - kaestchen\speed ;nach oben
If kaestchen\richtung = 4 Then kaestchen\y = kaestchen\y + kaestchen\speed ;nach unten

If kaestchen\x > gx Or kaestchen\x < 0-kaestchen\groesse Or kaestchen\y > gy Or kaestchen\y < 0-kaestchen\groesse Then
;falls das kästchen nicht mehr zu sehen ist...
Delete kaestchen.kaestchen
Else
;andernfalls...

;zeichnen
Color 255*kaestchen\farbe,0,0 ;farbe, entweder rot oder schwarz
Rect kaestchen\x,kaestchen\y,kaestchen\groesse,kaestchen\groesse
Color 0,255,0 ;grün für den spieler
Rect mx,my,eigenegroesse,eigenegroesse


If RectsOverlap(mx,my,eigenegroesse,eigenegroesse,kaestchen\x,kaestchen\y,kaestchen\groesse,kaestchen\groesse)
;simple kollisionsabfrage von rechtecken
If kaestchen\farbe = 0 Then
Punkte = Punkte + Points(kaestchen\speed,kaestchen\groesse) ;mit der Points-funktion
Delete kaestchen.kaestchen
Else
verloren ;funktion wird gestartet
EndIf
EndIf


EndIf
Next
;..........................................................................................

;Punkte schreiben
Text gx-100,5,Punkte+\" Punkte\"


WaitTimer timer
Flip 0;schneller Puffertausch
Until KeyHit(1)


Function KaestchenErstellen()
kaestchen.kaestchen = New kaestchen ;neues Type erstellen
;ab hier werden die startwerte willkürlich festgelegt:
kaestchen\richtung = Rand(1,4) ;zufallswahl der richtung
kaestchen\y = Rand(gy) * (kaestchen\richtung <= 2) + (gy * (kaestchen\richtung=3));hier wird zunächst...
;...eine Zufallszahl in maximaler Höhe der y-auflösung gewählt. Falls sich das Kästchen nach oben
;oder unten bewegt, soll die Y-Koordinate nicht irgendwo sein sondern 0 oder 480 ! Darum stelle ich eine bedingung
;(dass die richtung 1 oder 2 bzw. links oder rechts sein soll. Wenn sie wahr ist, bleibt die Zufallszahl bestehen.
;andernfalls ist die Bedingung false, also 0, darum ist das Gesamtergebnis auch 0. wenn sich das Kästchen
;nach oben bewegt, wird der y-startwert auf gy (480) gesetzt, mithilfe einer Bedingung.
kaestchen\x = Rand(gy) * (kaestchen\richtung >= 3) + (gx * (kaestchen\richtung=1)) ;the same procedure...
kaestchen\speed = Rnd(0.4,maxspeed) ;die Speed wird zufällig gewählt
kaestchen\farbe = Rand(0,1) ;genauso die Farbe...
kaestchen\groesse = Rand(maxgroesse/2,maxgroesse)
End Function

Function Points(speed,groesse)
Return speed^2*groesse ;die formel kann verändert werden
End Function

Function verloren()
Cls
Text gx/2,gy/2,\"GAME OVER! Erreichte Punkte: \"+punkte,1,1
Text gx/2,gy/2+20,\"Für neues Spiel Enter, für ende Esc drücken!\",1,1
Flip
Repeat
If KeyHit(1) Then End ;bei esc sofort beenden
Until KeyHit(28) ;bei enter gehts weiter
spielerstellen ;funktion wird gestartet
Return

End Function

Function spielerstellen() ;diese Funktion reset-ed alle variablen
For kaestchen.kaestchen = Each kaestchen ;eine schleife für die Kästchen
Delete kaestchen.kaestchen ;löschen
Next
punkte = 0
End Function


Natürlich sicherlich noch ausbaufähig.

mfg,
Spike

P.S. mein Rekord liegt bei 897 Punkten.
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
 

Gerhard

BeitragFr, März 18, 2005 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
1.315 Punkte.
Nette Idee. Macht ganz schön hektisch...

Spikespine

BeitragSa, März 19, 2005 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
So. Ich habs jetzt ein bisschen ausgebaut:
Arrow Zeit und Levels
Arrow Bei höherem Level bewegen sich die Kästchen schneller
Arrow Partikel: Kästchen explodieren bei Berührung, Speed auch abhängig von mausgeschwindigkeit
Arrow Kästchen, die man durchlässt geben Punktabzug
EDIT: update:
Arrow Etwas langsamer
Arrow das grüne Kästchen explodiert auch
Arrow Punkte werden direkt angezeigt

BlitzBasic: [AUSKLAPPEN]
;..Konstanten..............................................................................
Const gx=640 ;Grafikfenster auflösung
Const gy=480

Const eigenegroesse=20 ;die eigene größe

Const erstellwahrscheinlichkeit=16 ;ist sie höher, werden weniger kästchen erstellt (siehe unten)
Const maxspeed#=0.75 ;die maxdimale geschwindigkeit eines kästchens
Const maxgroesse=18 ;maximale größe eines Kästchens

Const partikelmaxspeed#=2.0

Global punkte
Global level=1
Global start ;startzeit des Spiels
timer = CreateTimer(100)
Global mxspeed,myspeed,mspeed#
Global startcount=MilliSecs(),frame,frames ;für den FPS-Zähler
Global best,neuerrekord ;(siehe Function verloren)
Global verlieren
;..........................................................................................


Graphics gx,gy,16,2 ;Is klar - Grafikmode setzen
SeedRnd MilliSecs() ;Zufallsgenerator aktivieren
AppTitle \"Kästchen-Fangen\"

Type kaestchen
Field x#,y# ;koordinaten
Field richtung ;1 für links, 2 für rechts, 3 für hoch, 4 für runter
Field speed# ;geschwindigkeit
Field farbe ;0 - schwarz (gut); 1 - rot (böse)
Field groesse ;durchmesser
End Type

Type partikel
Field x#,y#
Field richtung
Field blau ;dieser Wert wird immer erhöht, um den Partikel aufzulösen
Field farbe ;0-normal 1-grün (wenn man verliert)
Field speed#
End Type
Global partikel

Type punktetext
Field x#,y#
Field speed#
Field farbe
Field punkte
End Type
Global punktetext


SetBuffer BackBuffer() ;ist auch klar
ClsColor 0,0,255 ;blauer Hintergrund

start = MilliSecs()
Repeat

Cls

mx = MouseX() ;mauskoordinaten abspeichern
my = MouseY()

mxspeed = MouseXSpeed()
myspeed = MouseYSpeed()
mspeed = Sqr(mxspeed^2+myspeed^2)


zeit = (MilliSecs()-start) /1000
level = Floor(zeit/10)+1


;...Kästchen erstellen.................................................................
If Rand(1,erstellwahrscheinlichkeit)=1 Then
KaestchenErstellen ;startet die Funktion
EndIf
;......................................................................................

;...Kästchen abfragen..................................................................
For kaestchen.kaestchen = Each kaestchen ;eine For each schleife, die jedes Kästchen durchgeht
If kaestchen\richtung = 1 Then kaestchen\x = kaestchen\x - kaestchen\speed ;nach links
If kaestchen\richtung = 2 Then kaestchen\x = kaestchen\x + kaestchen\speed ;nach rechts

If kaestchen\richtung = 3 Then kaestchen\y = kaestchen\y - kaestchen\speed ;nach oben
If kaestchen\richtung = 4 Then kaestchen\y = kaestchen\y + kaestchen\speed ;nach unten

If kaestchen\x > gx Or kaestchen\x < 0-kaestchen\groesse Or kaestchen\y > gy Or kaestchen\y < 0-kaestchen\groesse Then
;falls das kästchen nicht mehr zu sehen ist...
If kaestchen\farbe=0 Then punkte = punkte - kaestchen\groesse / 2
Delete kaestchen.kaestchen
Else
;andernfalls...

;zeichnen
Color 255*kaestchen\farbe,0,0 ;farbe, entweder rot oder schwarz
Rect kaestchen\x,kaestchen\y,kaestchen\groesse,kaestchen\groesse
Color 0,255,0 ;grün für den spieler
If verlieren = 0 Then
Rect mx,my,eigenegroesse,eigenegroesse
EndIf


If RectsOverlap(mx,my,eigenegroesse,eigenegroesse,kaestchen\x,kaestchen\y,kaestchen\groesse,kaestchen\groesse)
;simple kollisionsabfrage von rechtecken
If kaestchen\farbe = 0 Then
Punkte = Punkte + Points(kaestchen\speed,kaestchen\groesse) ;mit der Points-funktion
If points(kaestchen\speed,kaestchen\groesse)=0 Then Stop
PartikelErstellen(kaestchen\x + (kaestchen\groesse/2),kaestchen\y + (kaestchen\groesse/2), kaestchen\groesse , 0)
PunktetextErstellen(Points(kaestchen\speed,kaestchen\groesse),kaestchen\x,kaestchen\y)
Delete kaestchen.kaestchen

Else
If verlieren = 0 Then
PartikelErstellen(mx+eigenegroesse/2,my+eigenegroesse/2,eigenegroesse*3, 1)
Delete kaestchen.kaestchen
verlieren =1
EndIf

EndIf
EndIf


EndIf
Next
;..........................................................................................

;......Partikel............................................................................
For part.partikel = Each partikel
part\x = part\x + Cos(part\richtung)*part\speed
part\y = part\y - Sin(part\richtung)*part\speed
part\speed = part\speed * 0.95
part\blau = part\blau + 5
If part\blau>=255 Then
If verlieren=1 And part\farbe=1 Then verloren ;function starten
Delete part.partikel

Else
Color 0,0,part\blau
If part\farbe = 1 Then Color 0,255-part\blau,part\blau
Rect part\x-1,part\y-1,3,3
EndIf
Next
;..........................................................................................

;......Punkte-Text.........................................................................
For ptext.punktetext = Each punktetext
ptext\y=ptext\y - ptext\speed
ptext\speed = ptext\speed * 0.95
ptext\farbe = ptext\farbe - 5
If ptext\farbe =< 0 Then
Delete ptext.Punktetext
Else
Color ptext\farbe,ptext\farbe,255
Text ptext\x,ptext\y,ptext\punkte
EndIf
Next


;Punkte schreiben
Color 100,100,255
Text gx/2,gy/2,Punkte+\" (\"+best+\")\",1,1
Color 255,255,255
Text gx/2-50,5,\"Level \"+level
Text gx/2+50,5,\"Zeit: \"+zeit+\" sec\"


;.....FPS..................................................................................
milliseks=MilliSecs()
If milliseks-startcount>=1000
startcount=milliseks
frames=frame
frame=0
Else
frame=frame+1
EndIf
Text 5,5,\"FPS: \"+frames
;...........................................................................................


WaitTimer timer
Flip 0;schneller Puffertausch
Until KeyHit(1)
End

Function KaestchenErstellen()
kaestchen.kaestchen = New kaestchen ;neues Type erstellen
;ab hier werden die startwerte willkürlich festgelegt:
kaestchen\richtung = Rand(1,4) ;zufallswahl der richtung
kaestchen\y = Rand(gy) * (kaestchen\richtung <= 2) + (gy * (kaestchen\richtung=3));hier wird zunächst...
;...eine Zufallszahl in maximaler Höhe der y-auflösung gewählt. Falls sich das Kästchen nach oben
;oder unten bewegt, soll die Y-Koordinate nicht irgendwo sein sondern 0 oder 480 ! Darum stelle ich eine bedingung
;(dass die richtung 1 oder 2 bzw. links oder rechts sein soll. Wenn sie wahr ist, bleibt die Zufallszahl bestehen.
;andernfalls ist die Bedingung false, also 0, darum ist das Gesamtergebnis auch 0. wenn sich das Kästchen
;nach oben bewegt, wird der y-startwert auf gy (480) gesetzt, mithilfe einer Bedingung.
kaestchen\x = Rand(gy) * (kaestchen\richtung >= 3) + (gx * (kaestchen\richtung=1)) ;the same procedure...
kaestchen\speed = Rnd(0.4,maxspeed) * ((level+2)/3) ;die Speed wird zufällig gewählt
kaestchen\farbe = Rand(0,1) ;genauso die Farbe...
kaestchen\groesse = Rand(maxgroesse/2,maxgroesse)
;If kaestchen\farb
End Function

Function Points(speed#,groesse)
Return Ceil(speed)*groesse ;die formel kann verändert werden
End Function

Function verloren()
Cls
If punkte > best Then
best = punkte
neuerrekord=1
Else
neuerrekord=0
EndIf
Color 255,255,255
Text gx/2,gy/2,\"GAME OVER! Erreichte Punkte: \"+punkte+\" (im \"+level+\". Level\",1,1
Text gx/2,gy/2+20,String(\"Das ist ein neuer Rekord!!\",neuerrekord),1,1
Text gx/2,gy/2+20,String(\"Rekord: \"+best+\" Punkte\",1-neuerrekord),1,1
Text gx/2,gy/2+50,\"Für neues Spiel Enter, für ende Esc drücken!\",1,1
Flip
Repeat
If KeyHit(1) Then End ;bei esc sofort beenden
Until KeyHit(28) ;bei enter gehts weiter
spielerstellen ;funktion wird gestartet
Return

End Function

Function spielerstellen() ;diese Funktion reset-ed alle variablen
For kaestchen.kaestchen = Each kaestchen ;eine schleife für die Kästchen
Delete kaestchen.kaestchen ;löschen
Next
punkte = 0
start = MilliSecs()
level = 1
verlieren = 0
End Function

Function PartikelErstellen(part_x,part_y,part_menge, part_farbe) ;diese Funktion erstellt Partikel
For i=0 To part_menge*5
part.partikel=New partikel
part\x=part_x ;x-koordinate, die der Funktion überwiesen wurde
part\y=part_y ;y-koordinate \"
part\richtung = Rand(0,89)*4 ;willkürlich von 0-356 in 4er schritten
part\speed = Rnd((partikelmaxspeed/3)*2,partikelmaxspeed)+(mspeed/4)
part\farbe = part_farbe
Next
End Function

Function PunktetextErstellen(ptext_punkte,ptext_x,ptext_y)
ptext.punktetext= New punktetext
ptext\x=ptext_x
ptext\y=ptext_y
ptext\speed=2.0
ptext\punkte=ptext_punkte
ptext\farbe=255
End Function



viele grüße,
Spike
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
  • Zuletzt bearbeitet von Spikespine am Sa, März 19, 2005 13:25, insgesamt einmal bearbeitet

blitzmaster

BeitragSa, März 19, 2005 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
is lustig, aber hektisch.....
Ich würd's nicht soooo schnell machen (zuminderst am Anfang)
***************
Blitzmaster

Spikespine

BeitragSa, März 19, 2005 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, ich habs wieder etwas ausgebaut, siehe voriger Post!

Spike
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Alfadur

BeitragSa, März 19, 2005 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist ja einfach nur genial. macht voll spaß, hab erst gedacht : ach ich spiel bis level 10 ... und irgendwann ... ach bis level 30 ... level 50... sehr schön, gefällt mir... mach doch kästchen paar lustige bilderchen und ein richtiges menü...
A Cray is the only computer that runs an endless loop in less than four hours.

BladeRunner

Moderator

BeitragSa, März 19, 2005 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Extremst cool. Die Farben brennen einem zwar auf Dauer Löcher in die Netzhaut, aber... Wow Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Spikespine

BeitragSa, März 19, 2005 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist das Ironie?
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

BladeRunner

Moderator

BeitragSa, März 19, 2005 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
nein. das Game gefällt mir. sehr sogar.
Nur die Farben sorgen halt bei mir dafür dass ich innerhalb kürzester Zeit eine gestörte Farbwahrnehmung hab. Ändert aber nix am Fun den das Game macht Smile
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Spikespine

BeitragSa, März 19, 2005 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
schhön, danke Smile

Hmm.. ich glaube ich änder die Farben, mal sehen. Vielleicht etwas heller...
Hat jemand noch Ideen für das Spiel?
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Rob_

BeitragSa, März 19, 2005 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hi das macht echt spass, ich habe -850 punkte und 5 level, mein recorf ist 29 punkte

jetzt hab ichs kapirt, die schwarzen kann man aufsammeln : )

da habe ich jetzt: 1748 Punkte i m 7 level
Dad ist ein neuer record
AMD Athlon 64 3500+ | Infineon 1 GB DDR RAM | nVidia Geforce 7800 GTX

Spikespine

BeitragSo, März 20, 2005 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, ich hab jetzt nochmal ein bisschen dran rumgespielt
Arrow ein paar kleine grafische verschönerungen, z.B. pulsierende Rote Kästchen
Arrow Power-Ups (die Kreise). Die sind eigentlich gut: Eins macht alle Kästchen, die sich momentan auf dem Spielfeld befinden, schwarz, eins gibt 100 extra-punkte, eins gibt 250 extra-punkte, macht dafür alle Kästchen rot, eins macht alle Kästchen scchneller, eins macht alle langsamer und mit einem kommt man ins nächste Level.
[edit]
Arrow Kleiner Level-Bug entfernt
Arrow Rekordfunktion erweitert!
[edit²]
Arrow wenn ihr die Konstante "hell" am anfang auf 1 setzt (oder lasst), wird das Spiel heller (durch ne simple Gammafunktion). Es hätte auch besser gehen können, aber mir war der aufwand zu groß das umzuschreiben Embarassed

Viel spaß damit!
BlitzBasic: [AUSKLAPPEN]
;..Konstanten..............................................................................
Const hell=1

Const gx=640 ;Grafikfenster auflösung
Const gy=480

Const eigenegroesse=20 ;die eigene größe

Const erstellwahrscheinlichkeit=18 ;ist sie höher, werden weniger kästchen erstellt (siehe unten)
Const maxspeed#=0.75 ;die maxdimale geschwindigkeit eines kästchens
Const maxgroesse=18 ;maximale größe eines Kästchens

Const partikelmaxspeed#=2.0

Global punkte
Global level=1
Global start ;startzeit des hSpiels
Global zeit
timer = CreateTimer(100)
Global mxspeed,myspeed,mspeed#
Global startcount=MilliSecs(),frame,frames ;für den FPS-Zähler
Global best,neuerrekord ;(siehe Function verloren)
Global bestlevel,besttime
Global verlieren
Global powerup_art
Global power_level
;..........................................................................................


Graphics gx,gy,16,1 ;Is klar - Grafikmode setzen
SeedRnd MilliSecs() ;Zufallsgenerator aktivieren
AppTitle \"Kästchen-Fangen\",\"Spiel beenden?\"

Type kaestchen
Field x#,y# ;koordinaten
Field richtung ;1 für links, 2 für rechts, 3 für hoch, 4 für runter
Field speed# ;geschwindigkeit
Field farbe ;0 - schwarz (gut); 1 - rot (böse)
Field farbintensitaet
Field groesse ;durchmesser
End Type

Type partikel
Field x#,y#
Field richtung
Field blau ;dieser Wert wird immer erhöht, um den Partikel aufzulösen
Field farbe ;0-normal 1-grün (wenn man verliert)
Field speed#
End Type
Global partikel

Type punktetext
Field x#,y#
Field speed#
Field farbe
Field punkte$
End Type
Global punktetext


SetBuffer BackBuffer() ;ist auch klar
ClsColor 0,0,255 ;blauer Hintergrund

start = MilliSecs()
Repeat

Cls

mx = MouseX() ;mauskoordinaten abspeichern
my = MouseY()

mxspeed = MouseXSpeed()
myspeed = MouseYSpeed()
mspeed = Sqr(mxspeed^2+myspeed^2)


zeit = (MilliSecs()-start) /1000
level = Floor(zeit/10)+1+power_level


;...Kästchen erstellen.................................................................
If Rand(1,erstellwahrscheinlichkeit)=1 Then
KaestchenErstellen ;startet die Funktion
EndIf
;......................................................................................

;...Kästchen abfragen..................................................................
For kaestchen.kaestchen = Each kaestchen ;eine For each schleife, die jedes Kästchen durchgeht
If kaestchen\richtung = 1 Then kaestchen\x = kaestchen\x - kaestchen\speed ;nach links
If kaestchen\richtung = 2 Then kaestchen\x = kaestchen\x + kaestchen\speed ;nach rechts

If kaestchen\richtung = 3 Then kaestchen\y = kaestchen\y - kaestchen\speed ;nach oben
If kaestchen\richtung = 4 Then kaestchen\y = kaestchen\y + kaestchen\speed ;nach unten

If kaestchen\x > gx Or kaestchen\x < 0-kaestchen\groesse Or kaestchen\y > gy Or kaestchen\y < 0-kaestchen\groesse Then
;falls das kästchen nicht mehr zu sehen ist...
If kaestchen\farbe=0 Then punkte = punkte - kaestchen\groesse / 2
Delete kaestchen.kaestchen
Else
;andernfalls...
;rote Kästchen pulsieren:
If kaestchen\farbintensitaet < 160 Then kaestchen\farbintensitaet = 230
kaestchen\farbintensitaet = kaestchen\farbintensitaet - 1

;zeichnen
Color kaestchen\farbintensitaet*(kaestchen\farbe=1),0,0 ;farbe, entweder rot oder schwarz
If kaestchen\farbe<2 Then
Rect kaestchen\x,kaestchen\y,kaestchen\groesse,kaestchen\groesse
ElseIf kaestchen\farbe=2 Then
Oval kaestchen\x,kaestchen\y,kaestchen\groesse,kaestchen\groesse
EndIf
Color 0,255,0 ;grün für den spieler
If verlieren = 0 Then
Rect mx,my,eigenegroesse,eigenegroesse
EndIf


If RectsOverlap(mx,my,eigenegroesse,eigenegroesse,kaestchen\x,kaestchen\y,kaestchen\groesse,kaestchen\groesse)
;simple kollisionsabfrage von rechtecken
If kaestchen\farbe = 0 Then
Punkte = Punkte + Points(kaestchen\speed,kaestchen\groesse) ;mit der Points-funktion
If points(kaestchen\speed,kaestchen\groesse)=0 Then Stop
PartikelErstellen(kaestchen\x + (kaestchen\groesse/2),kaestchen\y + (kaestchen\groesse/2), kaestchen\groesse , 0)
PunktetextErstellen(Points(kaestchen\speed,kaestchen\groesse),kaestchen\x,kaestchen\y)
Delete kaestchen.kaestchen
ElseIf kaestchen\farbe = 2 Then
PartikelErstellen(kaestchen\x + (kaestchen\groesse/2),kaestchen\y + (kaestchen\groesse/2), kaestchen\groesse , 0)
PowerUp(kaestchen\x,kaestchen\y)
Delete kaestchen.kaestchen
Else
If verlieren = 0 Then
PartikelErstellen(mx+eigenegroesse/2,my+eigenegroesse/2,eigenegroesse*3, 1)
Delete kaestchen.kaestchen
verlieren =1
PunktetextErstellen(\"LOSER!\",mx,my)
EndIf

EndIf
EndIf


EndIf
Next
;..........................................................................................

;......Partikel............................................................................
For part.partikel = Each partikel
part\x = part\x + Cos(part\richtung)*part\speed
part\y = part\y - Sin(part\richtung)*part\speed
part\speed = part\speed * 0.95
part\blau = part\blau + 5 - part\farbe*3
If part\blau>=255 Then
If verlieren=1 And part\farbe=1 Then verloren ;function starten
Delete part.partikel

Else
Color 0,0,part\blau
If part\farbe = 1 Then Color 0,255-part\blau,part\blau
Rect part\x-1,part\y-1,3,3
EndIf
Next
;..........................................................................................

;......Punkte-Text.........................................................................
For ptext.punktetext = Each punktetext
ptext\y=ptext\y - ptext\speed
ptext\speed = ptext\speed * 0.975
ptext\farbe = ptext\farbe - 2
If ptext\farbe =< 0 Then
Delete ptext.Punktetext
Else
Color ptext\farbe,ptext\farbe,255
Text ptext\x,ptext\y,ptext\punkte
EndIf
Next
;..........................................................................................


;Punkte schreiben
Color 100,100,255
Text gx/2,gy/2,Punkte+\" (\"+best+\")\",1,1
Color 255,255,255
Text gx/2-50,5,\"Level \"+level
Text gx/2+50,5,\"Zeit: \"+zeit+\" sec\"


;.....FPS..................................................................................
milliseks=MilliSecs()
If milliseks-startcount>=1000
startcount=milliseks
frames=frame
frame=0
Else
frame=frame+1
EndIf
Text 5,5,\"FPS: \"+frames
;...........................................................................................


If hell=1 Then heller
WaitTimer timer
Flip 0;schneller Puffertausch
Until KeyHit(1)
End

Function KaestchenErstellen()
kaestchen.kaestchen = New kaestchen ;neues Type erstellen
;ab hier werden die startwerte willkürlich festgelegt:
kaestchen\richtung = Rand(1,4) ;zufallswahl der richtung
kaestchen\y = Rand(gy) * (kaestchen\richtung <= 2) + (gy * (kaestchen\richtung=3));hier wird zunächst...
;...eine Zufallszahl in maximaler Höhe der y-auflösung gewählt. Falls sich das Kästchen nach oben
;oder unten bewegt, soll die Y-Koordinate nicht irgendwo sein sondern 0 oder 480 ! Darum stelle ich eine bedingung
;(dass die richtung 1 oder 2 bzw. links oder rechts sein soll. Wenn sie wahr ist, bleibt die Zufallszahl bestehen.
;andernfalls ist die Bedingung false, also 0, darum ist das Gesamtergebnis auch 0. wenn sich das Kästchen
;nach oben bewegt, wird der y-startwert auf gy (480) gesetzt, mithilfe einer Bedingung.
kaestchen\x = Rand(gy) * (kaestchen\richtung >= 3) + (gx * (kaestchen\richtung=1)) ;the same procedure...
kaestchen\speed = Rnd(0.4,maxspeed) * ((level+2)/3) ;die Speed wird zufällig gewählt
kaestchen\farbe = Rand(0,1) ;genauso die Farbe...
kaestchen\groesse = Rand(maxgroesse/2,maxgroesse)
kaestchen\farbintensitaet=255
If kaestchen\farbe=0 And kaestchen\groesse > (maxgroesse/3)*2 And kaestchen\speed > (maxspeed/3) * 2 And Rand(1,4)=2 Then
kaestchen\farbe=2
kaestchen\groesse = (maxgroesse/3)*2
kaestchen\speed = (maxspeed/3)*4
EndIf
End Function

Function Points(speed#,groesse)
Return Ceil(speed)*groesse ;die formel kann verändert werden
End Function

Function verloren()
Cls
If punkte > best Then
best = punkte
neuerrekord=1
bestlevel=level
besttime=time
Else
neuerrekord=0
EndIf
FlushKeys
Color 255,255,255
Text gx/2,gy/2,\"GAME OVER! Erreichte Punkte: \"+punkte+\" (im \"+level+\". Level, bei \"+zeit+\" Sekunden)\",1,1
Text gx/2,gy/2+20,String(\"Das ist ein neuer Rekord!!\",neuerrekord),1,1
Text gx/2,gy/2+20,String(\"Rekord: \"+best+\" Punkte im \"+bestlevel+\". Level, bei \"+zeit+\" Sekunden\",1-neuerrekord),1,1
Text gx/2,gy/2+50,\"Für neues Spiel Enter, für ende Esc drücken!\",1,1
Flip
Repeat
If KeyHit(1) Then End ;bei esc sofort beenden
Until KeyHit(28) ;bei enter gehts weiter
spielerstellen ;funktion wird gestartet
Return

End Function

Function spielerstellen() ;diese Funktion reset-ed alle variablen
For kaestchen.kaestchen = Each kaestchen ;eine schleife für die Kästchen
Delete kaestchen.kaestchen ;löschen
Next
punkte = 0
start = MilliSecs()
level = 1
verlieren = 0
power_level=0
End Function

Function PartikelErstellen(part_x,part_y,part_menge, part_farbe) ;diese Funktion erstellt Partikel
For i=0 To part_menge*5
part.partikel=New partikel
part\farbe = part_farbe
part\x=part_x ;x-koordinate, die der Funktion überwiesen wurde
part\y=part_y ;y-koordinate \"
part\richtung = Rand(0,89)*4 ;willkürlich von 0-356 in 4er schritten
part\speed = Rnd((partikelmaxspeed/3)*2,partikelmaxspeed)+(mspeed/4) + 3 * part\farbe ;bei grün umsomehr

Next
End Function

Function PunktetextErstellen(ptext_punkte$,ptext_x,ptext_y)
ptext.punktetext= New punktetext
ptext\x=ptext_x
ptext\y=ptext_y
ptext\speed=2.0
ptext\punkte=ptext_punkte
ptext\farbe=255
End Function

Function PowerUp(pu_x,pu_y)
powerup_art=Rand(1,6)
Select powerup_art
Case 1
PunktetextErstellen(\"BLACK DISESE!!\",pu_x,pu_y)
For kaestchen.kaestchen = Each kaestchen
kaestchen\farbe=0
Next
Case 2
PunktetextErstellen(\"POINTS +100!\",pu_x,pu_y)
punkte = punkte + 100
Case 3
PunktetextErstellen(\"POINTS +250!\",pu_x,pu_y-15)
PunktetextErstellen(\"RED DISESE!!\",pu_x,pu_y)
punkte = punkte + 250
For kaestchen.kaestchen = Each kaestchen
kaestchen\farbe=1
Next
Case 4
PunktetextErstellen(\"SLOW-MOTION!\",pu_x,pu_y)
For kaestchen.kaestchen = Each kaestchen
If kaestchen\speed >= maxspeed /2 Then kaestchen\speed = kaestchen\speed * 0.4
Next
Case 5
PunktetextErstellen(\"MEGA-SPEED!\",pu_x,pu_y)
For kaestchen.kaestchen = Each kaestchen
kaestchen\speed = kaestchen\speed * 2
Next
Case 6
PunktetextErstellen(\"Next Level!\",pu_x,pu_y)
power_level = power_level + 1



End Select

End Function
Function heller()
For i=0 To 255
SetGamma i,i,i,i+75,i+75,i+75
Next
UpdateGamma
End Function
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

blitzmaster

BeitragSo, März 20, 2005 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich find das Spiel genial!
***************
Blitzmaster

Spikespine

BeitragSo, März 20, 2005 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
danke Smile

Spike
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, März 20, 2005 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Spiel hat was...
aber die Farben sind wie BladeRunner schon sagt!
Wenn das einige Zeit gespielt wird dann denkt man danach, der Monitor ist defekt!
Vllt passenden Hintergrund und nicht so grelle Farben!
[BB2D | BB3D | BB+]

Firstdeathmaker

BeitragSo, März 20, 2005 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Echt funnig. So muss ein Spiel sein:

Scheiß auf Grafik, hauptsache der Fun stimmt.
(Aber du könntest trotzdem die Farben ein wenig Augenfreundlicher machen).
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

blitzmaster

BeitragSo, März 20, 2005 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mit den Augenfreundlichen Farben könnte ich mich auch Anfeunden Confused
Aber sonst is ganz gut
***************
Blitzmaster

Rob_

BeitragSo, März 20, 2005 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir kommt jetzt eine fehlermeldung, function not found und es zeigt auf updategamma Crying or Very sad
AMD Athlon 64 3500+ | Infineon 1 GB DDR RAM | nVidia Geforce 7800 GTX

Spikespine

BeitragSo, März 20, 2005 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das könnte daran liegen, dass du ne falsche Blitz-Version hast.

Muss aber nicht sein, das mit dem Gamma ist eh Müll, ich bau die augenfreundlichen Farben manuell rein. Kommt irgendwann Smile

Spike
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

diGGa

GruppenKaspar

BeitragMo, März 21, 2005 0:18
Antworten mit Zitat
Benutzer-Profile anzeigen
mein bruder is grad bei level 70 o_O

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group