DECLARE SUB Draw.Finale () DECLARE SUB delete.hall (NumRec AS INTEGER) DECLARE SUB draw.record.box (NumLine AS INTEGER, Couleur AS INTEGER) DECLARE FUNCTION false.start () DECLARE SUB speed.lane (x1%) DECLARE SUB init.vars () DECLARE SUB init.car (x1%) DECLARE SUB insert.hall (x1%) DECLARE SUB delete.hall (x1%) DECLARE SUB draw.main.setup () DECLARE SUB draw.main.race () DECLARE SUB draw.lap.box (x1%, x2%) DECLARE SUB draw.digit.up (x1%) DECLARE SUB draw.digit.down (x1%) DECLARE SUB start.race () DECLARE SUB Hall.Off (x1%) DECLARE SUB Draw.Points () DECLARE SUB draw.winner () DECLARE SUB Drivers () DECLARE SUB drawdigit (y1!, x1!, x2!, x3!, x4!, x5!, x6!) DECLARE SUB Draw.light (x1%, x2%) DECLARE SUB fastest.ever () DECLARE SUB todays.fastest () DECLARE SUB empty.lap.box () DECLARE SUB draw.start () DECLARE SUB car (x1%) '********************************************************************* '* 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 '* Slot4.ini : used for first use of program to record par port address ect. '* default Slot4.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 '* '* Complete Modification for french 4 slots need 13/03/00 '* '******************************************************************** 'Define variables COMMON SHARED Status AS INTEGER COMMON SHARED drawtime AS SINGLE COMMON SHARED Total.Heats AS INTEGER COMMON SHARED total.nbtours AS INTEGER, Total.drivers AS INTEGER COMMON SHARED parport AS INTEGER, parcar12 AS INTEGER, parcar13 AS INTEGER, parcar14 AS INTEGER COMMON SHARED parcar23 AS INTEGER, parcar24 AS INTEGER, parcar34 AS INTEGER COMMON SHARED parcar123 AS INTEGER, parcar124 AS INTEGER, parcar134 AS INTEGER COMMON SHARED parcar234 AS INTEGER, parcar1234 AS INTEGER COMMON SHARED parcar1 AS INTEGER, parcar2 AS INTEGER, parcar3 AS INTEGER, parcar4 AS INTEGER COMMON SHARED StartRaceTime AS SINGLE COMMON SHARED LastRead AS SINGLE COMMON SHARED PauseTime AS SINGLE COMMON SHARED Finish AS INTEGER COMMON SHARED Practice AS INTEGER COMMON SHARED FinalFlag AS INTEGER COMMON SHARED BigBlank AS STRING * 80 DIM SHARED GoodTime(16) AS SINGLE DIM SHARED GoodDriver(16) AS STRING * 15 DIM SHARED GoodCar(16) AS STRING * 15 DIM SHARED GoodTrack(16) AS STRING * 6 DIM SHARED lenght(4) AS SINGLE DIM SHARED LapTime(4) AS SINGLE DIM SHARED BestTime(10) AS SINGLE DIM SHARED Couleur(4) AS INTEGER DIM SHARED Pilote(10) AS STRING * 15 DIM SHARED Voiture(10) AS STRING * 15 DIM SHARED StartTime(4) AS SINGLE DIM SHARED LastTime(4) AS SINGLE DIM SHARED SavedTime(4) AS SINGLE DIM SHARED EndTime(4) AS SINGLE DIM SHARED Fast.Ever.Time(4) AS SINGLE DIM SHARED Fast.Ever.Pilote(4) AS STRING * 15 DIM SHARED Fast.Ever.Voiture(4) AS STRING * 15 DIM SHARED LapsCar(4) AS INTEGER DIM SHARED Winner(4) AS INTEGER DIM SHARED Points(10) AS INTEGER DIM SHARED NbHeat(10) AS INTEGER DIM SHARED HeatTable(20, 4) AS INTEGER DIM SHARED NumHeat AS INTEGER DIM SHARED Fast.Today.Time(4) AS SINGLE DIM SHARED Fast.Today.Pilote(4) AS STRING * 15 DIM SHARED Fast.Today.Voiture(4) AS STRING * 15 COMMON SHARED NumLigne AS INTEGER FOR i = 1 TO 4 Fast.Today.Time(i) = 99.9 NEXT i start: KEY(1) ON ON KEY(1) GOSUB menu KEY(10) ON ON KEY(10) GOSUB PAUSE KEY(5) ON ON KEY(5) GOSUB ForceFinish BigBlank = " " CALL draw.main.setup NumHeat = 1 Next.Heat: ' Race screen '------------ CLS CALL init.vars CALL empty.lap.box CALL draw.start CALL draw.main.race KEY(10) OFF ' F10 key off during race start CALL start.race ' race start sequence KEY(10) ON ' F10 Key on during race total.heure = 0 total.minute = 0 total.seconde = 0 '---------------Race has started now lap counting and timing starts----- DO UNTIL Finish >= 4 'Do this until max lapcount Status = INP(parport) LastRead = TIMER 'Status = parcar1234 'DEBUG SELECT CASE Status CASE parcar1 'default = 208 CALL car(1) CASE parcar2 'default = 224 CALL car(2) CASE parcar3 'default = 200 CALL car(3) CASE parcar4 'default = 64 CALL car(4) CASE parcar12 'default = 240 CALL car(1) CALL car(2) CASE parcar13 'default = 216 CALL car(1) CALL car(3) CASE parcar14 'default = 80 CALL car(1) CALL car(4) CASE parcar23 'default = 232 CALL car(2) CALL car(3) CASE parcar24 'default = 96 CALL car(2) CALL car(4) CASE parcar34 'default = 72 CALL car(3) CALL car(4) CASE parcar123 'default = 248 CALL car(1) CALL car(2) CALL car(3) CASE parcar124 'default = 112 CALL car(1) CALL car(2) CALL car(4) CASE parcar134 'default = 88 CALL car(1) CALL car(3) CALL car(4) CASE parcar234 'default = 104 CALL car(2) CALL car(3) CALL car(4) CASE parcar1234 'default = 120 CALL car(1) CALL car(2) CALL car(3) CALL car(4) END SELECT RaceTime = (TIMER - StartRaceTime) - PauseTime total.heure = INT(RaceTime / 3600) total.minute = INT(RaceTime / 60) MOD 60 total.seconde = RaceTime MOD 60 + (RaceTime - INT(RaceTime)) COLOR (15) LOCATE 4, 60: PRINT ; total.heure; ":"; total.minute; ":"; USING "##.###"; total.seconde LOOP ' End of the this heat ' -------------------- freq = 800 dur = 1 DO UNTIL freq = 900 SOUND freq, dur freq = freq + 10 LOOP BEEP BEEP CALL todays.fastest 'determines the fastest today laps CALL draw.winner 'display the result of the current heat CALL fastest.ever 'determines the fastest lap ever and record it IF NumHeat = Total.Heats THEN ' End of Race CALL Draw.Finale IF FinalFlag = 1 THEN ' Last Heat FinalFlag = 2 GOTO Next.Heat ELSE GOSUB menu END IF ELSE ' Next heat CALL Draw.Points NumHeat = NumHeat + 1 GOTO Next.Heat END IF ' PAUSE '------ PAUSE: SaveTime1 = TIMER COLOR 15 LOCATE 4, 42: PRINT "APPUYEZ SUR UNE TOUCHE POUR CONTINUER" DO LOOP WHILE INKEY$ = "" LOCATE 4, 42: PRINT "Temps de course : " PauseTime = TIMER - SaveTime1 RETURN ForceFinish: COLOR 15 LOCATE 5, 42: INPUT "Voiture … stopper : ", i IF (i < 1) OR (i > 4) GOTO ForceFinish EndTime(i) = LastRead Finish = Finish + 1 Winner(Finish) = i LOCATE 5, 42: PRINT " " RETURN menu: SaveTime1 = TIMER 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 "----- [ DUDU-RACING : MENU PRINCIPAL ] -----" LINE (0, 20)-(639, 20) COLOR 15 LOCATE 4, 2: PRINT "1. Red‚marrer le programme." LOCATE 5, 2: PRINT "2. Reprise de la manche." LOCATE 6, 2: PRINT "3. Sortie." LOCATE 7, 2: PRINT "4. Rejouer la course." LOCATE 8, 2: PRINT "5. Menu de configuration mat‚riel" LOCATE 9, 2: PRINT "6. Test des capteurs sur la carte //" LOCATE 10, 2: PRINT "7. S‚ance d'entrainement libre." LOCATE 11, 2: PRINT "8. Remise … z‚ro du fichier des meilleurs temps." LOCATE 12, 2: PRINT "9. Affichage des meilleurs temps." LOCATE 13, 2: PRINT "10. Suppression d'un des meilleurs temps." LOCATE 15, 2: INPUT "Votre choix ", a$ SELECT CASE a$ CASE "1" SCREEN 8, , 1, 1 RETURN start CASE "2" RETURN Next.Heat CASE "3" END CASE "4" CLS NumHeat = 1 FOR i = 1 TO Total.drivers Points(i) = 0 NbHeat(i) = 0 NEXT i RETURN Next.Heat CASE "5" CLS LOCATE 2, 20: PRINT "----- [ DUDU-RACING : MENU D'INIT ] -----" OPEN "I", #1, "Slot4.ini" INPUT #1, parport, parcar1, parcar2, parcar3, parcar4 INPUT #1, parcar12, parcar13, parcar14, parcar23, parcar24, parcar34 INPUT #1, parcar123, parcar124, parcar134, parcar234, parcar1234 INPUT #1, lenght(1), lenght(2), lenght(3), lenght(4) INPUT #1, Couleur(1), Couleur(2), Couleur(3), Couleur(4) CLOSE #1 LOCATE 4, 2: PRINT "Adresse du port // : "; parport FOR i = 1 TO 15 LOCATE 4 + i, 2: PRINT "Valeur des capteurs pour Voit. " NEXT i LOCATE 5, 32: PRINT "1 en place : "; parcar1 LOCATE 6, 32: PRINT "2 en place : "; parcar2 LOCATE 7, 32: PRINT "3 en place : "; parcar3 LOCATE 8, 32: PRINT "4 en place : "; parcar4 LOCATE 9, 32: PRINT "1 & 2 en places : "; parcar12 LOCATE 10, 32: PRINT "1 & 3 en places : "; parcar13 LOCATE 11, 32: PRINT "1 & 4 en places : "; parcar14 LOCATE 12, 32: PRINT "2 & 3 en places : "; parcar23 LOCATE 13, 32: PRINT "2 & 4 en places : "; parcar24 LOCATE 14, 32: PRINT "3 & 4 en places : "; parcar34 LOCATE 15, 32: PRINT "1,2 & 3 en places : "; parcar123 LOCATE 16, 32: PRINT "1,2 & 4 en places : "; parcar124 LOCATE 17, 32: PRINT "1,3 & 4 en places : "; parcar134 LOCATE 18, 32: PRINT "2,3 & 4 en places : "; parcar234 LOCATE 19, 32: PRINT "1,2,3 & 4 en places : "; parcar1234 LOCATE 20, 2: PRINT "Longueurs des voies en cm : "; lenght(1); lenght(2); lenght(3); lenght(4) LOCATE 21, 2: PRINT "Couleurs des voies : "; Couleur(1); Couleur(2); Couleur(3); Couleur(4) LOCATE 23, 2: INPUT "Voulez-vous modifier ces valeurs (o/n) ? ", a$ IF a$ = "o" OR a$ = "O" THEN ' Possible Parrallel port addres in decimal 889 - 957 LOCATE 23, 2: INPUT "Adresse du port // (defaut 889) : ", parport LOCATE 23, 2: INPUT "Valeur des capteurs avec la voiture 1 seulement : ", parcar1 LOCATE 23, 2: INPUT "Valeur des capteurs avec la voiture 2 seulement : ", parcar2 LOCATE 23, 2: INPUT "Valeur des capteurs avec la voiture 3 seulement : ", parcar3 LOCATE 23, 2: INPUT "Valeur des capteurs avec la voiture 4 seulement : ", parcar4 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 1 & 2 : ", parcar12 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 1 & 3 : ", parcar13 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 1 & 4 : ", parcar14 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 2 & 3 : ", parcar23 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 2 & 4 : ", parcar24 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 3 & 4 : ", parcar34 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 1,2 & 3 : ", parcar123 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 1,2 & 4 : ", parcar124 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 1,3 & 4 : ", parcar134 LOCATE 23, 2: INPUT "Valeur des capteurs avec les voitures 2,3 & 4 : ", parcar234 LOCATE 23, 2: INPUT "Valeur des capteurs avec toutes les voitures : ", parcar1234 FOR i = 1 TO 4 LOCATE 23, 2: PRINT "Entrez la longueur de la voie"; i; "en cm : " LOCATE 23, 52: INPUT lenght(i) NEXT i FOR i = 1 TO 4 LOCATE 23, 2: PRINT "Entrez la couleur de la voie"; i; " : " LOCATE 23, 52: INPUT Couleur(i) NEXT i '---------------SAVE first time ini TO FILE Slot4.ini-------------- IF parport = 0 THEN parport = 889 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 FOR i = 1 TO 4 IF lenght(i) = 0 THEN lenght(i) = 2000 NEXT i IF Couleur(1) = 0 THEN Couleur(1) = 1 IF Couleur(2) = 0 THEN Couleur(2) = 10 IF Couleur(3) = 0 THEN Couleur(3) = 4 IF Couleur(4) = 0 THEN Couleur(4) = 14 OPEN "O", #1, "Slot4.ini" PRINT #1, parport; ","; parcar1; ","; parcar2; ","; parcar3; ","; parcar4 PRINT #1, parcar12; ","; parcar13; ","; parcar14; ","; parcar23; ","; parcar24 PRINT #1, parcar34; ","; parcar123; ","; parcar124 PRINT #1, parcar134; ","; parcar234; ","; parcar1234 PRINT #1, lenght(1); ","; lenght(2); ","; lenght(3); ","; lenght(4) PRINT #1, Couleur(1); ","; Couleur(2); ","; Couleur(3); ","; Couleur(4) CLOSE #1 END IF '---------------------------------------------------------------------- GOTO menu CASE "6" CLS DO testpar = INP(parport) LOCATE 2, 2: PRINT "Bloquez successivement les voitures sur chaque voie et notez les valeurs." LOCATE 3, 2: PRINT "Recommencez en prenant les voitures 2 par 2, puis 3 par 3 et enfin les 4." LOCATE 4, 2: PRINT "Ces valeurs sont … entrer dans le systŠme … l'aide du menu num‚ro 5." LOCATE 5, 2: PRINT "Toutes les valeurs lues doivent ˆtre diff‚rentes." LOCATE 7, 2: PRINT "Ci ce n'est pas le cas, revoyez la connectique ou l'adresse du port" LOCATE 8, 2: PRINT "parrallŠle toujours … l'aide du menu num‚ro 5." COLOR 1 LOCATE 11, 2: PRINT "Valeur du port // : " LOCATE 11, 21: PRINT testpar COLOR 15, 3 LOCATE 22, 2: PRINT "Appuyez sur une touche pour revenir au menu principal." LOOP WHILE INKEY$ = "" GOTO menu ' PRACTICE SESSION '----------------- CASE "7" Practice = 1 NumHeat = 1 KEY(1) ON ON KEY(1) GOSUB menu KEY(10) ON ON KEY(10) GOSUB PAUSE RETURN Next.Heat CASE "8" reset.time = 99.999 LOCATE 16, 2: INPUT "Voulez-vous nettoyer le fichier des meilleurs temps (o/n) ? ", a$ IF a$ = "o" OR a$ = "O" THEN LOCATE 17, 2: INPUT "Vous ˆtes sur ? ", a$ IF a$ = "o" OR a$ = "O" THEN OPEN "O", #1, "best.dat" FOR i = 1 TO 15 PRINT #1, reset.time; ","; "JACQUES CHIRAC "; ","; "CITROEN CX 82 "; ","; "Voie 5" NEXT i CLOSE #1 LOCATE 17, 2: INPUT "Valeur d'un temps correct ? ", reset.time OPEN "O", #1, "fasttest.txt" FOR i = 1 TO 4 PRINT #1, reset.time; ","; "JAMES BOND "; ","; "ASTON MARTIN " NEXT i CLOSE #1 END IF END IF GOTO menu ' Display Hall of fame ' -------------------- CASE "9" CALL Hall.Off(1) GOTO menu CASE "10" CLS LINE (0, 0)-(639, 199), , B 'box LINE (1, 1)-(638, 198), 3, BF LOCATE 2, 18: PRINT "----- [ DUDU-RACING : MEILLEURS PILOTES ] -----" LINE (0, 20)-(639, 20) CALL Hall.Off(0) COLOR (15) '--------------------------------------------------------------------- Number: LOCATE 20, 2: INPUT "Num‚ro de la ligne … d‚truire (1 … 15) ? : ", NumLigne IF (i < 1) GOTO Number IF (i > 15) GOTO Number CALL delete.hall(NumLigne) GOTO menu END SELECT stoppen: END '---------------------EINDE PROGRAMMA--------------------------------- SUB car (NumCar AS INTEGER) KEY(5) STOP ' Already seen ? '--------------- IF StartTime(NumCar) = 0 THEN CALL init.car(NumCar) GOTO Invalid.time END IF ' Already Finished ' ---------------- IF EndTime(NumCar) <> 65000! THEN GOTO Invalid.time END IF IF Finish = 4 THEN GOTO Invalid.time END IF ' Suppress noize and bad guys .... ' -------------------------------- LapTime(NumCar) = (LastRead - LastTime(NumCar)) IF LapTime(NumCar) < (Fast.Ever.Time(NumCar) - 3!) THEN IF (Fast.Ever.Time(NumCar)) <> 99.99 GOTO Invalid.time END IF '-----------Car 1 timing and printing----------------------------- CALL speed.lane(NumCar) LapsCar(NumCar) = LapsCar(NumCar) + 1 'update lap counter for car LastTime(NumCar) = LastRead IF (Practice = 0) THEN IF LapsCar(NumCar) = total.nbtours THEN ' Finished for this car EndTime(NumCar) = LastRead Finish = Finish + 1 Winner(Finish) = NumCar BEEP END IF END IF LOCATE 13, (20 * (NumCar - 1)) + 12: PRINT USING "###"; LapsCar(NumCar)' Last lap number CALL draw.lap.box(NumCar, 3) ' Clean Box drawtime = LapTime(NumCar) CALL draw.digit.up(NumCar) 'is it a good lap ? '------------------ IF SavedTime(NumCar) > LapTime(NumCar) THEN ' Good Job Guy LOCATE 19, (20 * (NumCar - 1)) + 12: PRINT USING "###"; LapsCar(NumCar) CALL draw.record.box(NumCar, 3) ' Clean Fast Lap Box drawtime = LapTime(NumCar) CALL draw.digit.down(NumCar) SavedTime(NumCar) = drawtime END IF Invalid.time: KEY(5) ON END SUB SUB delete.hall (NumRec AS INTEGER) FOR i = NumRec TO 14 GoodTime(i) = GoodTime(i + 1) GoodDriver(i) = GoodDriver(i + 1) GoodCar(i) = GoodCar(i + 1) GoodTrack(i) = GoodTrack(i + 1) NEXT i GoodTime(15) = 99.999 GoodDriver(15) = "LIONEL JOSPIN " GoodCar(15) = "OUI-OUI CAR " GoodTrack(15) = "Voie 5" OPEN "O", #1, "best.dat" FOR i = 1 TO 15 PRINT #1, GoodTime(i); ","; GoodDriver(i); ","; GoodCar(i); ","; GoodTrack(i) NEXT i CLOSE #1 END SUB SUB draw.digit.down (NumLigne AS INTEGER) SELECT CASE NumLigne CASE 1 CALL drawdigit(162, 7, 24, 41, 59, 76, 93) CASE 2 CALL drawdigit(162, 167, 184, 201, 219, 236, 253) CASE 3 CALL drawdigit(162, 327, 345, 362, 379, 396, 413) CASE 4 CALL drawdigit(162, 487, 504, 521, 539, 556, 573) END SELECT END SUB SUB draw.digit.up (NumLigne AS INTEGER) SELECT CASE NumLigne CASE 1 CALL drawdigit(112, 7, 24, 41, 59, 76, 93) CASE 2 CALL drawdigit(112, 167, 184, 201, 219, 236, 253) CASE 3 CALL drawdigit(112, 327, 345, 361, 379, 396, 413) CASE 4 CALL drawdigit(112, 487, 504, 521, 539, 556, 573) END SELECT END SUB SUB Draw.Finale STATIC Dummy AS INTEGER DIM Position(10) AS INTEGER STATIC Switched AS INTEGER STATIC Str1 AS STRING * 15 CLS LINE (0, 0)-(639, 199), , B 'box LINE (1, 1)-(638, 198), 3, BF IF FinalFlag = 1 THEN LOCATE 2, 16: PRINT "----- [ DUDU-RACING : RESULTATS AVANT FINALE ] -----" ELSE LOCATE 2, 19: PRINT "----- [ DUDU-RACING : RESULTATS FINAUX ] -----" END IF LINE (0, 20)-(639, 20) LOCATE 5, 2: PRINT " Pilotes ----> Points ----> Nb de courses ----> Meilleur temps" LOCATE 6, 2: PRINT " ___________________________________________________________________" ' Bubble sort ' ----------- FOR i = 1 TO Total.drivers Position(i) = i NEXT i Switched = 1 DO UNTIL Switched = 0 Switched = 0 FOR i = 1 TO Total.drivers - 1 IF (Points(Position(i)) < Points(Position(i + 1))) THEN Dummy = Position(i) Position(i) = Position(i + 1) Position(i + 1) = Dummy Switched = 1 END IF NEXT i LOOP Switched = 1 DO UNTIL Switched = 0 Switched = 0 FOR i = 1 TO Total.drivers - 1 IF (Points(Position(i)) = Points(Position(i + 1))) THEN IF (BestTime(Position(i)) > BestTime(Position(i + 1))) THEN Dummy = Position(i) Position(i) = Position(i + 1) Position(i + 1) = Dummy Switched = 1 END IF END IF NEXT i LOOP COLOR (12) FOR i = 1 TO Total.drivers IF i > 4 THEN COLOR (15) LOCATE 9 + i, 2: PRINT USING "##"; i LOCATE 9 + i, 6: PRINT Pilote(Position(i)) LOCATE 9 + i, 25: PRINT Points(Position(i)) LOCATE 9 + i, 45: PRINT NbHeat(Position(i)) LOCATE 9 + i, 60: PRINT USING "##.###"; BestTime(Position(i)) NEXT i COLOR 15 LOCATE 22, 2: PRINT "APPUYEZ SUR UNE TOUCHE POUR CONTINUER" DO LOOP WHILE INKEY$ = "" IF FinalFlag = 1 THEN CLS LINE (0, 0)-(639, 199), , B 'box LINE (1, 1)-(638, 198), 3, BF LOCATE 2, 10: PRINT "----- [ DUDU-RACING : PILOTES QUALIFIES EN FINALE ] -----" LINE (0, 20)-(639, 20) FOR i = 1 TO 4 LOCATE 4 + i, 10: PRINT USING "##"; i LOCATE 4 + i, 15: PRINT Pilote(Position(i)) NEXT i COLOR 15 LOCATE 22, 2: PRINT "APPUYEZ SUR UNE TOUCHE POUR PASSER EN FINALE" DO LOOP WHILE INKEY$ = "" ' Position for the final round ' ____________________________ Total.drivers = 4 Total.Heats = 1 NumHeat = 1 FOR i = 1 TO Total.drivers HeatTable(1, i) = Position(i) NEXT i ' Ramdom slot distribution ' ------------------------ FOR i = 1 TO Total.drivers Index = INT((Total.drivers * RND) + 1) Str1 = Pilote(Index) IF (Index = Total.drivers) THEN Pilote(Index) = Pilote(1) Pilote(1) = Str1 ELSE Pilote(Index) = Pilote(Index + 1) Pilote(Index + 1) = Str1 END IF Str1 = Voiture(Index) IF (Index = Total.drivers) THEN Voiture(Index) = Voiture(1) Voiture(1) = Str1 ELSE Voiture(Index) = Voiture(Index + 1) Voiture(Index + 1) = Str1 END IF NEXT i ELSE COLOR 4 LOCATE 22, 2: PRINT "VAINQUEUR DE CE GRAND-PRIX : "; Pilote(Position(1)) DO LOOP WHILE INKEY$ = "" END IF END SUB SUB draw.lap.box (NumLine AS INTEGER, Couleur AS INTEGER) SELECT CASE NumLine CASE 1 LINE (6, 106)-(94, 139), Couleur, BF CASE 2 LINE (166, 106)-(254, 139), Couleur, BF CASE 3 LINE (326, 106)-(414, 139), Couleur, BF CASE 4 LINE (486, 106)-(574, 139), Couleur, BF END SELECT END SUB SUB Draw.light (num.light AS INTEGER, Couleur AS INTEGER) SELECT CASE num.light CASE 1 LINE (30, 40)-(50, 55), Couleur, BF CASE 2 LINE (60, 40)-(80, 55), Couleur, BF CASE 3 LINE (90, 40)-(110, 55), Couleur, BF CASE 4 LINE (120, 40)-(140, 55), Couleur, BF CASE 5 LINE (150, 40)-(170, 55), Couleur, BF END SELECT END SUB SUB draw.main.race LINE (0, 0)-(639, 199), , B LINE (1, 1)-(638, 198), 3 COLOR 11 PRINT "" COLOR 15 LOCATE 2, 4: PRINT "-----[ F1 Menu PRINCIPAL ]-------[ DUDU-RACING ]-------[ F10 PAUSE ]-----" LINE (0, 20)-(639, 20) 'lijn onder titel 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 "-----[ DUDU-RACING : MENU DE SETUP ]-----" LINE (0, 20)-(639, 20) 'line undertitle '-------------------READ FILE Slot4.ini to setup parallel port----- OPEN "I", #1, "Slot4.ini" INPUT #1, parport, parcar1, parcar2, parcar3, parcar4 INPUT #1, parcar12, parcar13, parcar14, parcar23, parcar24, parcar34 INPUT #1, parcar123, parcar124, paracr134, parcar234, parcar1234 FOR i = 1 TO 4 INPUT #1, lenght(i) lenght(i) = (lenght(i) / 100) / 1000 'Lenght in Km NEXT i FOR i = 1 TO 4 INPUT #1, Couleur(i) NEXT i CLOSE #1 ' Read the Hall Of fame ' --------------------- CALL Hall.Off(0) COLOR (15) '--------------------------------------------------------------------- Nbre: LOCATE 20, 2: INPUT "Combien de pilotes pour cette comp‚tition (1 … 10) ? : ", Total.drivers IF (Total.drivers < 1) GOTO Nbre IF (Total.drivers > 10) GOTO Nbre CLS LOCATE 2, 18: PRINT "-----[ DUDU-RACING : MENU DE SETUP ]-----" LINE (0, 20)-(639, 20) 'line undertitle CALL Drivers END SUB SUB Draw.Points CLS LOCATE 3, 2: PRINT "Pilotes ----> Points ----> Nb de courses ----> Meilleur temps" LOCATE 4, 2: PRINT "___________________________________________________________________" FOR i = 1 TO Total.drivers LOCATE 5 + i, 2: PRINT Pilote(i) LOCATE 5 + i, 20: PRINT Points(i) LOCATE 5 + i, 40: PRINT NbHeat(i) LOCATE 5 + i, 60: PRINT USING "##.###"; BestTime(i) NEXT i FOR i = 1 TO 4 LOCATE 6 + Total.drivers + i, 2: PRINT "Record du tour voie " LOCATE 6 + Total.drivers + i, 21: PRINT USING "#"; i LOCATE 6 + Total.drivers + i, 23: PRINT USING ": ##.###"; Fast.Today.Time(i) LOCATE 6 + Total.drivers + i, 31: PRINT " pour "; Fast.Today.Pilote(i); " / "; Fast.Today.Voiture(i) NEXT i DO LOOP WHILE INKEY$ = "" END SUB SUB draw.record.box (NumLine AS INTEGER, Couleur AS INTEGER) SELECT CASE NumLine CASE 1 LINE (6, 156)-(94, 189), Couleur, BF CASE 2 LINE (166, 156)-(254, 189), Couleur, BF CASE 3 LINE (326, 156)-(414, 189), Couleur, BF CASE 4 LINE (486, 156)-(574, 189), Couleur, BF END SELECT END SUB SUB draw.start STATIC Str1 AS STRING * 16 STATIC Str2 AS STRING * 16 Str1 = "[ TOUR Nø 000 ]" Str2 = "[ RECORD : 000 ]" FOR i = 0 TO 3 COLOR Couleur(i + 1) LOCATE 10, 2 + (20 * i): PRINT Pilote(HeatTable(NumHeat, i + 1)) LOCATE 11, 2 + (20 * i): PRINT USING "##.### / ##.###"; Fast.Today.Time(i + 1); Fast.Ever.Time(i + 1) NEXT i COLOR Couleur(1) LINE (5, 105)-(95, 140), Couleur(1), B LOCATE 13, 1: PRINT Str1 LINE (5, 155)-(95, 190), Couleur(1), B LOCATE 19, 1: PRINT Str2 COLOR Couleur(2) LINE (165, 105)-(255, 140), Couleur(2), B LOCATE 13, 21: PRINT Str1 LINE (165, 155)-(255, 190), Couleur(2), B LOCATE 19, 21: PRINT Str2 COLOR Couleur(3) LINE (325, 105)-(415, 140), Couleur(3), B LOCATE 13, 41: PRINT Str1 LINE (325, 155)-(415, 190), Couleur(3), B LOCATE 19, 41: PRINT Str2 COLOR Couleur(4) LINE (485, 105)-(575, 140), Couleur(4), B LOCATE 13, 61: PRINT Str1 LINE (485, 155)-(575, 190), Couleur(4), B LOCATE 19, 61: PRINT Str2 COLOR 15 LOCATE 4, 42: PRINT "Temps de course : " END SUB SUB draw.winner DIM Bonus(4) AS INTEGER STATIC TempoTime AS SINGLE STATIC TempoFast AS INTEGER Bonus(1) = 10 Bonus(2) = 5 Bonus(3) = 3 Bonus(4) = 0 ' Draw ? ' ------ FOR i = 1 TO 3 IF EndTime(Winner(i)) = EndTime(Winner(i + 1)) THEN Bonus(i + 1) = Bonus(i) END IF NEXT i LOCATE 4, 2: PRINT "Vainqueur : "; Pilote(HeatTable(NumHeat, Winner(1))); Bonus(1); "points" LOCATE 5, 2: PRINT "DeuxiŠme : "; Pilote(HeatTable(NumHeat, Winner(2))); Bonus(2); "points" LOCATE 6, 2: PRINT "TroisiŠme : "; Pilote(HeatTable(NumHeat, Winner(3))); Bonus(3); "point(s)" LOCATE 7, 2: PRINT "Dernier ! : "; Pilote(HeatTable(NumHeat, Winner(4))); Bonus(4); "point(s)" FOR i = 1 TO 4 NbHeat(HeatTable(NumHeat, i)) = NbHeat(HeatTable(NumHeat, i)) + 1 Points(HeatTable(NumHeat, Winner(i))) = Points(HeatTable(NumHeat, Winner(i))) + Bonus(i) NEXT i ' Best Lap win two points. ' ------------------------ TempoTime = 90! TempoFast = 0 FOR i = 1 TO 4 IF (SavedTime(i) <= TempoTime) THEN TempoFast = i IF SavedTime(i) = TempoTime THEN TempoFast = -1 ' Deuce => No bonus ELSE TempoTime = SavedTime(i) END IF END IF NEXT i IF (TempoFast > 0) THEN LOCATE 8, 2: PRINT "Mr Speedy : "; Pilote(HeatTable(NumHeat, TempoFast)); " +2 points" ELSE LOCATE 8, 2: PRINT "D‚sol‚ pour le bonus !!!" END IF DO LOOP WHILE INKEY$ = "" 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 Drivers STATIC Str1 AS STRING * 15 STATIC Str2 AS STRING * 15 STATIC Indx1 AS INTEGER STATIC Indx2 AS INTEGER DIM DummyTab(10) AS INTEGER STATIC NbManche AS INTEGER STATIC found AS INTEGER 'Lexture du fichier … lire driversxx.ini '-------------------------------------------------- FOR i = 1 TO Total.drivers Points(i) = 0 NbHeat(i) = 0 BestTime(i) = 99.9 NEXT i Drivers.tempo = 48 + Total.drivers Drivers.extend$ = CHR$(Drivers.tempo) IF (Total.drivers = 10) THEN Drivers.extend$ = "0" END IF FILE1$ = "DRIVERS" + Drivers.extend$ + ".INI" FILE2$ = "HEATS" + Drivers.extend$ + ".DAT" LOCATE 4, 2: PRINT USING "&"; BigBlank OPEN "I", #1, FILE1$ FOR i = 1 TO Total.drivers INPUT #1, Pilote(i), Voiture(i) NEXT i INPUT #1, display.klasses$ CLOSE #1 RANDOMIZE TIMER FOR i = 1 TO Total.drivers LOCATE 3 + i, 2: PRINT "Pilote "; LOCATE 3 + i, 9: PRINT USING "##"; i LOCATE 3 + i, 15: PRINT Pilote(i) LOCATE 3 + i, 40: PRINT "Voiture : "; Voiture(i) NEXT i LOCATE 4 + i, 2: INPUT "Voulez-vous changer (o/n)? : ", answer$ IF answer$ = "O" OR answer$ = "o" THEN ModifNom: LOCATE 4 + i, 2: PRINT USING "&"; BigBlank LOCATE 5 + i, 2: PRINT USING "&"; BigBlank LOCATE 6 + i, 2: PRINT USING "&"; BigBlank LOCATE 4 + i, 2: INPUT "Num‚ro du pilote … modifier : ", answer IF answer > 0 AND answer <= Total.drivers THEN LOCATE 5 + i, 2: INPUT "Nom du nouveau pilote : ", Pilote(answer) LOCATE 6 + i, 2: INPUT "Voiture du nouveau pilote : ", Voiture(answer) LOCATE 3 + answer, 2: PRINT "Pilote "; LOCATE 3 + answer, 9: PRINT USING "##"; answer LOCATE 3 + answer, 15: PRINT Pilote(answer) LOCATE 3 + answer, 40: PRINT "Voiture : "; Voiture(answer) GOTO ModifNom END IF END IF ' Ramdomize Driver number ' ----------------------- FOR i = 1 TO Total.drivers Indx1 = INT((Total.drivers * RND) + 1) Indx2 = INT((Total.drivers * RND) + 1) Str1 = Pilote(Indx1) Str2 = Pilote(Indx2) Pilote(Indx1) = Str2 Pilote(Indx2) = Str1 Str1 = Voiture(Indx1) Str2 = Voiture(Indx2) Voiture(Indx1) = Str2 Voiture(Indx2) = Str1 NEXT i NbTours: LOCATE 5 + Total.drivers, 2: INPUT "Nombre de tours (0,10,15,...) "; total.nbtours IF total.nbtours < 1 THEN IF Total.drivers > 4 GOTO NbTours Practice = 1 FOR i = 1 TO 4 HeatTable(1, i) = i NEXT i GOTO Fin.Drivers ELSE Practice = 0 END IF ' Nb heats ? ' ---------- OPEN "I", #1, FILE2$ INPUT #1, NbRec FOR i = 1 TO NbRec INPUT #1, DummyTab(i) NEXT i readheats: LOCATE 6 + Total.drivers, 2: PRINT "Combien de manches par pilotes (" FOR i = 1 TO NbRec LOCATE 6 + Total.drivers, 32 + (i * 3): PRINT USING "##"; DummyTab(i) NEXT i LOCATE 6 + Total.drivers, 32 + (i * 3): INPUT ")"; NbManche found = 0 FOR i = 1 TO NbRec IF NbManche = DummyTab(i) THEN found = 1 NEXT i IF found = 0 THEN GOTO readheats ' Read Heats table in file ' ------------------------ INPUT #1, DummyTab(1), NbRec DO UNTIL DummyTab(1) = NbManche FOR i = 1 TO NbRec INPUT #1, DummyTab(2), DummyTab(2), DummyTab(2), DummyTab(2) NEXT i INPUT #1, DummyTab(1), NbRec LOOP ' here we are ' ----------- FOR i = 1 TO NbRec INPUT #1, HeatTable(i, 1), HeatTable(i, 2), HeatTable(i, 3), HeatTable(i, 4) NEXT i Total.Heats = NbRec CLOSE #1 IF Total.drivers > 4 THEN LOCATE 7 + Total.drivers, 2: INPUT "Avec finale "; Final$ IF Final$ = "O" OR Final$ = "o" THEN FinalFlag = 1 ELSE FinalFlag = 0 END IF END IF Fin.Drivers: ' Sauvegarde des Infos pour les futures courses '---------------------------------------------- OPEN "O", #1, FILE1$ FOR i = 1 TO Total.drivers PRINT #1, Pilote(i); ","; Voiture(i) NEXT i PRINT #1, display.klasses$ CLOSE #1 END SUB SUB empty.lap.box 'LINE (11, 106)-(191, 139), 4, BF 'box om te wissen last lap links 'LINE (336, 106)-(516, 139), 4, BF 'box om te wissen last lap rechts 'LINE (661, 106)-(841, 139), 4, BF 'LINE (986, 106)-(1166, 139), 4, BF 'LINE (11, 156)-(191, 189), 4, BF 'box om te wissen fast lap links 'LINE (336, 156)-(516, 189), 4, BF 'box om te wissen fast lap rechts 'LINE (661, 156)-(841, 189), 4, BF 'LINE (986, 156)-(1166, 189), 4, BF 'LINE (1, 21)-(317, 77), 4, BF 'box om te wissen links boven 'LINE (321, 32)-(639, 77), 4, BF 'box om te wissen rechts boven 'LINE (641, 43)-(961, 77), 4, BF 'LINE (961, 54)-(1283, 77), 4, BF 'LINE (196, 90)-(317, 200), 4, BF 'box om te wissen LAST 9 laps links 'LINE (522, 90)-(639, 200), 4, BF 'box om te wissen LAST 9 laps rechts 'LINE (848, 90)-(961, 200), 4, BF 'LINE (1174, 90)-(1283, 200), 4, BF END SUB FUNCTION false.start STATIC Str1 AS STRING * 17 STATIC Str2 AS STRING * 17 Str1 = "Faux d‚part pour " Str2 = "P‚nalit‚ : 1 tour" light.wait = TIMER DO WHILE test.time < 1.01 test.time = TIMER - light.wait Status = INP(parport) LastRead = TIMER 'Status = parcar4 ' Debug SELECT CASE Status CASE parcar1 LOCATE 5, 2: PRINT Str1; Pilote(HeatTable(NumHeat, 1)) LOCATE 12, 2: PRINT Str2 CALL init.car(1) LapsCar(1) = LapsCar(1) - 1 false.start = 1 GOTO False.Start.End CASE parcar2 LOCATE 5, 2: PRINT Str1; Pilote(HeatTable(NumHeat, 2)) LOCATE 12, 22: PRINT Str2 CALL init.car(2) LapsCar(2) = LapsCar(2) - 1 false.start = 1 GOTO False.Start.End CASE parcar3 LOCATE 5, 2: PRINT Str1; Pilote(HeatTable(NumHeat, 3)) LOCATE 12, 42: PRINT Str2 CALL init.car(3) LapsCar(3) = LapsCar(3) - 1 false.start = 1 GOTO False.Start.End CASE parcar4 LOCATE 5, 2: PRINT Str1; Pilote(HeatTable(NumHeat, 4)) LOCATE 12, 62: PRINT Str2 CALL init.car(4) LapsCar(4) = LapsCar(4) - 1 false.start = 1 GOTO False.Start.End END SELECT LOOP false.start = 0 False.Start.End: END FUNCTION SUB fastest.ever STATIC Champion AS INTEGER Champion = 0 FOR i = 1 TO 4 IF Fast.Today.Time(i) < Fast.Ever.Time(i) THEN ' Ask for the registering of this great record ' -------------------------------------------- LOCATE 9, 2: PRINT "Record du Tour pour "; Fast.Today.Pilote(i); ". On le garde " LOCATE 9, 50: INPUT " o/n "; a$ IF a$ <> "o" AND a$ <> "O" THEN Fast.Today.Time(i) = 99.9 ELSE Fast.Ever.Time(i) = Fast.Today.Time(i) Fast.Ever.Pilote(i) = Fast.Today.Pilote(i) Fast.Ever.Voiture(i) = Fast.Today.Voiture(i) Champion = i END IF END IF NEXT i IF Champion = 0 GOTO Champ.End OPEN "O", #1, "fasttest.txt" FOR i = 1 TO 4 PRINT #1, Fast.Ever.Time(i); ","; Fast.Ever.Pilote(i); ","; Fast.Ever.Voiture(i) NEXT i CLOSE #1 Champ.End: FOR i = 1 TO 4 NEXT i END SUB SUB Hall.Off (Job AS INTEGER) IF Job = 1 THEN CLS LINE (0, 0)-(639, 199), , B 'box LINE (1, 1)-(638, 198), 3, BF LOCATE 2, 18: PRINT "----- [ DUDU-RACING : MEILLEURS PILOTES ] -----" LINE (0, 20)-(639, 20) END IF OPEN "I", #1, "best.dat" FOR i = 1 TO 15 INPUT #1, GoodTime(i), GoodDriver(i), GoodCar(i), GoodTrack(i) NEXT i CLOSE #1 FOR i = 1 TO 15 COLOR 4 LOCATE i + 3, 2: PRINT USING "##"; i COLOR 5 IF i > 5 THEN COLOR 1 IF i > 10 THEN COLOR 14 LOCATE i + 3, 5: PRINT USING "##.###"; GoodTime(i) LOCATE i + 3, 12: PRINT GoodDriver(i); " "; GoodCar(i); " "; GoodTrack(i) NEXT i OPEN "I", #1, "fasttest.txt" FOR i = 1 TO 4 INPUT #1, Fast.Ever.Time(i), Fast.Ever.Pilote(i), Fast.Ever.Voiture(i) NEXT i CLOSE #1 IF Job = 1 THEN FOR i = 1 TO 4 COLOR (Couleur(i)) LOCATE i + 19, 2: PRINT "Record voie " LOCATE i + 19, 13: PRINT USING "#"; i LOCATE i + 19, 15: PRINT Fast.Ever.Time(i), Fast.Ever.Pilote(i), Fast.Ever.Voiture(i) NEXT i COLOR 15 LINE (0, 0)-(639, 199), , B LOCATE 10, 56: PRINT "Appuyez sur une touche" LOCATE 11, 60: PRINT "pour continuer" DO LOOP WHILE INKEY$ = "" END IF END SUB SUB init.car (NumCar AS INTEGER) StartTime(NumCar) = LastRead LastTime(NumCar) = StartTime(NumCar) END SUB SUB init.vars PauseTime = 0! FOR i = 1 TO 4 StartTime(i) = 0 EndTime(i) = 65000! LapsCar(i) = 0 SavedTime(i) = 99! NEXT i Finish = 0 END SUB SUB insert.hall (SlotNum AS INTEGER) STATIC Str1 AS STRING * 6 SELECT CASE SlotNum CASE 1 GoodTrack(15) = "Voie 1" CASE 2 GoodTrack(15) = "Voie 2" CASE 3 GoodTrack(15) = "Voie 3" CASE 4 GoodTrack(15) = "Voie 4" END SELECT GoodTime(15) = SavedTime(SlotNum) GoodDriver(15) = Pilote(HeatTable(NumHeat, SlotNum)) GoodCar(15) = Voiture(HeatTable(NumHeat, SlotNum)) FOR i = 15 TO 2 STEP -1 IF GoodTime(i - 1) > GoodTime(i) THEN GoodTime(16) = GoodTime(i - 1) GoodDriver(16) = GoodDriver(i - 1) GoodCar(16) = GoodCar(i - 1) GoodTrack(16) = GoodTrack(i - 1) GoodTime(i - 1) = GoodTime(i) GoodDriver(i - 1) = GoodDriver(i) GoodCar(i - 1) = GoodCar(i) GoodTrack(i - 1) = GoodTrack(i) GoodTime(i) = GoodTime(16) GoodDriver(i) = GoodDriver(16) GoodCar(i) = GoodCar(16) GoodTrack(i) = GoodTrack(16) END IF NEXT i OPEN "O", #1, "best.dat" FOR i = 1 TO 15 PRINT #1, GoodTime(i); ","; GoodDriver(i); ","; GoodCar(i); ","; GoodTrack(i) NEXT i CLOSE #1 END SUB SUB speed.lane (NumCar AS INTEGER) temp.speed.sec = lenght(NumCar) / LapTime(NumCar) 'km per seconde temp.speed.min = temp.speed.sec * 60! 'km per min average.speed.lane = temp.speed.min * 60! 'km per hour COLOR (Couleur(NumCar)) STATIC Ligne AS INTEGER Ligne = NumCar + 3 LOCATE Ligne, 2: PRINT "Vitesse voie : " LOCATE Ligne, 15: PRINT USING "#"; NumCar LOCATE Ligne, 20: PRINT USING "###.##"; average.speed.lane LOCATE Ligne, 25: PRINT " Km/h " END SUB SUB start.race STATIC Faux.depart AS INTEGER STATIC i AS INTEGER restart.heat: '-------------------------Starting lights--------------------------- LOCATE 4, 2: PRINT " " LOCATE 5, 2: PRINT " " LOCATE 6, 2: PRINT " " LOCATE 7, 2: PRINT " " LOCATE 4, 2: PRINT "APPUYEZ SUR UNE TOUCHE POUR DEMARRER" WHILE INKEY$ = "" 'wait for user to press a key WEND LOCATE 4, 2: PRINT "ATTENTION AU DEPART !!!!!!!!!!!!!! " FOR i = 1 TO 5 CALL Draw.light(i, 4) NEXT i FOR i = 1 TO 5 Faux.depart = false.start IF Faux.depart = 1 GOTO false.start.continue CALL Draw.light(i, 3) SOUND 800, 1 NEXT i COLOR 4 LOCATE 4, 2: PRINT "!!!!!! C'EST PARTI MON KIKI !!!!!!" COLOR 15 '-------------------------Start Of race sequence------------------------ false.start.continue: StartRaceTime = TIMER FOR i = 1 TO 5 CALL Draw.light(i, 3) 'On efface toutes les lumiŠres NEXT i END SUB SUB todays.fastest STATIC i AS INTEGER FOR i = 1 TO 4 ' Best Time for the line ' ---------------------- IF Fast.Today.Time(i) > SavedTime(i) THEN Fast.Today.Time(i) = SavedTime(i) Fast.Today.Pilote(i) = Pilote(HeatTable(NumHeat, i)) Fast.Today.Voiture(i) = Voiture(HeatTable(NumHeat, i)) END IF ' Best Time for the driver ' ------------------------ IF SavedTime(i) < BestTime(HeatTable(NumHeat, i)) THEN BestTime(HeatTable(NumHeat, i)) = SavedTime(i) END IF ' Hall Of Fame candidat ? ' ----------------------- IF GoodTime(15) > SavedTime(i) THEN CALL insert.hall(i) END IF NEXT i END SUB