Wie kann man PowerUps machen?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Lord AdZ

Betreff: Wie kann man PowerUps machen?

BeitragSo, Mai 06, 2007 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein Ping-Pong-Spiel ist schon fast fertig, es fehlen nur noch die PowerUps, z. B. Schlägervergrößerung/verkleinerung, schnellere/langsamere Kugel, Schutzschild, usw...
Das Problem besteht darin, dass ich zwar Ideen habe, sie aber noch nicht zusammensetzen, btw. in einen Code umsetzen kann.
Meine Ideen:
1. Mit "Rnd" bestimme ich, wann ein PowerUp ins Spiel kommt.
2. Desto höher der Computer führt, desto höher ist die Warscheinlichkeit, dass der Spieler ein "positives" PowerUp bekommt. Außerdem steigen die Chancen, das der Computer ein "negatives" PowerUp bekommt.
3. Manche PowerUps haben sofort Wirkung, andere fallen runter und man muss sie erst aufsammeln.
4. Je nachdem wie gut der Spieler ist, fallen die PowerUps schneller/langsamer runter.
 

Dreamora

BeitragSo, Mai 06, 2007 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast da ja eigentlich schon alles was du brauchst.
Was du dir jetzt halt überlegen musst, ist wie sich das sinnvoll in dein Spielegerüst einbauen lässt.

Prinzipiell Mal sicher Powerup = Type, damit du ihr herunterfallen etc in einer Loop machen kannst.
Was im Type drin stehen muss mindestens ist auch klar. Position, Poweruptyp, Geschwindigkeit

Der Rest ist nur eine Sache dessen wie du beurteilst wie gut der Computer und der Spieler sind. Da kann dir jemand von aussen wenig helfen, da das an deinem Code und deinen Überlegungen zu "was ist gut, was isch schlecht" liegt, welche du dir ja vermutlich vorher schon gemacht hast.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Christoph

BeitragSo, Mai 06, 2007 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
1. Mit "Rnd" bestimme ich, wann ein PowerUp ins Spiel kommt.

besser mit ql:rand

Zitat:
2. Desto höher der Computer führt, desto höher ist die Warscheinlichkeit, dass der Spieler ein "positives" PowerUp bekommt.


Du könntest die Punkte des Computers durch die Spielerpunkte teilen. Dann bekommst du das Verhältnis heraus (also wievielmal der Computer besser ist als der Spieler)

Lord AdZ

BeitragSo, Mai 06, 2007 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Christoph hat Folgendes geschrieben:
besser mit <a href="http://www.blitzbase.de/befehle2d/rand.htm" class="postlink" target="_blank">Rand<img src="/images/quicklink.gif" width="13" height="11" alt="" title="Begriff nachschlagen" border="0"></a>


Zwischen "Rnd" und "Rand" gibts doch nur den Unterschied, das "Rnd" mit Floats arbeitet und "Rand" mit Ganzzahlen. Deshalb hab ich "Rnd" genommen, das ist halt genauer.

Christoph

BeitragSo, Mai 06, 2007 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann überlege dir mal genau, warum das

Code: [AUSKLAPPEN]
Rand(0,5)=1


eine höhere Wahrscheinlichkeit hat als das:

Code: [AUSKLAPPEN]
Rnd(0,5)=1
 

Dreamora

BeitragSo, Mai 06, 2007 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Die höhere Genauigkeit bringt dir nichts.

Ein Objekt kann nur auf Pixel 4,4 oder 5,4 sein, nicht auf 4.84753349,4 Smile

Drum macht float in 2D keinen sinn
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Lord AdZ

BeitragSo, Mai 06, 2007 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Die höhere Genauigkeit bringt dir nichts.

Ein Objekt kann nur auf Pixel 4,4 oder 5,4 sein, nicht auf 4.84753349,4 Smile

Drum macht float in 2D keinen sinn

Ok, dann mach ich das halt mit "Rand".

Kann mir hier mal jemand ein Schaubild oder Beispielcode geben, damit ich wenigstens ungefähr weiß, wie ich die PowerUps machen kann. Ich hab nämlich keinen genauen Plan, wie der Code aussehen muss, btw wo die einzelnen Codeteile hinmüssen.

Silver_Knee

BeitragSo, Mai 06, 2007 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
PI*Daumen-Code: [AUSKLAPPEN]
;oben
Type powerup
 Field x,y,fallspeed,typ
end type
;fdsfsdffdsfsdfdfsfsdf-CODE-sdfsdfsfojljkljioerfewhjbasdk

Repeat
;fdsfjifsdCODE
 if Rand(0,255-(gegnerpunkte/meinepunkte)*10)=0;je größer die gegnerpunkte im verhältnis zu deinen eigenen sind desto größer wird die warscheinlichkeit. Die zahlen musst du auf dein Spiel bstimmen
  p.powerup=new powerup
  p\x=...
  p\y=...
 ;usw
 endif
;CODEEEEEE
 for p=each powerup
  drawimage poeripimagearry(p\typ,p\x,p\y);zb
  p\y=p\y+p\fallgesch
  ;Hier noch ein if player kollidiert mit powerup und ein gegner-powerup-kollisions-if usw
 ;und etwas was das powerup daran hindert durch den bden zu fallen...
 next
until keyhit(1)
;..............

Lord AdZ

BeitragSo, Mai 06, 2007 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry FTC, aber ich kapier deinen Code nicht wirklich. Gehts etwas genauer?

Smily

BeitragSo, Mai 06, 2007 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Lord Adz:
Du weist genau, was du machen willst und hast (wahrscheinlich) auch das know-how, es als Code umzusetzen. Also wo liegt dein Problem?
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Silver_Knee

BeitragSo, Mai 06, 2007 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
also irgendwo im programm musst du einen type definieren das sähe so aus
Code: [AUSKLAPPEN]
Type powerup
 Field x,y,fallspeed,typ,usw
end type

dann musst du in der hauptschleife eine rutine schreiben die per zufall ein powerup erstllt oder eben nicht
Code: [AUSKLAPPEN]
if Rand(0,255)=0
  p.powerup=new powerup
  p\x=...
  p\y=...
 ;usw
 endif
wo das erstellt wird bleibt dir überlassen und wie schnell es fällt wolltest du auch noch näher bestimmen...
dazu käme jetzt noch das abfragen jedes powerups Code: [AUSKLAPPEN]
for p=each powerup
  drawimage poeripimagearry(p\typ,p\x,p\y);zb
  p\y=p\y+p\fallgesch
 ;X
 next
Da wo das X steht müssten dan kollisions-abfraagen hin mindesstens eine für den boden dass es nicht durchfällt und eine für die spieler dass man das powerup auch bekommt bzw der gegner, wenn er schneller ist.

Lord AdZ

BeitragSo, Mai 06, 2007 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
FTC hat Folgendes geschrieben:
also irgendwo im programm musst du einen type definieren das sähe so aus
Code: [AUSKLAPPEN]
Type powerup
 Field x,y,fallspeed,typ,usw
end type

dann musst du in der hauptschleife eine rutine schreiben die per zufall ein powerup erstllt oder eben nicht
Code: [AUSKLAPPEN]
if Rand(0,255)=0
  p.powerup=new powerup
  p\x=...
  p\y=...
 ;usw
 endif
wo das erstellt wird bleibt dir überlassen und wie schnell es fällt wolltest du auch noch näher bestimmen...
dazu käme jetzt noch das abfragen jedes powerups Code: [AUSKLAPPEN]
for p=each powerup
  drawimage poeripimagearry(p\typ,p\x,p\y);zb
  p\y=p\y+p\fallgesch
 ;X
 next
Da wo das X steht müssten dan kollisions-abfraagen hin mindesstens eine für den boden dass es nicht durchfällt und eine für die spieler dass man das powerup auch bekommt bzw der gegner, wenn er schneller ist.

OK, ich glaube, ich habs zumindest teilweise verstanden. Aber jetzt habe ich folgende Probleme:
1. Das PowerUp erscheint nicht
2. Wie mache ich die Schwerkraft für das PowerUp
3. Ich glaube, PowerUps coden ist noch ein bisschen zu schwer für mich Sad

Hier noch mein unausgereifter und bestimmt fehlerhafter Code:

Code: [AUSKLAPPEN]

If Rand(0,10)=0
  p.PowerUp=New PowerUp
  Positionx=xsp2
  Positiony=ysp2
  Geschwindigkeit=10   
 ;usw
EndIf



For p.PowerUp=Each PowerUp
   DrawImage PowerUpBild,xpu,ypu
   Fallgeschwindigkeit=fehlersp2/fehlersp1
 If ImagesCollide(spieler1,xsp1,ysp1,0,PowerUpBild,xpu,ypu,0) Then FreeImage PowerUpBild;Kollision
Next

Tankbuster

BeitragSo, Mai 06, 2007 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Fast richtig^^versuchs mal damit

Zitat:

If Rand(0,10)=0
p.PowerUp=New PowerUp
p\Positionx=rnd(100)
p\Positiony=rnd(100)
p\Geschwindigkeit=10
;usw
EndIf



For p.PowerUp=Each PowerUp
DrawImage PowerUpBild,p\Positionx,p\Positiony
If ImagesCollide(spieler1,xsp1,ysp1,0,PowerUpBild,p\Positionx,p\Positiony,0) Then FreeImage PowerUpBild;Kollision
Next
Twitter
Download Jewel Snake!
Windows|Android

Lord AdZ

BeitragSa, Mai 19, 2007 12:40
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, das ich so lange nicht geantwortet hab, aber mein Monitor ist kaputtgegangen und bis der neue da war und auch funktioniert hat, ist halt etwas Zeit vergangen Wink
Also zurück zum Problem:
@ Tankbuster: 1. Wieso immer p\ ?

2. Egal was ich mache, es will nicht funktionieren! Confused

Tankbuster

BeitragSa, Mai 19, 2007 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Tankbuster: 1. Wieso immer p\ ?

Weil man das mit Types so macht Wink
Zitat:
p.PowerUp=New PowerUp
p\Positionx=rnd(100)

Das p beim erstellen des Types, ist das, was vor das "\" kommt!
man könnte auch
Zitat:
hihi.PowerUp=New PowerUp
hihi\Positionx=rnd(100)

schreiben!
aber P ist halt übersichtlicher!
Twitter
Download Jewel Snake!
Windows|Android

Lord AdZ

BeitragSo, Mai 20, 2007 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, Danke. Ich glaub ich habs bald, aber nicht wundern, wenn jetzt ein paar Tage keine Antwort kommt, ich hab im Moment einen Haufen Arbeiten in der Schule Sad

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group