Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Pascalated ZX BASIC Demo #14 - Joker
#1
To run online, click here: RUN ONLINE


Code:
' PROGRAM Joker
' (c) ZarSoft 2022 Pascalated BASIC
' (c) ZarSoft 2023 Pascalated Boriel ZX BASIC
' Written by Ze Oliveira
' Pascalated Sinclair BASIC (c) 1987 by ZarSoft
' Pascalated BASIC Converter (c) 2021 by Zarsoft
' Pascalated Boriel (c) 2023 by ZarSoft
' ZX BASIC Compiler (c) 2008 by Boriel

#include <input.bas>  ' number = VAL INPUT(12)
#include <screen.bas> ' SCREEN$ function
#include <attr.bas>   ' ATTR function

'--- Pascalated Boriel ---
#define PROGRAM   REM
#define BEGIN    REM
'#define CONST     CONST
#define VAR       DIM
#define INTEGER   LONG
#define REAL      FLOAT
#define CHAR      STRING
'#define STRING    STRING
#define BOOLEAN   UBYTE
#define TYPE      AS
'#define WHILE    WHILE
#define REPEAT    DO
#define UNTIL     LOOP UNTIL
#define PROCEDURE  SUB
CONST   TRUE      TYPE BOOLEAN = 1
CONST   FALSE     TYPE BOOLEAN = 0

PROGRAM Joker

' CONSTant declarations
CONST black = 0
CONST blue = 1
CONST red = 2
CONST magenta = 3
CONST green = 4
CONST cyan = 5
CONST yellow = 6
CONST white = 7
CONST ScreenLin = 6
CONST ScreenCol = 8

' VARiable declarations
VAR S$(11) TYPE STRING ' scores 1.11
VAR SCORE TYPE INTEGER ' 0..10
VAR Year TYPE INTEGER ' current question
VAR Question$ TYPE STRING ' current question
VAR Correct TYPE INTEGER ' correct answer 1234
VAR Answer TYPE INTEGER ' user answer 1234
VAR NumQuestions TYPE INTEGER

PROCEDURE CountQuestions
PRINT AT 23,0;PAPER 7;INK blue;"Scanning database...";TAB 31;
PAUSE 50
LET NumQuestions = 0
RESTORE
READ Year
REPEAT
  READ Question$
  LET NumQuestions = NumQuestions+1
  READ Year
UNTIL Year <= 0
PRINT AT 23,0;PAPER 7; INK blue;NumQuestions;" questions detected.";TAB 32;
PAUSE 2*50
PRINT AT 23,0;PAPER 7; INK blue;"Press any key";TAB 31;
PAUSE 0: RANDOMIZE
END PROCEDURE

PROCEDURE DataQuestions
DATA 1936,"Alan Turing proposes the Turing Machine"
DATA 1945,"Construction of the ENIAC"
DATA 1947,"Invention of the first transistor"
DATA 1951,"Construction of the UNIVAC I"
DATA 1956,"IBM invents the first commercial hard drive"
DATA 1957,"IBM introduces FORTRAN, high-level computer language"
DATA 1958,"First integrated circuit is created"
DATA 1963,"The Digital Equipment Corporation introduces the minicomputer"
DATA 1963,"Invention of the first mouse"
DATA 1965,"Moore's Law is first proposed"
DATA 1968,"Founding of Intel"
DATA 1969,"Creation of UNIX"
DATA 1970,"Release of the first commercial microprocessor"
DATA 1970,"Release of Pascal structured language"
DATA 1971,"IBM releases the first commercial floppy disk"
DATA 1972,"Release of C programming language"
DATA 1975,"Founding of Microsoft"
DATA 1976,"Founding of Apple"
DATA 1976,"Release of the Electric Pencil"
DATA 1977,"Release of Apple II"
DATA 1979,"Release of the first spreadsheet computer program, VisiCalc"
DATA 1980,"Sinclair ZX80 is launched"
DATA 1981,"IBM releases its first personal computer, which ran MS-DOS"
DATA 1981,"Sinclair ZX81 is launched"
DATA 1982,"Sinclair ZX Spectrum is launched"
DATA 1983,"The CD-ROM hit the market, able to hold 550 megabytes"
DATA 1984,"Sinclair QL is launched"
DATA 1984,"QL arrives with SuperBASIC one of the first structured BASIC languages"
DATA 1984,"IBM develops a one-million bit RAM"
DATA 1984,"Launch of the first PDA"
DATA 1984,"Amstrad launches the CPC464."
DATA 1985,"Microsoft announces Windows"
DATA 1985,"Registration of the first dot-com domain"
DATA 1986,"Amstrad buys Sinclair computers"
DATA 1989,"Launch of the GRIDPad 1900, the first commercially successful tablet computer"
DATA 1990,"Invention of HTML"
DATA 1990,"Launch of the first internet browser"
DATA 1991,"Launch of the first commercial SSD"
DATA 1993,"Release of the NSCA Mosaic web browser"
DATA 1997,"Google Search launched"
DATA 1999,"Nvidia releases the GeForce 256"
DATA 1999,"Wi-Fi becomes widely used"
DATA 2003,"AMD introduces the Athlon 64, the first commercially available 64-bit processor"
DATA 2005,"Launch of YouTube"
DATA 2007,"Apple unveils the first iPhone"
DATA 2008,"Google and HTC launch HTC Dream, the first Android phone"
DATA 2012,"The Raspberry Pi, a credit-card-sized single-board computer is released"
DATA 2016,"The first reprogrammable quantum computer is created"
END PROCEDURE

PROCEDURE DataEnd
DATA -1,""
END PROCEDURE

PROCEDURE LoadKO
PAPER 0: INK 0: PRINT AT 0,0;
POKE 23739,111: REM disable messages
LOAD "KO" SCREEN$
POKE 23739,244: REM restore messages
BORDER 0
END PROCEDURE

PROCEDURE LoadOK
PAPER 0: INK 0: PRINT AT 0,0;
POKE 23739,111: REM disable messages
LOAD "OK" SCREEN$
POKE 23739,244: REM restore messages
BORDER 0
END PROCEDURE

PROCEDURE LoadQuestion
PAPER 0: INK 0: PRINT AT 0,0;
POKE 23739,111: REM disable messages
LOAD "QUESTION" SCREEN$
POKE 23739,244: REM restore messages
BORDER 0
END PROCEDURE

PROCEDURE WriteScore
FOR i=1 TO SCORE
  PRINT AT 21-i,26;PAPER blue;INK white;S$(i+1);"$";
NEXT i
END PROCEDURE

PROCEDURE finalization
PRINT PAPER blue;INK white;AT 23,0;" ";TAB 4;"That's all for today!";TAB 32;
IF SCORE >= 10
  LoadOK
  WriteScore
  PRINT AT 10,0;PAPER cyan;INK black;"         "
  PRINT AT 11,0;PAPER cyan;INK black;"YOU ARE A"
  PRINT AT 12,0;PAPER cyan;INK black;"COMPUTER \..\.."
  PRINT AT 13,0;PAPER cyan;INK black;"         "
  : FOR i=-11 TO 11: BEEP .01,i: BEEP .01,ABS(i): NEXT i
  PAUSE 3*50
ELSEIF SCORE >= 7
  LoadOK
  WriteScore
  PRINT AT 10,0;PAPER green;INK black;"         "
  PRINT AT 11,0;PAPER green;INK black;"CONGRATU-"
  PRINT AT 12,0;PAPER green;INK black;"LATIONS! \''\''"
  PRINT AT 13,0;PAPER green;INK black;"         "
  : FOR i=-11 TO 11: BEEP .01,i: BEEP .01,ABS(i): NEXT i
  PAUSE 3*50
ELSEIF SCORE >= 4
  LoadOK
  WriteScore
  PRINT AT 11,0;PAPER white;INK black;"         "
  PRINT AT 12,0;PAPER white;INK black;"Nice try!\..\.."
  PRINT AT 13,0;PAPER white;INK black;"         "
  : FOR i=-11 TO 11: BEEP .01,i: BEEP .01,ABS(i): NEXT i
  PAUSE 3*50
ELSEIF SCORE >= 1
  LoadKO
  WriteScore
  PRINT AT  9,0;PAPER magenta;INK black;"          "
  PRINT AT 10,0;PAPER magenta;INK black;"You should"
  PRINT AT 11,0;PAPER magenta;INK black;"upgrade   "
  PRINT AT 12,0;PAPER magenta;INK black;"your      \..\.."
  PRINT AT 13,0;PAPER magenta;INK black;"memory!   "
  PRINT AT 14,0;PAPER magenta;INK black;"          "
  : FOR i=11 TO -11 STEP -1: BEEP .01,i: BEEP .01,ABS(i): NEXT i
  PAUSE 3*50
ELSE
  LoadKO
  WriteScore
  PRINT AT 10,0;PAPER red;INK white;"         "
  PRINT AT 11,0;PAPER red;INK white;" You are "
  PRINT AT 12,0;PAPER red;INK white;" a rock! ";INK black;"\''\''"
  PRINT AT 13,0;PAPER red;INK white;"         "
  : FOR i=11 TO -11 STEP -1: BEEP .01,i: BEEP .01,ABS(i): NEXT i
  PAUSE 3*50
ENDIF
PAUSE 0
BORDER white: PAPER white: INK black: CLS
PRINT "Pascalated Boriel ZX BASIC demo"
END PROCEDURE

PROCEDURE CheckAnswer
IF Answer = Correct
  LoadOK
  LET SCORE = SCORE+1
  PRINT AT 11,0;PAPER green;INK black;"        "
  PRINT AT 12,0;PAPER green;INK black;" RIGHT! \..\.."
  PRINT AT 13,0;PAPER green;INK black;"        "
  PRINT AT 21-SCORE,26;PAPER blue;INK white;S$(SCORE+1);"$";
  WriteScore
  : FOR i=-11 TO 11: BEEP .01,i: BEEP .01,ABS(i): NEXT i
ELSE
  LoadKO
  PRINT AT 11,0;PAPER magenta;INK black;"        "
  PRINT AT 12,0;PAPER magenta;INK black;" WRONG! \..\.."
  PRINT AT 13,0;PAPER magenta;INK black;"        "
  PRINT AT 21-SCORE,26;PAPER blue;INK white;S$(SCORE+1);"$";
  WriteScore
  : FOR i=11 TO -11 STEP -1: BEEP .01,i: BEEP .01,ABS(i): NEXT i
ENDIF
PAUSE 1*50
REM PROC finalization: REM test final messages
END PROCEDURE

PROCEDURE InputAnswer
REPEAT
  PAUSE 0: LET k$ = INKEY$
UNTIL k$ >= "1" AND k$ <= "4"
BEEP .1,5
LET Answer = VAL k$
PRINT AT 23,(Answer-1)*8;PAPER magenta;OVER 1;"        ";
RANDOMIZE
END PROCEDURE

PROCEDURE WriteQuestion
VAR segment TYPE INTEGER
REM write question
LET segment = 10
LET k$ = Question$+"          "
LET LinStart = 12-INT(LEN Question$/segment/2+1)
FOR i=1 TO LEN Question$ STEP segment
  PRINT AT LinStart+i/segment,0;PAPER yellow;INK 0;k$(i-1 TO i+segment-1-1);
NEXT i
PRINT AT 12,segment;PAPER yellow;INK 0;"\..\..";
REM write answers
LET Correct = 1+INT(RND*4)
PRINT AT 23,0;
FOR i=1 TO 4
  PRINT " ";PAPER blue;INK white;i;"-";Year-Correct+i;PAPER black;" ";
NEXT i
END PROCEDURE

PROCEDURE SelectQuestion
RESTORE
LET NumQuestion = INT(RND*NumQuestions)
FOR i = 1 TO NumQuestion
  READ Year,Question$
NEXT i
' PRINT AT 0,0;INK 7;"resposta: ";Year
END PROCEDURE

PROCEDURE InitProgram
LET SCORE = 0
'DIM S$(11)
LET S$( 0+1)= "    0"
LET S$( 1+1)= "  100"
LET S$( 2+1)= "  250"
LET S$( 3+1)= "  500"
LET S$( 4+1)= " 1000"
LET S$( 5+1)= " 2500"
LET S$( 6+1)= " 5000"
LET S$( 7+1)= "10000"
LET S$( 8+1)= "25000"
LET S$( 9+1)= "50000"
LET S$(10+1)= "75000"
CountQuestions
:FOR i=-11 TO 11: BEEP .01,i: BEEP .01,ABS(i): NEXT i
BORDER 0
END PROCEDURE

PROCEDURE Game
InitProgram
FOR i=1 TO 10
  LoadQuestion
  WriteScore
  SelectQuestion
  WriteQuestion
  InputAnswer
  CheckAnswer
NEXT i
finalization
END PROCEDURE

PROGRAM Joker
PRINT
PRINT "Pascalated Boriel ZX BASIC demo"
PAUSE 1*50
BORDER 7: PAPER 7: INK 0: CLS
LOAD "SPLASH" SCREEN$
BORDER white
PAUSE 2*50
PAPER 0
Game
END PROGRAM
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)