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:

Fehler im "script"?

 
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
pGaR-Venom



Anmeldungsdatum: 25.09.2005
Beiträge: 6

BeitragVerfasst am: 06.10.2005, 13:41    Titel: Fehler im "script"? Antworten mit Zitat

Ich beschäftige mich seit neuem mit qbasic und habe eine Kreuzung mit ampeln gemacht.... Aber ich hab nur ein Problem bei mir blinken alle ampeln extrem schnell ich weiß nicht wo ich das sleep setzen muss und die Next I%, Next x%, Next z%, Netx k% ( die ampeln die diagonal genüber sind müssen gleich laufen). Könnt ihr mir Helfen?

CLS
SCREEN 12
'--+#+--'

PRINT
LINE (20, 150)-(250, 150), 7
LINE (20, 250)-(250, 250), 7
'--+WEST+--'
LINE (250, 150)-(250, 20), 7
LINE (350, 150)-(350, 20), 7
'--+NORTH+--'
LINE (350, 250)-(350, 380), 7
LINE (250, 250)-(250, 380), 7
'--+SOUTH+--'
LINE (350, 250)-(580, 250), 7
LINE (350, 150)-(580, 150), 7
'--+EAST+--'

'MITTEL_STRICH'
LINE (370, 197)-(400, 203), 7, BF
LINE (430, 197)-(460, 203), 7, BF
LINE (490, 197)-(520, 203), 7, BF
LINE (550, 197)-(580, 203), 7, BF
LINE (350, 203)-(360, 158), 7, BF
'--+WEST+--'
LINE (297, 130)-(303, 100), 7, BF
LINE (297, 70)-(303, 40), 7, BF
LINE (303, 140)-(258, 150), 7, BF
'--+NORTH+--'
LINE (297, 270)-(303, 300), 7, BF
LINE (297, 330)-(303, 360), 7, BF
LINE (297, 250)-(342, 260), 7, BF
'--+SOUTH+--'
LINE (20, 197)-(50, 203), 7, BF
LINE (80, 197)-(110, 203), 7, BF
LINE (140, 197)-(170, 203), 7, BF
LINE (200, 197)-(230, 203), 7, BF
LINE (250, 197)-(240, 242), 7, BF
'--+EAST+--

'AMPEL'
'--+AmpelNorth-West+--'
DO
FOR i% = 1 TO 4
LINE (200, 60)-(240, 140), 8, BF
LINE (200, 60)-(240, 140), 7, B

CIRCLE (220, 75), 10, 4 'ROT'
IF i% = 3 OR i% = 4 THEN PAINT (220, 75), 4
CIRCLE (220, 100), 10, 14 'GELB'
IF i% = 2 OR i% = 4 THEN PAINT (220, 100), 14
CIRCLE (220, 125), 10, 2 'GRUEN'
IF i% = 1 THEN PAINT (220, 125), 2

'--+AmpelSouth-East+--'
FOR x% = 1 TO 4
LINE (360, 260)-(400, 340), 8, BF
LINE (360, 260)-(400, 340), 7, B

CIRCLE (380, 275), 10, 4 'ROT'
IF x% = 3 OR x% = 4 THEN PAINT (380, 275), 4
CIRCLE (380, 300), 10, 14 'GELB'
IF x% = 2 OR x% = 4 THEN PAINT (380, 300), 14
CIRCLE (380, 325), 10, 2 'GRUEN'
IF x% = 1 THEN PAINT (380, 325), 2

'--+AmpelNorth-East+--'
FOR z% = 1 TO 4
LINE (360, 100)-(440, 140), 8, BF
LINE (360, 100)-(440, 140), 7, B

CIRCLE (425, 120), 10, 2 'GRUEN'
IF z% = 1 THEN PAINT (425, 120), 2
CIRCLE (400, 120), 10, 14 'GELB'
IF z% = 2 OR z% = 4 THEN PAINT (400, 120), 14
CIRCLE (375, 120), 10, 4 'ROT'
IF z% = 3 OR z% = 4 THEN PAINT (375, 120), 4

'--+AmpelSouth-West+--'
FOR k% = 1 TO 4
LINE (160, 260)-(240, 300), 8, BF
LINE (160, 260)-(240, 300), 7, B

CIRCLE (225, 280), 10, 2 'GRUEN'
IF k% = 1 THEN PAINT (225, 280), 2
CIRCLE (200, 280), 10, 14 'GELB'
IF k% = 2 OR k% = 4 THEN PAINT (200, 280), 14
CIRCLE (175, 280), 10, 4 'ROT'
IF k% = 3 OR k% = 4 THEN PAINT (175, 280), 4
_________________
It's not a Bug, It's STEAM
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 06.10.2005, 14:05    Titel: Antworten mit Zitat

Geh doch mal ein bisschen logischer ran zwinkern

Also, zuerst erslellst du einen Typ Ampel
Code:

TYPE Ampel
 rot AS INTEGER
 gelb AS INTEGER
 gruen AS INTEGER
 phase AS INTEGER
END TYPE

rot, gelb und grün sollten klar sein, und phase bedeutet einfach die Ampelphase, sprich Gelb, grün, etc.

Dann sagen wir mal:
Code:

Phase - - - - - Ampel
  1              rot
  2           rot, gelb
  3             grün
  4             gelb


Dann erstellst du dir eine SUB, die die aus der Phase die einzelnen Rot/Gelb/Grün-Werte "errechnet":
Code:

SUB Errechne(Phase AS INTEGER, rot AS INTEGER, gelb AS INTEGER, gruen AS INTEGER)

 SELECT CASE phase
 
  CASE 1
   rot = 1: gelb = 0: gruen = 0
  CASE 2
   rot = 1: gelb = 1: gruen = 0
  CASE 3
   rot = 0: gelb = 0: gruen = 1
  CASE 4
   rot = 0: gelb = 1: gruen = 0

 END SELECT

END SUB


Dann schreibst du dir noch eine SUB, die dir das Resultat für jede Ampel auf den Bildschirm schreibt.

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



Anmeldungsdatum: 25.09.2005
Beiträge: 6

BeitragVerfasst am: 06.10.2005, 14:52    Titel: Antworten mit Zitat

Naja müsst ich ja fast alles neu schreiben!, oder? ahm also wenn ich

'--+AmpelSouth-West+--'
DO
FOR k% = 1 TO 4
LINE (160, 260)-(240, 300), 8, BF
LINE (160, 260)-(240, 300), 7, B

CIRCLE (225, 280), 10, 2 'GRUEN'
IF k% = 1 THEN PAINT (225, 280), 2
CIRCLE (200, 280), 10, 14 'GELB'
IF k% = 2 OR k% = 4 THEN PAINT (200, 280), 14
CIRCLE (175, 280), 10, 4 'ROT'
IF k% = 3 OR k% = 4 THEN PAINT (175, 280), 4
Sleep 2
NEXT k%
Loop Until Ken(inkey$)


Mach dann läuft das ja so durch und wartet immer 2 sec, das ist ja auch richtig nur wiemach ich das mit den anderen next (variable) %
und dem sleep.Oder muss ich nochmal alles neu machen subs find ich scheiße, sry ich versteh subs nicht ganz^^ Ohne wäre besser da die ampel ja schon steht und es nur an next (variable)% und sleep hängt.

Mfg
Venom
_________________
It's not a Bug, It's STEAM
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



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

BeitragVerfasst am: 06.10.2005, 15:18    Titel: Antworten mit Zitat

dann musst du DO und LOOP statt FOR und NEXT nehmen und immer von hand k%=k%+1 schreibem.
_________________
"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
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

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

Hallo,

bitte nimm das nächste Mal einen etwas aussagekräftigeren Titel wie z.B. "Ampelsimulation ist zu schnell" oder so in die Richtung. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
pGaR-Venom



Anmeldungsdatum: 25.09.2005
Beiträge: 6

BeitragVerfasst am: 06.10.2005, 15:59    Titel: Antworten mit Zitat

@ MisterDon oaki soweit verstanden nur das von hand k%=k%+1 hab ich noch nicht verstanden, könntest du mir ein kl oder ihr ein kl beispiel geben?
Mfg
Venom
_________________
It's not a Bug, It's STEAM
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 06.10.2005, 17:15    Titel: Antworten mit Zitat

pGaR-Venom hat Folgendes geschrieben:

subs find ich scheiße

Deine Einstellung auch. Kopf schütteln

Mit SUBs ist es übersichtlichtlicher, und man kann den Fehler - wenn denn da noch einer sein sollte -
viel besser einkreisen.

Übrigens: Wenn du in die Netiquette geschaut hättest, hättest du gewusst, dass man nicht einfach
einen Code hinklatscht und sagt "Klappt nicht!".

jb
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: 06.10.2005, 17:21    Titel: Antworten mit Zitat

Code:
DO
locate 1,1
a=a+1
b=b+2
print "a:";a
print "b:";b
SLEEP 1
LOOP UNTIL INKEY$=CHR$(27) 'mit ESC beenden

Kopieren - Einfügen - F5 zwinkern
_________________
"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
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 06.10.2005, 17:37    Titel: Wartezeiten NICHT mit SLEEP erzeugen Antworten mit Zitat

Ein Hauptproblem scheint im SLEEP-Befehl zu liegen.

Dieser ist total unprofessionell. Erzeuge Wartezeiten nicht mit SLEEP, sondern mit der TIMER-Funktion. Z.B. so:

Code:

Zeit = TIMER + Wartezeit          'Wartezeit in sec mit 2 Nachkommastellen angeben
DO: LOOP UNTIL TIMER = Zeit

Bitte konsultiere nächstes Mal vor dem Posten von Einsteigerfragen die QB-MonsterFAQ. Da sind all solche Dinge detailliert erklärt.
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OdinX



Anmeldungsdatum: 29.07.2005
Beiträge: 253
Wohnort: SG Schweiz

BeitragVerfasst am: 06.10.2005, 22:47    Titel: Antworten mit Zitat

ich habe für pausen immer PLAY "P64" genommen.
ist doch viel einfacher
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 07.10.2005, 08:56    Titel: Antworten mit Zitat

Mag sein, aber mit TIMER kannst du alle möglichen Wartezeiten erzeugen.

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