DECLARE SUB false.start () DECLARE SUB classes () DECLARE SUB speed.lane2 () DECLARE SUB speed.lane3 () DECLARE SUB speed.lane4 () DECLARE SUB set.names () DECLARE SUB init.vars () DECLARE SUB draw.main.setup () DECLARE SUB draw.main.race () DECLARE SUB start.race () DECLARE SUB sort () DECLARE SUB hall.off () DECLARE SUB fast.heat.time () DECLARE SUB save.results () DECLARE SUB points () DECLARE SUB race.end.screen () DECLARE SUB winner.laps () DECLARE SUB average.times () DECLARE SUB three.drivers () DECLARE SUB four.drivers () DECLARE SUB two.drivers () DECLARE SUB drawdigit (y1!, x1!, x2!, x3!, x4!, x5!, x6!) DECLARE SUB fastest.ever () DECLARE SUB todays.fastest () DECLARE SUB empty.lap.box () DECLARE SUB draw.lap.box () DECLARE SUB initboth () DECLARE SUB initcar4 () DECLARE SUB initcar3 () DECLARE SUB initcar2 () DECLARE SUB initcar1 () DECLARE SUB initcar12 () DECLARE SUB initcar13 () DECLARE SUB initcar14 () DECLARE SUB initcar23 () DECLARE SUB initcar24 () DECLARE SUB initcar34 () DECLARE SUB initcar123 () DECLARE SUB initcar124 () DECLARE SUB initcar134 () DECLARE SUB initcar234 () DECLARE SUB initcar1234 () 'DECLARE SUB both () DECLARE SUB car4 () DECLARE SUB car3 () DECLARE SUB car2 () DECLARE SUB car1 () DECLARE SUB speed.lane1 () '********************************************************************* '* AMS-Racing the SlotTrackTimer * '* programming continued on 03 november 1999 * '* (c)1999 by Arne Schober * '* aschober@deloitte.nl aschober@dolfijn.nl * '* WRITTEN IN QuickBasic * '********************************************************************* '* THE GOAL OF THIS PROGRAM IS TO TIME SLOTCARS ON A SLOTCAR TRACK * '* THIS CAN BE ANY TRACK TYPE. THIS PROGRAM READS THE PARALLEL PORT * '* -OF THE PC RUNNING THIS PROGRAM, THIS CAN BE ANY PC RUNNING DOS- * '* TO GET IT'S INFO WHEN A CARS IS PASSING THE START/FINISH. SO IT * '* NEEDS SOME HARDWARE TO GET THIS INFO TO THE PARALLEL PORT. * '* THE HARDWARE NEEDED IS VERY SIMPLY AND LOW COST. IT IS BUILD WITH * '* THE FOLLOWING COMPONENTS : 4 * LDR LIKE THE * '* 1 * AN IC THE LM324. A FEW RESISTORS AND 4 HIGHPOWER * '* RED LEDS OR HIGPOWER RED LEDS. * '* IT NEEDS A 5V POWER SUPPLY. THE SCHEMATICS ARE AVAILABLE. * '* * '* 3 NOV. 1998 MAKING PREPERATIONS TO RELEASE THIS PROGRAM TO THE * '* INTERNET COMMUNITY. IT WILL BE FREEWARE AND THIS SOURCE WILL BE * '* SUPPLIED. I ENCOURAGE EVERYONE TO USE THIS PROGRAM MODIFY IT ECT. * '* AND OFFCOURSE LET ME KNOW IF IT WORKS FOR YOU. I AM CURRENTLY * '* WORKING ON THE HARDWARE PICTURES FOR THE INTERNET. PLEASE EMAIL * '* ME WITH ANY QUESTIONS OR COMMENTS. * '********************************************************************* '* '* Tested with switches to the parallel port on 07 September 1998 '* Modified several Display positions, put in winner with laps at '* the end of the program. '* bug fixes on 15 september 1998 '* 11 October remove almost all goto end replace with subs '* added minimum-maximum laptime if smaller-bigger then laptime invalid '* found some more problems and corrected them 13 October 1998 '* Current version = 4 '* This is version 5, 15 October 1998, added grafical representation of the '* timing for fast lap and last lap. Ommited last three lap times. '* 16 Oct. 1998 added total race time in sec's '* added last 9 times, and save best times to file fast.txt 17 Oct. 1998 '* corrected some grafical positions ect.. 19 Oct. 1998 added fastest lap ever '* 27 Oct. Again fixed some bugs. Fasttoday and fastever works now oke. '* Final version of the hardware board is ready !!!! '* '* files created or used by this program : '* SECOND6.EXE : MAIN PROGRAM '* FAST.TXT : is the file that records al race data of every race '* FASTTEST.TXT : used to record the fasttest lap ever '* SECOND.INI : used to record driver names/car types/number of laps '* FIRSTSEC.INI : used for first use of program to record par port address ect. '* default firstsec.ini : 889 , 127 , 95 , 111 , 3.01 , 700 , 800 '* parport,parboth,parcar1,parcar2,small,holdoff,startwait '* '* VERSION 6 has arrived !!! changed the starting sequence, added menu '* items '* 2 Dec. 1998 Made seperate start and finnish screens, also changed '* timing to 100th of a second. Fixed some bugs. Made a sub for the '* graphical representation of the last and fast times. '* 6 Dec. added multi drivers competition on a 2 lan track '* it's now possible to race 2-3 or 4 drivers in a competition with '* points. 12 points for winning a heat, 3 points for the fastest lap '* during a heat, 2 points for the best average laptime during a heat '* 7 Dec. Testing the multi driver competition. '* added anti bounce if we get a laptime smaller then 1 sec. the '* program will ignore it totally. '* 11 dec 1998 added hall of fame, under menu option 9 '* every heat the results are saved to a random access file and '* sorted on fasttest laptime. '* Display average speed of each lane last lap '* Detects false start, penalty = 1 lap '* Detects the fastest starter, fastest start gives 2 points '* Total race time in hour/min/sec 22 Dec 1998 '* '* VERSION 8 has arrived !!! '* Made 4 lane timing possible. 01 Jul 1999 '* Driver names vissible when training '******************************************************************** 'Define variables TYPE highrecord field1 AS STRING * 10 ' initials 10 bytes field2 AS STRING * 6 ' lane 1 or lane 2 6 bytes field3 AS SINGLE ' fasttest lap time 4 bytes field4 AS SINGLE field5 AS STRING * 20 'Car type END TYPE COMMON SHARED savedtime1 AS SINGLE, points.driver1 AS INTEGER COMMON SHARED savedtime2 AS SINGLE, points.driver2 AS INTEGER, indicatorlane1 AS INTEGER COMMON SHARED savedtime3 AS SINGLE, indicatorlane3 AS INTEGER COMMON SHARED savedtime4 AS SINGLE, indicatorlane4 AS INTEGER COMMON SHARED starttime1 AS SINGLE, points.driver3 AS INTEGER, indicatorlane2 AS INTEGER COMMON SHARED starttime2 AS SINGLE, points.driver4 AS INTEGER COMMON SHARED starttime3 AS SINGLE COMMON SHARED starttime4 AS SINGLE COMMON SHARED lapscar1 AS INTEGER, lapscar2 AS INTEGER, lapscar3 AS INTEGER, lapscar4 AS INTEGER, startwait AS INTEGER COMMON SHARED status AS INTEGER, wacht AS INTEGER, einde AS INTEGER COMMON SHARED laptime1 AS SINGLE, laptime2 AS SINGLE, laptime3 AS SINGLE, laptime4 AS SINGLE, drawtime AS SINGLE COMMON SHARED time1 AS SINGLE, time2 AS SINGLE, time3 AS SINGLE, time4 AS SINGLE COMMON SHARED totallaps AS INTEGER, total.heats AS INTEGER, total.drivers AS INTEGER COMMON SHARED regelrechts AS INTEGER, regellinks AS INTEGER COMMON SHARED fastlap1 AS INTEGER, fastlap2 AS INTEGER, fastlaps3 AS INTEGER, fastlaps4 AS INTEGER, lenght AS INTEGER COMMON SHARED fasttime1 AS SINGLE, fasttime2 AS SINGLE, fasttime3 AS SINGLE, fasttime4 AS SINGLE, small AS SINGLE COMMON SHARED fasttoday1 AS SINGLE, fasttoday2 AS SINGLE, fasttoday3 AS SINGLE, fasttoday4 AS SINGLE, big AS SINGLE COMMON SHARED parport AS INTEGER, parboth AS INTEGER, parcar12 AS INTEGER, parcar13 AS INTEGER, parcar14 AS INTEGER, parcar23 AS INTEGER COMMON SHARED parcar24 AS INTEGER, parcar34 AS INTEGER, parcar123 AS INTEGER, parcar124 AS INTEGER, parcar134 AS INTEGER, parcar234 AS INTEGER, parcar1234 AS INTEGER COMMON SHARED parcar1 AS INTEGER, parcar2 AS INTEGER, parcar3 AS INTEGER, parcar4 AS INTEGER, savedseconden AS SINGLE COMMON SHARED init.check.car1 AS INTEGER, init.check.car2 AS INTEGER, init.check.car3 AS INTEGER, init.check.car4 AS INTEGER COMMON SHARED eerste AS STRING, tweede AS STRING, derde AS STRING, vierde AS STRING COMMON SHARED type1 AS STRING, type2 AS STRING, type3 AS STRING, type4 AS STRING COMMON SHARED average1 AS SINGLE, average2 AS SINGLE, average3 AS SINGLE, average4 AS SINGLE, updatetime AS SINGLE COMMON SHARED total.race.time1 AS SINGLE, total.race.time2 AS SINGLE, total.race.time3 AS SINGLE, total.race.time4 AS SINGLE, fast.start AS SINGLE COMMON SHARED savedupdate AS SINGLE, fast.start.time1 AS SINGLE, fast.start.time2 AS SINGLE, fast.start.time3 AS SINGLE, fast.start.time4 AS SINGLE start: KEY(1) ON ON KEY(1) GOSUB menu KEY(10) ON ON KEY(10) GOSUB pause total.heats = 1 CALL draw.main.setup next.heat: '---------RACE SCREEN-------------------- SCREEN 8, , 1, 1 '---------------------------------------- CALL set.names 'to set the names on the screen CALL init.vars CALL empty.lap.box CALL draw.lap.box CALL draw.main.race KEY(10) OFF ' F10 key of during race start CALL start.race 'race start sequence KEY(10) ON ' F10 Key on during race inittime = TIMER inittime2 = TIMER uren = 0 minuten = 0 seconden = 0 '---------------Race has started now lap counting and timing starts----- DO UNTIL lus = holdoff 'wacht lus, do not start detecting until loop is done lus = lus + 1 'wacht lus LOCATE 6, 42: PRINT "Hold Off Timer : "; lus 'wacht lus LOOP 'wacht lus total.heats = total.heats + 1 DO UNTIL einde = totallaps 'Do this until max lapcount 'einde = einde + 1 'WEGHALEN !!!!!!!!!!!!!!!!!!!!!!!!!!! status = INP(parport) IF status = parcar1 THEN CALL car1 'default = 208 IF status = parcar2 THEN CALL car2 'default = 224 IF status = parcar3 THEN CALL car3 'default = 200 IF status = parcar4 THEN CALL car4 'default = 64 'IF status = parcar12 THEN CALL car12 'default = 240 'IF status = parcar13 THEN CALL car13 'default = 216 'IF status = parcar14 THEN CALL car14 'default = 80 'IF status = parcar23 THEN CALL car23 'default = 232 'IF status = parcar24 THEN CALL car24 'default = 96 'IF status = parcar34 THEN CALL car34 'default = 72 'IF status = parcar123 THEN CALL car123 'default = 248 'IF status = parcar124 THEN CALL car124 'default = 112 'IF status = parcar134 THEN CALL car134 'default = 88 'IF status = parcar234 THEN CALL car234 'default = 104 'IF status = parcar1234 THEN CALL car1234 'deafult = 120 updatetime = (TIMER - inittime) + savedupdate seconden = (TIMER - inittime2) + savedseconden IF seconden > 59.91 THEN inittime2 = TIMER savedseconden = 0 seconden = 0 minuten = minuten + 1 END IF IF minuten = 60 THEN minuten = 0 uren = uren + 1 END IF LOCATE 7, 60: PRINT uren; ":"; minuten; ":"; USING "##.###"; seconden LOOP 'Loop naar de DO UNTIL totdat het ingestelde aantal ronden is bereikt '--------------------------einde race geluid------------------ freq = 400 dur = 1 DO UNTIL freq = 375 SOUND freq, dur freq = freq - 1 LOOP BEEP BEEP '************************************************************************* 'CALL race.end.screen 'draw the end screen with flags CALL average.times 'determines the average laptime for lane 1 and lane 2 CALL todays.fastest 'determines the fastest today laps and displays them CALL fastest.ever 'determines the fastest lap ever and displays it CALL fast.heat.time 'determine the fastest time during a heat CALL winner.laps 'display amount laps lane 1 and lan 2 and winner CALL points 'display the competion points standing CALL save.results 'this sub saves the competition data '------------------------------------------------------------------------ IF total.drivers = 2 THEN IF total.heats = 3 THEN opnieuw20$ = "N" again70: LOCATE 11, 54: PRINT " " LOCATE 9, 2: INPUT "Start a New AMS-Racing Competition ? (J/N) : ", opnieuw20$ IF opnieuw20$ = "J" OR opnieuw20$ = "j" THEN GOTO start ELSEIF opnieuw20$ = "N" OR opnieuw20$ = "n" THEN GOTO stoppen ELSE GOTO again70 END IF ELSE DO 'wait during results srceen for the user to LOOP WHILE INKEY$ = "" 'press a key CLS END IF END IF IF total.drivers = 3 THEN IF total.heats = 4 THEN opnieuw30$ = "N" again30: LOCATE 11, 54: PRINT " " LOCATE 9, 2: INPUT "Start a New SplitSecond Competition ? (J/N) : ", opnieuw30$ IF opnieuw30$ = "J" OR opnieuw30$ = "j" THEN GOTO start ELSEIF opnieuw30$ = "N" OR opnieuw30$ = "n" THEN GOTO stoppen ELSE GOTO again30 END IF ELSE DO LOOP WHILE INKEY$ = "" CLS END IF END IF IF total.drivers = 4 THEN IF total.heats = 4 THEN opnieuw$ = "N" again: LOCATE 11, 54: PRINT " " LOCATE 9, 2: INPUT "Start a New SplitSecond Competition ? (J/N) : ", opnieuw$ IF opnieuw$ = "J" OR opnieuw$ = "j" THEN GOTO start ELSEIF opnieuw$ = "N" OR opnieuw$ = "n" THEN GOTO stoppen ELSE GOTO again END IF ELSE DO LOOP WHILE INKEY$ = "" CLS END IF END IF GOTO next.heat '##################################################################### pause: savedseconden = seconden savedupdate = updatetime SCREEN 8, , 2, 2 CLS LINE (0, 0)-(639, 199), , B 'box LOCATE 10, 17: PRINT "THE RACE IS PAUSED" LOCATE 12, 17: PRINT "When you press any key the race will be resumed" LOCATE 13, 17: PRINT "with a restart of the lap you where in when you" LOCATE 14, 17: PRINT "paused the race. The race restart will be like a" LOCATE 15, 17: PRINT "normal start." LOCATE 17, 17: PRINT "PRESS ANY KEY TO RESUME THE RACE" DO LOOP WHILE INKEY$ = "" SCREEN 8, , 1, 1 LOCATE 5, 42: PRINT " " init.check.car1 = 0 init.check.car2 = 0 init.check.car3 = 0 init.check.car4 = 0 indicatorlane1 = 0 indicatorlane2 = 0 indicatorlane3 = 0 indicatorlane4 = 0 wacht = 0 CALL start.race inittime = TIMER inittime2 = TIMER inittime3 = TIMER inittime4 = TIMER RETURN menu: SCREEN 8, , 2, 2 CLS LINE (0, 0)-(639, 199), , B 'box LINE (1, 1)-(638, 198), 3, BF COLOR 15, 3 LOCATE 2, 20: PRINT "-----[ AMS-RACING MAIN MENU SCREEN ]-----" LINE (0, 20)-(639, 20) COLOR 15 LOCATE 4, 2: PRINT "1. Restart the Program" LOCATE 5, 2: PRINT "2. List contents of saved Races files on screen" LOCATE 6, 2: PRINT "3. Exit to DOS" LOCATE 7, 2: PRINT "4. Continue the Program" LOCATE 8, 2: PRINT "5. Enter the first time init sequence" LOCATE 9, 2: PRINT "6. Run program to test Parallel port setting and sensors" LOCATE 10, 2: PRINT "7. Practice Session" LOCATE 11, 2: PRINT "8. Reset Fastest Ever Laptime / Reset Hall Of Fame" LOCATE 12, 2: PRINT "9. Empty the saved races File / Display Hall Of Fame !" LOCATE 13, 2: PRINT "10. Delete 1 entry from the hall of fame" LOCATE 15, 2: INPUT "Please enter Selection : ", A$ SELECT CASE A$ CASE "1" SCREEN 8, , 1, 1 GOTO start CASE "2" printstop = 1 lastscreenline = 21 LOCATE 16, 2: PRINT "fast2.txt 2 drivers results/fast3.txt 3 drivers results" LOCATE 17, 2: PRINT "fast4.txt 4 drivers results" LOCATE 19, 2: INPUT "Enter Filename (fast2.txt/fast3.txt/fast4.txt) ? : ", filenaam$ OPEN filenaam$ FOR INPUT AS 1 DO WHILE NOT EOF(1) INPUT #1, A$ PRINT A$ printstop = printstop + 1 IF printstop = lastscreenline THEN COLOR 1 PRINT "Press Any key to continue (press -PrintScreen- to Print)" COLOR 15, 3 DO LOOP WHILE INKEY$ = "" lastscreenline = lastscreenline + 21 END IF LOOP CLOSE #1 COLOR PRINT "Press Any key to return to the menu (press -PrintScreen- to Print)" DO LOOP WHILE INKEY$ = "" GOTO menu CASE "3" END CASE "4" SCREEN 8, , 1, 1 RETURN CASE "5" CLS LOCATE 1, 10: PRINT " SplitSecond First time INIT sequence " LOCATE 2, 2: PRINT " The Previous Settings are : " OPEN "I", #1, "c:firstsec.ini" INPUT #1, parport, parcar1, parcar2, parcar3, parcar4, parcar12, parcar13, parcar14, parcar23, parcar24, parcar34, parcar123, parcar124 INPUT #1, parcar134, parcar234, parcar1234, small, holdoff, startwait, lenght CLOSE #1 LOCATE 4, 2: PRINT "Parallel port addres to use : "; parport LOCATE 5, 2: PRINT "Parallel port value if CAR1 is on sensors : "; parcar1 LOCATE 6, 2: PRINT "Parallel port value if CAR2 is on sensors : "; parcar2 LOCATE 7, 2: PRINT "Parallel port value if CAR3 is on sensors : "; parcar3 LOCATE 8, 2: PRINT "Parallel port value if CAR4 is on sensors : "; parcar4 LOCATE 9, 2: PRINT "Parallel port value CARS 1 & 2 are on sensors : "; parcar12 LOCATE 10, 2: PRINT "Parallel port value CARS 1 & 3 are on sensors : "; parcar13 LOCATE 11, 2: PRINT "Parallel port value CARS 1 & 4 are on sensors : "; parcar14 LOCATE 12, 2: PRINT "Parallel port value CARS 2 & 3 are on sensors : "; parcar23 LOCATE 13, 2: PRINT "Parallel port value CARS 2 & 4 are on sensors : "; parcar24 LOCATE 14, 2: PRINT "Parallel port value CARS 3 & 4 are on sensors : "; parcar34 LOCATE 15, 2: PRINT "Parallel port value CARS 1,2 & 3 are on sensors : "; parcar123 LOCATE 16, 2: PRINT "Parallel port value CARS 1,2 & 4 are on sensors : "; parcar124 LOCATE 17, 2: PRINT "Parallel port value CARS 1,3 & 4 are on sensors : "; parcar134 LOCATE 18, 2: PRINT "Parallel port value CARS 2,3 & 4 are on sensors : "; parcar234 LOCATE 19, 2: PRINT "Parallel port value if ALL CARS are on sensors : "; parcar1234 LOCATE 20, 2: PRINT "The fastest lap time for your track -0.3 seconds : "; small LOCATE 21, 2: PRINT "The number for the Hold off loop : "; holdoff LOCATE 22, 2: PRINT "The number for the wait time during the start : "; startwait LOCATE 23, 2: PRINT "The Lenght of the track in cm, needed for speed calc : "; lenght 'LOCATE 14, 2: PRINT "Possible Parrallel port addres in decimal 889 - 957" LOCATE 25, 2: INPUT "Parallel port addres to use (default 889) : ", parport LOCATE 25, 2: INPUT "Parallel port value if CAR1 is on sensors : "; parcar1 LOCATE 25, 2: INPUT "Parallel port value if CAR2 is on sensors : "; parcar2 LOCATE 25, 2: INPUT "Parallel port value if CAR3 is on sensors : "; parcar3 LOCATE 25, 2: INPUT "Parallel port value if CAR4 is on sensors : "; parcar4 LOCATE 25, 2: INPUT "Parallel port value CARS 1 & 2 are on sensors : "; parcar12 LOCATE 25, 2: INPUT "Parallel port value CARS 1 & 3 are on sensors : "; parcar13 LOCATE 25, 2: INPUT "Parallel port value CARS 1 & 4 are on sensors : "; parcar14 LOCATE 25, 2: INPUT "Parallel port value CARS 2 & 3 are on sensors : "; parcar23 LOCATE 25, 2: INPUT "Parallel port value CARS 2 & 4 are on sensors : "; parcar24 LOCATE 25, 2: INPUT "Parallel port value CARS 3 & 4 are on sensors : "; parcar34 LOCATE 25, 2: INPUT "Parallel port value CARS 1,2 & 3 are on sensors : "; parcar123 LOCATE 25, 2: INPUT "Parallel port value CARS 1,2 & 4 are on sensors : "; parcar124 LOCATE 25, 2: INPUT "Parallel port value CARS 1,3 & 4 are on sensors : "; parcar134 LOCATE 25, 2: INPUT "Parallel port value CARS 2,3 & 4 are on sensors : "; parcar234 LOCATE 25, 2: INPUT "Parallel port value if ALL CARS are on sensors : "; parcar1234 LOCATE 25, 2: INPUT "Give the fastest lap time for your track -0.3 seconds (default 3.01) : ", small LOCATE 25, 2: INPUT "Give a number for the Hold off loop (default 2000) : ", holdoff LOCATE 25, 2: INPUT "Give a number for the wait time during the start (default 2000) : ", startwait LOCATE 25, 2: INPUT "Give the Lenght of the track in cm, needed for speed calc (default 800) : ", lenght '---------------SAVE first time ini TO FILE Firstsec.ini-------------- IF parport = 0 THEN parport = 889 'IF parboth = 0 THEN parboth = 0 IF parcar1 = 0 THEN parcar1 = 208 IF parcar2 = 0 THEN parcar2 = 224 IF parcar3 = 0 THEN parcar3 = 200 IF parcar4 = 0 THEN parcar4 = 64 IF parcar12 = 0 THEN parcar12 = 240 IF parcar13 = 0 THEN parcar13 = 216 IF parcar14 = 0 THEN parcar14 = 80 IF parcar23 = 0 THEN parcar23 = 232 IF parcar24 = 0 THEN parcar24 = 96 IF parcar34 = 0 THEN parcar34 = 72 IF parcar123 = 0 THEN parcar123 = 248 IF parcar124 = 0 THEN parcar124 = 112 IF parcar134 = 0 THEN parcar134 = 88 IF parcar234 = 0 THEN parcar234 = 104 IF parcar1234 = 0 THEN parcar1234 = 120 IF small = 0 THEN small = 6.01 IF holdoff = 0 THEN holdoff = 500 IF startwait = 0 THEN startwait = 3600 IF lenght = 0 THEN lenght = 2200 OPEN "O", #1, "c:firstsec.ini" PRINT #1, parport; ","; parcar1; ","; parcar2; ","; parcar3; ","; parcar4; ","; parcar12; ","; parcar13; ","; parcar14; ","; parcar23; ","; parcar24; ","; parcar34; ","; parcar123; ","; parcar124; PRINT #1, parcar134; ","; parcar234; ","; parcar1234; ","; small; ","; holdoff; ","; startwait; ","; lenght; "" CLOSE #1 '---------------------------------------------------------------------- GOTO menu CASE "6" CLS DO testpar = INP(parport) LOCATE 2, 2: PRINT "STEP 1 - First block the sensor of your CAR1 and read value" LOCATE 3, 2: PRINT "STEP 2 - Then block the sensor of your CAR2 and read value" LOCATE 4, 2: PRINT "STEP 3 - Then block the sensor of your CAR3 and read value" LOCATE 5, 2: PRINT "STEP 4 - Then blocl the sensor of your CAR4 and read value" LOCATE 6, 2: PRINT "STEP 3 - Last block both sensors and read the value" LOCATE 8, 2: PRINT "!- The values should all be different, if not try another par port address" LOCATE 9, 2: PRINT "!- You can change the par port address with option 5 in the menu" COLOR 1 LOCATE 11, 2: PRINT "Value from Parallel port = ", testpar COLOR 15, 3 LOCATE 22, 2: PRINT "PRESS ANY KEY TO RETURN TO THE MENU" LOOP WHILE INKEY$ = "" GOTO menu '-----------------------------START PRACTICE CODE---------------------- CASE "7" KEY(10) OFF KEY(1) OFF restart.practice: CALL init.vars CLS KEY(2) ON KEY(3) ON ON KEY(2) GOSUB practice.over ON KEY(3) GOSUB restart.practice CALL set.names CALL empty.lap.box CALL draw.lap.box CALL draw.main.race COLOR 1 LINE (0, 0)-(639, 0) 'lijn boven titel COLOR 11 'licht groen vel PRINT "" COLOR 10 LOCATE 2, 2: PRINT "----[F2 to go RACE]------[PRACTICE SESSION ]------[F3 to restart PRACTICE]---" PRINT "" COLOR 1 'donker blauw LINE (0, 20)-(639, 20) 'lijn onder titel COLOR 15 'LOCATE 11, 21: PRINT "Fastest Today " 'LOCATE 11, 61: PRINT "Fastest Today " '---------------READ fastestever FROM FILE fastest.txt--------- OPEN "I", #1, "fasttest.txt" INPUT #1, fastever1 CLOSE #1 '-------------------------------------------------------------- IF fastever1 = 99.99 THEN LOCATE 4, 42: PRINT "Fastest Ever : No Time" ELSE LOCATE 4, 42: PRINT "Fastest Ever : " LOCATE 4, 57: PRINT USING "##.###"; fastever1 END IF LOCATE 8, 42: PRINT "Training " 'LOCATE 9, 64: PRINT "LANE 4" 'LOCATE 9, 54: PRINT "LANE 3" 'LOCATE 9, 74: PRINT "LANE 2" 'LOCATE 9, 34: PRINT "LANE 1" '------------------End draw main screen---------------------------- CALL start.race inittime = TIMER '---------------Race has started now lap counting and timing starts----- DO UNTIL lus = holdoff 'wacht lus, do not start detecting until loop is done lus = lus + 1 'wacht lus LOCATE 6, 42: PRINT "Hold Off Timer : "; lus 'wacht lus LOOP 'wacht lus DO WHILE (1) 'doe dit totdat F2 or F3 is pressed status = INP(parport) IF status = parcar1 THEN CALL car1 'default = 111 IF status = parcar2 THEN CALL car2 'default = 95 IF status = parcar3 THEN CALL car3 IF status = parcar4 THEN CALL car4 'IF status = parboth THEN CALL both 'default = 127 updatetime = (TIMER - inittime) LOCATE 7, 60: PRINT USING "###.##"; updatetime 'display the elapsed time on screen LOOP '--------------------------einde race geluid------------------ freq = 400 dur = 1 DO UNTIL freq = 375 SOUND freq, dur freq = freq - 1 LOOP BEEP BEEP practice.over: KEY(10) ON KEY(1) ON SCREEN 8, , 1, 1 GOTO start '-----------------------------END PRACTICE-------------------------- CASE "8" reset.time = 99.99 again13: LOCATE 16, 2: INPUT "Do you want to reset the Fastest time or the Hall of Fame (F/H) ? : ", Q$ IF Q$ = "F" OR Q$ = "f" THEN again10: LOCATE 16, 2: INPUT "Are you sure you want to reset the fastest ever laptime (y/n) ? : ", B$ IF B$ = "y" OR B$ = "Y" THEN OPEN "O", #1, "c:fasttest.txt" PRINT #1, reset.time CLOSE #1 GOTO menu ELSEIF B$ = "N" OR B$ = "n" THEN GOTO menu ELSE GOTO again10 END IF ELSEIF Q$ = "H" OR Q$ = "h" THEN DIM highscore AS highrecord 'RANDOMIZE TIMER nextrec = 1 highscore.field1 = "Arne" highscore.field2 = "Lane X" highscore.field3 = 100! highscore.field4 = 200! highscore.field5 = "VW Golf GTI" KILL "c:high.dat " OPEN "c:high.dat" FOR RANDOM AS #1 LEN = 128 DO PUT #1, nextrec, highscore nextrec = nextrec + 1 LOOP UNTIL nextrec = 13 CLOSE #1 GOTO menu ELSE GOTO again13: END IF CASE "9" again61: LOCATE 16, 2: INPUT "Display Hall of Fame or Empty save races files (D/E) ? : ", f$ IF f$ = "D" OR f$ = "d" THEN CALL hall.off GOTO menu ELSEIF f$ = "E" OR f$ = "e" THEN again60: LOCATE 16, 2: INPUT "Are you sure you want to EMPTY ALL the saved Races files (y/n) : ", c$ IF c$ = "y" OR c$ = "Y" THEN OPEN "A", #1, "c:fast2.txt" 'als fast.txt niet bestaat maak hem dan (anders krijg CLOSE #1 'je een fout melding bij kill KILL "c:fast2.txt" 'delete fast.txt OPEN "A", #1, "c:fast2.txt" 'maak een nieuwe lege fast.txt CLOSE #1 OPEN "A", #1, "c:fast3.txt" 'als fast.txt niet bestaat maak hem dan (anders krijg CLOSE #1 'je een fout melding bij kill KILL "c:fast3.txt" 'delete fast.txt OPEN "A", #1, "c:fast3.txt" 'maak een nieuwe lege fast.txt CLOSE #1 OPEN "A", #1, "c:fast4.txt" 'als fast.txt niet bestaat maak hem dan (anders krijg CLOSE #1 'je een fout melding bij kill KILL "c:fast4.txt" 'delete fast.txt OPEN "A", #1, "c:fast4.txt" 'maak een nieuwe lege fast.txt CLOSE #1 LOCATE 18, 2: PRINT "File is now Empty, Press Any key to return to the menu." DO LOOP WHILE INKEY$ = "" GOTO menu ELSEIF c$ = "n" OR c$ = "N" THEN GOTO menu ELSE GOTO again60 END IF ELSE GOTO again61 END IF CASE "10" LOCATE 16, 2: INPUT "Which entry do you want to delete from the hall of fame ? (1-10) : ", delnum OPEN "c:high.dat" FOR RANDOM AS #1 LEN = 128 highscore.field1 = "Arne" highscore.field2 = "Lane X" highscore.field3 = 100! highscore.field4 = 200! highscore.field5 = "VW Golf GTI" PUT #1, delnum, highscore CLOSE #1 CALL sort GOTO menu CASE ELSE GOTO menu END SELECT stoppen: END '---------------------EINDE PROGRAMMA--------------------------------- SUB average.times check.lap1 = 0 check.lap2 = 0 check.lap3 = 0 check.lap4 = 0 IF lapscar1 = 0 THEN 'om een divide by zero te voorkomen bij de lapscar1 = 1 'deling verderop check.lap1 = 1 END IF IF lapscar2 = 0 THEN lapscar2 = 1 check.lap2 = 1 END IF IF lapscar3 = 0 THEN lapscar3 = 1 check.lap3 = 1 END IF IF lapscar4 = 0 THEN lapscar4 = 1 END IF average1! = total.race.time1 / lapscar1 average2! = total.race.time2 / lapscar2 average3! = total.race.time3 / lapscar3 average4! = total.race.time4 / lapscar4 IF check.lap1 = 1 THEN 'if we changed the lapcar1 or lapscar2 from 0 lapscar1 = 0 ' to 1 to avoid divide by 0, we place them here END IF 'back to their orginal value of 0 IF check.lap2 = 1 THEN lapscar2 = 0 END IF IF check.lap3 = 1 THEN lapscar3 = 0 END IF IF check.lap4 = 1 THEN lapscar4 = 0 END IF IF average1 = 0! THEN average1 = 99.99 END IF IF average2 = 0! THEN average2 = 99.99 END IF IF average3 = 0! THEN average3 = 99.99 END IF IF average4 = 0! THEN average4 = 99.99 END IF IF total.drivers = 2 THEN IF (total.heats - 1) = 1 THEN LOCATE 18, 2: PRINT "Average laptime "; eerste$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; tweede$; " : "; USING "##.###"; average2! IF average1 < average2 THEN points.driver1 = points.driver1 + 2 END IF IF average2 < average1 THEN points.driver2 = points.driver2 + 2 END IF END IF IF (total.heats - 1) = 2 THEN LOCATE 18, 2: PRINT "Average laptime "; tweede$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; eerste$; " : "; USING "##.###"; average2! IF average1 < average2 THEN points.driver2 = points.driver2 + 2 END IF IF average2 < average1 THEN points.driver1 = points.driver1 + 2 END IF END IF END IF '###################################### IF total.drivers = 3 THEN IF (total.heats - 1) = 1 THEN LOCATE 18, 2: PRINT "Average laptime "; eerste$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; tweede$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; derde$; " : "; USING "##.###"; average3! IF average1 < average2 AND average1 < average3 THEN points.driver1 = points.driver1 + 2 END IF IF average2 < average1 AND average2 < average3 THEN points.driver2 = points.driver2 + 2 END IF IF average3 < average2 AND average3 < average1 THEN points.driver3 = points.driver3 + 2 END IF IF average4 < average3 AND average4 < average2 THEN points.driver4 = points.driver4 + 2 END IF END IF IF (total.heats - 1) = 2 THEN LOCATE 18, 2: PRINT "Average laptime "; tweede$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; derde$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; vierde$; " : "; USING "##.###"; average3! LOCATE 21, 2: PRINT "Average laptime "; vijfde$; " : "; USING "##.###"; average4! IF average1 < average2 AND average1 < average3 AND average1 < average4 THEN points.driver2 = points.driver2 + 2 END IF IF average2 < average1 AND average2 < average3 AND average2 < average4 THEN points.driver3 = points.driver3 + 2 END IF IF average3 < average1 AND average3 < average2 AND average3 < average4 THEN points.driver4 = points.driver4 + 2 END IF END IF IF (total.heats - 1) = 3 THEN LOCATE 18, 2: PRINT "Average laptime "; derde$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; eerste$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; tweede$; " : "; USING "##.###"; average3! IF average1 < average2 AND average1 < average3 THEN points.driver3 = points.driver3 + 2 END IF IF average2 < average1 AND average2 < average3 THEN points.driver1 = points.driver1 + 2 END IF IF average3 < average1 AND average3 < average2 THEN points.driver2 = points.driver2 + 2 END IF END IF END IF IF total.drivers = 4 THEN IF (total.heats - 1) = 1 THEN LOCATE 18, 2: PRINT "Average laptime "; eerste$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; tweede$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; derde$; " : "; USING "##.###"; average3! LOCATE 21, 2: PRINT "Average laptime "; vierde$; " : "; USING "##.###"; average4! IF average1 < average2 AND average1 < average3 AND average1 < average4 THEN points.driver1 = points.driver1 + 2 END IF IF average2 < average1 AND average2 < average3 AND average2 < average4 THEN points.driver2 = points.driver2 + 2 END IF IF average3 < average2 AND average3 < average1 AND average3 < average4 THEN points.driver3 = points.driver3 + 2 END IF IF average4 < average3 AND avergae4 < average2 AND average4 < average3 THEN points.driver4 = points.driver4 + 2 END IF END IF IF (total.heats - 1) = 2 THEN LOCATE 18, 2: PRINT "Average laptime "; derde$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; vierde$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; vijfde$; " : "; USING "##.###"; average3! LOCATE 21, 2: PRINT "Average laptime "; zesde$; " : "; USING "##.###"; average4! IF average1 < average2 AND average1 < average3 AND average1 < average4 THEN points.driver3 = points.driver3 + 2 END IF IF average2 < average1 AND average2 < average3 AND average2 < average4 THEN points.driver4 = points.driver4 + 2 END IF IF average3 < average2 AND average3 < average1 AND average3 < average4 THEN points.driver1 = points.driver1 + 2 END IF IF average4 < average3 AND average4 < average2 AND average4 < average1 THEN points.driver2 = points.driver2 + 2 END IF END IF IF (total.heats - 1) = 3 THEN LOCATE 18, 2: PRINT "Average laptime "; tweede$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; derde$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; vierde$; " : "; USING "##.###"; average3! LOCATE 21, 2: PRINT "Average laptime "; vijfde$; " : "; USING "##.###"; average4! IF average1 < average2 AND average1 < average3 AND average1 < average4 THEN points.driver2 = points.driver2 + 2 END IF IF average2 < average1 AND average2 < average3 AND average2 < average4 THEN points.driver3 = points.driver3 + 2 END IF IF average3 < average2 AND average3 < average1 AND average4 < average4 THEN points.driver4 = points.driver4 + 2 END IF IF average4 < average3 AND average4 < average4 AND average2 < average1 THEN points.driver1 = points.driver1 + 2 END IF END IF IF (total.heats - 1) = 4 THEN LOCATE 18, 2: PRINT "Average laptime "; eerste$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; derde$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; vijfde$; " : "; USING "##.###"; average3! LOCATE 21, 2: PRINT "Average laptime "; zevende$; " : "; USING "##.###"; average4! IF average1 < average2 AND average1 < average3 AND average1 < average4 THEN points.driver1 = points.driver1 + 2 END IF IF average2 < average1 AND average2 < average3 AND average2 < average4 THEN points.driver3 = points.driver3 + 2 END IF IF average3 < average2 AND average3 < average1 AND average3 < average4 THEN points.driver2 = points.driver2 + 2 END IF IF average4 < average3 AND average4 < average2 AND average4 < average1 THEN points.driver4 = points.driver4 + 2 END IF END IF IF (total.heats - 1) = 5 THEN LOCATE 18, 2: PRINT "Average laptime "; tweede$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; vierde$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; zesde$; " : "; USING "##.###"; average3! LOCATE 21, 2: PRINT "Average laptime "; achtste$; " : "; USING "##.###"; average4! IF average1 < average2 AND average1 < average3 AND average1 < average4 THEN points.driver2 = points.driver2 + 2 END IF IF average2 < average1 AND average2 < average3 AND average2 < average4 THEN points.driver4 = points.driver4 + 2 END IF IF average3 < average2 AND average3 < average1 AND average3 < average4 THEN points.driver1 = points.driver1 + 2 END IF IF average4 < average3 AND average4 < average2 AND average4 < average1 THEN points.driver3 = points.driver3 + 3 END IF END IF IF (total.heats - 1) = 6 THEN LOCATE 18, 2: PRINT "Average laptime "; eerste$; " : "; USING "##.###"; average1! LOCATE 19, 2: PRINT "Average laptime "; vierde$; " : "; USING "##.###"; average2! LOCATE 20, 2: PRINT "Average laptime "; zevende$; " : "; USING "##.###"; average3! LOCATE 21, 2: PRINT "Average laptime "; tiende$; " : "; USING "##.###"; average4! IF average1 < average2 AND average1 < average3 AND average1 < average4 THEN points.driver1 = points.driver1 + 2 END IF IF average2 < average1 AND average2 < average3 AND average2 < average4 THEN points.driver4 = points.driver4 + 2 END IF IF average3 < average2 AND average3 < average1 AND average3 < average4 THEN points.driver3 = points.driver3 + 2 END IF IF average4 < average3 AND average4 < average2 AND average4 < average1 THEN points.driver2 = points.driver2 + 2 END IF END IF END IF END SUB SUB both '------------BOTH CARS TIMING and PRINTING--------------------------- lapscar1 = lapscar1 + 1 'update lap counter for car 1 & 2 lapscar2 = lapscar2 + 1 lapscar3 = lapscar3 + 1 lapscar4 = lapscar4 + 1 IF lapscar1 > einde THEN ' einde = lapscar1 END IF IF lapscar2 > einde THEN ' einde = lapscar2 END IF IF lapscar3 > einde THEN einde = lapscar3 END IF IF lapscar4 > einde THEN einde = lapscar4 END IF time3! = TIMER 'read current time in time3 laptime1! = time3! - starttime1! 'car1 laptime laptime2! = time3! - starttime2! 'car2 laptime laptime3! = time3! - starttime3! 'car3 laptime laptime4! = time3! - starttime4! 'car4 laptime starttime1! = TIMER 'init starttimer car 1 for next lap starttime2! = TIMER 'init starttimer car 2 for next lap starttime3! = TIMER 'init starttimer car 3 for next lap starttime4! = TIMER 'init starttimer car 4 for next lap LOCATE 14, 21: PRINT lapscar1 'print lap car 1 LOCATE 14, 25: PRINT USING "##.### "; laptime1! 'print time car 1 LOCATE 14, 61: PRINT lapscar2 'print lap car 2 LOCATE 14, 66: PRINT USING "##.### "; laptime2! 'print time car 2 LOCATE 14, 41: PRINT lapscar3 'print lap car 3 LOCATE 14, 45: PRINT USING "##.### "; laptime3! 'print time car 3 LOCATE 14, 81: PRINT lapscar4 'print lap car 4 LOCATE 14, 86: PRINT USING "##.### "; laptime4! 'print time car 4 IF laptime1! < small OR laptime1! > 60.01 THEN GOTO skip5 IF savedtime1! >= laptime1! THEN 'car1 fast check 'this IF tries LOCATE 18, 21: PRINT lapscar1 'to figure out LOCATE 18, 25: PRINT USING "##.### "; laptime1! 'which lap time savedtime1! = laptime1! END IF 'was faster skip5: IF laptime2! < small OR laptime2! > 60.01 THEN GOTO skip6 IF savedtime2! >= laptime2! THEN 'car2 fast check LOCATE 18, 61: PRINT lapscar2 'to figure out LOCATE 18, 66: PRINT USING "##.### "; laptime2! 'which lap time savedtime2! = laptime2! END IF 'was faster skip6: IF laptime3! < small OR laptime3! > 60.01 THEN GOTO skip9 IF savedtime3! >= laptime3! THEN LOCATE 18, 41: PRINT lapscar3 LOCATE 18, 45: PRINT USING "##.### "; laptime3! savedtime3! = laptime3! END IF skip9: IF laptime4! < small OR laptime4! > 60.01 THEN GOTO skip10 IF savedtime4! >= laptime4! THEN LOCATE 18, 81: PRINT lapscar4 LOCATE 18, 86: PRINT USING "##.### "; laptime4! savedtime4! = laptime4! END IF skip10: ' IF regellinks = 24 THEN '3 laatste tijden op het beeld ' regellinks = 21 ' END IF 'LOCATE regellinks, 21: PRINT lapscar1 'display ronde 'LOCATE regellinks, 25: PRINT USING "##.### "; laptime1! 'regellinks = regellinks + 1 'schijf de regel 1 plaats door ' IF regelrechts = 24 THEN ' regelrechts = 21 ' END IF 'LOCATE regelrechts, 61: PRINT lapscar2 'LOCATE regelrechts, 66: PRINT USING "##.### "; laptime2! 'regelrechts = regelrechts + 1 'DO WHILE INP(889) = 0 'wacht tot beide auto weg zijn 'LOOP 'DO WHILE INP(889) = 152 'mocht car2 zijn blijven staan dan wacht 'LOOP 'DO WHILE INP(889) = 168 'mocht car1 zijn blijven staan dan wacht 'LOOP 'DO WHILE INP(889) = 200 'mocht car3 zijn blijven staan dan wacht 'LOOP 'DO WHILE INP(889) = 8 'mocht car4 zijn blijven staan dan wacht 'LOOP END SUB SUB car1 '-----------Car 1 timing and printing----------------------------- time1! = TIMER 'read current time in time1 laptime1! = (time1! - starttime1!) 'substract time1 from starttime1 IF laptime1! < 1! THEN GOTO invalid.time1 'filter out noise on sensors CALL speed.lane1 total.race.time1 = total.race.time1 + laptime1 lapscar1 = lapscar1 + 1 'update lap counter for car 1 IF lapscar1 > einde THEN ' einde = lapscar1 'zet einde gelijk aan aantal rondjes END IF 'gereden door car 1 starttime1! = TIMER 'init starttimer for next lap LOCATE 13, 16: PRINT lapscar1 'last lap number LINE (6, 106)-(94, 139), 3, BF 'box om te wissen drawtime = laptime1! CALL drawdigit(112, 7, 24, 41, 59, 76, 93) '----------------------------------------------------------------- IF laptime1! < small OR laptime1! > 60.01 THEN GOTO skip1 'PRINT FASTEST LAPTIME IF savedtime1! >= laptime1! THEN 'this IF tries fastlap1 = lapscar1 fasttime1! = laptime1! LOCATE 19, 16: PRINT fastlap1 'to figure out '---------------------------------------------------------------- LINE (6, 156)-(94, 189), 3, BF 'box om te wissen drawtime = fasttime1 CALL drawdigit(162, 7, 24, 41, 59, 76, 93) savedtime1! = laptime1! END IF 'was faster skip1: IF regellinks = 24 THEN '9 laatste tijden op het beeld regellinks = 15 END IF 'LOCATE regellinks, 27: PRINT lapscar1 'display ronde 'LOCATE regellinks, 32: PRINT USING "##.### "; laptime1! IF regellinks = 23 THEN GOTO nietdoen 'LOCATE regellinks + 1, 27: PRINT " ----------" 'print lege regel na laatste tijd nietdoen: regellinks = regellinks + 1 'schuif de regel 1 plaats door '----------------------------------------------------------------- DO WHILE INP(parport) = parcar1 'Testje om te kijken of we meerdere lees acties LOOP 'van de sensor kunnen vermijden '---------zit car2 ernaast ? zoja tel die dan ook gelijk------------ invalid.time1: '########################################################################## status = INP(parport) IF status = parboth THEN 'dan moet de car2 nu over de finish komen time2! = TIMER 'read current time in time2 laptime2! = (time2! - starttime2!) 'substract time1 from starttime2 IF laptime2 < 1! THEN GOTO invalid.time2 CALL speed.lane2 total.race.time2 = total.race.time2 + laptime2 lapscar2 = lapscar2 + 1 'update lap counter for car 2 IF lapscar2 > einde THEN einde = lapscar2 END IF starttime2! = TIMER 'init starttimer for next lap LOCATE 13, 36: PRINT lapscar2 LINE (166, 106)-(254, 139), 3, BF 'box om te wissen drawtime = laptime2! CALL drawdigit(112, 167, 184, 201, 219, 236, 253) IF laptime2! < small OR laptime2! > 60.01 THEN GOTO skip2 IF savedtime2! >= laptime2! THEN 'this IF tries fastlap2 = lapscar2 fasttime2! = laptime2! LOCATE 19, 36: PRINT fastlap2 'to figure out '---------------------------------------------------------------- LINE (166, 156)-(254, 189), 3, BF 'box om te wissen drawtime = fasttime2 CALL drawdigit(162, 167, 184, 201, 219, 236, 253) savedtime2! = laptime2! END IF 'was faster skip2: IF regelrechts = 24 THEN regelrechts = 15 END IF 'LOCATE regelrechts, 68: PRINT lapscar2 'LOCATE regelrechts, 73: PRINT USING "##.### "; laptime2! IF regelrechts = 23 THEN GOTO nietdoen1 'LOCATE regelrechts + 1, 68: PRINT " ----------" 'print lege regel na laatste tijd nietdoen1: regelrechts = regelrechts + 1 DO WHILE INP(parport) = parboth 'wacht tot de auto van de sensor af is LOOP DO WHILE INP(parport) = parcar2 LOOP status = INP(parport) END IF invalid.time2: '--------------------------------------------------------------- END SUB SUB car2 '-------------CAR 2 Timing and Printing---------------------------- time2! = TIMER 'read current time in time2 laptime2! = (time2! - starttime2!) 'substract time1 from starttime2 IF laptime2 < 1! THEN GOTO invalid.time3 CALL speed.lane2 total.race.time2 = total.race.time2 + laptime2 lapscar2 = lapscar2 + 1 'update lap counter for car 2 IF lapscar2 > einde THEN einde = lapscar2 END IF starttime2! = TIMER 'init starttimer for next lap LOCATE 13, 36: PRINT lapscar2 '----------------------------------------------------------------- LINE (166, 106)-(254, 139), 3, BF 'box om te wissen CAR2 LAST drawtime = laptime2 CALL drawdigit(112, 167, 184, 201, 219, 236, 253) IF laptime2! < small OR laptime2! > 60.01 THEN GOTO skip3 IF savedtime2! >= laptime2! THEN 'this IF tries fasttime2! = laptime2! fastlap2 = lapscar2 LOCATE 19, 36 : PRINT lapscar2 'to figure out '----------------------------------------------------------------- LINE (166, 156)-(254, 189), 3, BF 'box om te wissen CAR2 FAST drawtime = fasttime2 CALL drawdigit(162, 167, 184, 201, 219, 236, 253) savedtime2! = laptime2! END IF 'was faster skip3: IF regelrechts = 24 THEN regelrechts = 15 END IF 'LOCATE regelrechts, 68: PRINT lapscar2 'LOCATE regelrechts, 73: PRINT USING "##.### "; laptime2! IF regelrechts = 23 THEN GOTO nietdoen2 'LOCATE regelrechts + 1, 68: PRINT " ----------" 'print lege regel na laatste tijd nietdoen2: regelrechts = regelrechts + 1 DO WHILE INP(parport) = parcar2 'wacht tot de auto van de sensor af is LOOP invalid.time3: status = INP(parport) '------------------------------------------------------------------ IF status = parboth THEN time1! = TIMER 'read current time in time1 laptime1! = (time1! - starttime1!) 'substract time1 from starttime1 IF laptime1 < 1! THEN GOTO invalid.time4 'anti bounce rule CALL speed.lane1 total.race.time1 = total.race.time1 + laptime1 lapscar1 = lapscar1 + 1 'update lap counter for car 1 IF lapscar1 > einde THEN ' einde = lapscar1 'zet einde gelijk aan aantal rondjes END IF 'gereden door car 1 starttime1! = TIMER 'init starttimer for next lap LOCATE 13, 16: PRINT lapscar1 '----------------------------------------------------------------- LINE (6, 106)-(94, 139), 3, BF 'box om te wissen CAR1 LAST drawtime = laptime1 CALL drawdigit(112, 7, 24, 41, 59, 76, 93) IF laptime1! < small OR laptime1! > 60.01 THEN GOTO skip4 IF savedtime1! > laptime1! OR savedtime1! = laptime1! THEN 'this IF tries fasttime1! = laptime1! fastlap1 = lapscar1 LOCATE 19, 16: PRINT lapscar1 'to figure out '----------------------------------------------------------------- LINE (6, 156)-(94, 189), 3, BF 'box om te wissen CAR1 FAST drawtime = fasttime1 CALL drawdigit(162, 7, 24, 41, 59, 76, 93) savedtime1! = laptime1! END IF 'was faster '------------------------------------------------------------- skip4: IF regellinks = 24 THEN '3 laatste tijden op het beeld regellinks = 15 END IF 'LOCATE regellinks, 27: PRINT lapscar1 'display ronde 'LOCATE regellinks, 32: PRINT USING "##.### "; laptime1! IF regellinks = 23 THEN GOTO nietdoen3 'LOCATE regellinks + 1, 27: PRINT " ----------" 'print lege regel na laatste tijd nietdoen3: regellinks = regellinks + 1 'schuif de regel 1 plaats door DO WHILE INP(parport) = parboth 'Testje om te kijken of we meerdere lees acties LOOP 'van de sensor kunnen vermijden DO WHILE INP(parport) = parcar1 LOOP status = INP(parport) END IF invalid.time4: END SUB SUB car3 '-----------Car 1 timing and printing----------------------------- time1! = TIMER 'read current time in time1 laptime3! = (time1! - starttime3!) 'substract time1 from starttime3 IF laptime3! < 1! THEN GOTO invalid.time5 'filter out noise on sensors CALL speed.lane3 total.race.time3 = total.race.time3 + laptime3 lapscar3 = lapscar3 + 1 'update lap counter for car 1 IF lapscar3 > einde THEN ' einde = lapscar3 'zet einde gelijk aan aantal rondjes END IF 'gereden door car 3 starttime3! = TIMER 'init starttimer for next lap LOCATE 13, 56: PRINT lapscar3 'last lap number LINE (326, 106)-(414, 139), 3, BF 'box om te wissen drawtime = laptime3! CALL drawdigit(112, 327, 345, 361, 379, 396, 413) '----------------------------------------------------------------- IF laptime3! < small OR laptime3! > 60.01 THEN GOTO skip7 'PRINT FASTEST LAPTIME IF savedtime3! >= laptime3! THEN 'this IF tries fastlap3 = lapscar3 fasttime3! = laptime3! LOCATE 19, 56: PRINT fastlap3 'to figure out '---------------------------------------------------------------- LINE (326, 156)-(414, 189), 3, BF 'box om te wissen drawtime = fasttime3 CALL drawdigit(162, 327, 345, 362, 379, 396, 413) savedtime3! = laptime3! END IF 'was faster skip7: IF regellinks = 24 THEN '9 laatste tijden op het beeld regellinks = 15 END IF 'LOCATE regellinks, 47: PRINT lapscar3 'display ronde 'LOCATE regellinks, 52: PRINT USING "##.### "; laptime3! IF regellinks = 23 THEN GOTO nietdoen4 'LOCATE regellinks + 1, 47: PRINT " ----------" 'print lege regel na laatste tijd nietdoen4: regellinks = regellinks + 1 'schuif de regel 1 plaats door '----------------------------------------------------------------- DO WHILE INP(parport) = parcar3 'Testje om te kijken of we meerdere lees acties LOOP 'van de sensor kunnen vermijden '---------zit car4 ernaast ? zoja tel die dan ook gelijk------------ invalid.time5: '########################################################################## status = INP(parport) IF status = parboth THEN 'dan moet de car2 nu over de finish komen time4! = TIMER 'read current time in time2 laptime4! = (time4! - starttime4!) 'substract time1 from starttime2 IF laptime4 < 1! THEN GOTO invalid.time6 CALL speed.lane4 total.race.time4 = total.race.time4 + laptime4 lapscar4 = lapscar4 + 1 'update lap counter for car 2 IF lapscar4 > einde THEN einde = lapscar4 END IF starttime4! = TIMER 'init starttimer for next lap LOCATE 13, 76: PRINT lapscar4 LINE (486, 106)-(574, 139), 3, BF 'box om te wissen drawtime = laptime4! CALL drawdigit(112, 487, 504, 521, 539, 556, 573) IF laptime4! < small OR laptime4! > 60.01 THEN GOTO skip8 IF savedtime4! >= laptime4! THEN 'this IF tries fastlap4 = lapscar4 fasttime4! = laptime4! LOCATE 19, 76: PRINT fastlap4 'to figure out '---------------------------------------------------------------- LINE (486, 156)-(574, 189), 3, BF 'box om te wissen drawtime = fasttime4 CALL drawdigit(162, 487, 504, 521, 539, 556, 573) savedtime4! = laptime4! END IF 'was faster skip8: IF regelrechts = 24 THEN regelrechts = 15 END IF 'LOCATE regelrechts, 47: PRINT lapscar4 'LOCATE regelrechts, 52: PRINT USING "##.### "; laptime4! IF regelrechts = 23 THEN GOTO nietdoen5 'LOCATE regelrechts + 1, 47: PRINT " ----------" 'print lege regel na laatste tijd nietdoen5: regelrechts = regelrechts + 1 DO WHILE INP(parport) = parboth 'wacht tot de auto van de sensor af is LOOP DO WHILE INP(parport) = parcar3 LOOP status = INP(parport) END IF invalid.time6: '--------------------------------------------------------------- END SUB SUB car4 '-----------Car 4 timing and printing----------------------------- time1! = TIMER 'read current time in time1 laptime4! = (time1! - starttime4!) 'substract time1 from starttime3 IF laptime4! < 1! THEN GOTO invalid.time7 'filter out noise on sensors CALL speed.lane4 total.race.time4 = total.race.time4 + laptime4 lapscar4 = lapscar4 + 1 'update lap counter for car 1 IF lapscar4 > einde THEN ' einde = lapscar4 'zet einde gelijk aan aantal rondjes END IF 'gereden door car 4 starttime4! = TIMER 'init starttimer for next lap LOCATE 13, 76: PRINT lapscar4 'last lap number LINE (486, 106)-(574, 139), 3, BF 'box om te wissen drawtime = laptime4! CALL drawdigit(112, 487, 504, 521, 539, 556, 573) '----------------------------------------------------------------- IF laptime4! < small OR laptime4! > 60.01 THEN GOTO skip11 'PRINT FASTEST LAPTIME IF savedtime4! >= laptime4! THEN 'this IF tries fastlap4 = lapscar4 fasttime4! = laptime4! LOCATE 19, 76: PRINT fastlap4 'to figure out '---------------------------------------------------------------- LINE (486, 156)-(574, 189), 3, BF 'box om te wissen drawtime = fasttime4 CALL drawdigit(162, 487, 504, 521, 539, 556, 573) savedtime4! = laptime4! END IF 'was faster skip11: IF regellinks = 24 THEN '9 laatste tijden op het beeld regellinks = 15 END IF 'LOCATE regellinks, 67: PRINT lapscar4 'display ronde 'LOCATE regellinks, 72: PRINT USING "##.### "; laptime4! IF regellinks = 23 THEN GOTO nietdoen6 'LOCATE regellinks + 1, 67: PRINT " ----------" 'print lege regel na laatste tijd nietdoen6: regellinks = regellinks + 1 'schuif de regel 1 plaats door '----------------------------------------------------------------- DO WHILE INP(parport) = parcar4 'Testje om te kijken of we meerdere lees acties LOOP 'van de sensor kunnen vermijden '---------zit car4 ernaast ? zoja tel die dan ook gelijk------------ invalid.time7: '########################################################################## status = INP(parport) IF status = parboth THEN 'dan moet de car2 nu over de finish komen time3! = TIMER 'read current time in time2 laptime3! = (time3! - starttime3!) 'substract time1 from starttime2 IF laptime3 < 1! THEN GOTO invalid.time8 CALL speed.lane3 total.race.time3 = total.race.time3 + laptime3 lapscar3 = lapscar3 + 1 'update lap counter for car 2 IF lapscar3 > einde THEN einde = lapscar3 END IF starttime3! = TIMER 'init starttimer for next lap LOCATE 13, 56: PRINT lapscar3 LINE (326, 106)-(414, 139), 3, BF 'box om te wissen drawtime = laptime3! CALL drawdigit(112, 327, 344, 361, 379, 396, 413) IF laptime3! < small OR laptime3! > 60.01 THEN GOTO skip12 IF savedtime3! >= laptime3! THEN 'this IF tries fastlap3 = lapscar3 fasttime3! = laptime3! LOCATE 19, 56: PRINT fastlap3 'to figure out '---------------------------------------------------------------- LINE (326, 156)-(414, 189), 3, BF 'box om te wissen drawtime = fasttime3 CALL drawdigit(162, 327, 344, 361, 379, 396, 413) savedtime3! = laptime3! END IF 'was faster skip12: IF regelrechts = 24 THEN regelrechts = 15 END IF 'LOCATE regelrechts, 67: PRINT lapscar3 'LOCATE regelrechts, 72: PRINT USING "##.### "; laptime3! IF regelrechts = 23 THEN GOTO nietdoen7 'LOCATE regelrechts + 1, 67: PRINT " ----------" 'print lege regel na laatste tijd nietdoen7: regelrechts = regelrechts + 1 DO WHILE INP(parport) = parboth 'wacht tot de auto van de sensor af is LOOP DO WHILE INP(parport) = parcar4 LOOP status = INP(parport) END IF invalid.time8: '--------------------------------------------------------------- END SUB SUB draw.lap.box COLOR 1 LINE (5, 105)-(95, 140), 1, B LOCATE 13, 1: PRINT "[ LAST LAP ]" LINE (5, 155)-(95, 190), 1, B LOCATE 19, 1: PRINT "[ FAST LAP ]" LINE (165, 105)-(255, 140), 1, B LOCATE 13, 21: PRINT "[ LAST LAP ]" LINE (165, 155)-(255, 190), 1, B LOCATE 19, 21: PRINT "[ FAST LAP ]" LINE (325, 105)-(415, 140), 1, B LOCATE 13, 41: PRINT "[ LAST LAP ]" LINE (325, 155)-(415, 190), 1, B LOCATE 19, 41: PRINT "[ FAST LAP ]" LINE (485, 105)-(575, 140), 1, B LOCATE 13, 61: PRINT "[ LAST LAP ]" LINE (485, 155)-(575, 190), 1, B LOCATE 19, 61: PRINT "[ FAST LAP ]" LOCATE 7, 42: PRINT "Total Race Time : " COLOR 15, 3 END SUB SUB draw.main.race 'SCREEN 8, , 2, 2 '640x200 pixel 80x25 text 'CLS 'COLOR 1 LINE (0, 0)-(639, 199), , B 'lijn boven titel LINE (1, 1)-(638, 198), 3 'BF COLOR 11 'licht groen vel PRINT "" COLOR 10 LOCATE 2, 2: PRINT "----[F1 to go MENU]----------[AMS-RACING]---------[F10 PAUSE]---" PRINT "" COLOR 1 'donker blauw LINE (0, 20)-(639, 20) 'lijn onder titel COLOR 15 'LOCATE 11, 21: PRINT "Fastest Today " 'LOCATE 11, 61: PRINT "Fastest Today " '---------------READ fastestever FROM FILE fastest.txt--------- OPEN "I", #1, "c:fasttest.txt" INPUT #1, fastever1 CLOSE #1 '-------------------------------------------------------------- IF fastever1 = 99.99 THEN LOCATE 4, 42: PRINT "Fastest Ever : No Time" ELSE LOCATE 4, 42: PRINT "Fastest Ever : " LOCATE 4, 57: PRINT USING "##.###"; fastever1 END IF END SUB SUB draw.main.setup '-------------Drawing the Main Setup Screen-------------------------- SCREEN 8, , 2, 2 '640x200 pixel 80x25 text CLS LINE (0, 0)-(639, 199), , B 'white line box around screen LINE (1, 1)-(638, 198), 3, BF 'fill box cyan COLOR 15, 3 LOCATE 2, 18: PRINT "-----[ AMS-RACING MAIN SETUP SCREEN ]-----" LINE (0, 20)-(639, 20) 'line undertitle '-------------------READ FILE FIRSTSEC.INI to setup parallel port----- OPEN "I", #1, "firstsec.ini" INPUT #1, parport, parcar1, parcar2, parcar3, parcar4, parcar12, parcar13, parcar14, parcar23, parcar24, parcar34, parcar123, parcar124, paracr134, parcar234, parcar1234, small, holdoff, startwait, lenght CLOSE #1 '--------------------------------------------------------------------- 'LOCATE 4, 2: PRINT "What class will be driven ?" 'LOCATE 5, 2: PRINT "1. Smal" 'LOCATE 6, 2: PRINT "2. Touringcar" 'LOCATE 7, 2: PRINT "3. Breed" 'LOCATE 8, 2: PRINT "4. Formule 1" 'LOCATE 9, 2: PRINT "5. Klassiek" 'LOCATE 10, 2: PRINT "6. Vrij" 'LOCATE 12, 2: INPUT "Give your choise : ", amount 'SELECT CASE amount 'CASE 1 'CALL Smal 'CASE 2 'CALL Touringcar 'CASE 3 'CALL Breed 'CASE 4 'CALL Formule1 'CASE 5 'CALL Klassiek 'CASE 6 'CALL Vrij 'END SELECT LOCATE 4, 2: INPUT "How Many Drivers for this SplitSecond Competition (2/3/4) ? : ", amount SELECT CASE amount CASE 2 CALL two.drivers CASE 3 CALL three.drivers CASE 4 CALL four.drivers END SELECT END SUB SUB drawdigit (y1, x1, x2, x3, x4, x5, x6) plaats = 1 num4 = y1 'Y-AS hoogte '---------------------------------------------------------------- DO UNTIL plaats = 6 'lees x digits '---------------------------------------------------------------- IF plaats = 1 THEN 'eerste digit van laptime num3 = x1 'begin plaats cijfer X-as END IF '--------------------- IF plaats = 2 THEN 'plaats tweede digit van laptime num3 = x2 'begin plaats cijfer END IF '--------------------- IF plaats = 3 THEN 'plaats derde digit van laptime num3 = x3 'begin plaats cijfer X-as END IF IF plaats = 4 THEN 'plaats vierde digit van laptime num3 = x4 'begin plaats cijfer X-as END IF IF plaats = 5 THEN 'plaats vijfde digit van laptime num3 = x5 'begin plaats cijfer X-as END IF IF plaats = 6 THEN num3 = x6 'begin plaats cijfer X-as END IF '----------------------------------------------------------------- cijfertemp$ = STR$(drawtime!) cijfer$ = LTRIM$(cijfertemp$) cijfervar$ = (MID$(cijfer$, plaats, 1)) SELECT CASE cijfervar$ CASE "0" PSET (num3, num4) DRAW "R12 D16 L12 U 16" ' cijfer 0 CASE "1" PSET (num3, num4) DRAW "BR 5 G 3 BE 3 D 16 L 4 R 7" ' cijfer 1 CASE "2" PSET (num3, num4) DRAW "R 13 D 8 L 13 D 8 R 13" ' cijfer 2 CASE "3" PSET (num3, num4) DRAW "R 13 D 8 L 13 BR 13 D 8 L 13" 'cijfer 3 CASE "4" PSET (num3, num4) DRAW "BR9 G 9 R 12 BL 3 BD 7 U 9" ' cijfer 4 CASE "5" PSET (num3, num4) DRAW "R 13 BL 13 D 8 R 13 D 8 L 13" ' cijfer 5 CASE "6" PSET (num3, num4) DRAW "D 8 R 13 D 8 L 13 U 8" ' cijfer 6 CASE "7" PSET (num3, num4) DRAW "R 11 D 16 BU8 BL3 R 5" ' cijfer 7 CASE "8" PSET (num3, num4) DRAW "R 13 D 8 L 13 BR 13 D 8 L 13 U 15" ' cijfer 8 CASE "9" PSET (num3, num4) DRAW "R 13 D 16 BU 8 L 13 U 8" ' cijfer 9 CASE "." PSET (num3, num4) DRAW "BR 4 BD 16 L 3 U 3 R 3 D 3" 'als het de "." is END SELECT plaats = plaats + 1 LOOP END SUB SUB empty.lap.box LINE (11, 106)-(191, 139), 3, BF 'box om te wissen last lap links LINE (336, 106)-(516, 139), 3, BF 'box om te wissen last lap rechts LINE (661, 106)-(841, 139), 3, BF LINE (986, 106)-(1166, 139), 3, BF LINE (11, 156)-(191, 189), 3, BF 'box om te wissen fast lap links LINE (336, 156)-(516, 189), 3, BF 'box om te wissen fast lap rechts LINE (661, 156)-(841, 189), 3, BF LINE (986, 156)-(1166, 189), 3, BF LINE (1, 21)-(317, 77), 3, BF 'box om te wissen links boven LINE (321, 32)-(639, 77), 3, BF 'box om te wissen rechts boven LINE (641, 43)-(961, 77), 3, BF LINE (961, 54)-(1283, 77), 3, BF LINE (196, 90)-(317, 200), 3, BF 'box om te wissen LAST 9 laps links LINE (522, 90)-(639, 200), 3, BF 'box om te wissen LAST 9 laps rechts LINE (848, 90)-(961, 200), 3, BF LINE (1174, 90)-(1283, 200), 3, BF END SUB SUB false.start light.wait = TIMER DO WHILE test.time < 1.1 test.time = TIMER - light.wait status = INP(parport) IF status = parcar1 THEN LOCATE 5, 2: PRINT "False Start Lane 1, 1 lap penalty" CALL initcar1 lapscar1 = lapscar1 - 1 indicatorlane1 = 1 END IF IF status = parcar2 THEN LOCATE 6, 2: PRINT "False Start lane 2, 1 lap penalty" CALL initcar2 lapscar2 = lapscar2 - 1 indicatorlane2 = 1 END IF IF status = parcar3 THEN LOCATE 7, 2: PRINT "Fasle Start lane 3, 1 lap penalty" CALL initcar3 lapscar3 = lapscar3 - 1 indicatorlane3 = 1 END IF IF status = parcar4 THEN LOCATE 8, 2: PRINT "Fasle Start lane 4, 1 lap penalty" CALL initcar4 lapscar4 = lapscar4 - 1 indicatorlane4 = 1 END IF LOOP END SUB SUB fast.heat.time IF lapscar1 = 0! THEN 'when car1 completed no laps his fasttime is high fasttime1 = 99.99 END IF IF lapscar2 = 0! THEN 'when car 2 completed no laps his fasttime is high fasttime2 = 99.99 END IF IF lapscar3 = 0! THEN fasttime3 = 99.99 END IF IF lapscar4 = 0! THEN fasttime4 = 99.99 END IF IF fasttime1 = 0! THEN fasttime1 = 99.99 END IF IF fasttime2 = 0! THEN fasttime2 = 99.99 END IF IF fasttime3 = 0! THEN fasttime3 = 99.99 END IF IF fasttime4 = 0! THEN fasttime4 = 99.99 END IF '--------------------Points 2 driver competition--------------------- '3 points for the fastest lap in a heat IF total.drivers = 2 THEN ' lane 1 lane 2 IF (total.heats - 1) = 1 THEN 'first heat eerste against tweede IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; tweede$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; tweede$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver1 = points.driver1 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver2 = points.driver2 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver1 = points.driver1 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver2 = points.driver2 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; eerste$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; tweede$; " : "; USING "##.###"; fast.start.time2 END IF ' lane 1 lane 2 IF (total.heats - 1) = 2 THEN 'second heat tweede against eerste IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; tweede$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; tweede$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; eerste$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; eerste$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver2 = points.driver2 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver1 = points.driver1 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver2 = points.driver2 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver1 = points.driver1 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; eerste$; " : "; USING "##.###"; fast.start.time2 LOCATE 15, 2: PRINT "Fastest Start time "; tweede$; " : "; USING "##.###"; fast.start.time1 END IF END IF '----------------------points 3 drivers competition------------------ IF total.drivers = 3 THEN IF (total.heats - 1) = 1 THEN 'first heat eerste against tweede IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; tweede$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; tweede$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver1 = points.driver1 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver2 = points.driver2 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver1 = points.driver1 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver2 = points.driver2 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; eerste$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; tweede$; " : "; USING "##.###"; fast.start.time2 END IF ' lane 1 lane 2 IF (total.heats - 1) = 2 THEN 'second heat tweede against derde IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; tweede$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; tweede$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; derde$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; derde$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver2 = points.driver2 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver3 = points.driver3 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver2 = points.driver2 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver3 = points.driver3 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; tweede$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; derde$; " : "; USING "##.###"; fast.start.time2 END IF ' lane 1 lane 2 IF (total.heats - 1) = 3 THEN 'third heat derde against eerste IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; derde$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; derde$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; eerste$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; eerste$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver3 = points.driver3 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver1 = points.driver1 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver3 = points.driver3 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver1 = points.driver1 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; derde$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; eerste$; " : "; USING "##.###"; fast.start.time2 END IF END IF '----------------------points 4 drivers competition------------------ IF total.drivers = 4 THEN IF (total.heats - 1) = 1 THEN 'first heat eerste against tweede IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; tweede$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; tweede$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver1 = points.driver1 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver2 = points.driver2 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver1 = points.driver1 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver2 = points.driver2 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; eerste$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; tweede$; " : "; USING "##.###"; fast.start.time2 END IF ' lane 1 lane 2 IF (total.heats - 1) = 2 THEN 'second heat derde against vierde IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; derde$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; derde$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; vierde$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; vierde$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver3 = points.driver3 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver4 = points.driver4 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver3 = points.driver3 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver4 = points.driver4 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; derde$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; vierde$; " : "; USING "##.###"; fast.start.time2 END IF ' lane 1 lane 2 IF (total.heats - 1) = 3 THEN 'third heat tweede against derde IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; tweede$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; tweede$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; derde$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; derde$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver2 = points.driver2 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver3 = points.driver3 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver2 = points.driver2 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver3 = points.driver3 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; tweede$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; derde$; " : "; USING "##.###"; fast.start.time2 END IF ' lane 1 lane 2 IF (total.heats - 1) = 4 THEN 'first heat eerste against derde IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; derde$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; derde$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver1 = points.driver1 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver3 = points.driver3 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver1 = points.driver1 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver3 = points.driver3 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; eerste$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; derde$; " : "; USING "##.###"; fast.start.time2 END IF ' lane 1 lane 2 IF (total.heats - 1) = 5 THEN 'second heat tweede against vierde IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; tweede$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; tweede$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; vierde$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; vierde$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver2 = points.driver2 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver4 = points.driver4 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver2 = points.driver2 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver4 = points.driver4 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; tweede$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; vierde$; " : "; USING "##.###"; fast.start.time2 END IF ' lane 1 lane 2 IF (total.heats - 1) = 6 THEN 'six heat eerste against vierde IF fasttime1 = 99.99 THEN LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : No Time" ELSE LOCATE 16, 2: PRINT "fasttest time this heat "; eerste$; " lane 1 : "; USING "##.###"; fasttime1 END IF IF fasttime2 = 99.99 THEN LOCATE 17, 2: PRINT "fasttest time this heat "; vierde$; " lane 2 : No Time" ELSE LOCATE 17, 2: PRINT "fasttest time this heat "; vierde$; " lane 2 : "; USING "##.###"; fasttime2 END IF IF fasttime1 < fasttime2 THEN points.driver1 = points.driver1 + 3 END IF IF fasttime2 < fasttime1 THEN points.driver4 = points.driver4 + 3 END IF IF fast.start.time1 < fast.start.time2 THEN points.driver1 = points.driver1 + 2 END IF IF fast.start.time2 < fast.start.time1 THEN points.driver4 = points.driver4 + 2 END IF LOCATE 14, 2: PRINT "Fastest Start time "; eerste$; " : "; USING "##.###"; fast.start.time1 LOCATE 15, 2: PRINT "Fastest Start time "; vierde$; " : "; USING "##.###"; fast.start.time2 END IF END IF END SUB SUB fastest.ever IF fasttoday1 < fasttoday2 AND fasttoday1 < fasttoday3 AND fasttoday1 < fasttoday4 THEN fastever = fasttoday1 ELSE IF fasttoday2 < fasttoday3 AND fasttoday2 < fasttoday4 THEN fastever = fasttoday2 ELSE IF fasttoday3 < fasttoday4 THEN fastever = fasttoday3 ELSE fastever = fasttoday4 END IF END IF END IF '---------------READ fastestever FROM FILE fastest.txt-------------- OPEN "I", #1, "fasttest.txt" INPUT #1, fastever1 CLOSE #1 '------------------------------------------------------------------------ IF fastever = 0 THEN GOTO jump IF fastever1 > fastever THEN OPEN "O", #1, "fasttest.txt" PRINT #1, fastever CLOSE #1 END IF jump: '---------------READ fastestever FROM FILE fastest.txt-------------- OPEN "I", #1, "fasttest.txt" INPUT #1, fastever1 CLOSE #1 '------------------------------------------------------------------------ SCREEN 8, , 1, 2 LOCATE 4, 42: PRINT "Fastest Ever : " LOCATE 4, 57: PRINT USING "##.### "; fastever1 SCREEN 8, , 2, 2 LOCATE 23, 2: PRINT "Fastest Ever : " LOCATE 23, 17: PRINT USING "##.###"; fastever1 END SUB SUB four.drivers total.drivers = 4 points.driver1 = 0 points.driver2 = 0 points.driver3 = 0 points.driver4 = 0 LOCATE 4, 2: PRINT " " OPEN "I", #1, "c:second2.ini" INPUT #1, display.eerste$, display.type1$, display.tweede$, display.type2$, display.derde$, display.type3$, display.vierde$, display.type4$, display.totallaps CLOSE #1 LOCATE 4, 2: PRINT "First Driver : ", display.eerste$ 'default = CAR1 LOCATE 5, 2: PRINT "Car Type : ", display.type1$ 'default = No car type LOCATE 6, 2: PRINT "Second Driver : ", display.tweede$ 'default = CAR2 LOCATE 7, 2: PRINT "Car Type : ", display.type2$ 'default = No car type LOCATE 8, 2: PRINT "Thirth Driver : ", display.derde$ 'default = CAR3 LOCATE 9, 2: PRINT "Car Type : ", display.type3$ 'default = No car type LOCATE 10, 2: PRINT "Fourth Driver : ", display.vierde$ 'default = CAR4 LOCATE 11, 2: PRINT "Car Type : ", display.type4$ 'default = No car type LOCATE 12, 2: PRINT "No. Laps : ", display.totallaps 'default = 20 laps LOCATE 16, 2: PRINT "4 Races in this Splitsecond competition" LOCATE 18, 2: PRINT " LANE 1 LANE 2 LANE 3 LANE 4" LOCATE 20, 2: PRINT "Heat 1 : Driver 1 Driver 2 Driver 3 Driver 4" LOCATE 21, 2: PRINT "Heat 2 : Driver 3 Driver 4 Driver 2 Driver 1" LOCATE 22, 2: PRINT "Heat 3 : Driver 2 Driver 1 Driver 4 Driver 3" LOCATE 23, 2: PRINT "Heat 4 : Driver 4 Driver 3 Driver 1 Driver 2" again55: LOCATE 14, 2: INPUT "Use previous Settings (J/N) ? : ", answer$ IF answer$ = "J" OR answer$ = "j" THEN GOTO readfile2 ELSEIF answer$ = "N" OR answer$ = "n" THEN GOTO verdergaan55 ELSE GOTO again55 END IF readfile2: OPEN "I", #1, "second2.ini" INPUT #1, eerste$, type1$, tweede$, type2$, derde$, type3$, vierde$, type4$, totallaps CLOSE #1 GOTO verdergaan56 verdergaan55: LOCATE 4, 2: PRINT " " LOCATE 5, 2: PRINT " " LOCATE 6, 2: PRINT " " LOCATE 7, 2: PRINT " " LOCATE 8, 2: PRINT " " LOCATE 9, 2: PRINT " " LOCATE 10, 2: PRINT " " LOCATE 11, 2: PRINT " " LOCATE 12, 2: PRINT " " LOCATE 14, 2: PRINT " " LOCATE 4, 2: INPUT "First Driver : ", eerste$ 'default = CAR1 LOCATE 5, 2: INPUT "Car Type : ", type1$ 'default = No car type LOCATE 6, 2: INPUT "Second Driver : ", tweede$ 'default = CAR2 LOCATE 7, 2: INPUT "Car Type : ", type2$ 'default = No car type LOCATE 8, 2: INPUT "Thirth Driver : ", derde$ 'default = CAR3 LOCATE 9, 2: INPUT "Car type : ", type3$ 'default = No car type LOCATE 10, 2: INPUT "Fourth Driver : ", vierde$ 'default = CAR4 LOCATE 11, 2: INPUT "Car type : ", type4$ 'default = No car type LOCATE 12, 2: INPUT "No. Laps : ", totallaps 'default = 20 laps IF eerste$ = "" THEN eerste$ = "Arne" END IF IF type1$ = "" THEN type1$ = "No car type" END IF IF tweede$ = "" THEN tweede$ = "Maarten" END IF IF type2$ = "" THEN type2$ = "No car type" END IF IF derde$ = "" THEN derde$ = "CAR3" END IF IF type3$ = "" THEN type3$ = "No car type" END IF IF vierde$ = "" THEN vierde$ = "CAR4" END IF IF type4$ = "" THEN type4$ = "No car type" END IF IF totallaps = 0 THEN totallaps = 20 END IF '---------------SAVE INSTELLINGEN TO FILE second.ini-------------- OPEN "O", #1, "second2.ini" PRINT #1, eerste$; ","; type1$; ","; tweede$; ","; type2$; ","; derde$; ","; type3$; ","; vierde$; ","; type4$; ","; totallaps CLOSE #1 verdergaan56: END SUB SUB hall.off DIM highscore AS highrecord, highscore1 AS highrecord CLS LINE (0, 10)-(639, 10) LOCATE 1, 23: PRINT "[ AMS Racing Best Drivers ever ]" '----------------------sort the random access file high.dat------ cycle = 12 DO highrec = 12 nrec = 11 OPEN "c:high.dat" FOR RANDOM AS #1 DO GET #1, highrec, highscore 'LOCATE 20, 10: PRINT "highrec : ", highrec GET #1, nrec, highscore1 'LOCATE 21, 11: PRINT "nrec : ", nrec IF highscore.field3 < highscore1.field3 THEN PUT #1, nrec, highscore PUT #1, highrec, highscore1 END IF highrec = highrec - 1 nrec = nrec - 1 LOOP UNTIL nrec = 0 CLOSE #1 cycle = cycle - 1 LOOP UNTIL cycle = 0 '------------------print 10 records on screen ------- OPEN "c:high.dat" FOR RANDOM AS #1 recnum = 1 LOCATE 4, 2: PRINT " Name Lane Fastest lap Average lap Car Type" y = 6 x = 5 DO GET #1, recnum, highscore LOCATE y, x: PRINT highscore.field1 'name x = x + 13 LOCATE y, x: PRINT highscore.field2 'lane 6 characters x = x + 8 LOCATE y, x: PRINT USING "##.###"; highscore.field3 'fastest lap time x = x + 15 LOCATE y, x: PRINT USING "##.###"; highscore.field4 'average laptime x = x + 15 LOCATE y, x: PRINT highscore.field5 'car type recnum = recnum + 1 y = y + 1 x = 5 LOOP UNTIL recnum = 11 '----------------------------------------------------- CLOSE #1 FOR standnummer = 1 TO 10 y = 5 + standnummer LOCATE y, 1: PRINT standnummer NEXT LINE (0, 0)-(639, 199), , B LOCATE 23, 50: PRINT "press any key to continue" DO LOOP WHILE INKEY$ = "" END SUB SUB init.vars indicatorlane1 = 0 indicatorlane2 = 0 indicatorlane3 = 0 indicatorkane4 = 0 savedupdate = 0 savedseconden = 0 indicator = 0 total.race.time1 = 0! total.race.time2 = 0! total.race.time3 = 0! total.race.time4 = 0! init.check.car1 = 0 init.check.car2 = 0 init.check.car3 = 0 init.check.car4 = 0 regelrechts = 15 regellinks = 15 lus = 0 einde = 0 wacht = 0 savedtime1! = 65000.01 savedtime2! = 65000.01 savedtime3! = 65000.01 savedtime4! = 65000.01 lapscar1 = 0 lapscar2 = 0 lapscar3 = 0 lapscar4 = 0 END SUB SUB initboth ' ' IF status = 120 THEN 'If both cars over sensor start timer1 & 2 ' starttime1! = TIMER ' starttime2! = TIMER ' starttime3! = TIMER ' starttime4! = TIMER 'DO WHILE INP(889) = 120 ' ' LOOP ' END IF ' END SUB SUB initcar1 starttime1! = TIMER fast.start.time1 = TIMER - fast.start init.check.car1 = 1 DO WHILE INP(parport) = parcar1 LOOP status = INP(parport) IF status = parcar12 THEN 'car2 komt ook over start naast car1 starttime2! = TIMER fast.start.time2 = TIMER - fast.start init.check.car2 = 1 END IF DO WHILE INP(parport) = parcar12 LOOP DO WHILE INP(parport) = parcar2 LOOP DO WHILE INP(parport) = parcar3 LOOP DO WHILE INP(parport) = parcar4 LOOP DO WHILE INP(parport) = parcar13 LOOP END SUB SUB initcar12 IF status = 240 THEN 'If both cars over sensor start timer1 & 2 starttime1! = TIMER starttime2! = TIMER DO WHILE INP(889) = 240 LOOP END IF END SUB SUB initcar123 IF status = 248 THEN 'If both cars over sensor start timer1 & 2 starttime1! = TIMER starttime2! = TIMER starttime3! = TIMER DO WHILE INP(889) = 120 LOOP END IF END SUB SUB initcar1234 IF status = 120 THEN 'If both cars over sensor start timer1 & 2 starttime1! = TIMER starttime2! = TIMER starttime3! = TIMER starttime4! = TIMER DO WHILE INP(889) = 120 LOOP END IF END SUB SUB initcar124 IF status = 112 THEN 'If both cars over sensor start timer1 & 2 starttime1! = TIMER starttime2! = TIMER starttime4! = TIMER DO WHILE INP(889) = 112 LOOP END IF END SUB SUB initcar13 IF status = 216 THEN 'If both cars over sensor start timer1 & 2 starttime1! = TIMER starttime3! = TIMER DO WHILE INP(889) = 216 LOOP END IF END SUB SUB initcar134 IF status = 88 THEN 'If both cars over sensor start timer1 & 2 starttime1! = TIMER starttime3! = TIMER starttime4! = TIMER DO WHILE INP(889) = 88 LOOP END IF END SUB SUB initcar14 IF status = 80 THEN 'If both cars over sensor start timer1 & 2 starttime1! = TIMER starttime4! = TIMER DO WHILE INP(889) = 80 LOOP END IF END SUB SUB initcar2 'If car 2 is over sensor start timer2 starttime2! = TIMER fast.start.time2 = TIMER - fast.start init.check.car2 = 1 DO WHILE INP(parport) = parcar2 LOOP status = INP(parport) IF status = parboth THEN 'car1 komt ook over de start naast car2 starttime1! = TIMER starttime3! = TIMER starttime4! = TIMER fast.start.time1 = TIMER - fast.start fast.start.time3 = TIMER - fast.start fast.start.time4 = TIMER - fast.start init.check.car1 = 1 init.check.car3 = 1 init.check.car4 = 1 DO WHILE INP(parport) = parboth LOOP DO WHILE INP(parport) = parcar1 LOOP DO WHILE INP(parport) = parcar3 LOOP DO WHILE INP(parport) = parcar4 LOOP END IF END SUB SUB initcar23 IF status = 232 THEN 'If both cars over sensor start timer1 & 2 starttime2! = TIMER starttime3! = TIMER DO WHILE INP(889) = 232 LOOP END IF END SUB SUB initcar234 IF status = 104 THEN 'If both cars over sensor start timer1 & 2 starttime2! = TIMER starttime3! = TIMER starttime4! = TIMER DO WHILE INP(889) = 104 LOOP END IF END SUB SUB initcar24 IF status = 96 THEN 'If both cars over sensor start timer1 & 2 starttime2! = TIMER starttime4! = TIMER DO WHILE INP(889) = 120 LOOP END IF END SUB SUB initcar3 starttime3! = TIMER fast.start.time3 = TIMER - fast.start init.check.car3 = 1 DO WHILE INP(parport) = parcar3 LOOP status = INP(parport) IF status = parboth THEN 'car2 komt ook over start naast car1 starttime1! = TIMER starttime2! = TIMER starttime4! = TIMER fast.start.time1 = TIMER - fast.start fast.start.time2 = TIMER - fast.start fast.start.time4 = TIMER - fast.start init.check.car1 = 1 init.check.car2 = 1 init.check.car4 = 1 END IF DO WHILE INP(parport) = parboth LOOP DO WHILE INP(parport) = parcar2 LOOP DO WHILE INP(parport) = parcar1 LOOP DO WHILE INP(parport) = parcar4 LOOP END SUB SUB initcar34 IF status = 72 THEN 'If both cars over sensor start timer1 & 2 starttime3! = TIMER starttime4! = TIMER DO WHILE INP(889) = 72 LOOP END IF END SUB SUB initcar4 starttime4! = TIMER fast.start.time4 = TIMER - fast.start init.check.car4 = 1 DO WHILE INP(parport) = parcar4 LOOP status = INP(parport) IF status = parboth THEN 'car2 komt ook over start naast car1 starttime1! = TIMER starttime2! = TIMER starttime3! = TIMER fast.start.time1 = TIMER - fast.start fast.start.time2 = TIMER - fast.start fast.start.time3 = TIMER - fast.start init.check.car1 = 1 init.check.car2 = 1 init.check.car3 = 1 END IF DO WHILE INP(parport) = parboth LOOP DO WHILE INP(parport) = parcar2 LOOP DO WHILE INP(parport) = parcar1 LOOP DO WHILE INP(parport) = parcar3 LOOP END SUB SUB points IF total.drivers = 2 THEN LOCATE 16, 50: PRINT "Driver name --> Points" LOCATE 17, 50: PRINT "__________________________" LOCATE 19, 50: PRINT eerste$ LOCATE 19, 71: PRINT points.driver1 LOCATE 20, 50: PRINT tweede$ LOCATE 20, 71: PRINT points.driver2 END IF IF total.drivers = 3 THEN LOCATE 16, 50: PRINT "Driver name --> Points" LOCATE 17, 50: PRINT "__________________________" LOCATE 19, 50: PRINT eerste$ LOCATE 19, 71: PRINT points.driver1 LOCATE 20, 50: PRINT tweede$ LOCATE 20, 71: PRINT points.driver2 LOCATE 21, 50: PRINT derde$ LOCATE 21, 71: PRINT points.driver3 END IF IF total.drivers = 4 THEN LOCATE 16, 50: PRINT "Driver name --> Points" LOCATE 17, 50: PRINT "__________________________" LOCATE 19, 50: PRINT eerste$ LOCATE 19, 71: PRINT points.driver1 LOCATE 20, 50: PRINT tweede$ LOCATE 20, 71: PRINT points.driver2 LOCATE 21, 50: PRINT derde$ LOCATE 21, 71: PRINT points.driver3 LOCATE 22, 50: PRINT vierde$ LOCATE 22, 71: PRINT points.driver4 END IF END SUB SUB save.results DIM highscore AS highrecord IF total.drivers = 2 THEN IF (total.heats - 1) = 1 THEN OPEN "A", #1, "fast2.txt" PRINT #1, "2 DRIVERS COMPETITION HEAT 1 RESULTS "; DATE$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type1$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type2$ PRINT #1, "Average laptime "; eerste$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Average laptime "; tweede$; " over "; lapscar2; " laps was "; average2! PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = eerste$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type1$ PUT #1, 11, highscore highscore.field1 = tweede$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type2$ PUT #1, 12, highscore CLOSE #1 CALL sort END IF IF (total.heats - 1) = 2 THEN OPEN "A", #1, "fast2.txt" PRINT #1, "2 DRIVERS COMPETITION HEAT 2 RESULTS "; DATE$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type1$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type2$ PRINT #1, "Average laptime "; eerste$; " over "; lapscar2; " laps was "; average2! PRINT #1, "Average laptime "; tweede$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Points "; eerste$; " : "; points.driver1 PRINT #1, "Points "; tweede$; " : "; points.driver2 PRINT #1, "----------------------------------------------------------------" PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = eerste$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type1$ PUT #1, 11, highscore highscore.field1 = tweede$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type2$ PUT #1, 12, highscore CLOSE #1 CALL sort END IF END IF '-------------------------- IF total.drivers = 3 THEN IF (total.heats - 1) = 1 THEN OPEN "A", #1, "fast3.txt" PRINT #1, "3 DRIVERS COMPETITION HEAT 1 RESULTS "; DATE$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type1$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type2$ PRINT #1, "Best lap "; derde$; " was lap "; fastlap3; " time was "; fasttime3! PRINT #1, "Car type "; type3$ PRINT #1, "Average laptime "; eerste$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Average laptime "; tweede$; " over "; lapscar2; " laps was "; average2! PRINT #1, "Avergae laptime "; derde$; " over "; lapscar3; " laps was "; average3! PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = eerste$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type1$ PUT #1, 11, highscore highscore.field1 = tweede$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type2$ PUT #1, 12, highscore highscore.field1 = derde$ highscore.field2 = "lane 3" highscore.field3 = fasttime3 highscore.field4 = average3 highscore.field5 = type3$ PUT #1, 13, highscore CLOSE #1 CALL sort END IF IF (total.heats - 1) = 2 THEN OPEN "A", #1, "fast3.txt" PRINT #1, "3 DRIVERS COMPETITION HEAT 2 RESULTS "; DATE$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type2$ PRINT #1, "Best lap "; derde$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type2$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap3; " time was "; fasttime3! PRINT #1, "Car type "; type3$ PRINT #1, "Average laptime "; tweede$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Average laptime "; derde$; " over "; lapscar2; " laps was "; average2! PRINT #1, "Average laptime "; eerste$; " over "; lapscar3; " laps was "; average3! PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = tweede$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type2$ PUT #1, 11, highscore highscore.field1 = derde$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type3$ PUT #1, 12, highscore highscore.field1 = eerste$ highscore.field2 = "lane 3" highscore.field3 = fasttime3 highscore.field4 = average3 highscore.field5 = type1$ PUT #1, 13, highscore CLOSE #1 CALL sort END IF IF (total.heats - 1) = 3 THEN OPEN "A", #1, "fast3.txt" PRINT #1, "3 DRIVERS COMPETITION HEAT 3 RESULTS "; DATE$ PRINT #1, "Best lap "; derde$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type3$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type1$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap3; " time was "; fasttime3! PRINT #1, "Car type "; type2$ PRINT #1, "Average laptime "; derde$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Average laptime "; eerste$; " over "; lapscar2; " laps was "; average2! PRINT #1, "Average laptime "; tweede$; " over "; lapscar3; " laps was "; average3! PRINT #1, "Points "; eerste$; " : "; points.driver1 PRINT #1, "Points "; tweede$; " : "; points.driver2 PRINT #1, "Points "; derde$; " : "; points.driver3 PRINT #1, "----------------------------------------------------------------" PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = derde$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type3$ PUT #1, 11, highscore highscore.field1 = eerste$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type1$ PUT #1, 12, highscore highscore.field1 = tweede$ highscore.field2 = "lane 3" highscore.field3 = fasttime3 highscore.field4 = average3 highscore.field5 = type2$ PUT #1, 13, highscore CLOSE #1 CALL sort END IF END IF '----------------------------- IF total.drivers = 4 THEN IF (total.heats - 1) = 1 THEN OPEN "A", #1, "fast4.txt" PRINT #1, "4 DRIVERS COMPETITION HEAT 1 RESULTS "; DATE$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type1$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type2$ PRINT #1, "Best lap "; derde$; " was lap "; fastlap3; " time was "; fasttime3! PRINT #1, "Car type "; type3$ PRINT #1, "Best lap "; vierde$; " was lap "; fastlap4; " time was "; fasttime4! PRINT #1, "Car type "; type4$ PRINT #1, "Average laptime "; eerste$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Average laptime "; tweede$; " over "; lapscar2; " laps was "; average2! PRINT #1, "Average laptime "; derde$; " over "; lapscar3; " laps was "; average3! PRINT #1, "Average laptime "; vierde$; " over "; lapscar4; " laps was "; average4! PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = eerste$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type1$ PUT #1, 11, highscore highscore.field1 = tweede$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type2$ PUT #1, 12, highscore highscore.field1 = derde$ highscore.field2 = "lane 3" highscore.field3 = fasttime3 highscore.field4 = average3 highscore.field5 = type3$ PUT #1, 13, highscore highscore.field1 = vierde$ highscore.field2 = "lane 4" highscore.field3 = fasttime4 highscore.field4 = average4 highscore.field5 = type4$ PUT #1, 14, highscore CLOSE #1 CALL sort END IF IF (total.heats - 1) = 2 THEN OPEN "A", #1, "fast4.txt" PRINT #1, "4 DRIVERS COMPETITION HEAT 2 RESULTS "; DATE$ PRINT #1, "Best lap "; derde$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type3$ PRINT #1, "Best lap "; vierde$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type4$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap3; " time was "; fasttime3! PRINT #1, "Car type "; type4$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap4; " time was "; fasttime4! PRINT #1, "Car type "; type4$ PRINT #1, "Average laptime "; derde$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Average laptime "; vierde$; " over "; lapscar2; " laps was "; average2! PRINT #1, "Average laptime "; vierde$; " over "; lapscar3; " laps was "; average3! PRINT #1, "Average laptime "; vierde$; " over "; lapscar4; " laps was "; average4! PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = derde$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type3$ PUT #1, 11, highscore highscore.field1 = vierde$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type4$ PUT #1, 12, highscore highscore.field1 = tweede$ highscore.field2 = "lane 3" highscore.field3 = fasttime3 highscore.field4 = average3 highscore.field5 = type2$ PUT #1, 13, highscore highscore.field1 = eerste$ highscore.field2 = "lane 4" highscore.field3 = fasttime4 highscore.field4 = average4 highscore.field5 = type1$ PUT #1, 14, highscore CLOSE #1 CALL sort END IF IF (total.heats - 1) = 3 THEN OPEN "A", #1, "fast4.txt" PRINT #1, "4 DRIVERS COMPETITION HEAT 3 RESULTS "; DATE$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type2$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type3$ PRINT #1, "Best lap "; vierde$; " was lap "; fastlap3; " time was "; fasttime3! PRINT #1, "Car type "; type1$ PRINT #1, "Best lap "; derde$; " was lap "; fastlap4; " time was "; fasttime4! PRINT #1, "Car type "; type3$ PRINT #1, "Average laptime "; tweede$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Average laptime "; derde$; " over "; lapscar2; " laps was "; average2! PRINT #1, "Average laptime "; tweede$; " over "; lapscar3; " laps was "; average3! PRINT #1, "Average laptime "; derde$; " over "; lapscar4; " laps was "; average4! PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = tweede$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type2$ PUT #1, 11, highscore highscore.field1 = eerste$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type1$ PUT #1, 12, highscore highscore.field1 = vierde$ highscore.field2 = "lane 3" highscore.field3 = fasttime3 highscore.field4 = average3 highscore.field5 = type4$ PUT #1, 13, highscore highscore.field1 = derde$ highscore.field2 = "lane 4" highscore.field3 = fasttime4 highscore.field4 = average4 highscore.field5 = type3$ PUT #1, 14, highscore CLOSE #1 CALL sort END IF IF (total.heats - 1) = 4 THEN OPEN "A", #1, "fast4.txt" PRINT #1, "4 DRIVERS COMPETITION HEAT 4 RESULTS "; DATE$ PRINT #1, "Best lap "; vierde$; " was lap "; fastlap1; " time was "; fasttime1! PRINT #1, "Car type "; type1$ PRINT #1, "Best lap "; derde$; " was lap "; fastlap2; " time was "; fasttime2! PRINT #1, "Car type "; type3$ PRINT #1, "Best lap "; eerste$; " was lap "; fastlap3; " time was "; fasttime3! PRINT #1, "Car type "; type1$ PRINT #1, "Best lap "; tweede$; " was lap "; fastlap4; " time was "; fasttime4! PRINT #1, "Car type "; type2$ PRINT #1, "Average laptime "; vierde$; " over "; lapscar1; " laps was "; average1! PRINT #1, "Average laptime "; derde$; " over "; lapscar2; " laps was "; average2! PRINT #1, "Average laptime "; eerste$; " over "; lapscar3; " laps was "; average3! PRINT #1, "Average laptime "; tweede$; " over "; lapscar4; " laps was "; average4! PRINT #1, "Points "; eerste$; " : "; points.driver1 PRINT #1, "Points "; tweede$; " : "; points.driver2 PRINT #1, "Points "; derde$; " : "; points.driver3 PRINT #1, "Points "; vierde$; " : "; points.driver4 PRINT #1, "----------------------------------------------------------------" PRINT #1, "----------------------------------------------------------------" CLOSE #1 OPEN "high.dat" FOR RANDOM AS #1 highscore.field1 = vierde$ highscore.field2 = "lane 1" highscore.field3 = fasttime1 highscore.field4 = average1 highscore.field5 = type4$ PUT #1, 11, highscore highscore.field1 = derde$ highscore.field2 = "lane 2" highscore.field3 = fasttime2 highscore.field4 = average2 highscore.field5 = type3$ PUT #1, 12, highscore highscore.field1 = eerste$ highscore.field2 = "lane 3" highscore.field3 = fasttime3 highscore.field4 = average3 highscore.field5 = type1$ PUT #1, 13, highscore highscore.field1 = tweede$ highscore.field2 = "lane 4" highscore.field3 = fasttime4 highscore.field4 = average4 highscore.field5 = type2$ PUT #1, 14, highscore CLOSE #1 CALL sort END IF END IF END SUB SUB set.names IF total.drivers = 2 THEN LOCATE 11, 1: PRINT " " LOCATE 11, 21: PRINT " " LOCATE 11, 14: PRINT USING "##.###"; fasttoday1 LOCATE 11, 34: PRINT USING "##.###"; fasttoday2 IF total.heats = 1 THEN LOCATE 11, 1: COLOR 14, 3: PRINT eerste$ LOCATE 11, 21: COLOR 14, 3: PRINT tweede$ END IF IF total.heats = 2 THEN LOCATE 11, 1: COLOR 14, 3: PRINT tweede$ LOCATE 11, 21: COLOR 14, 3: PRINT eerste$ END IF END IF '-------------------------------------- IF total.drivers = 3 THEN LOCATE 11, 1: PRINT " " LOCATE 11, 21: PRINT " " LOCATE 11, 41: PRINT " " LOCATE 11, 61: PRINT " " LOCATE 11, 14: PRINT USING "##.###"; fasttoday1 LOCATE 11, 34: PRINT USING "##.###"; fasttoday2 LOCATE 11, 54: PRINT USING "##.###"; fasttoday3 LOCATE 11, 74: PRINT USING "##.###"; fasttoday4 IF total.heats = 1 THEN LOCATE 11, 1: COLOR 14, 3: PRINT eerste$ LOCATE 11, 21: COLOR 14, 3: PRINT tweede$ LOCATE 11, 41: COLOR 14, 3: PRINT derde$ END IF IF total.heats = 2 THEN LOCATE 11, 1: COLOR 14, 3: PRINT tweede$ LOCATE 11, 41: COLOR 14, 3: PRINT eerste$ LOCATE 11, 61: COLOR 14, 3: PRINT derde$ END IF IF total.heats = 3 THEN LOCATE 11, 21: COLOR 14, 3: PRINT derde$ LOCATE 11, 41: COLOR 14, 3: PRINT tweede$ LOCATE 11, 61: COLOR 14, 3: PRINT eerste$ END IF IF total.heats = 4 THEN LOCATE 11, 1: COLOR 14, 3: PRINT derde$ LOCATE 11, 21: COLOR 14, 3: PRINT eerste$ LOCATE 11, 61: COLOR 14, 3: PRINT tweede$ END IF END IF '--------------------------------------- IF total.drivers = 4 THEN LOCATE 11, 1: PRINT " " LOCATE 11, 21: PRINT " " LOCATE 11, 41: PRINT " " LOCATE 11, 61: PRINT " " LOCATE 11, 14: PRINT USING "##.###"; fasttoday1 LOCATE 11, 34: PRINT USING "##.###"; fasttoday2 LOCATE 11, 54: PRINT USING "##.###"; fasttoday3 LOCATE 11, 74: PRINT USING "##.###"; fasttoday4 IF total.heats = 1 THEN LOCATE 11, 1: COLOR 14, 3: PRINT eerste$ LOCATE 11, 21: COLOR 14, 3: PRINT tweede$ LOCATE 11, 41: COLOR 14, 3: PRINT derde$ LOCATE 11, 61: COLOR 14, 3: PRINT vierde$ END IF IF total.heats = 2 THEN LOCATE 11, 1: COLOR 14, 3: PRINT tweede$ LOCATE 11, 21: COLOR 14, 3: PRINT vierde$ LOCATE 11, 41: COLOR 14, 3: PRINT eerste$ LOCATE 11, 61: COLOR 14, 3: PRINT derde$ END IF IF total.heats = 3 THEN LOCATE 11, 1: COLOR 14, 3: PRINT vierde$ LOCATE 11, 21: COLOR 14, 3: PRINT derde$ LOCATE 11, 41: COLOR 14, 3: PRINT tweede$ LOCATE 11, 61: COLOR 14, 3: PRINT eerste$ END IF IF total.heats = 4 THEN LOCATE 11, 1: COLOR 14, 3: PRINT derde$ LOCATE 11, 21: COLOR 14, 3: PRINT eerste$ LOCATE 11, 41: COLOR 14, 3: PRINT vierde$ LOCATE 11, 41: COLOR 14, 3: PRINT tweede$ END IF ' ' IF total.heats = 5 THEN ' LOCATE 11, 2: COLOR 14, 3: PRINT tweede$ ' LOCATE 11, 42: COLOR 14, 3: PRINT vierde$ ' END IF ' ' ' IF total.heats = 6 THEN ' LOCATE 11, 1: COLOR 14, 3: PRINT eerste$ ' LOCATE 11, 21: COLOR 14, 3: PRINT vierde$ ' END IF END IF '------------------------------------------- END SUB SUB sort DIM highscore AS highrecord, highscore1 AS highrecord cycle = 12 DO highrec = 12 nrec = 11 OPEN "c:high.dat" FOR RANDOM AS #1 DO GET #1, highrec, highscore GET #1, nrec, highscore1 IF highscore.field3 < highscore1.field3 THEN PUT #1, nrec, highscore PUT #1, highrec, highscore1 END IF highrec = highrec - 1 nrec = nrec - 1 LOOP UNTIL nrec = 0 CLOSE #1 cycle = cycle - 1 LOOP UNTIL cycle = 0 END SUB SUB speed.lane1 lenght.km! = (lenght / 100) / 1000 temp.speed.sec = lenght.km / laptime1 'km per seconde temp.speed.min = temp.speed.sec * 60 'km per min average.speed.lane1 = temp.speed.min * 60 'km per hour LOCATE 4, 2: PRINT "Last lap speed lane 1 :" LOCATE 4, 26: PRINT USING "##.##"; average.speed.lane1 LOCATE 4, 32: PRINT "Km/H" END SUB SUB speed.lane2 lenght.km! = (lenght / 100) / 1000 temp.speed.sec = lenght.km / laptime2 'km per seconde temp.speed.min = temp.speed.sec * 60 'km per min average.speed.lane1 = temp.speed.min * 60 'km per hour LOCATE 5, 2: PRINT "Last lap speed lane 2 :" LOCATE 5, 26: PRINT USING "##.##"; average.speed.lane1 LOCATE 5, 32: PRINT "Km/H" END SUB SUB speed.lane3 lenght.km! = (lenght / 100) / 1000 temp.speed.sec = lenght.km / laptime3 'km per seconde temp.speed.min = temp.speed.sec * 60 'km per min average.speed.lane1 = temp.speed.min * 60 'km per hour LOCATE 6, 2: PRINT "Last lap speed lane 3 :" LOCATE 6, 26: PRINT USING "##.##"; average.speed.lane1 LOCATE 6, 32: PRINT "Km/H" END SUB SUB speed.lane4 lenght.km! = (lenght / 100) / 1000 temp.speed.sec = lenght.km / laptime4 'km per seconde temp.speed.min = temp.speed.sec * 60 'km per min average.speed.lane1 = temp.speed.min * 60 'km per hour LOCATE 7, 2: PRINT "Last lap speed lane 4 :" LOCATE 7, 26: PRINT USING "##.##"; average.speed.lane1 LOCATE 7, 32: PRINT "Km/H" END SUB SUB start.race restart.heat: LOCATE 9, 21: PRINT "LANE 2" LOCATE 9, 1: PRINT "LANE 1" LOCATE 9, 41: PRINT "LANE 3" LOCATE 9, 61: PRINT "LANE 4" '-------------------------Starting lights--------------------------- LOCATE 4, 1: PRINT " " LOCATE 5, 1: PRINT " " LOCATE 6, 1: PRINT " " LOCATE 7, 1: PRINT " " LOCATE 4, 5: PRINT "PRESS ANY KEY TO START RACE" WHILE INKEY$ = "" 'wait for user to press a key WEND LOCATE 4, 5: PRINT "STARTING LIGHTS WILL GO OFF" LOCATE 5, 5: PRINT "START WHEN LAST ONE GOES OUT !" LINE (30, 40)-(50, 55), 4, BF 'draw starting light 1 LINE (60, 40)-(80, 55), 4, BF 'draw starting light 2 LINE (90, 40)-(110, 55), 4, BF 'draw starting light 3 LINE (120, 40)-(140, 55), 4, BF 'draw starting light 4 LINE (150, 40)-(170, 55), 4, BF 'draw starting light 5 CALL false.start IF indicatorlane1 = 1 AND indicatorlane2 = 1 AND indicatorlane3 = 1 AND indicatorlane4 = 1 THEN GOTO false.start.continue LINE (30, 40)-(50, 55), 3, BF 'out starting light 1 CALL false.start IF indicatorlane1 = 1 AND indicatorlane2 = 1 AND indicatorlane3 = 1 AND indicatorlane4 = 1 THEN GOTO false.start.continue BEEP LINE (60, 40)-(80, 55), 3, BF 'out starting light 2 CALL false.start IF indicatorlane1 = 1 AND indicatorlane2 = 1 AND indicatorlane3 = 1 AND indicatorlane4 = 1 THEN GOTO false.start.continue BEEP LINE (90, 40)-(110, 55), 3, BF 'out starting light 3 CALL false.start IF indicatorlane1 = 1 AND indicatorlane2 = 1 AND indicatorlane3 = 1 AND indicatorlane4 = 1 THEN GOTO false.start.continue BEEP LINE (120, 40)-(140, 55), 3, BF 'out starting light 4 CALL false.start IF indicatorlane1 = 1 AND indicatorlane2 = 1 AND indicatorlane3 = 1 AND indicatorlane4 = 1 THEN GOTO false.start.continue BEEP LINE (150, 40)-(170, 55), 3, BF 'out starting light 5 COLOR 4 LOCATE 7, 10: PRINT "!!!!! START RACE !!!!!!!" COLOR 15 '*********************************************************************** '----------------------------------------------------------------------- '-------------------------Start Of race sequence--------------------- false.start.continue: fast.start = TIMER LOCATE 4, 5: PRINT " " LOCATE 5, 5: PRINT " " LOCATE 6, 5: PRINT " " LOCATE 7, 5: PRINT " " LINE (30, 40)-(50, 55), 3, BF 'out starting light 1 LINE (60, 40)-(80, 55), 3, BF 'out starting light 2 LINE (90, 40)-(110, 55), 3, BF 'out starting light 3 LINE (120, 40)-(140, 55), 3, BF 'out starting light 4 LINE (150, 40)-(170, 55), 3, BF 'out starting light 5 'LOCATE 9, 34: PRINT "L" DO WHILE (1) 'doe dit tot de auto's zijn gestart status = INP(parport) 'read parallel port LOCATE 5, 42: PRINT "Start Sequence" IF status = parcar1 THEN CALL initcar1 'default = 208 IF status = parcar2 THEN CALL initcar2 'default = 224 IF status = parcar3 THEN CALL initcar3 'default = 200 IF status = parcar4 THEN CALL initcar4 'default = 64 IF status = parcar12 THEN CALL initcar12 'default = 240 IF status = parcar13 THEN CALL initcar13 'default = 216 IF status = parcar14 THEN CALL initcar14 'default = 80 IF status = parcar23 THEN CALL initcar23 'default = 232 IF status = parcar24 THEN CALL initcar24 'default = 96 IF status = parcar34 THEN CALL initcar34 'default = 72 IF status = parcar123 THEN CALL initcar123 'default = 248 IF status = parcar124 THEN CALL initcar124 'default = 112 IF status = parcar134 THEN CALL initcar134 'default = 88 IF status = parcar234 THEN CALL initcar234 'default = 104 IF status = parcar1234 THEN CALL initcar1234 'default =120 IF init.check.car1 = 1 THEN 'did car1 start ? IF init.check.car2 = 1 THEN 'did car2 start ? IF init.check.car3 = 1 THEN 'did car3 start ? IF init.check.car4 = 1 THEN 'did car4 start ? LOCATE 5, 42: PRINT "ALL cars Started !" EXIT DO 'exit the do loop and go timing END IF END IF END IF END IF wacht = wacht + 1 LOCATE 5, 75: PRINT wacht IF wacht = startwait THEN 'if the time to start expired and IF init.check.car1 = 1 THEN 'if car1 started and IF init.check.car2 = 0 THEN 'if car2 didn't start and IF init.check.car3 = 0 THEN IF init.check.car4 = 0 THEN LOCATE 5, 42: PRINT "Car1 started, 2, 3 and 4 are slow" EXIT DO 'exit the do loop and go timing END IF END IF END IF END IF END IF IF wacht = startwait THEN IF init.check.car2 = 1 THEN IF init.check.car1 = 0 THEN IF init.check.car3 = 0 THEN IF init.check.car4 = 0 THEN LOCATE 5, 42: PRINT "Car2 started, 1, 3 and 4 are slow" EXIT DO 'exit the do loop and go timing END IF END IF END IF END IF END IF IF wacht = startwait THEN IF init.check.car3 = 1 THEN IF init.check.car4 = 0 THEN IF init.check.car1 = 0 THEN IF init.check.car2 = 0 THEN LOCATE 5, 42: PRINT "Car3 started, 1, 2 and 4 are slow" EXIT DO END IF END IF END IF END IF END IF IF wacht = startwait THEN IF init.check.car4 = 1 THEN IF init.check.car1 = 0 THEN IF init.check.car2 = 0 THEN IF init.check.car3 = 0 THEN LOCATE 5, 42: PRINT "Car4 started, 1, 2 and 3 are slow" EXIT DO END IF END IF END IF END IF END IF IF wacht = startwait THEN 'if the start time limit expired and IF init.check.car1 = 0 THEN 'if car1 didn't start and IF init.check.car2 = 0 THEN 'if car2 didn't start then IF init.check.car3 = 0 THEN IF init.check.car4 = 0 THEN LOCATE 5, 42: PRINT "START ABORTED -TIME LIMIT-" again20: LOCATE 6, 42: INPUT "PRESS (R) KEY TO RESTART ", c$ IF c$ = "R" OR c$ = "r" THEN CALL init.vars CALL empty.lap.box CALL draw.lap.box 'CALL draw.main.race GOTO restart.heat ELSE GOTO again20: END IF END IF END IF END IF END IF END IF LOOP 'Start sequence loop statement IF indicatorlane1 = 1 THEN fast.start.time1 = 99.999 IF indicatorlane2 = 1 THEN fast.start.time2 = 99.999 IF indicatorlane3 = 1 THEN fast.start.time3 = 99.999 IF indicatorkane4 = 1 THEN fast.start.time4 = 99.999 LOCATE 4, 2: PRINT "Start time lane 1 : "; USING "##.###"; fast.start.time1 LOCATE 5, 2: PRINT "Start time lane 2 : "; USING "##.###"; fast.start.time2 LOCATE 6, 2: PRINT "Start time lane 3 : "; USING "##.###"; fast.start.time3 LOCATE 7, 2: PRINT "Start time lane 4 : "; USING "##.###"; fast.start.time4 LOCATE 8, 2: PRINT " " 'wis !!!START RACE!!! text LOCATE 4, 2: PRINT " " LOCATE 5, 2: PRINT " " LOCATE 6, 2: PRINT " " 'wis false start message LOCATE 7, 2: PRINT " " 'wis false start message LOCATE 8, 2: PRINT " " 'wis false start message END SUB SUB three.drivers total.drivers = 3 points.driver1 = 0 points.driver2 = 0 points.driver3 = 0 LOCATE 4, 2: PRINT " " OPEN "I", #1, "second1.ini" INPUT #1, display.eerste$, display.type1$, display.tweede$, display.type2$, display.derde$, display.type3$, display.totallaps CLOSE #1 LOCATE 4, 2: PRINT " " LOCATE 4, 2: PRINT "First Driver : ", display.eerste$ 'default = CAR1 LOCATE 5, 2: PRINT "Car Type : ", display.type1$ 'default = No car type LOCATE 6, 2: PRINT "Second Driver : ", display.tweede$ 'default = CAR2 LOCATE 7, 2: PRINT "Car Type : ", display.type2$ 'default = No car type LOCATE 8, 2: PRINT "Thirth Driver : ", display.derde$ 'default = CAR3 LOCATE 9, 2: PRINT "Car Type : ", display.type3$ 'default = No car type LOCATE 10, 2: PRINT "No. Laps : ", display.totallaps 'default = 20 laps LOCATE 14, 2: PRINT "4 heats in this SplitSecond Competition" LOCATE 16, 2: PRINT " LANE 1 LANE 2 LANE 3 LANE 4" LOCATE 17, 2: PRINT "Heat 1 : Driver 1 Driver 2 Driver 3" LOCATE 18, 2: PRINT "Heat 2 : Driver 2 Driver 1 Driver 3" LOCATE 19, 2: PRINT "Heat 3 : Driver 3 Driver 2 Driver 1" LOCATE 20, 2: PRINT "Heat 4 : Driver 3 Driver 1 Driver 2" again50: LOCATE 12, 2: INPUT "Use previous Settings (J/N) ? : ", answer$ IF answer$ = "J" OR answer$ = "j" THEN GOTO readfile1 ELSEIF answer$ = "N" OR answer$ = "n" THEN GOTO verdergaan50 ELSE GOTO again50 END IF readfile1: OPEN "I", #1, "second1.ini" INPUT #1, eerste$, type1$, tweede$, type2$, derde$, type3$, totallaps CLOSE #1 GOTO verdergaan51 verdergaan50: LOCATE 4, 2: PRINT " " LOCATE 5, 2: PRINT " " LOCATE 6, 2: PRINT " " LOCATE 7, 2: PRINT " " LOCATE 8, 2: PRINT " " LOCATE 9, 2: PRINT " " LOCATE 10, 2: PRINT " " LOCATE 12, 2: PRINT " " LOCATE 4, 2: INPUT "First Driver : ", eerste$ 'default = Arne LOCATE 5, 2: INPUT "Car Type : ", type1$ 'default = No car type LOCATE 6, 2: INPUT "Second Driver : ", tweede$ 'default = Maarten LOCATE 7, 2: INPUT "Car Type : ", type2$ 'default = No car type LOCATE 8, 2: INPUT "Thirth Driver : ", derde$ 'default = CAR3 LOCATE 9, 2: INPUT "Car type : ", type3$ 'default = No car type LOCATE 10, 2: INPUT "No. Laps : ", totallaps 'default = 20 laps IF eerste$ = "" THEN eerste$ = "Arne" END IF IF type1$ = "" THEN type1$ = "No car type" END IF IF tweede$ = "" THEN tweede$ = "Maarten" END IF IF type2$ = "" THEN type2$ = "No car type" END IF IF derde$ = "" THEN derde$ = "CAR3" END IF IF type3$ = "" THEN type3$ = "No car type" END IF IF totallaps = 0 THEN totallaps = 20 END IF '---------------SAVE INSTELLINGEN TO FILE second.ini-------------- OPEN "O", #1, "second1.ini" PRINT #1, eerste$; ","; type1$; ","; tweede$; ","; type2$; ","; derde$; ","; type3$; ","; totallaps CLOSE #1 verdergaan51: END SUB SUB todays.fastest IF fasttoday1 = 0! THEN 'find out fastest time set today fasttoday1 = 99.99 'this time is not used for points END IF 'it's just an indication what the 'fasttest laptime was today for each IF fasttoday2 = 0! THEN 'lane. fasttoday2 = 99.99 END IF IF fasttoday3 = 0! THEN fasttoday3 = 99.99 END IF IF fasttoday4 = 0! THEN fasttoday4 = 99.99 END IF IF fasttime1 <= fasttoday1 THEN fasttoday1 = fasttime1 END IF IF fasttime2 <= fasttoday2 THEN fasttoday2 = fasttime2 END IF IF fasttime3 <= fasttoday3 THEN fasttoday3 = fasttime3 END IF IF fasttime4 <= fasttoday4 THEN fasttoday4 = fasttime4 END IF END SUB SUB two.drivers total.drivers = 2 points.driver1 = 0 points.driver2 = 0 LOCATE 4, 2: PRINT " " again1: OPEN "I", #1, "second.ini" INPUT #1, display.eerste$, display.type1$, display.tweede$, display.type2$, display.totallaps, display.klasses$ CLOSE #1 LOCATE 4, 2: PRINT "First Driver : ", display.eerste$ 'default = CAR1 LOCATE 5, 2: PRINT "Car Type : ", display.type1$ 'default = No car type LOCATE 6, 2: PRINT "Second Driver : ", display.tweede$ 'default = CAR2 LOCATE 7, 2: PRINT "Car Type : ", display.type2$ 'default = No car type LOCATE 8, 2: PRINT "No. Laps : ", display.totallaps 'default = 20 laps LOCATE 9, 2: PRINT "Class : ", display.klasses$ 'default = Touringcar LOCATE 12, 2: PRINT "2 Heats in this Splitsecond competition" LOCATE 14, 2: PRINT " LANE 1 LANE 2" LOCATE 16, 2: PRINT "Heat 1 : Driver 1 Driver 2" LOCATE 17, 2: PRINT "Heat 2 : Driver 2 Driver 1" LOCATE 10, 2: INPUT "Use previous Settings (J/N) ? : ", answer$ IF answer$ = "J" OR answer$ = "j" THEN GOTO readfile ELSEIF answer$ = "N" OR answer$ = "n" THEN GOTO verdergaan ELSE GOTO again1 END IF readfile: OPEN "I", #1, "second.ini" INPUT #1, eerste$, type1$, tweede$, type2$, totallaps, klasses$ CLOSE #1 GOTO verdergaan1 verdergaan: LOCATE 4, 2: PRINT " " LOCATE 5, 2: PRINT " " LOCATE 6, 2: PRINT " " LOCATE 7, 2: PRINT " " LOCATE 8, 2: PRINT " " LOCATE 9, 2: PRINT " " LOCATE 10, 2: PRINT " " LOCATE 4, 2: INPUT "First Driver : ", eerste$ 'default = Arne LOCATE 5, 2: INPUT "Car Type : ", type1$ 'default = No car type LOCATE 6, 2: INPUT "Second Driver : ", tweede$ 'default = Maarten LOCATE 7, 2: INPUT "Car Type : ", type2$ 'default = No car type LOCATE 8, 2: INPUT "No. Laps : ", totallaps 'default = 20 laps LOCATE 9, 2: INPUT "Class : ", klasses$ 'default = Touringcar LOCATE 8, 2: PRINT " " IF eerste$ = "" THEN eerste$ = "Arne" END IF IF type1$ = "" THEN type1$ = "No car type" END IF IF tweede$ = "" THEN tweede$ = "Maarten" END IF IF type2$ = "" THEN type2$ = "No car type" END IF IF totallaps = 0 THEN totallaps = 20 END IF IF klasses$ = "" THEN klasses$ = "Touringcar" END IF '---------------SAVE INSTELLINGEN TO FILE second.ini-------------- OPEN "O", #1, "second.ini" PRINT #1, eerste$; ","; type1$; ","; tweede$; ","; type2$; ","; totallaps; klasses$; "," CLOSE #1 verdergaan1: END SUB SUB winner.laps IF total.drivers = 2 THEN IF (total.heats - 1) = 1 THEN LOCATE 20, 2: PRINT "Total Laps "; eerste$; " "; lapscar1 LOCATE 21, 2: PRINT "Total Laps "; tweede$; " "; lapscar2 COLOR 14 IF lapscar1 > lapscar2 THEN LOCATE 22, 2: PRINT "The Winner : "; eerste$; " with "; (lapscar1 - lapscar2); " laps." points.driver1 = points.driver1 + 12 ELSE LOCATE 22, 2: PRINT "The Winner : "; tweede$; " with "; (lapscar2 - lapscar1); " laps." points.driver2 = points.driver2 + 12 END IF END IF IF (total.heats - 1) = 2 THEN LOCATE 20, 2: PRINT "Total Laps "; tweede$; " "; lapscar1 LOCATE 21, 2: PRINT "Total Laps "; eerste$; " "; lapscar2 COLOR 14 IF lapscar1 > lapscar2 THEN LOCATE 22, 2: PRINT "The Winner : "; tweede$; " with "; lapscar1; " laps." points.driver2 = points.driver2 + 12 ELSE LOCATE 22, 2: PRINT "The Winner : "; eerste$; " with "; lapscar2; " laps." points.driver1 = points.driver1 + 12 END IF END IF END IF '------------------------------------------------------------- IF total.drivers = 3 THEN IF (total.heats - 1) = 1 THEN LOCATE 20, 2: PRINT "Total Laps "; eerste$; " "; lapscar1 LOCATE 21, 2: PRINT "Total Laps "; tweede$; " "; lapscar2 LOCATE 22, 2: PRINT "Total Laps "; derde$; " "; lapscar3 COLOR 14 IF lapscar1 > lapscar2 AND lapscar1 > lapscar3 THEN LOCATE 23, 2: PRINT "The Winner : "; eerste$; " with "; lapscar1; " laps." points.driver1 = points.driver1 + 12 ELSE IF lapscar2 > lapscar3 THEN LOCATE 23, 2: PRINT "The Winner : "; tweede$; " with "; lapscar2; " laps." points.driver2 = points.driver2 + 12 ELSE LOCATE 23, 2: PRINT "The Winner : "; derde$; " with "; lapscar3; " laps." points.driver3 = points.driver3 + 12 END IF END IF END IF IF (total.heats - 1) = 2 THEN LOCATE 20, 2: PRINT "Total Laps "; tweede$; " "; lapscar1 LOCATE 21, 2: PRINT "Total Laps "; eerste$; " "; lapscar3 LOCATE 22, 2: PRINT "Total Laps "; derde$; " "; lapscar4 COLOR 14 IF lapscar3 > lapscar1 AND lapscar4 > lapscar1 THEN LOCATE 23, 2: PRINT "The Winner : "; eerste$; " with "; lapscar3; " laps." points.driver1 = points.driver1 + 12 ELSE IF lapscar1 > lapscar4 THEN LOCATE 23, 2: PRINT "The Winner : "; tweede$; " with "; lapscar1; " laps." points.driver2 = points.driver2 + 12 ELSE LOCATE 23, 2: PRINT "The Winner : "; derde$; " with "; lapscar4; " laps." points.driver3 = points.driver3 + 12 END IF END IF END IF IF (total.heats - 1) = 3 THEN LOCATE 20, 2: PRINT "Total Laps "; derde$; " "; lapscar2 LOCATE 21, 2: PRINT "Total Laps "; tweede$; " "; lapscar3 LOCATE 22, 2: PRINT "Total Laps "; eerste$; " "; lapscar4 COLOR 14 IF lapscar4 > lapscar2 AND lapscar4 > lapscar3 THEN LOCATE 23, 2: PRINT "The Winner : "; eerste$; " with "; lapscar4; " laps." points.driver1 = points.driver1 + 12 ELSE IF lapscar3 > lapscar2 THEN LOCATE 23, 2: PRINT "The Winner : "; tweede$; " with "; lapscar3; " laps." points.driver2 = points.driver2 + 12 ELSE LOCATE 23, 2: PRINT "The winner : "; derde$; " with "; lapscar2; " laps." END IF END IF END IF END IF '--------------------------------------------------------------------- IF total.drivers = 4 THEN IF (total.heats - 1) = 1 THEN LOCATE 20, 2: PRINT "Total Laps "; eerste$; " "; lapscar1 LOCATE 21, 2: PRINT "Total Laps "; tweede$; " "; lapscar2 LOCATE 22, 2: PRINT "Total Laps "; derde$; " "; lapscar3 LOCATE 23, 2: PRINT "Total Laps "; vierde$; " "; lapscar4 COLOR 14 IF lapscar1 > lapscar2 AND lapscar1 > lapscar3 AND lapscar1 > lapscar4 THEN LOCATE 24, 2: PRINT "The Winner : "; eerste$; " with "; lapscar1; " laps." points.driver1 = points.driver1 + 12 ELSE IF lapscar2 > lapscar3 AND lapscar2 > lapscar4 THEN LOCATE 24, 2: PRINT "The Winner : "; tweede$; " with "; lapscar2; " laps." points.driver2 = points.driver2 + 12 ELSE IF lapscar3 > lapscar4 THEN LOCATE 24, 2: PRINT "The Winner : "; derde$; " with "; lapscar3; " laps." points.driver3 = points.driver3 + 12 ELSE LOCATE 24, 2: PRINT "The Winner : "; vierde$; " with "; l; lapscar4; " laps." points.driver4 = points.driver4 + 12 END IF END IF END IF END IF IF (total.heats - 1) = 2 THEN LOCATE 20, 2: PRINT "Total Laps "; tweede$; " "; lapscar1 LOCATE 21, 2: PRINT "Total Laps "; vierde$; " "; lapscar2 LOCATE 22, 2: PRINT "Total Laps "; eerste$; " "; lapscar3 LOCATE 23, 2: PRINT "Total Laps "; derde$; " "; lapscar4 COLOR 14 IF lapscar3 > lapscar2 AND lapscar3 > lapscar1 AND lapscar3 > lapscar4 THEN LOCATE 24, 2: PRINT "The Winner : "; eerste$; " with "; lapscar3; " laps." points.driver1 = points.driver1 + 12 ELSE IF lapscar1 > lapscar2 AND lapscar1 > lapscar4 THEN LOCATE 24, 2: PRINT "The Winner : "; tweede$; " with "; lapscar1; " laps." points.driver2 = points.driver2 + 12 ELSE IF lapscar4 > lapscar2 THEN LOCATE 24, 2: PRINT "The Winner : "; derde$; " with "; lapscar4; " laps." points.driver3 = points.driver3 + 12 ELSE LOCATE 24, 2: PRINT "The Winner : "; vierde$; " with "; l; lapscar2; " laps." points.driver4 = points.driver4 + 12 END IF END IF END IF END IF IF (total.heats - 1) = 3 THEN LOCATE 20, 2: