-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathamonguspretentiousclone.bas
More file actions
94 lines (81 loc) · 2.61 KB
/
Copy pathamonguspretentiousclone.bas
File metadata and controls
94 lines (81 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
OPTION _EXPLICIT
RANDOMIZE TIMER
SCREEN _NEWIMAGE(1000, 800, 32)
TYPE object
x AS SINGLE
y AS SINGLE
END TYPE
DIM SHARED player AS object
DIM SHARED camera AS object
DIM SHARED map AS LONG
DIM playerSpeed AS SINGLE
DIM i AS LONG
map = _NEWIMAGE(_WIDTH * 3, _HEIGHT * 2, 32)
_DEST map
FOR i = 1 TO 50
CircleFill _WIDTH * RND, _HEIGHT * RND, 1000 * RND, _RGB32(255 * RND, 255 * RND, 255 * RND, 255 * RND)
NEXT
_DEST 0
player.x = _WIDTH / 2
player.y = _HEIGHT / 2
playerSpeed = 5
CONST keyUP = 18432
CONST keyDOWN = 20480
CONST keyLEFT = 19200
CONST keyRIGHT = 19712
DO
IF _KEYDOWN(keyUP) THEN player.y = player.y - playerSpeed
IF _KEYDOWN(keyDOWN) THEN player.y = player.y + playerSpeed
IF _KEYDOWN(keyLEFT) THEN player.x = player.x - playerSpeed
IF _KEYDOWN(keyRIGHT) THEN player.x = player.x + playerSpeed
IF player.x < 0 THEN player.x = 0
IF player.x > _WIDTH(map) THEN player.x = _WIDTH(map)
IF player.y < 0 THEN player.y = 0
IF player.y > _HEIGHT(map) THEN player.y = _HEIGHT(map)
adjustCamera
CLS
_PUTIMAGE (camera.x, camera.y), map
CircleFill player.x + camera.x, player.y + camera.y, 20, _RGB32(255)
_DISPLAY
_LIMIT 60
LOOP
SUB adjustCamera
IF player.x + camera.x > _WIDTH / 2 OR player.x + camera.x < _WIDTH / 2 THEN
camera.x = _WIDTH / 2 - player.x
END IF
IF camera.x > 0 THEN camera.x = 0
IF camera.x < -(_WIDTH(map) - _WIDTH) THEN camera.x = -(_WIDTH(map) - _WIDTH)
IF player.y + camera.y > _HEIGHT / 2 OR player.y + camera.y < _HEIGHT / 2 THEN
camera.y = _HEIGHT / 2 - player.y
END IF
IF camera.y > 0 THEN camera.y = 0
IF camera.y < -(_HEIGHT(map) - _HEIGHT) THEN camera.y = -(_HEIGHT(map) - _HEIGHT)
END SUB
SUB CircleFill (CX AS INTEGER, CY AS INTEGER, R AS INTEGER, C AS _UNSIGNED LONG)
' CX = center x coordinate
' CY = center y coordinate
' R = radius
' C = fill color
DIM Radius AS INTEGER, RadiusError AS INTEGER
DIM X AS INTEGER, Y AS INTEGER
Radius = ABS(R)
RadiusError = -Radius
X = Radius
Y = 0
IF Radius = 0 THEN PSET (CX, CY), C: EXIT SUB
LINE (CX - X, CY)-(CX + X, CY), C, BF
WHILE X > Y
RadiusError = RadiusError + Y * 2 + 1
IF RadiusError >= 0 THEN
IF X <> Y + 1 THEN
LINE (CX - Y, CY - X)-(CX + Y, CY - X), C, BF
LINE (CX - Y, CY + X)-(CX + Y, CY + X), C, BF
END IF
X = X - 1
RadiusError = RadiusError - X * 2
END IF
Y = Y + 1
LINE (CX - X, CY - Y)-(CX + X, CY - Y), C, BF
LINE (CX - X, CY + Y)-(CX + X, CY + Y), C, BF
WEND
END SUB