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:

objekt automatisch bewegen
Gehe zu Seite 1, 2  Weiter
 
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
nano91



Anmeldungsdatum: 11.01.2007
Beiträge: 19

BeitragVerfasst am: 28.03.2007, 16:36    Titel: objekt automatisch bewegen Antworten mit Zitat

hallo
entweder wurde diese frage noch nicht gestellt,
oder ich habe in der suchfunktion die falschen begriffe eingegeben.
also:

ich möchte ein object (bspw. einen kreis)
automatisch über den bildschirm laufen lasse.
er soll von einer seite zur anderen
und dann apprallen und in eine andere richtung.
ausserdem soll er noch die farbe wechseln

ich weiss aber nicht wie das gehen soll.
mir fehlen unter anderem die befehle,
die sleep ersetzen, da sleep min. 1 sek machen kann
und der kreis sich ja schneller bewegen muss.
was ich bis jetzt hab ist:

Code:


x!= 30
y!= 40
r = 20  'radius
c=1 'farbe(color)
w=1     'x+w
z=1.5   'y+z
v=1     'c+v

[...]
screen 12
[...]
x!=x!+w
y!=y!+z
c=c+v
[...]
if x! >= 640 then w = -w
if y! >= 480 then z = -z
if c = 15 then v = -v
if inkey$ = chr$(27) then end


oder so ähnlich happy"

also ich weiss nicht, wie man den kreis malen soll und wo dann das circle(x!,y!),r,c hinkommen soll.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 28.03.2007, 16:55    Titel: Antworten mit Zitat

das ist nur ein kleines und einfaches beispiel das ich vor ein paar Tagen schon mal für jemanden gemacht habe zur groben erklärung....
vielleicht hilft es Dir...

Code:

randomize timer

screen 18

ballx=int(rnd*620)+20
bally=int(rnd*460)+20
radius=20

do
    destx=int(rnd*3)-1
    desty=int(rnd*3)-1
loop while destx<>0 and desty<>0


while inkey$<>chr$(27)

    ballx+=destx*2
    bally+=desty*2
   
    if ballx<20 Then
        ballx=20
        destx=int(rnd*3)-1 : desty=int(rnd*3)-1
    end if

    if ballx>618 Then
        ballx=618
        destx=int(rnd*3)-1 : desty=int(rnd*3)-1
    end if

    if bally<20 Then
        bally=20
        destx=int(rnd*3)-1 : desty=int(rnd*3)-1
    end if

    if bally>458 Then
        bally=458
        destx=int(rnd*3)-1 : desty=int(rnd*3)-1
    end if

    If destx=0 and desty=0 then
        do
            destx=int(rnd*3)-1
            desty=int(rnd*3)-1
        loop while destx<>0 and desty<>0
    end if
   

    screenlock
    cls
    circle(ballx,bally),radius,15
    paint (ballx,bally),15,15
    screenunlock
wend



_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
nano91



Anmeldungsdatum: 11.01.2007
Beiträge: 19

BeitragVerfasst am: 28.03.2007, 17:02    Titel: Antworten mit Zitat

1. klappt das irgendwie nicht

2. ich kapier davon nicht viel. (bin en totaler noob)
folgende begriffe sagen mir nix:

Code:

randomize timer
int(rnd*620)+20
destx=int(rnd*3)-1
screenunlock
wend
screenlock

If destx=0 and desty=0 then
        do
            destx=int(rnd*3)-1
            desty=int(rnd*3)-1
        loop while destx<>0 and desty<>0
    end if
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 28.03.2007, 17:48    Titel: Antworten mit Zitat

Ein etwas komplexeres Beispiel mit Kreisen:

http://www.dreael.ch/Deutsch/Download/Billard-Simulation.html

Ansonsten mein Grundlagen-Artikel zu Animationen in QB:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/ButterweicheAnimationen.html
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 28.03.2007, 21:19    Titel: Antworten mit Zitat

@eternal pain:
das wird ihm so erst´ma wenig nutzen.

klappen KANN es gar nicht, weil es ein fb source ist. zwinkern qb kennt ja den screen 18 net, screenlock, screenunlock, all das kennt qb ja gar net.
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 29.03.2007, 00:52    Titel: Antworten mit Zitat

Das haben meine müden Augen vorhin doch glautt übersehen ?!
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
nano91



Anmeldungsdatum: 11.01.2007
Beiträge: 19

BeitragVerfasst am: 29.03.2007, 19:56    Titel: Antworten mit Zitat

ja toll...
und wie geht das jetzt???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 29.03.2007, 20:38    Titel: Antworten mit Zitat

funzen tut es so, aber.... es ist unansähnlich.

Code:

dim ballx as integer
dim bally as integer
dim radius as integer
dim destx as integer
dim desty as integer

randomize timer

screen 12

ballx=int(rnd*620)+20
bally=int(rnd*460)+20
radius=20

do
    destx=int(rnd*3)-1
    desty=int(rnd*3)-1
loop while destx<>0 and desty<>0


while inkey$<>chr$(27)

    ballx+=destx*2
    bally+=desty*2
   
    if ballx<20 Then
        ballx=20
        destx=int(rnd*3)-1 : desty=int(rnd*3)-1
    end if

    if ballx>618 Then
        ballx=618
        destx=int(rnd*3)-1 : desty=int(rnd*3)-1
    end if

    if bally<20 Then
        bally=20
        destx=int(rnd*3)-1 : desty=int(rnd*3)-1
    end if

    if bally>458 Then
        bally=458
        destx=int(rnd*3)-1 : desty=int(rnd*3)-1
    end if

    If destx=0 and desty=0 then
        do
            destx=int(rnd*3)-1
            desty=int(rnd*3)-1
        loop while destx<>0 and desty<>0
    end if
   

    cls
    circle(ballx,bally),radius,15
    paint (ballx,bally),15,15
wend

_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nano91



Anmeldungsdatum: 11.01.2007
Beiträge: 19

BeitragVerfasst am: 29.03.2007, 22:49    Titel: Antworten mit Zitat

bei mir gehts nicht
da kommt immer der fehler bei
Code:

ballx+=destx*2


"erwarted: ausdruck"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 29.03.2007, 22:54    Titel: Antworten mit Zitat

Das ist eine übernahme von C glaub ich...

ersete es einfach durch

Code:
ballx=ballx+(destx*2)


dann müsste es gehen... bei alles anderen dann natürlich auch in der Form ändern...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 29.03.2007, 22:55    Titel: Antworten mit Zitat

Hast du schon mal
Code:
ballx=ballx+destx*2
probiert?
Kannst dich ja melden, wenn es bei bally ähnliche Probleme gibt grinsen
@Eternal_pain:
Der externe extra-terrestrische war schneller..
Code:
If QBASIC kann kein += Then
@csderats:
Wenn du Code postest, muß er auch zur Programmiersprache passen..
End If

_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..

Zuletzt bearbeitet von ytwinky am 29.03.2007, 23:01, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



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

BeitragVerfasst am: 29.03.2007, 23:00    Titel: Antworten mit Zitat

Hallo

Zu der Sache mit den Pausen, die kürzer sind als die 1 Sekunde mit SLEEP. Das einfachste ist wohl, einfach eine leere Programmschleife so oft laufen zu lassen, dass der Rechner eben solange beschäftigt ist, wie du die Pause haben möchtest. Der Nachteil dabei ist, das diese Schleife auf unterschidlich schnellen Rechnern eben auch unterschiedlich lange Pausen ergibt.

Eine andere Möglichkeit ist, mit dem Befehl TIMER zu arbeiten. Unter diesem Suchbegriff findest du hier im Forum bestimmt massig Einträge. Kurz gesagt kannst du damit die Uhr abfragen. Als Ergebnis von

Code:

zeit = TIMER


bekommst du die Sekunden, die seit Mitternacht vergangen sind. Diese Uhr läuft in Schritten von ca. 0,054 Sekunden. Du speicherst z.B. im Programm die Startzeit einer Pause und lässt dann eine DO...LOOP-Schleife oder so laufen in der du jedesmal die aktuelle Zeit mit der gespeicherten Startzeit vergleichst. Wenn die Differenz grösser ist, als die Pausenzeit, dann wird die Schleife verlassen und der neue Kreis gezeichnet.

Gruß
skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 29.03.2007, 23:03    Titel: Antworten mit Zitat

Wieso schreibt eigentlich jeder das mit Timer die sekunden seit mitternacht zurückgegeben werden ? Ich meine mal gelesen zu haben das Timer die Sekunden nach Systemstart zurück gibt? Wodurch es selten zu einer wiederholten Timer rückgabe kommt, was bei Randomize zB zum Vorteil kommt.... Hat sich da irgendwas dran geändert ?! Ist mir das entgangen ?
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Skilltronic



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

BeitragVerfasst am: 29.03.2007, 23:08    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Wieso schreibt eigentlich jeder das mit Timer die sekunden seit mitternacht zurückgegeben werden ?


Weil es so ist. Teste es, und du wirst sehen, das TIMER die Sekunden seit Mitternacht zurückgibt. Probieren geht über studieren.

EDIT: Kleines Beispielprogramm:

Code:
DO
 sek = TIMER
 std = FIX(sek / 3600)
 sek = sek - std * 3600
 min = FIX(sek / 60)
 sek = FIX(sek - min * 60)

 IF sekalt <> sek THEN
  CLS
  PRINT "Es ist"; std; "Uhr"; min; "Minuten und"; sek; "Sekunden"
  sekalt = sek
 END IF

LOOP WHILE INKEY$ = ""


Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 29.03.2007, 23:31    Titel: Antworten mit Zitat

Skilltronic hat Folgendes geschrieben:
Weil es so ist. Teste es, und du wirst sehen, das TIMER die Sekunden seit Mitternacht zurückgibt. Probieren geht über studieren.
..genau und es kann überhaupt nix kaputtgehen grinsen
Anders ist es bei FreeBASIC, das gibt die Zeit seit SystemStart zurück..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nano91



Anmeldungsdatum: 11.01.2007
Beiträge: 19

BeitragVerfasst am: 29.03.2007, 23:36    Titel: Antworten mit Zitat

kann mir jemand das hier erklären??

Code:

5 CLS
10 SCREEN 9
20 CLS
30 FOR fuellstand = 0 TO 1 STEP .01
40   LINE (100, 100)-(200, 300), 15, B
50   LINE (101, 100)-(199, 299 - fuellstand! * 180), 0, BF
60   LINE (101, 299 - fuellstand! * 180)-(199, 299), 14, BF
70 zeit = TIMER: DO: LOOP WHILE TIMER < zeit + .1
80 NEXT
90 SLEEP

(die zahlen zum besseren erklären)

also ich kapier die zeilen 30, 50 und 60 nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



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

BeitragVerfasst am: 29.03.2007, 23:44    Titel: Antworten mit Zitat

Was genau davon verstehst du denn nicht? Da wird ein leeres, weisses Reechteck gezeichnet und das dann in Sekundenabständen nach und nach in Schritten von einem Zehntel der Gesamthöhe mit einem gelben Rechteck aufgefüllt.
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 29.03.2007, 23:45    Titel: Antworten mit Zitat

da war ein kleiner fehler....

Code:

dim zeit as double
SCREEN 9
FOR fuellstand! = 0 TO 1 STEP .01
  LINE (100, 100)-(200, 300), 15, B
  LINE (101, 100)-(199, 299 - fuellstand! * 180), 0, BF
  LINE (101, 299 - fuellstand! * 180)-(199, 299), 14, BF
  zeit = TIMER: DO: LOOP WHILE TIMER < zeit + .1
NEXT

SLEEP


wenn man es sich ansieht, erklärt es sich eigentlich von selbst...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 29.03.2007, 23:49    Titel: Antworten mit Zitat

Code:
'Option Explicit 'Ooops, das ist ja gar kein FreeBASIC..
Dim Fuellstand As Single, Zeit As Double
..und nun deine nächste Frage bitte..
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nano91



Anmeldungsdatum: 11.01.2007
Beiträge: 19

BeitragVerfasst am: 30.03.2007, 16:00    Titel: Antworten mit Zitat

Skilltronic hat Folgendes geschrieben:
Was genau davon verstehst du denn nicht? Da wird ein leeres, weisses Reechteck gezeichnet und das dann in Sekundenabständen nach und nach in Schritten von einem Zehntel der Gesamthöhe mit einem gelben Rechteck aufgefüllt.


also ich weiss so ungefähr was FOR, STEP und NEXT machen,
aber ebend nicht genau.

und ich würde gerne wissen warum in den zeilen 50 & 60 immer irgendwo (,299 - fuellstand * 180) steht.
was bewirkt das?
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
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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