Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Pascalated ZX BASIC Demo #4 - Cannonball
#1
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
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)