{{htmlmetatags>metatag-robots=()
metatag-title=(LET'S MOVE THE WAGON | ugBASIC User Manual)
metatag-keywords=(ugBASIC,Commodore 64,Commodore PLUS/4,ZX Spectrum)
metatag-description=(An isomorphic language for retrocomputers)
metatag-media-og:image=(:ugbasic:logo-ugbasic-fb.png)
metatag-og:title=(LET'S MOVE THE WAGON | ugBASIC User Manual)
metatag-og:description=(An isomorphic language for retrocomputers)
}}
====== ugBASIC User Manual ======
===== LET'S MOVE THE WAGON =====
==== PURPOSE ====
Follow the course at https://www.facebook.com/groups/867151224158600 SPOSTARE IL CARRELLO Segui il corso su at https://www.facebook.com/groups/867151224158600 DÉPLACER LE PANIER Suivez le cours sur https://www.facebook.com/groups/867151224158600
==== SOURCE CODE ====
BITMAP ENABLE(16)
POSITIVE CONST startX = 1
POSITIVE CONST startY = 1
POSITIVE CONST wagonSpeed = 4
POSITIVE CONST wagonSpeedX = ( wagonSpeed * SCREEN SPRITE RATIO X ) / 100
POSITIVE CONST wagonSpeedY = ( wagonSpeed * SCREEN SPRITE RATIO Y ) / 100
wagonImage := LOAD IMAGE( "/usr/src/mine-rails/resources/wagon.png")
POSITIVE CONST wagonImageWidth = IMAGE WIDTH( wagonImage )
POSITIVE CONST wagonImageHeight = IMAGE HEIGHT( wagonImage )
POSITIVE CONST minWagonX = SCREEN BORDER X
POSITIVE CONST minWagonY = SCREEN BORDER Y
POSITIVE CONST screenWidthInWagonCoords = ( SCREEN WIDTH * SCREEN SPRITE RATIO X ) / 100
POSITIVE CONST screenHeightInWagonCoords = ( SCREEN HEIGHT * SCREEN SPRITE RATIO Y ) / 100
POSITIVE CONST maxWagonX = SCREEN BORDER X + screenWidthInWagonCoords - wagonImageWidth
POSITIVE CONST maxWagonY = SCREEN BORDER Y + screenHeightInWagonCoords - wagonImageHeight
DIM x AS POSITION = minWagonX
DIM y AS POSITION = minWagonY
DIM px AS POSITION = -1
DIM py AS POSITION = -1
DIM dx AS POSITION = 0
DIM dy AS POSITION = 0
wagon = CSPRITE( wagonImage )
PROCEDURE prepareBitmaps ON CPC, ATARI, ATARIXL, C128Z, COCO, DRAGON, MO5, PC128OP, ZX
SHARED wagonImage
SHARED wagonBackground
wagonBackground := NEW IMAGE( wagonImageWidth, wagonImageHeight )
PUT IMAGE wagonImage AT 0, 0
GET IMAGE wagonBackground FROM 0, 0
CLS BLACK
END PROC
PROCEDURE readWagonMovement
SHARED x, y, dx, dy
right = JRIGHT(0) OR KEY PRESSED( KEY S )
left = JLEFT(0) OR KEY PRESSED( KEY A )
up = JUP(0) OR KEY PRESSED( KEY W )
down = JDOWN(0) OR KEY PRESSED( KEY Z )
IF (dx = 0) AND (dy = 0) THEN
IF right AND ( x < maxWagonX ) THEN
dx = wagonSpeedX
ELSE IF left AND ( x > minWagonX ) THEN
dx = -wagonSpeedX
ELSE IF down AND ( y < maxWagonY ) THEN
dy = wagonSpeedY
ELSE IF up AND ( y > minWagonY ) THEN
dy = -wagonSpeedY
ENDIF
ENDIF
END PROC
PROCEDURE drawWagonSprite ON C64, C128, COLECO, MSX, SC3000, SG1000
SHARED x, y
SHARED wagon
SPRITE wagon ENABLE AT x, y
END PROC
PROCEDURE drawWagonBitmap ON CPC, ATARI, ATARIXL, C128Z, COCO, DRAGON, MO5, PC128OP, ZX
SHARED x, y
SHARED px, py
SHARED wagonImage
IF ( px <> x ) OR ( py <> y ) THEN
IF (px<>-1) AND (py<>-1) THEN
PUT IMAGE wagonBackground AT px, py
ENDIF
GET IMAGE wagonBackground FROM x, y
PUT IMAGE wagonImage AT x,y WITH TRANSPARENCY
px = x
py = y
ENDIF
END PROC
DIM k AS BYTE
PROCEDURE drawWagon
SHARED x, y, dx, dy
SHARED wagon
SHARED k
ADD x, dx
IF x < minWagonX THEN
x = minWagonX
ENDIF
IF x > maxWagonX THEN
x = maxWagonX
ENDIF
ADD y, dy
IF y < minWagonY THEN
y = minWagonY
ENDIF
IF y > maxWagonY THEN
y = maxWagonY
ENDIF
drawWagonSprite[] ON C64, C128, COLECO, MSX, SC3000, SG1000
drawWagonBitmap[] ON CPC, ATARI, ATARIXL, C128Z, COCO, DRAGON, MO5, PC128OP, ZX
dx = 0
dy = 0
END PROC
PROCEDURE drawWagonTimed ON C128Z
DIM t AS WORD
IF ( TIMER - t ) > 5 THEN
drawWagon[]
t = TIMER
ENDIF
END PROC
prepareBitmaps[] ON CPC, ATARI, ATARIXL, C128Z, COCO, DRAGON, MO5, PC128OP, ZX
EVERY 5 TICKS CALL drawWagon ON C64, C128, CPC, ATARI, ATARIXL, COCO, COLECO, DRAGON, MO5, MSX, PC128OP, SC3000, SG1000, ZX
CLS
EVERY ON
DO
readWagonMovement[]
drawWagonTimed[] ON C128Z
LOOP
==== SOURCE FILE ====
* ''[[https://github.com/spotlessmind1975/ugbasic/tree/main/examples/main_014.bas|main_014.bas]]''
==== HOW TO COMPILE AND RUN ====
The instructions here refer to compiling the example from the command line. For Microsoft Windows users we suggest using **[[https://spotlessmind1975.itch.io/ugbasic-ide|UGBASIC-IDE]]**, which allows you to compile the example with just one click.=== ATARI 400/800 family ===
In order to compile and run the example, you need to have the Altirra emulator, and in particular that the ''altirra'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.atari main_014.bas -o example.xex
altirra example.xex
# Windows
ugbc.atari.exe main_014.bas -o example.xex
altirra example.xex
=== ATARI 600XL/800XL/1200XL/XG(SE) family ===
In order to compile and run the example, you need to have the Altirra emulator, and in particular that the ''altirra'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.atarixl main_014.bas -o example.xex
altirra example.xex
# Windows
ugbc.atarixl.exe main_014.bas -o example.xex
altirra example.xex
=== Commodore 64 ===
In order to compile and run the example, you need to have the VICE emulator, and in particular that the ''x64sc'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.c64 main_014.bas -o example.prg
x64sc example.prg
# Windows
ugbc.c64.exe main_014.bas -o example.prg
x64sc example.prg
=== Commodore PLUS/4 ===
== Using YAPE ==
In order to run the example, you need to have the YAPE emulator. In particular that the ''yape'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.plus4 main_014.bas -o example.prg
yape example.prg
# Windows
ugbc.plus4.exe main_014.bas -o example.prg
yape example.prg
== Using VICE ==
In order to run the example, you need to have the VICE emulator. In particular that the ''xplus4'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.plus4 main_014.bas -o example.prg
xplus4 example.prg
# Windows
ugbc.plus4.exe main_014.bas -o example.prg
xplus4 example.prg
=== Dragon 32 ===
In order to compile and run the example, you need to have the XROAR emulator, and in particular that the ''xroar'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.d32 main_014.bas -o example.bin
xroar -rompath (your rom path) example.bin
# Windows
ugbc.d32.exe main_014.bas -o example.bin
xroar.exe -rompath (your rom path) example.bin
=== Dragon 64 ===
In order to compile and run the example, you need to have the XROAR emulator, and in particular that the ''xroar'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.d64 main_014.bas -o example.bin
xroar -rompath (your rom path) example.bin
# Windows
ugbc.d64.exe main_014.bas -o example.bin
xroar.exe -rompath (your rom path) example.bin
=== PC128 Olivetti Prodest ===
In order to compile and run the example, you need to have the DCMOTO emulator, and in particular that the ''dcmoto'' executable is accessible.
Then, type this command on the command line and on the emulator:
# Linux
ugbc.pc128op main_014.bas -o example.k7
dcmoto
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
# Windows
ugbc.pc128op.exe main_014.bas -o example.k7
dcmoto
(choose example.k7)
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
=== Thomson MO5 ===
In order to compile and run the example, you need to have the DCMOTO emulator, and in particular that the ''dcmoto'' executable is accessible.
Then, type this command on the command line and on the emulator:
# Linux
ugbc.pc128op main_014.bas -o example.k7
dcmoto
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
# Windows
ugbc.pc128op.exe main_014.bas -o example.k7
dcmoto
(choose example.k7)
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
=== Commodore VIC-20 ===
In order to compile and run the example, you need to have the VICE emulator, and in particular that the ''xvic'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.vic20 main_014.bas -o example.prg
xvic --memory 24k example.prg
# Windows
ugbc.vic20.exe main_014.bas -o example.prg
xvic --memory 24k example.prg
=== ZX Spectrum ===
In order to compile and run the example, you need to have the Speccy emulator, and in particular that the ''speccy'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.zx main_014.bas -o example.tap
Speccy example.tap
# Windows
ugbc.zx.exe main_014.bas -o example.tap
Speccy example.tap
=== MSX ===
In order to compile and run the example, you need to have the openMsx or the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
== openMSX ==
# Linux
ugbc.msx1 main_014.bas -o example.rom
openmsx -cart example.rom
# Windows
ugbc.msx1.exe main_014.bas -o example.rom
openmsx -cart example.rom
== blueMSX ==
# Linux
ugbc.msx1 main_014.bas -o example.rom
bluemsx example.rom
# Windows
ugbc.msx1.exe main_014.bas -o example.rom
bluemsx example.rom
=== ColecoVision ===
In order to compile and run the example, you need to have the openMsx or the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
== openMSX ==
# Linux
ugbc.coleco main_014.bas -o example.rom
openmsx -machine \"COL - ColecoVision\" -cart example.rom
# Windows
ugbc.coleco.exe main_014.bas -o example.rom
bluemsx -machine \"COL - ColecoVision\" example.rom
== blueMSX ==
# Linux
ugbc.coleco main_014.bas -o example.rom
bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom
# Windows
ugbc.coleco.exe main_014.bas -o example.rom
bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom
=== SEGA SC-3000 ===
In order to compile and run the example, you need to have the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.sc3000 main_014.bas -o example.rom
bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom
# Windows
ugbc.sc3000.exe main_014.bas -o example.rom
bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom
=== SEGA SG-1000 ===
In order to compile and run the example, you need to have the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.sg1000 main_014.bas -o example.rom
bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom
# Windows
ugbc.sg1000.exe main_014.bas -o example.rom
bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom
==== ANY PROBLEM? ====
If you have found a problem trying to run this example, if you think there is a bug or, more simply, you would like it to be improved, [[https://github.com/spotlessmind1975/ugbasic/issues/new?title=IMPROVE LET'S MOVE THE WAGON|open an issue]] for this example on GitHub. Thank you!===== POWERED BY =====
[[:ugbasic:user:examples|{{ :ugbasic:user:logo-ugbasic.png?nolink&600 |}}]]