Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem NEED HELP

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
horstpeter



Anmeldungsdatum: 21.11.2005
Beiträge: 4

BeitragVerfasst am: 21.11.2005, 18:43    Titel: Problem NEED HELP Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 21.11.2005, 18:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 21.11.2005, 18:55    Titel: Antworten mit Zitat

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... zwinkern

jb


Zuletzt bearbeitet von jb am 21.11.2005, 22:27, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 21.11.2005, 22:18    Titel: Antworten mit Zitat

jb hat Folgendes geschrieben:
Code:
xplus = xplus
yplus = yplus

Sinn? mit den Augen rollen
Jet-X-Award für programmiertechnischen Schwachsinn grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden
horstpeter



Anmeldungsdatum: 21.11.2005
Beiträge: 4

BeitragVerfasst am: 21.11.2005, 22:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 22.11.2005, 02:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.11.2005, 19:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
horstpeter



Anmeldungsdatum: 21.11.2005
Beiträge: 4

BeitragVerfasst am: 22.11.2005, 22:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 22.11.2005, 22:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.11.2005, 22:43    Titel: Antworten mit Zitat

Dann setz doch anstatt einer festen Koordinate die Koordinaten des Rechtecks ein...
Eine Skizze ist aber keine schlechte Idee.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
horstpeter



Anmeldungsdatum: 21.11.2005
Beiträge: 4

BeitragVerfasst am: 22.11.2005, 22:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 23.11.2005, 00:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kevin



Anmeldungsdatum: 03.11.2005
Beiträge: 29
Wohnort: Gummersbach-----NRW

BeitragVerfasst am: 23.11.2005, 15:48    Titel: Antworten mit Zitat

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 Ich brauch nen Kaffee...
_________________
Lean Back
Enjoi the Life
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz