Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 259
» Latest member: Jeffreybub
» Forum threads: 1,074
» Forum posts: 6,434

Full Statistics

Online Users
There are currently 315 online users.
» 0 Member(s) | 313 Guest(s)
Baidu, Bing

Latest Threads
.tap file code not execut...
Forum: Help & Support
Last Post: Zoran
04-28-2025, 10:59 AM
» Replies: 4
» Views: 183
Exit from more than one l...
Forum: Wishlist
Last Post: Duefectu
04-23-2025, 10:06 PM
» Replies: 3
» Views: 257
put small ASM programs li...
Forum: How-To & Tutorials
Last Post: Zoran
04-18-2025, 02:02 PM
» Replies: 6
» Views: 1,516
Creating +3 Menus - Loadi...
Forum: Help & Support
Last Post: merlinkv
04-16-2025, 02:08 PM
» Replies: 6
» Views: 512
Randomize not very random...
Forum: Help & Support
Last Post: Zoran
04-08-2025, 10:40 AM
» Replies: 4
» Views: 414
Scope rules
Forum: Bug Reports
Last Post: Zoran
04-04-2025, 09:46 AM
» Replies: 2
» Views: 286
Using constants not allow...
Forum: Bug Reports
Last Post: baltasarq
03-19-2025, 10:00 PM
» Replies: 8
» Views: 1,004
404 page not found
Forum: Documentation
Last Post: boriel
03-08-2025, 07:16 PM
» Replies: 5
» Views: 2,844
Spectrum keywords codes
Forum: Bug Reports
Last Post: boriel
03-08-2025, 11:00 AM
» Replies: 1
» Views: 393
ZXodus][Engine
Forum: ZX Basic Compiler
Last Post: boriel
02-19-2025, 11:43 PM
» Replies: 69
» Views: 213,420

 
  404 page not found
Posted by: zarsoft - 02-26-2023, 07:18 PM - Forum: Documentation - Replies (5)

This page does not exist:

https://zxbasic.readthedocs.io/en/latest/library/point/

Print this item

  Pascalated ZX BASIC Demo #5 - Predator
Posted by: zarsoft - 02-20-2023, 09:34 PM - Forum: Gallery - No Replies

To run online, click here: RUN ONLINE



Code:
' PROGRAM Predator
' Demo for the Pascalated language
' 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>
#include <screen.bas>

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

' Variable Declarations
VAR Name$ TYPE STRING ' player's name
VAR HighScore TYPE INTEGER ' high HighScore
VAR Score TYPE INTEGER ' Score in this game
VAR UserLin TYPE INTEGER
VAR UserCol TYPE INTEGER
VAR UserLin0 TYPE INTEGER
VAR UserCol0 TYPE INTEGER
VAR PredatorLin TYPE INTEGER
VAR PredatorCol TYPE INTEGER
VAR PredatorLin0 TYPE INTEGER
VAR PredatorCol0 TYPE INTEGER
VAR GameOver TYPE BOOLEAN
VAR Walker$ TYPE STRING ' 2 frames walking
VAR frame TYPE INTEGER

PROCEDURE ShowScores
PRINT AT 22,0;"Score:";Score;TAB 13;"High score: ";HighScore;TAB 13;"by ";Name$;
END PROCEDURE

PROCEDURE InitEnemy
LET PredatorLin = 1+INT (RND*20): LET PredatorCol = 30
LET PredatorLin0 = PredatorLin: LET PredatorCol0 = PredatorCol
END PROCEDURE

PROCEDURE CaughtInTrap
VAR N TYPE INTEGER
PRINT AT PredatorLin0,PredatorCol0;INK 2;" ";
PRINT AT PredatorLin,PredatorCol;INK 3;"*";
LET Score=Score+50
ShowScores
FOR N=-30 TO 30 STEP 5: BEEP .02,ABS N: NEXT N
PRINT AT PredatorLin,PredatorCol;" ";
InitEnemy
END PROCEDURE

PROCEDURE InitArena
VAR N TYPE INTEGER
BORDER 4: PAPER 4: INK 1: CLS
POKE 23609,50
LET GameOver = FALSE
REM InitUser
LET UserLin = 1+INT (RND*20): LET UserCol=1
LET UserLin0 = UserLin: LET UserCol0 = UserCol
InitEnemy
LET Score=0
FOR N=0 TO 31: PRINT AT 0,N;PAPER 1;INK 5;"X";AT 21,N;"X": NEXT N
FOR N=0 TO 21: PRINT AT N,0;PAPER 1;INK 5;"X";AT N,31;"X": NEXT N
FOR N=1 TO 30: PRINT AT 2+INT (18*RND),2+INT (29*RND);"O": NEXT N
PRINT AT 0,11;PAPER 1;INK 7;"-PREDATOR-"
PRINT AT UserLin,UserCol;INK 2;Walker$(1);
PRINT AT PredatorLin,PredatorCol;INK 2;"\{vi}\C\{vn}"
END PROCEDURE

PROCEDURE TheEnd
VAR N TYPE INTEGER
PRINT INK 3;AT UserLin,UserCol;"#";OVER 1;CHR$ 8;"X"
FOR N=-30 TO 30 STEP 3: BEEP .02,ABS N: BEEP .03,N: NEXT N
IF HighScore<Score THEN
  LET HighScore=Score
  PRINT AT 22,0;"New high score";TAB 0;TAB 31;AT 23,0;"What's your name? ";
  Name$ = INPUT(15)
ENDIF
END PROCEDURE

PROCEDURE WaitForUser
PRINT AT 23,0;"     Pascalated BASIC demo";
BEEP .1,5: BEEP .1,10: BEEP .1,5: BEEP .1,0
REPEAT
  PAUSE 1
  LET k$=INKEY$
UNTIL k$ = ""
PAUSE 0
BEEP .1,5: BEEP .1,10: BEEP .1,0
PRINT AT 23,0;"                          ";
ShowScores
END PROCEDURE

PROCEDURE InitSprites
REM \A\B\C
REM \A
POKE USR "A"+0,BIN 00011000
POKE USR "A"+1,BIN 00010000
POKE USR "A"+2,BIN 00111000
POKE USR "A"+3,BIN 11010111
POKE USR "A"+4,BIN 00010000
POKE USR "A"+5,BIN 00101000
POKE USR "A"+6,BIN 01000100
POKE USR "A"+7,BIN 10000010
REM \B
POKE USR "B"+0,BIN 00011000
POKE USR "B"+1,BIN 00010000
POKE USR "B"+2,BIN 00111000
POKE USR "B"+3,BIN 01010100
POKE USR "B"+4,BIN 10010100
POKE USR "B"+5,BIN 00101000
POKE USR "B"+6,BIN 00101000
POKE USR "B"+7,BIN 01000100
REM \C
POKE USR "C"+0,BIN 11000011
POKE USR "C"+1,BIN 10000001
POKE USR "C"+2,BIN 00100100
POKE USR "C"+3,BIN 00000000
POKE USR "C"+4,BIN 01011010
POKE USR "C"+5,BIN 01111110
POKE USR "C"+6,BIN 01111110
POKE USR "C"+7,BIN 00000000
END PROCEDURE

PROCEDURE Game
REPEAT
  REM Process keys
  PAUSE 10
  LET k$ = INKEY$
  IF k$="5" OR k$="o" THEN IF UserCol>1 THEN BEEP .02,5*RND: LET UserCol=UserCol-1
  IF k$="6" OR k$="a" THEN IF UserLin<20 THEN BEEP .02,5*RND: LET UserLin=UserLin+1
  IF k$="7" OR k$="q" THEN IF UserLin>1 THEN BEEP .02,5*RND: LET UserLin=UserLin-1
  IF k$="8" OR k$="p" THEN IF UserCol<30 THEN BEEP .02,5*RND: LET UserCol=UserCol+1
  REM show user
  PRINT AT UserLin0,UserCol0;INK 5;".";
  PRINT AT UserLin,UserCol;INK 2;Walker$(frame);: LET frame = 3-frame
  LET UserLin0=UserLin: LET UserCol0=UserCol
  REM move predator
  IF ABS (PredatorLin-UserLin) > ABS (PredatorCol-UserCol) THEN LET PredatorLin = PredatorLin+SGN (UserLin-PredatorLin)
  IF ABS (PredatorLin-UserLin) <= ABS (PredatorCol-UserCol) THEN LET PredatorCol = PredatorCol+SGN (UserCol-PredatorCol)
  REM test trap
  IF SCREEN$ (PredatorLin,PredatorCol)="O" THEN CaughtInTrap
  REM show predator
  PRINT AT PredatorLin0,PredatorCol0;" ";
  PRINT AT PredatorLin,PredatorCol;INK 2;"\{vi}\C\{vn}";
  LET PredatorLin0=PredatorLin: LET PredatorCol0=PredatorCol
  BEEP .01,0
  REM test game status
  IF UserLin=PredatorLin THEN IF UserCol=PredatorCol THEN LET GameOver = TRUE
UNTIL GameOver
END PROCEDURE

PROCEDURE MainRoutine
REPEAT
  InitArena
  WaitForUser
  Game
  TheEnd
UNTIL FALSE
END PROCEDURE

PROCEDURE InitProgram
Name$ = "Username"
LET frame = 1
LET HighScore=0
InitSprites: LET Walker$=" \A\B"
END PROCEDURE

PROGRAM Predator
REM (c) 2022 Zarsoft
REM Hunter - Written by ZE OLIVEIRA, 1984
REM Pascalated version 2022, 2023
InitProgram
MainRoutine
' last 2 lines are going to be deleted
PRINT AT 23,0;
END PROGRAM

Print this item

  Pascalated ZX BASIC Demo #4 - Cannonball
Posted by: zarsoft - 02-10-2023, 12:14 PM - Forum: Gallery - No Replies

To run online, click here: RUN ONLINE


Code:
' PROGRAM Cannonball
' Demo for the Pascalated language
' 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>

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

' Variable Declarations
CONST gravity TYPE REAL = 9.8
CONST power TYPE REAL = 10.0
CONST k TYPE REAL = 0.04
VAR near TYPE BOOLEAN

' Variable Declarations
VAR enemies TYPE INTEGER
VAR angle TYPE REAL
VAR G,H TYPE REAL ' target coordinates

PROCEDURE GameOver
INK 1
PRINT AT 21,0;" Well done!"
PRINT AT 21,17;" Goodbye!"
END PROCEDURE

PROCEDURE Boom
LET enemies=enemies-1
INK 0
PRINT PAPER 6;AT 0,15;" Enemies: ";enemies;"  "
INK 3
OVER 1
CIRCLE G,H,4
REM +
PLOT G+5,H: DRAW 5,0
PLOT G,H+5: DRAW 0,5
PLOT G-5,H: DRAW -5,0
PLOT G,H-5: DRAW 0,-5
REM X
PLOT G+5,H+5: DRAW 5,5
PLOT G-5,H+5: DRAW -5,5
PLOT G-5,H-5: DRAW -5,-5
PLOT G+5,H-5: DRAW 5,-5
OVER 0
:FOR q=5 TO 1 STEP -.4: BEEP .01,q: NEXT q
PAUSE 88
END PROCEDURE

PROCEDURE DrawShot
VAR X,Y TYPE REAL
VAR X0,Y0 TYPE REAL
VAR X1,Y1 TYPE REAL
VAR DX,DY TYPE REAL
'
LET X=0.0 : LET DX=power*COS(angle)
LET Y=88.0 : LET DY=power*SIN(angle)
LET X1=X : LET Y1 = Y
LET X0=X1 : LET Y0 = Y1
INK 3
PLOT X1,Y1
REPEAT
  DRAW X1-X0,Y1-Y0
  LET X0=X1 : LET Y0 = Y1
  LET DY=DY-k*gravity : REM gravity
  LET X=X+DX : REM differential increment
  LET Y=Y+DY : REM differential increment
  LET X1=INT(X+0.5)
  LET Y1=INT(Y+0.5)
  IF Y1>175 THEN LET Y1=175
  LET dist = SQR( (Y-H)*(Y-H) + (X-G)*(X-G) )
  LET near = dist < 0.5*(ABS(DY)+ABS(DX))
UNTIL X>255 OR Y<0 OR near
END PROCEDURE

PROCEDURE InputAngle
REPEAT
  PRINT AT 21,0;"Angle = ";
  angle = VAL INPUT(9)
UNTIL angle>-90 AND angle<90
PRINT angle
LET angle = angle*PI/180 : REM degrees to radians
RANDOMIZE
END PROCEDURE

PROCEDURE SetTarget
LET G=INT (RND*120+60)
LET H=INT (RND*110+35)
INK 1
CIRCLE G,H,4
END PROCEDURE

PROCEDURE DrawScreen
CLS
PRINT INVERSE 1;" CANNONBALL ";
PRINT AT 23,1;INK 6;"Pascalated BASIC Contest demo";
INK 0
PRINT PAPER 6;AT 0,15;" Enemies: ";enemies;"  "
PLOT 0,0: DRAW 0,175: PLOT 0,88: DRAW 255,0
END PROCEDURE

PROCEDURE Shot
DrawScreen
SetTarget
InputAngle
DrawShot
IF near THEN Boom
END PROCEDURE

PROCEDURE InitVariables
LET enemies = 10
RANDOMIZE
END PROCEDURE

PROCEDURE PlayGame
InitVariables
REPEAT
  Shot
UNTIL enemies = 0
GameOver
END PROCEDURE

PROGRAM CANNONBALL
REM BALA 5 - differential version
REM (c) 2023 by Zarsoft
PlayGame
' last 2 lines are going to be deleted
PRINT AT 23,0;
END PROGRAM

Print this item

  Pascalated ZX BASIC Demo #3 - Multiplication Table
Posted by: zarsoft - 02-04-2023, 02:54 PM - Forum: Gallery - Replies (1)

To run online, click here: RUN ONLINE


Code:
' PROGRAM MULTIPLICATION TABLE
' Demo for Pascalated BASIC contest
' Version ZX SPECTRUM (c) 1983 by Zarsoft
' Version ZX BASIC Boriel (c) 2023 by Zarsoft
' Language: Pascalated ZX BASIC (BORIEL) compiled

#include <input.bas>

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

REM Variable Declarations
VAR GoodScore TYPE BOOLEAN = FALSE : REM many right answers
VAR Name$ TYPE STRING = "" : REM User name
VAR RightAnswers TYPE INTEGER = 0 : REM number of right answers
VAR Question$ TYPE STRING : REM the question
VAR Answer TYPE INTEGER = 0 : REM user answer
VAR Level TYPE INTEGER = 0 : REM difficulty level
VAR Attempt TYPE INTEGER : REM number of questions

PROCEDURE Write (line$ TYPE STRING)
REM POKE 23692,9
FOR n=0 TO LEN(line$)-1
  PRINT line$(n);
  BEEP .02,10+10*RND
NEXT n
END PROCEDURE

PROCEDURE WriteLine  (line$ TYPE STRING)
Write(line$)
PRINT
END PROCEDURE

PROCEDURE CheckAnswer
VAR line$ TYPE STRING
PRINT
IF ABS (VAL Question$-Answer) > .01
  WriteLine( " Wrong, "+Name$+"." )
  WriteLine( " "+Question$+" = "+STR$( VAL( Question$ ) ) )
ELSE
  LET RightAnswers = RightAnswers + 1
  WriteLine( " Right, "+Name$+"." )
  WriteLine( " "+Question$+" = "+STR$( Answer ) )
ENDIF
PAUSE 25
WriteLine( " "+STR$ RightAnswers +" right answers in "+STR$ Attempt+"." )
PAUSE 2*50
END PROCEDURE

PROCEDURE AskQuestion
VAR reply$ TYPE STRING
REPEAT
  Write( " "+Question$+" = " )
  reply$ = INPUT(9) : PRINT reply$
UNTIL VAL reply$ > 0
LET Answer = VAL reply$
END PROCEDURE

PROCEDURE ChooseNumbers
VAR N1 TYPE INTEGER
VAR N2 TYPE INTEGER
RANDOMIZE
N1 = 2*Level+INT (4*Level*RND)
N2 = 2*Level+INT (3*Level*RND)
LET Question$ = STR$ N1 + " * " + STR$ N2
PRINT
END PROCEDURE

PROCEDURE AskOneQuestion
ChooseNumbers
AskQuestion
CheckAnswer
END PROCEDURE

PROCEDURE ChooseDifficulty
WriteLine( "What difficulty do you like? " )
REPEAT
  Write( "1, 2 or 3? " )
  Level = VAL INPUT (9) : PRINT Level
UNTIL Level >= 1 AND Level <= 3
PRINT
END PROCEDURE

PROCEDURE GameOver
PRINT
WriteLine( " Well done!" )
WriteLine( " You don't need me anymore..." )
WriteLine( " Goodbye!" )
END PROCEDURE

PROCEDURE GradeTheTest
PRINT
IF RightAnswers > 8
  LET GoodScore = TRUE
ELSE
  LET GoodScore = FALSE
  PRINT
  WriteLine(" "+STR$ RightAnswers + " right answers in 10?!")
  WriteLine(" This is not good...")
  WriteLine(" Let's try again!")
ENDIF
END PROCEDURE

PROCEDURE AskTenQuestions
PRINT
ChooseDifficulty
LET RightAnswers = 0
PRINT CHR$(13, 13, 13, 13, 13, 13)
FOR Attempt = 1 TO 10
  AskOneQuestion
NEXT Attempt
END PROCEDURE

PROCEDURE InitVariables
LET RightAnswers = 0
LET GoodScore = 0
END PROCEDURE

PROCEDURE Hello
VAR line$ TYPE STRING
CLS
PRINT "Demo for "
PRINT "2023 Pascalated BASIC contest"
PRINT
PRINT "(c) 2023 by Zarsoft"
PRINT
PRINT "Compiled language:"
PRINT "Pascalated ZX BASIC (Boriel)"
PRINT CHR$(13, 13, 13, 13, 13)
WriteLine(" Hi, Human!")
REPEAT
  Write(" What is your name? ")
  Name$ = INPUT (20) : PRINT Name$
UNTIL LEN Name$ >= 2
PRINT
WriteLine(" Hi, "+Name$+"!")
WriteLine(" I am your new teacher.")
PAUSE 50
PRINT
WriteLine(" I'm going to see if you know the multiplication table...")
END PROCEDURE

PROCEDURE MainRoutine
Hello
REPEAT
  InitVariables
  AskTenQuestions
  GradeTheTest
UNTIL GoodScore
GameOver
END PROCEDURE

PROGRAM MainRoutine
MainRoutine
' last 2 lines are going to be deleted
PRINT CHR$(13, 13, 13)
END PROGRAM

Print this item

  Please do not abort (solved)
Posted by: zarsoft - 01-28-2023, 01:21 PM - Forum: Help & Support - Replies (4)

Help! This program resets the computer.

What am I doing wrong?
Can the compiler be fixed?

Code:
11 DIM start1 AS LONG = 16384
12 DIM start2 AS LONG = start1+8*8*32
18 DIM p(192) AS LONG

36 GO SUB 300
40 STOP

200 REM test index y
220 LET y=1
230 POKE p(y+1)+1,255
295 RETURN

300 REM generate plain
310 GO SUB 500
390 RETURN

500 REM init index y
510 DIM addr AS LONG = start1
520 DIM ix AS LONG = 191
530 REM --- ciclo1 ---
540 LET p(ix+1)=addr
550 LET addr=addr+32
580 IF addr<start2 THEN GO TO 530
790 RETURN

Print this item

  PRINT '''''' (solved)
Posted by: zarsoft - 01-27-2023, 08:48 PM - Forum: Help & Support - Replies (1)

How do I translate this to ZX BASIC?

PRINT ''''''

(print several blank lines)

Print this item

  Pascalated ZX BASIC Demo #2 - Laser
Posted by: zarsoft - 01-27-2023, 11:49 AM - Forum: Gallery - No Replies

To run online, click here: RUN ONLINE


Code:
' PROGRAM LASER
' Demo for Pascalated BASIC contest
' Version ZX81 (c) 1982 by Zarsoft
' Version ZX BASIC Boriel (c) 2023 by Zarsoft
' Language: Pascalated ZX BASIC (BORIEL) compiled

#include <input.bas>

'--- Pascalated Boriel ---
#define VAR       DIM
#define INTEGER   LONG
#define REAL      FLOAT
#define TYPE      AS
#define REPEAT    DO
#define UNTIL     LOOP UNTIL
#define PROCEDURE SUB
#define PROGRAM   REM
VAR     TRUE      TYPE INTEGER = 1
VAR     FALSE     TYPE INTEGER = 0

REM Variable declarations
REM VAR - Global variables
REM LINA routine variables
VAR SX0 = 0 : VAR SXN = 255
VAR SY0 = 0 : VAR SYN = 175-10
VAR X0 = 0  : VAR Y0 = 88 : ' first point
VAR M TYPE REAL : VAR B TYPE REAL : ' y = mX+b
REM other variables
VAR enemies = 0
VAR enemyX = 0
VAR enemyY = 0
VAR TRON = 1

PROCEDURE LINA
VAR x,y TYPE REAL
VAR dx,dy TYPE INTEGER
VAR w$ TYPE STRING = "0" : ' string starts at index 0
LET y = M*SX0+B: IF y >= SY0 THEN IF y <= SYN THEN LET w$ = w$+CHR$(SX0)+CHR$(y)
LET y = M*SXN+B: IF y >= SY0 THEN IF y <= SYN THEN LET w$ = w$+CHR$(SXN)+CHR$(y)
LET x = (SY0-B)/(M+1E-15): IF x >= SX0 THEN IF x <= SXN THEN LET w$ = w$+CHR$(x)+CHR$(SY0)
LET x = (SYN-B)/(M+1E-15): IF x >= SX0 THEN IF x <= SXN THEN LET w$ = w$+CHR$(x)+CHR$(SYN)
IF LEN(w$)-1 > 2 THEN
  PLOT INK 8;CODE(w$(1)),CODE(w$(2))
  FOR i=3 TO LEN(w$)-1 STEP 2
    dx = CODE(w$(i))-CODE(w$(i-2))
    ' dy = dy*0 + CODE(w$(i+1))-CODE(w$(i-1)) : ' need to cast to INTEGER (bug?!)
    ' dy = -1 + CODE(w$(i+1))-CODE(w$(i-1)) + 1 : ' need to cast to INTEGER (bug?!)
    dy = CAST(INTEGER,0) + CODE(w$(i+1)) - CODE(w$(i-1)) : ' need to cast to INTEGER (bug?!)
    DRAW INK 8;dx,dy
  NEXT i
END IF
END PROCEDURE

PROCEDURE GameOver
INK 1
PRINT AT 21,5;"> Well done! Goodbye.";
END PROCEDURE

PROCEDURE Explosion
INK 3
CIRCLE enemyX-1,enemyY+1,4
CIRCLE enemyX+1,enemyY+1,4
CIRCLE enemyX+1,enemyY-1,4
OVER 0
FOR q=1 TO 30: BEEP .002,20+5*RND: NEXT q
PAUSE 100
END PROCEDURE

PROCEDURE OnTarget
LET SXN = enemyX
OVER 1: INK 2
LINA : PAUSE 5 : LINA
OVER 0
LINA
LET enemies = enemies-1
PRINT PAPER 6;INK 0;AT 0,15;" Enemies: ";enemies;"  "
Explosion
END PROCEDURE

PROCEDURE TestShot (angle TYPE REAL)
VAR y TYPE REAL
LET M = TAN(angle): LET B = Y0-M*X0
LET y = M*enemyX+B:
IF ABS(y-enemyY) < 5 THEN
  OnTarget
ELSE
  LET SXN = 255
  INK 2
  LINA
  :FOR q=-10 TO 29: BEEP .005,50-ABS q: NEXT q
ENDIF
END PROCEDURE

FUNCTION ReadAngle TYPE REAL
VAR angle TYPE REAL
REPEAT
  PRINT AT 23,0;"Angle = ";
  angle = VAL( INPUT(5) )
UNTIL angle > -90 AND angle < 90
PRINT AT 23,0;"        ";
LET angle = angle*PI/180 : REM degrees to radians
RETURN angle
END FUNCTION

PROCEDURE ShowEnemy
LET enemyX = 64+RND*182
LET enemyY = 44+RND*122
INK 1
CIRCLE enemyX,enemyY,4
END PROCEDURE

PROCEDURE DrawScreen
CLS
PRINT PAPER 0;INK 7;AT 0,0;" LASER "
PRINT PAPER 6;INK 0;AT 0,15;" Enemies: ";enemies;"  "
INK 0
PLOT 0,0: DRAW 0,175 : ' vertical line
PLOT 0,88: DRAW 255,0 : ' horizontal line
END PROCEDURE

PROCEDURE InitVariables
LET enemies = 5
END PROCEDURE

PROCEDURE MainRoutine
VAR angle TYPE REAL
InitVariables
REPEAT
  DrawScreen
  ShowEnemy
  angle = ReadAngle
  TestShot(angle)
UNTIL enemies = 0
GameOver
END PROCEDURE

PROGRAM Laser
MainRoutine
PROGRAM END

Print this item

  -1 = 255 (solved)
Posted by: zarsoft - 01-19-2023, 02:54 PM - Forum: Bug Reports - Replies (1)

Why this gives different results?
How can I force to give -1 ?

PRINT CODE("012"(1)) - CODE("012"(2)) ' gives -1
LET w$="012": PRINT CODE(w$(1))-CODE(w$(2)) ' gives 255

Print this item

  Pascalated ZX BASIC Demo
Posted by: zarsoft - 01-19-2023, 10:08 AM - Forum: Gallery - Replies (2)

To run online, click here: RUN ONLINE


Code:
' PROGRAM factorials
' Demo for the Pascalated language
' Language: Pascalated ZX BASIC (BORIEL) (compiled)
' Pascalated Sinclair BASIC (c) 1987 by ZarSoft
' Pascalated Boriel (c) 2023 by ZarSoft
' ZX BASIC compiler was created by Boriel

#include <input.bas>

'--- Pascalated Boriel ---
#define VAR       DIM
#define INTEGER   LONG
#define REAL      FLOAT
#define TYPE      AS
#define REPEAT    DO
#define UNTIL     LOOP UNTIL
#define PROCEDURE SUB
#define PROGRAM   REM

REM Variable declarations
REM VAR - Global variables
REM Uppercase are different from lowercase
VAR limit TYPE INTEGER : REM max argument to build the list

PROCEDURE Introduction
CLS
PRINT AT 13,0
PRINT "+-----------------+"
PRINT "| factorial list  |"
PRINT "+-----------------+"
PRINT " Demonstration for"
PRINT " Pascalated ZX BASIC (Boriel)"
PRINT " (c) 2023 by Zarsoft"
PRINT
PRINT
END PROCEDURE

PROCEDURE GetLimit
REPEAT
  PRINT "Max argument = ";
  limit = VAL( INPUT(9) ) : PRINT limit
  IF limit >= 12 THEN
    PRINT
    PRINT "Must be lower than 34."
    PRINT "Try again."
    PRINT
  ELSE IF limit < 0 THEN
    PRINT
    PRINT "Must be greater than 0."
    PRINT "Try again."
    PRINT
  ELSE
    PRINT
    PRINT "Valid input."
    PRINT
  END IF
UNTIL (limit >= 0) AND (limit <= 33)
END PROCEDURE

FUNCTION CalculateFactorial (argument TYPE INTEGER) TYPE REAL
VAR result TYPE REAL
LET result = 1
WHILE argument > 1
  LET result = result * argument
  LET argument = argument-1
END WHILE
RETURN result
END FUNCTION

PROCEDURE WriteFactorials
VAR w TYPE INTEGER
VAR argument TYPE INTEGER
VAR result TYPE REAL
PRINT
FOR w = limit TO 0 STEP -1
  LET argument = w
  PRINT "fact(";argument;") = ";
  result = CalculateFactorial(argument)
  PRINT result
NEXT w
END PROCEDURE

PROCEDURE MainPROCEDURE
Introduction
GetLimit
REPEAT
  WriteFactorials
  PRINT
  PRINT "Write 0 to terminate."
  GetLimit
UNTIL limit = 0
END PROCEDURE

PROGRAM factorials
MainPROCEDURE
PROGRAM END

Print this item

  First public release of ZX BASIC
Posted by: zarsoft - 01-18-2023, 04:57 PM - Forum: Documentation - Replies (1)

When was the first public release of ZX BASIC?
2010?

Print this item