 |
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 |
pGaR-Venom
Anmeldungsdatum: 25.09.2005 Beiträge: 6
|
Verfasst am: 06.10.2005, 13:41 Titel: Fehler im "script"? |
|
|
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 06.10.2005, 14:05 Titel: |
|
|
Geh doch mal ein bisschen logischer ran
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 |
|
 |
pGaR-Venom
Anmeldungsdatum: 25.09.2005 Beiträge: 6
|
Verfasst am: 06.10.2005, 14:52 Titel: |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 06.10.2005, 15:18 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
pGaR-Venom
Anmeldungsdatum: 25.09.2005 Beiträge: 6
|
Verfasst am: 06.10.2005, 15:59 Titel: |
|
|
@ 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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 06.10.2005, 17:15 Titel: |
|
|
pGaR-Venom hat Folgendes geschrieben: |
subs find ich scheiße
|
Deine Einstellung auch.
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 06.10.2005, 17:21 Titel: |
|
|
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  _________________ "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 |
|
 |
Thomas Antoni

Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 06.10.2005, 17:37 Titel: Wartezeiten NICHT mit SLEEP erzeugen |
|
|
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 |
|
 |
OdinX

Anmeldungsdatum: 29.07.2005 Beiträge: 253 Wohnort: SG Schweiz
|
Verfasst am: 06.10.2005, 22:47 Titel: |
|
|
ich habe für pausen immer PLAY "P64" genommen.
ist doch viel einfacher |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 07.10.2005, 08:56 Titel: |
|
|
Mag sein, aber mit TIMER kannst du alle möglichen Wartezeiten erzeugen.
jb |
|
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.
|
|