 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
horstpeter
Anmeldungsdatum: 21.11.2005 Beiträge: 4
|
Verfasst am: 21.11.2005, 18:43 Titel: Problem NEED HELP |
|
|
Ich soll für den Informatik Unterricht, mit QBasic ein Spiel schreiben. In dem Spiel soll ein Ball über das Spielfeld fliegen und an beiden Seiten an einem Rechteck abprallen, das sich hoch und runter bewegen lässt. Bisher hab ich es erst geschafft, dass die beiden Rechtecke sich hoch und runter bewegen lassen, aber sobald ich den Ball programmiere, lassen sich die Rechtecke nicht mehr bewegen. Ich bin mit meinem noch nicht sehr umfangreichen Wissen am Ende! |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 21.11.2005, 18:47 Titel: |
|
|
Tag wohl,
Erst mal Formelles:
Mach nen brauchbaren Titel!
Nun zum Problem:
Zeig mal den Quellcode, wahrscheinlich hast du irgendwie die Schlaufen verknottet. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 21.11.2005, 18:55 Titel: |
|
|
Du könntest für die Geschwindigkeit des Balles 2 Variablen nehmen, sagen wir mal xplus und yplus.
Wenn sie nun die x-/y-Position des rechten/linken Rechtecks überschritten haben, schreibst du einfach
Code: |
xplus = -xplus
yplus = -yplus
|
und der Ball sollte zurückspringen.
Am Anfang nur nicht vergessen, xplus und yplus einen Startwert zu geben...
Damit du das flimmerfrei hinbekommst, schau mal in die MonsterFAQ unter Doublebuffering.
Dein Code sollte also in etwa so aussehen:
Code: |
' Bildschirmmodus
DO
' Bildschirm löschen
' Rechtecke & Ball zeichnen
' Tastaturabfrage
' Position des Balles (xpos|ypos) ändern
xpos = xpos + xplus
ypos = ypos + yplus
' Hat der Ball ein Rechteck berührt?
' wenn ja:
xplus = -xplus
yplus = -yplus
LOOP
|
Nur ganz grob der Ablauf eben.
/edit: @MisterD: Ich habe nur zwei klitzekleine Strichelchen vergessen...
jb
Zuletzt bearbeitet von jb am 21.11.2005, 22:27, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 21.11.2005, 22:18 Titel: |
|
|
jb hat Folgendes geschrieben: | Code: | xplus = xplus
yplus = yplus |
|
Sinn?
Jet-X-Award für programmiertechnischen Schwachsinn
da müsste irgendwo ein minus rein.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Zuletzt bearbeitet von MisterD am 21.11.2005, 22:20, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
horstpeter
Anmeldungsdatum: 21.11.2005 Beiträge: 4
|
Verfasst am: 21.11.2005, 22:18 Titel: |
|
|
thx, aber die Rechtecke müssen sich nach oben und unten bewegen können, da kann ich die doch nicht erst in der Schleife erstellen, oder? Bisher hab ich immer über der Schleife a und b definiert und dann steht in der Schleife LINE (a,b)...
Und dann hab ich noch ne Frage: Wie kann ich die Stelle programmieren an der festgestellt werden muss, ob der Ball das Rechteck berührt hat, oder nicht??? |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 22.11.2005, 02:20 Titel: |
|
|
Hallo
Das ganze könnte im Prinzip so aussehen. Am Anfang legst du die Startpositionen der beiden Balken und des Balls fest sowie dessen Geschwindigkeit und Bewegunsrichtung. Dann kommt eine grosse Schleife, die immer wieder durchlaufen wird und die alle Funktionen enthält:
- Steuertasten abfragen
- prüfen, ob die Balken oben oder unten anstossen
- Positionen für die Balken entsprechend aktualisieren
- Position des Balls aktualisieren
- berührt er einen der Balken? Dann x-Richtungswechsel
- berührt er den Rand oben oder unten? -> Dann y-Richtungswechsel
- linken oder rechten Spielfeldrand erreicht? -> dann raus aus der Schleife
sonst
- alte Grafik löschen
- neue Grafik ausgeben
- zurück zum Schleifenanfang
Konnte der Ball nicht zurückgespielt werden und ist links oder rechts rausgeflogen, dann Punkte verteilen, Ball und Balken in die Ausgangsstellung bringen und wieder von vorn.
Beim Originalspiel war es noch so, dass der Ball wenn er auf einen Balken traf der gerade in Bewegung war, einen zusätzlichen Drall erhielt.
Neben dem von jb angesprochenen doublebuffering für eine saubere Grafik (grob gesagt ein zweiter, virtueller Bildschirm, der erst angezeigt wird, wenn die Grafik fertig aufgebaut ist) könntest du dir hier im Forum oder in der QB-Monster-FAQ auf www.qbasic.de mal die Tastaturabfrage mit INP(96) bzw. INP(&H60) ansehen. INKEY$ sagt dir nur, welche Taste als letztes gedrückt wurde aber nicht, ob sie schon wieder losgelassen wurde. So ist eine Steuerung der Balken schwierig. Mit INP kannst du dagegen prüfen, ob eine Taste gerade gedrückt wird oder nicht.
@jb: Im Prinzip hattest du nur ein Minuszeichen vergessen. Bei Berührung mit einem Balken ändert sich nur der x-Anteil der Geschwindigkeit, bei Kontakt mit dem oberen oder unteren Spielfeldrand nur der y-Anteil.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.11.2005, 19:50 Titel: |
|
|
Aber der Ball bewegt sich doch nicht gerade, sondern schräg im Raum, oder?
Dann ist das doch so, wenn er einen Balken trifft, als ob er die Wand berühren würde, und
in dem Falle werden (natürlich ohne genaue physikalische Berechnungen) einfach die Geschwindigkeiten mit -1 multipliziert.
jb |
|
Nach oben |
|
 |
horstpeter
Anmeldungsdatum: 21.11.2005 Beiträge: 4
|
Verfasst am: 22.11.2005, 22:37 Titel: |
|
|
Tut mir leid, aber ich hab immer noch nicht verstanden was ich programmieren soll, damit der Ball an dem Rechteck abprallt, dass kann ich ja nicht mit einer einfachen Koordinate machen, weil die Rechtecke ja beweglich sind!!
NEED HELP |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 22.11.2005, 22:41 Titel: |
|
|
dann musst du halt die koordinaten von dem rechteck mit einbeziehen.. das sollte doch machbar sein, mals einfach mal auf papier auf mit allen breitenangaben von den objekten etc.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.11.2005, 22:43 Titel: |
|
|
Dann setz doch anstatt einer festen Koordinate die Koordinaten des Rechtecks ein...
Eine Skizze ist aber keine schlechte Idee.
jb |
|
Nach oben |
|
 |
horstpeter
Anmeldungsdatum: 21.11.2005 Beiträge: 4
|
Verfasst am: 22.11.2005, 22:56 Titel: |
|
|
ich schreib einfach mal auf wie weit ich programmiert hab.
screen 12
cls
y = 200
x = 20
a = 200
b = 620
do
line (x,y)-(x+20,y+80),1,BF
taste$ = inkey$
if taste$ = "q" then
line (x,y)-(x+20,y+80),0,BF
y=y-5
end if
if taste$ = "a" then
line (x,y)-(x,20,y+80),0,BF
y=y+5
end if
line (b,a)-(b-20,a+80),4,BF
y=y+5
end if
line (b,a)-(b-20,a+80),4,BF
if taste$ = "ü" then
line (b,a)-(b-20,a+80),0,BF
a=a+5
end if
soweit funktioniert alles, aber wenn ich jetzt den Kreis reinsetz funktioniert, entweder der Kreis oder die Rechtecke
Kann mir jemand sagen wie ich hier weiter programmieren muss, damit ich das ober beschriebene Spiel bekomme??? |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 23.11.2005, 00:33 Titel: |
|
|
Hallo
Wo wird denn der Ball gezeichnet? Du musst ihm zu Beginn Geschwindigkeiten in x- und y-Richtung geben. Bei jedem Schleifendurchlauf wird die Geschwindigkeit zur alten position addiert und der Ball neu gezeichnet. Die Balken bewegen sich nur, wenn eine Taste gedrückt wurde. Du kannst dein Programm übrigens auch als Textdatei abspeichern und dann direkt hier ins Forum kopieren, dann brauchst du es nicht abzuschreiben.
jb hat Folgendes geschrieben: | Aber der Ball bewegt sich doch nicht gerade, sondern schräg im Raum, oder?
Dann ist das doch so, wenn er einen Balken trifft, als ob er die Wand berühren würde, und
in dem Falle werden (natürlich ohne genaue physikalische Berechnungen) einfach die Geschwindigkeiten mit -1 multipliziert. |
Dann würde er genau in die Richtung zurückprallen aus der er kommt. Nehmen wir an er fliegt Richtung links oben. Wenn er dabei am oberen Rand anstösst, fliegt er zwar danach nach unten (vy=-vy), aber weiterhin nach links.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Kevin
Anmeldungsdatum: 03.11.2005 Beiträge: 29 Wohnort: Gummersbach-----NRW
|
Verfasst am: 23.11.2005, 15:48 Titel: |
|
|
Eine frage soll dass so eine art Blockbreaker oder so werden ich denke nämlich mal dass das bei uns auch die tage in informatik kommen wird und desswegen verfolge ich dass thema ein bissle
Also Blockbraker ohne die Block´s *g*
Die muesste man jaq sonst nochmal extrazeichnen lol
Naja ich versuche mal dass ganze Prinzip zu verstehen und schaue mal zuhause (bin gerade auf meiner Praktikumsstelle)
Ob ich dass "Irgendwie" hinkriege
Aber ich wünsche dir weiterhin Gutes Gelinegn Und vor Allem Grossen Erfolg hoffe du bekommst raus wies geht.
KeViN  _________________ Lean Back
Enjoi the Life |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|