Habe ein Problem mit millisecs und delay.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Razor1994

Betreff: Habe ein Problem mit millisecs und delay.

BeitragSo, Feb 14, 2010 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss für die Schule ein Programm schreiben das 4 Farben zufällig aufleuchten lässt. Das habe ich auch geschafft aber kann man die Dauer die die Farben aufleuchten nicht anders programmiern ohne das das ganze Programm anhält?
Bin dankbar für jeden Beitrag.

Code: [AUSKLAPPEN]
Graphics 640,480,16,0
;variablen
 Global zeit = Input("Wie lange sollen die Farben erscheinen?In Sekunden. ")

;Hauptprogramm
Repeat
 zufall
 dauer
 schwarz
 dauer
Until KeyHit(1)
End

;Funktionen
Function zufall()
  z = Rand(4)
  If z = 1 Then Color 1, 32, 243 Rect 0, 0, 640, 480, 1      ;blau
  If z = 2 Then Color 255, 255, 0 Rect 0, 0, 640, 480, 1   ;gelb
  If z = 3 Then Color 255, 0, 0 Rect 0, 0, 640, 480, 1      ;rot
  If z = 4 Then Color 0, 255, 0 Rect 0, 0, 640, 480, 1      ;grün
End Function

Function dauer()
 Delay zeit * 1000
End Function

Function schwarz()
 Color 0, 0, 0 Rect 0, 0, 640, 480, 1
End Function
  • Zuletzt bearbeitet von Razor1994 am So, Feb 14, 2010 20:34, insgesamt 2-mal bearbeitet

Hubsi

BeitragSo, Feb 14, 2010 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Millisecs hilft Dir da weiter.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

ozzi789

BeitragSo, Feb 14, 2010 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Achja fürs den nächsten Post bitte einen aussagekräftigen Titel verwenden Wink

mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

Razor1994

BeitragSo, Feb 14, 2010 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
@hubsi
hab ich schon versucht weiss aber nicht wie ichs schreiben soll.

@ozzi
wollte ich ja wusste nur nicht wie formulieren.

Goodjee

BeitragSo, Feb 14, 2010 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

time=millisecs()
repeat
  if(millisecs()-time>dauer)
    farbewechselnundfarbeinvariablespeichern()
    time=millisecs()
  endif
  farbemalen
until keyhit(1)
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Razor1994

BeitragSo, Feb 14, 2010 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
sry aber das hat mir nicht gerade weitergeholfen.
 

da_poller

BeitragSo, Feb 14, 2010 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war pseudocode Wie du das ungefähr angehen kannst. Deine hausaufgabe musst du dann schon selber machen!
 

Razor1994

BeitragSo, Feb 14, 2010 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich ja versucht aber ich checks nicht.

Goodjee

BeitragSo, Feb 14, 2010 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
du speicherst die zeit zum programmstart und guckst immer ob die differenz zwischen der aktuellen zeit und der gespeicherten größer ist als die zeitdauer die du warten willt.

sobald das der fall ist kannst du die farbe ändern oder sonst was machen
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Razor1994

BeitragSo, Feb 14, 2010 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab heute keine Zeit mehr versuchs morgen weiter und gebe dann bescheid.
 

Razor1994

BeitragMo, Feb 15, 2010 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe den code jetzt abgeändert aber die Farben kommen zu schnell. Und ich weiss nicht warum.

Code: [AUSKLAPPEN]
Graphics 640,480,16,0

;variablen
 Global zeit = Input("Wie lange sollen die Farben erscheinen?In Sekunden. ")
 Global time = MilliSecs()
 
;Hauptprogramm
Repeat
 zufall
 dauer1
 dauer2
Until KeyHit(1)
End

;Funktionen

Function zufall()
  z = Rand(4)
  If z = 1 Then Color 1, 32, 243 Rect 0, 0, 640, 480, 1      ;blau
  If z = 2 Then Color 255, 255, 0 Rect 0, 0, 640, 480, 1   ;gelb
  If z = 3 Then Color 255, 0, 0 Rect 0, 0, 640, 480, 1      ;rot
  If z = 4 Then Color 0, 255, 0 Rect 0, 0, 640, 480, 1      ;grün
End Function

Function dauer1()
  If MilliSecs() - time > zeit *1000
    schwarz
    time=MilliSecs()
  EndIf
End Function

Function dauer2()
  If MilliSecs() - time > zeit *1000
    zufall
    time=MilliSecs()
  EndIf
End Function

Function schwarz()
 Color 0, 0, 0 Rect 0, 0, 640, 480, 1
End Function

NightPhoenix

BeitragMo, Feb 15, 2010 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu brauchst du 2 mal Eine "dauer" funktion? Eine reicht.
Die Funktion "schwarz" ist sinnfrei, in der einen Zeile könntes tdu genausogut den Inhalt der Funktion hinschreiben.
Du rufst in deiner Hauptschleife alle Funktionen auf, d.h. sie werden alle nacheinander jede Schleife ausgeführt.
Da in deiner Hauptschleife auch die Funktion "zufall" steht wird in jedem Schleifendurchgang unabhängig von der Zeiteingabe die Farbe gewechselt.
Du solltest die Funktion "zufall" also nur aufrufen wenn die Zeit um ist, sprich wenn die bedingung in der Funktion "dauer1" erfüllt ist.

Du hast die Logik hinter der Programmierung nicht mal ansatzweise verstanden, ich bezweifel dass du sie überhaupt verstehen willst. Du magst das Fach Info nicht wirklich gerne oder?
 

Razor1994

BeitragMo, Feb 15, 2010 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Zitat:
Die Funktion "schwarz" ist sinnfrei, in der einen Zeile könntes tdu genausogut den Inhalt der Funktion hinschreiben.

Lass mich entscheiden was ich in eine Funktion stecke und was nicht.
2. Zitat:
Wozu brauchst du 2 mal Eine "dauer" funktion? Eine reicht.

Hast du genau gelesen? Ich denke nicht, denn dann hättest du gesehen das die eine Dauer Funktion für die Dauer der Farbe und die andere für die Dauer vom schwarzen Bildschirm ist.
3. Zitat:
Du rufst in deiner Hauptschleife alle Funktionen auf, d.h. sie werden alle nacheinander jede Schleife ausgeführt.
Da in deiner Hauptschleife auch die Funktion "zufall" steht wird in jedem Schleifendurchgang unabhängig von der Zeiteingabe die Farbe gewechselt
Sie sollen ja auch nacheinander ausgeführt werden. Und ich will ja nicht nur eimal eine zufällige Farbe.
4. Zitat:
Du solltest die Funktion "zufall" also nur aufrufen wenn die Zeit um ist, sprich wenn die bedingung in der Funktion "dauer1" erfüllt ist.
versuch ich ja
5. Zitat:
Du hast die Logik hinter der Programmierung nicht mal ansatzweise verstanden, ich bezweifel dass du sie überhaupt verstehen willst. Du magst das Fach Info nicht wirklich gerne oder?
Ich glaube du hast mehr Probleme mit der Logik als ich. Und doch ich will sie verstehen darum schreibe ich ja hier rein, für konstruktive Bemerkungen. (Was deine nicht gerade war.) Und welches Fach? Ich programmiere privat.

Goodjee

BeitragMo, Feb 15, 2010 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du willst das man dir hilfst, solltest du vllt die leute die dir helfen wollen nicht beleidigen...

naja, ich versuchs trotzdem nochmal

speicher die farbe die momentan angezeigt wird in einer variable
speicher die zeit
hauptschleife
momentane farbe malen
wenn die differenz der zeit zu groß ist: die farbvariable ändern und die zeitvariable ändern
ende
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Midimaster

BeitragMo, Feb 15, 2010 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Razor1994

die Aussagen von NightPhoenic solltest Du als Anregungen sehen, etwas mehr über deinen Code nachzudenken. Er versucht damit, deine Überlegungen in ganz neue Bahnen zu lenken. Nur weil Du nicht verstehst, was du damit erreichenen könntest, würde ich keine so großen Töne spucken.... Am Ende bist du es, dem die Logik fehlt?

So nun aber was konstruktives:

Du kannst Variablen in der Funktion dazu benutzen, sie unterschiedliche Dinge tun zu lassen:

BlitzBasic: [AUSKLAPPEN]
Function dauer()
If MilliSecs() - time > zeit *1000
If Typ=0 Then
Zufall
Else
Schwarz
EndIf
Time=MilliSecs()
EndIf
End Function


Der Aufruf erfolg jetzt für die Zufallssituationen mit
BlitzBasic: [AUSKLAPPEN]
Typ=0
Dauer

im Falle von schwarz einfach mit
BlitzBasic: [AUSKLAPPEN]
Typ=1
Dauer


Und auch das Malen von schwarzem oder buntem Bildschirm ist ja eigentlich das Gleiche und lässt sich mit einer gemeinsamen Funktion erledigen:

BlitzBasic: [AUSKLAPPEN]
Function Malen()
If Zufall% =1 Then
Color 1, 32, 243
ElseIf Zufall= 2 Then
...
ElseIf Zufall=0 Then
; für schwarz
Color 1,1,1
EndIf
Rect 0, 0, 640, 400
End Function


Hier rufst du nun also das Malen entweder mit der Zufallszahl...
BlitzBasic: [AUSKLAPPEN]
Zufall=Rand(1,4)
Malen


...oder dem Wert 0 auf und schon ist es schwarz-
BlitzBasic: [AUSKLAPPEN]
Zufall=0
Malen


So, wenn du das gecheckt hast, dann nochmal zu unserer Dauer()-Funktion

Wir machen als Vorbereitung Zufall% GLOBAL, damit wir wissen, was zuletzt gewählt war.

In der Funktion passiert folgendes:
Ist Zufall 0, dann wird als nächstes eine Zufallszahl zwischen 1 und 4 gewählt und danach ein Rechteck gemalt.
Ist anschließend Zufall jetzt 1-4, dann wird bei nächsten Mal Zufall=0 gesetzt und schwarz gemalt. Danach beginnt das Spiel von vorn:

BlitzBasic: [AUSKLAPPEN]
Function dauer()
If MilliSecs() - time > zeit *1000
If Zufall=0 Then
Zufall=Rand(1,4)
Else
Zufall=0
EndIf
Time=MilliSecs()
Malen Zufall
EndIf
End Function


Da kannste jetzt den ganzen Abend drüber nachdenken....

noch eine kleine Anmerkung:
Male Schwarz in BB immer mit Color 1,1,1 und nicht mit Color 0,0,0. Es könnte sein, dass dies zufällig die aktuelle "Trasparent-Farbe" ist und Du dann von BB keine Schwarz gemalt bekommts.
  • Zuletzt bearbeitet von Midimaster am Di, Feb 16, 2010 16:10, insgesamt einmal bearbeitet
 

Razor1994

BeitragDi, Feb 16, 2010 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
die Aussagen von NightPhoenic solltest Du als Anregungen sehen, etwas mehr über deinen Code nachzudenken. Er versucht damit, deine Überlegungen in ganz neue Bahnen zu lenken. Nur weil Du nicht verstehst, was du damit erreichenen könntest, würde ich keine so großen Töne spucken.... Am Ende bist du es, dem die Logik fehlt?

Also am meisten hat mich die Art gestört wie er es geschrieben hat. Vorallem der letzte Abschnitt. Aber egal.
Ich habe es jetzt geschafft. Danke trotzdem.

Code: [AUSKLAPPEN]
Graphics 640,480,16,0

;variablen
 Global zeit = Input("Wie lange sollen die Farben erscheinen?In Sekunden. ")
 Global time = MilliSecs()
 Global z = Rand(4)
;Hauptprogramm
Repeat
 dauer
 malen
Until KeyHit(1)
End

;Funktionen

Function dauer()
    If MilliSecs() - time > zeit *1000
         If z = 0 Then
              z = Rand(4)
         Else
              z = 0
         EndIf
         Time=MilliSecs()
     EndIf
End Function

Function malen()
     If z = 1 Then
          Color 1, 32, 243      ;blau
     ElseIf z = 2 Then
          Color 255, 255, 0      ;gelb
     ElseIf z = 3 Then
        Color 255, 0, 0      ;rot
    ElseIf z = 4 Then
        Color 0, 255, 0      ;grün
     ElseIf z = 0 Then
          Color 1,1,1         ;schwarz
     EndIf
     Rect  0, 0, 640, 480
End Function

NightPhoenix

BeitragDi, Feb 16, 2010 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry war nicht böse gemeint. Deine Aussage dass es eine Schulaufgabe ist und deine extremen Logikfehler im Code (die ich offen gesagt so nicht mal von Anfängern kenne) lies mich denken, dass du jemand bist der seine Hausaufgaben für sein Hassfach Informatik gemacht haben möchte und nicht mal verstehen will was er da schreibt, Hauptsache das Schulfach irgendwie hinter sich bringen. Wir haben in letzter Zeit viele desinteressierte und frustrierte Neueinsteiger durch ihre Schule hier im Forum.
Aufgrund dieser Faktoren hab ich wohl direkt einen schlechten Eindruck von dir gehabt Wink Wie gesagt nicht böse gemeint.
 

Razor1994

BeitragSo, Feb 28, 2010 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
schon vergessen.
User posted image
kommt in meinen Runescape clan

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group