Spiel Fragen
Übersicht

Elias0111Betreff: Spiel Fragen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen,
ich habe noch ein paar Fragen zu einem Spiel welches ich gerade programmiere. Es ist mein erstes Spiel, deshalb ist ist es noch sehr einfach strukturiert und ist auch nicht so spannend.. ![]() Aber man fängt ja klein an! Na ja: Der Sinn des Spiels ist es mit zwei Panzern die sich links und rechts hinundher bewegen abzuschießen wenn man nicht trifft bleibt der Ball im Spiel und Prallt von den Wänden ab. Falls einer der Panzer getroffen werden sollte, soll die Kugel selbstverständlich verschwinden und die Punkteanzeige um eins erhöht werden. Bisher bin ich soweit: BlitzBasic: [AUSKLAPPEN] Graphics 800,600,32,2 Könnt ihr mir bitte Tipps geben wie ich das mit dem losschicken der Kugel mache und mit dem Auflösen. Vielen dank schonmal im voraus! Edit durch BladeRunner: Habe mir erlaubt deine ColorTags durch Syntaxtags zu ersetzen. Macht das Posting wesentlich übersichtlicher, nutz besser die. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was mir auf jeden Fall direkt ins Auge springt ist das deine Variablennamen recht nichtssagend sind. Es ist zwar ein wenig mehr Tipparbeit, aber ein längerer, aussagekräftiger Name hilft einem beim Fehlersuchen enorm. | ||
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 |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Funktionsweise des Spiels ist mir nicht ganz klar: Du schreibst, es gibt eine Kugel. Diese ist, wie es scheint, die ganze Zeit irgendwo vorhanden. Die Panzer sollen diese aber - irgendwie - beeinflussen können. Meiner intuitiven Vorstellung nach schießen die Panzer unabhängig, d.h., es kann mehrere Kugeln gleichzeitig (oder auch gar keine) geben. In diesem Falle arbeitest du besser mit Type![]() ZEVS |
||
Elias0111 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ZEVS hat Folgendes geschrieben: Die Funktionsweise des Spiels ist mir nicht ganz klar: Du schreibst, es gibt eine Kugel. Diese ist, wie es scheint, die ganze Zeit irgendwo vorhanden. Die Panzer sollen diese aber - irgendwie - beeinflussen können. Meiner intuitiven Vorstellung nach schießen die Panzer unabhängig, d.h., es kann mehrere Kugeln gleichzeitig (oder auch gar keine) geben. In diesem Falle arbeitest du besser mit Type
![]() ZEVS Ja du hast recht ich möchte das der Panzer unabhängig schießen kann. |
||
MCocktail |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nach Zevs Vorschlag würde der Code für die Kugel so aussehen, vermut ich mal:
Code: [AUSKLAPPEN] Type TKugel Field x Field y Field def;(op. von wem der schuss kam) End Type If Keydown("Schusstaste") then Kugel.TKugel = New TKugel EndIf For Kugel.TKugel Each TKugel ;(durchchecken der kugeln und positionieren) Next oder? Wenn ja kannst du dich daran orientieren wenn nötig. |
||
Elias0111Betreff: Re: Spiel Fragen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BlitzBasic: [AUSKLAPPEN] Graphics 800,600,32,2 Sorry hab das mit den type nicht ganz verstanden hab es jetz mal so umgebaut habe unten bei der kollision mit den panzer es einen punkt geben und die kugel abtitscht es funktioniert nur nicht ganz |
||
Elias0111 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
MCocktail hat Folgendes geschrieben: Nach Zevs Vorschlag würde der Code für die Kugel so aussehen, vermut ich mal:
Code: [AUSKLAPPEN] Type TKugel Field x Field y Field def;(op. von wem der schuss kam) End Type If Keydown("Schusstaste") then Kugel.TKugel = New TKugel EndIf For Kugel.TKugel Each TKugel ;(durchchecken der kugeln und positionieren) Next oder? Wenn ja kannst du dich daran orientieren wenn nötig. Was meinst du mit def? |
||
Elias0111 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oder kannst du das ganze alles nochmal einwenig genauer erklären wenn es nicht zuviel aufwand ist ? | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Elias0111: Bitte zitiere a) nicht den gesamten vorhergehenden Beitrag - es ist ziemlich klar, auf was du dich beziehst und b) vermeide bitte Doppelposts, für zusätzliche Informationen gibt es den Edit Button.
Danke. Types sind toll und nützlich, aber ich würde sie nicht unbedingt einem blutigem Anfänger empfehlen... Lies ein paar Tutorials dazu, das wird mehr bringen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Sir Gauss der III |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zuerst mal, was bisher genannt wurde sind wirklich hilfreiche Tipps, z.B. das Kommentieren und die Variablenamen.
Code: [AUSKLAPPEN] ;Panzer 1
If KeyDown (208) And y1=<570 Then y1=y1+1 p1=p1+1 EndIf If KeyDown(200) And y1=>25 Then y1=y1-1 p1=p1-1 EndIf ist so besser zu verstehen: Code: [AUSKLAPPEN] ;Steuerung von Panzer 1
If KeyDown(208) And y1=<570 Then ;runterfahren des Panzer 1 mit Pfeiltaste runter Rohr_y1=Rohr_y1+1 Panzer_y1=Panzer_y1+1 EndIf If KeyDown(200) And y1=>25 Then ;rauffahren des Panzer 1 mit Pfeiltaste rauf Rohr_y1=Rohr_y1-1 Panzer_y1=Panzer_y1-1 EndIf Durch die Kommentare erkennt nun jeder, was ein in sich geschlossener Codeblock tun soll. Die Variablenamen sind nun eindeutiger, und du verwechselst sie dann seltener. Dann habe ich noch jeden Codeblock eingerückt. So erkennt man schneller was zusammengehört und wo eine Schleife/If-Satz endet. Auch wichtig, meiner Meinung nach, dass man bei Keydown() immer dazunotiert welche Taste denn gemeint ist. Das erst mal vorab. Wie Xeres gesagt hat, Typen sind ganz nützlich, aber ich würde sie zu beginn nicht verwenden. Verwende Dim-Felder. Was ist Dim? mit Dim kannst du Variable einfach nummerieren. Anstelle von Code: [AUSKLAPPEN] y1=300
y2=300 schreibst du Code: [AUSKLAPPEN] Dim y(10)
y(1)=300 y(2)=300 Das schaut jetzt nach mehrarbeit aus. Der Vorteil bei Dimfeldern liegt vor allem darin, dass das Programm selbstständig nie Nummern auswählen kann. Due willst mehr als eine Kugel. Die Kugelvariable ist K1. Um nun nach deinem System sagen wir mal 20 Kugeln zu produzieren müsstest du 20 mal K1=.. K2=.. schreiben. mit Dim kannst du das den PC machen lassen: Code: [AUSKLAPPEN] Dim k(20)
For i=1 To 20 k(i)=295 Next For-Schleifen kennst du hoffentlich? ansonsten: Forschleifen zählen einfach immer in einer Variable eins höher und enden dann bei der angegebenen Größe (in unserem Fall steigt "i" immer um +1 höher und die Schleife weiderholt sich bis i=20. Mit ein Paar Dim-Variable kannst du so jedem Panzer einige Schuss geben, und diese in jeder Runde durchrechnen lassen. |
||
Ich lebe in meiner eigenen Welt. Das ist OK, man kennt mich dort. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
zunächst einmal mein erster Tipp:
Befolge die Tipps von den Helfenden, wenn du sie bereits verstanden und eingesehen hast. Du hast Deinen Beitrag zwar ein zweites Mal gepostet. Man kann aber nirgendwo sehen, dass Du das mit den verständlicheren Variablennamen umgesetzt hast. mein zweiter Tipp: Befolge den Tipp nicht, wenn du ihn nicht verstanden hast. Also erst mal keine TYPES und auch keine DIM, weil du das sicherlich alles noch gar nicht kennst, oder? mein dritter Tipp: Erst mal Lob vorneweg: Dein Spiel läuft schon an!!! Respekt!!! Du machst das genau richtig. Erst mal die Grundfunktionen mit ganz wenig Features zum Laufen bringen! mein vierter Tipp: Das Panzerrohr hat ja eine Y-Koordinate (bei dir noch y1). Egal wo nun der Panzer steht, der Panzer-Körper ist doch dann immer genau 25 pixel oberhalb vom Rohr zu malen, oder? Also brauchen wir gar keine extra Variable für den Panzer: BlitzBasic: [AUSKLAPPEN] ;Panzer I Nun kommt doch so ein Kugel immer aus dem Panzerrohr raus, oder? Also auch genau bei y1 Da die Kugel einen Durchmesser von 10 hat, malen wir sie ab sofort immer 5 zu weit nach links und zu weit nach oben. So ist ihr Mittelpunkt ab jetzt auch ihr Bezugspunkt. Jetzt kommt sie wirklich mit ihrer Mitte aus der Mitte des Rohrs. BlitzBasic: [AUSKLAPPEN] Radius=5 ja, wir führen eine neue Variable Radius ein. Sie wird uns später nützen!!! Wenn man eine Taste <K> drückt wird bei y1, also an der Rohrspitze, eine Kugel gestartet: BlitzMax: [AUSKLAPPEN]
Nun die Kollision Die Kugel soll dann getroffen haben, wenn Sie eines der Panzer-Rechecke berühren kann. Da die Kugel einen Radius von 5 hat, trifft sie also schon, wen sie dem Panzer auf 5 pixel zu nahe gekommen ist. BlitzBasic: [AUSKLAPPEN] If x1<50+Radius durch das 300/400 stellen wir die Kugel zunächst mal ruhig! Später wird uns noch was besseres einfallen.... So nun machst Du das Ganze auch für Panzer II und dabei darfst Du jetzt folgende Variablen umbenennen: Aus x1 wird bitte KugelX Aus k1 wird bitte KugelY Aus y1 wird bitte Panzer_I_Y Aus gx wird bitte SpeedKugelX Aus gy wird bitte SpeedKugelY Aus pu1 wird bitte PunkteSpieler_I mehr Tipps gibt's, wenn du die Namensänderung durchziehst! Hier noch was kleines als Nachschlag: BlitzBasic: [AUSKLAPPEN] Graphics 800,600,32,2 |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
MCocktail |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Elias0111 hat Folgendes geschrieben: Was meinst du mit def?
def ist eine abkürzung von Definition, in diesem Fall von wem der schuss kam.(optional.) |
||
Elias0111 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen!
Ich bin erst jetzt wieder dazu gekommen da ich im Urlaub war und auch ziemlich viel zu tun hatte. Hier ist jetzt meine neueste Version wo ich eure Tipps eingebaut. Danke dafür schonmal! Nur das mit der Graphik habe ich noch nicht angepasst, da ich das einwenig kompliziert fande und das einfach am Schluss mache.. Meine Fragen sind Jetzt: 1. Muss ich Um mehrere Kugeln zuhaben neue Koordinaten machen? 2. Wie schaffe ich es das die Kugel sich löscht und nur aufkommt wenn ich k drücke? 3. Irgendwie hab ich noch ein Problem mit der Geschwindigkeit nach seitenabprall. BlitzBasic: [AUSKLAPPEN] Graphics 800,600,32,2 |
||
![]() |
Sir Gauss der III |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vor ab mal echt ein Lob. Man sieht es selten dass anfänger doch so recht gutlaufende Programme machen.
Dann eine kleine bitte meinerseits, k.A. obs an mir liegt und ich da was falsch mache oder ob es tatsächlich so ist. wenn du statt dem BB code einfach den Codebutten drückst um dein Programm ein zu stellen, taucht bei mir nicht hinter jedem Befehl z.B. so was auf: BackBuffer </help/BackBuffer/>() und ich muss nicht dein ganzen Cod durch gehen und es raus löschen. Die fragen mal etwas durcheinander, das einfache vorne, und dann immer weiter. #Frage 2 Wenn du in einer Variablen, z.B. schuss_exist abspeicherst ob der schuss tatsächlich vorhanden ist oder nicht kannst dudas recht einfach handhaben. hat die Variable den wert 1, dann wird der schuss gezeichnet, bewegt und auf kollision geprüft. andernfals eben nicht. #Frage 3 zuerst mal, einen Fehler zu finden ist die hauptaufgabe eines Programmierers. Bzw. das optimieren. Hört sich traurig an, ist aber leider so. einen Code zu schreiben ist schnell mal gemacht, einen winzigen Fehler zu finden kann schon mal Tage und wochen dauern. Um also die falsche Geschwindigkeit zu korrigieren (ich geh mal davon aus dass der Schuss zu schnell ist) musst du follgendes machen: 1. überleg dir, was alles das aufgetretene Problem beeinflussen kann. Hier bei dem Beispiel ist es ja noch nicht viel. Variable: Du hast zum einen die gespeicherte Geschwindigkeiten in X und Y, dann noch eine Zufallsvariable v (übrigens, ganz schlechter Name) Programmabschnitt: geändert werden diese Variable in den Codabschnitte Geschwindigkeiten Abschuss kollision vom ball mit Blöcken Kollision mit Panzer1 Kollision mit Panzer2 allso muss in einem Abschnitt davon der Fehler liegen. Streichen wir mal die, von denen wir sicher sein können dass Sie es nicht sind: Geschwindigkeiten -> wird nur auserhalb der Hauptschleife ausgeführt und setzt die Geschwindigkeit auf null. Abschuss -> Die Geschwindigkeiten erhalten eine exakte Definition die immer gleich ist. Kollisionen -> Hier wird die geschwindigkeit auf Null gesetzt, kann es alo nicht sein. Übrig bleibt: Abschuss 2. Verfolge den Programmvorgang Das kannst du einmal im Kopf machen in dem du die zeilen liest, dir ausrechnest wann der PC was genau macht. Kann manchmal hilfreich sein und mit etwas Übung findet man auch relativ schnell die unstimmigkeiten. Oder du lässt dir mittels Text an einer bestimmten Stelle (am besten dort wo der Fehler auftreten muss) den Wert der Variable anzeigen. Also in etwa so: Code: [AUSKLAPPEN] ;kollision vom ball mit Blöcken If KugelY > 590 Then SpeedKugelY = -5 EndIf If KugelY < 10 Then SpeedKugelY = +5 EndIf If KugelX > 790 Then SpeedKugelX = -5 SpeedKugelY = v EndIf If KugelX < 10 Then SpeedKugelX = +5 EndIf Text 10,10, SpeedKugelX Oder, manchmal besser: du lässt dir den Wert der Variable im Debugprogramm anzeigen (Haken bei BB unter Program-> Debug Enable? setzen) mittels DebuglogDebuglog schreibt einen Wert oder einen Text auf die Debugausgabe. Code: [AUSKLAPPEN] If KugelX < 10 Then
SpeedKugelX = +5 EndIf Text 10,10, SpeedKugelX DebugLog SpeedKugely Wenn du es so machst, wirst du schnell sehen, dass deine geschwindigkeit immer maximal 5 ist. MOMENT: Maximal 5 in jede Richtung! Heißt im Klartext wenn der Schuss sich gerade +5 in x bewegt und oben oder unten an den Rand trifft, bewegt er sich zusätzlich +5 in der Y richtung also 10 Pix pro Zug. Und da 10 gleich doppelt so schnell ist wie 5 erkennt man das auch deutlich. 3. Finde eine Lösung Um das zu vermeiden kannst du die gegebenen Geschwindigkeiten entweder per Hand so einstellen dass Sie gleichmäßig wirken (z.B. nur noch +2 in Y) oder du lässt einen Schuss immer aus der selben Geschwindigkeitsanzahl berechnen. Bsp: Code: [AUSKLAPPEN] If KugelY < 10 Then
SpeedKugelY =7-SpeedKugelX EndIf So ergibt Speed y+x immer 7, egal wie schnell x im moment ist und der schuss bewegt sich immer 7 Pix weit. Wie genau du es löst ist geschmackssache. # Frage 3 So, die ist etwas umfangreicher. Denn ja, für jede neue Kugel brauchst du sämtliche Kugelbetreffende Variable nochmals. Also Geschwindigkeit (x,y) Position (x,y) bei zwei Kugeln schaut es dann so aus Code: [AUSKLAPPEN] KugelY1= 300 ;Kugel
KugelY2= 300 ;Kugel ;x-werte KugelX1= 400 ;kugel KugelX2= 400 ;kugel ;Geschwindigkeiten SpeedKugelX1 = 0 SpeedKugelY1 = 0 SpeedKugelX2 = 0 SpeedKugelY2= 0 Auch die berechnungen musst du dann für jede Kugel einzeln übernehmen. (Treffen, erstellen, löschen, Bewegen, Richtung ändern) Auch wenn ich dafür bin, immer erst einfache Schritte zu machen, so empfehl ich doch dir malDim an zu schauen und damit zu arbeiten. Wenn du hier das Prinzip verstanden hast ist es wirklich einfach. Mal Bildlich gesprochen: Eine Variable ist wie ein Schrank. Du legst einen Wert rein, und den kannst du immer wieder ansehen und ändern. Jeder Schrank hat so seine Bezeichnung (Wohnzimmer). Willst du einen neuen Wert in dein Zimmer stellen, brauchst du einen neuen Schrank (Wohnzimmer_zwei) Dim erlaubt es dir nun, in einen schrank mehrer Werte ab zu legen, im grund wie Schubladen. Du erstellst deine Variable und sagst ihr gleich wie viele Schubladen sie besitzen soll: Code: [AUSKLAPPEN] Dim Schrank(5)
Der Vorteil dabei ist, BB kann nun jede Variable selbst aufrufen, du musst nur die Schubladennummer nennen. Das kannst du durch eine Zählvariable machen Code: [AUSKLAPPEN] nr=2
text 10,10,schrank(nr) Das an sich ist ja nichts tolles. aber wenn du 100 Schubladen hast, kannst du sie alle auflisten lassen mit nur wenig Code: Code: [AUSKLAPPEN] nr=0
While nr<100 nr=nr+1 Text 10,nr*10,schrank(nr) whend Diese 5 zeilen geben dir den Inhalt von 100 Variablen aus. Du kannst diese Variable also beliebig verändern bearbeiten usw. Das einzige was du nun machen musst, ist eine neue Zählvariabel einfügen. Ideal als schleife eigenet sich hier die For-Schleifen. Diese setzen automatisch den Wert einer Variable um 1 höher. schaut dann so aus: Code: [AUSKLAPPEN] For nr=1 To 100
Text 10,nr*10,schrank(nr) Next du gibst an, wo die zählvariable startet und bis wie weit sie zählen soll. Wenn du es richtig anwendest kannst du mit wenig aufwand aml schnell 100 Schuss rumfliegen lassen. Als Starthilfe mal einen kleinen Teil: Code: [AUSKLAPPEN] ;Geschwindigkeiten
Dim SpeedKugelX(100) Dim SpeedKugelY(100) For i=1 To 100 SpeedKugelX(i)=0 SpeedKugely(i)=0 EndIf .... While Not KeyHit(1) ... For i=1 To 100 ... If kugelx(i)>790 Then SpeedKugelX(i)=-5 SpeedKugelY(i)=v EndIf ... Next ... whend Wie du siest ist noch nicht mal viel Änderung nötig um aus deinem bisherigen Code mit nur einem Schuss einen mit einer deutlich höheren Anzahl zu machen. Zugegeben, mit Type hättest du noch den Vorteil dass du die Schussanzahl nicht von vornherein festlegen musst, aber Type ist in der Anwendung etwas komplizierter. i ist dabei nur eine untergeordnete Variable. Da eine Zählvariable nur innerhalb einer schleife wichtig ist und sie recht häufig verwendet wird sollte Ihr name (im gegensatz zu dauerhaften Variablen) nicht zu groß sein. i.d.R. werden dafür einfache Buchstaben wie i oder (mein Favorit) n genutzt. Hoffe, das hilft. |
||
Ich lebe in meiner eigenen Welt. Das ist OK, man kennt mich dort. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zunächst eine Frage vorneweg:
Ist das gewünscht von Dir, dass die Kugel (scheinbar grundlos) ein schräge Richtung bekommt, wenn sie gerade auf eine Wand trifft? Normalerweise lässt man sie ja immer gerade zurückprallen. Oder ist es volle Absicht? Um die Geschwindigkeit im 2D-Raum immer gleich zu halten, benötigst Du Winkel und Sin() und Cos(). Keine Angst, Du musst es nicht verstehen, sondern nur glauben und benutzen. Die Funktionen Sin() und Cos() können jeden Winkel so in einen X und einen Y Anteil umrechnen, dass die Geschwindigkeit immer gleich bleibt. Und das wäre genau, was Du bei Computerspielen brauchst. Denn die Kugel wird ja auf dem Bildschirm dadurch bewegt, dass man ihre X und Y Werte verändert. folgender Zusammenhang: Code: [AUSKLAPPEN] Xspeed#=Sin(Winkel)
Yspeed#=Cos(Winkel) das war's schon Also angenommen, du willst du eine Kugel im Winkel von 67° über den Bildschirm bewegen, dann mach es so: Code: [AUSKLAPPEN] KugelY# = KugelY# + Cos(67)
KugelX# = KugelX# + Sin(67) Das ganze funktioniert nur mit FLOAT Variablen, weil sowohl Sin() als auch Cos() immer ein Komma-Wert zwischen 0 und 1 ist. Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() Repeat ;zum Test nacheinander einige Winkel: Winkel#=Winkel+30 KugelX#=400 KugelY#=300 Cls Text 30,30, "Winkel=" + Winkel Repeat KugelY = KugelY + Cos(Winkel) KugelX = KugelX + Sin(Winkel) Oval KugelX, KugelY, 5,5 Flip 0 Delay 1 ;(dieses delay ist nur, damit diese Demo nicht zu schnell läuft) Until KugelY<0 Or KugelY>600 Or KugelX<0 Or KugelX>800 Until KeyHit(1) Or Winkel>300 So, nun könntest Du den Winkel zu jedem beliebigen Zeitpunkt ändern, und die Kugel würde sofort die neue Richtung einnehmen. Die Geschwindigkeit bleibt wegen Sin() und Cos() und eines Herrn namens Pythagoras immer gleich. Wenn die Kugel nun irgendwo anprallt, wird der Winkel meist an der Wand "gespiegelt". Beim Anprall an einer der X-Wände passiert rein mathematisch folgendes: Code: [AUSKLAPPEN] NeuWinkel=360-AltWinkel
Beim Anprall an der Y-Wände passiert rein mathematisch folgendes: Code: [AUSKLAPPEN] NeuWinkel=180-AltWinkel
Daraus ergibt sich folgendes Demo: Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() SeedRnd MilliSecs() ;zum Test nacheinander einige beliebige Winkel: Winkel#=40 ;Rnd(36)*10 KugelX#=400 KugelY#=300 Repeat KugelY = KugelY + Cos(Winkel) KugelX = KugelX + Sin(Winkel) If KugelX<50 Or KugelX>750 Winkel=360-Winkel KugelY = KugelY + Cos(Winkel) KugelX = KugelX + Sin(Winkel) EndIf If KugelY<50 Or KugelY>550 Winkel=180-Winkel KugelY = KugelY + Cos(Winkel) KugelX = KugelX + Sin(Winkel) EndIf Cls Winkel=(Winkel+360) Mod 360 Text 30,30, "Winkel=" + Winkel Rect 50,50,700,500,0 Oval KugelX, KugelY, 5,5 Flip 0 Delay 7 ;(dieses delay ist nur, damit diese demo nicht zu schnell läuft) Until KeyHit(1) |
||
Elias0111Betreff: New |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi alle zusammen
bin nun soweit das das Spiel in etwa meinen vorstellungen entspricht. BlitzBasic: [AUSKLAPPEN] Graphics 800,600,32,2 Ok wir können jetzt zwei Schüsse abgeben. Aber optimal ist das noch nicht. Also versuche ich es jetzt mal mit Dim eure Erklärungen waren sehr hilfreich aber ganz auf dem richtigen weg bin ich immer noch nicht Hier mal die entscheidenden Zeilen BlitzBasic: [AUSKLAPPEN]
Und hier noch mal alles mit meinen versuch von dim BlitzBasic: [AUSKLAPPEN] Graphics 800,600,32,2 |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
das läuft so nicht an! Check nochmal bitte CodeBox III, was du da grad reingestellt hast...
Und hier gleich mal meine Kritik: optisch: Bitte rücke Zeilen nach einer IF-Zeile um 1 TAB nach innen ein, ebenso nach einer FOR-Zeile: Code: [AUSKLAPPEN] ;Abschuss
If KeyHit(45) Then ;Taste Für Schuss ist X For n=1 To 100 KugelY2=Panzer_II_Y KugelX2=720 SpeedKugelX2(n) = -3 SpeedKugelY2(n)= 0 EndIf Das hilft Dir Fehler zu entdecken: Bei jedem Befehl, der immer einen Abschluss-Befehl braucht, wie z.B. FOR und NEXT oder wie IF und ENDIF wird der Code dazwischen um 1 TAB eingerückt.( "verschachtelt"). So fällt sofort auf, wo man das Gegenstück vergessen hat! In CodeBox I stehen die meisten Zeilen 2x da. Ist das gewollt so? Verbesserungsvorschläge: Wenn Du mit so vielen Kugel hantieren willst, kommst Du an TYPEs nicht mehr vorbei. Ist aber nicht so schwer.... TYPEs sind Objekte in deinem Spiel, wie eben z.B. die Kugeln. Zunächst definierst du sie zwischen den Befehlen TYPE und END TYPE. FIELD legt dann eine Eigenschaft dieser Objekte fest. BlitzBasic: [AUSKLAPPEN] ;Definition: Dann erschaffst Du sie. BlitzBasic: [AUSKLAPPEN] ;Erschaffen beim Abschuss Ab da agieren Sie wie von alleine. BlitzBasic: [AUSKLAPPEN]
Zum Schluß entfernen wir sie wieder. BlitzBasic: [AUSKLAPPEN] Delete jede Hier ein Beispiel für alle drei Situationen "neu" oder "jede" sind nur Platzhalter-Variablennamen. Erst der Punkt dahinter macht deutlich, das es nicht um eine Zahl oder einen String handelt, sondern um einen TYPE von Typ Kugel. An die Parameter jeder Kugel kommt du mit dem \-Zeichen. BlitzBasic: [AUSKLAPPEN] ;Definition: Hierzu gibt es ein Tutorial von mir.... https://www.blitzforum.de/foru...hp?t=33551 |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group