1
+ @ echo off & setlocal enableDelayedExpansion
2
+
3
+ if " %~1 " neq " " goto :%~1
4
+
5
+ call :init 60 30
6
+ call :sprites
7
+
8
+ rem adjust to your preference. 1 = slowest, 100000 = fastest
9
+ rem set "delay=25"
10
+ rem set /p "delay=%\e%[38;5;46m%\e%[15;19HDelay %\e%[38;5;39m(%\e%[38;5;228mdefault%\e%[0m=%\e%[38;5;14m25%\e%[38;5;39m)%\e%[0m: "
11
+ REM set "delay=100000"
12
+
13
+ set /a " difficulty = 1"
14
+ set /p " difficulty = %\e% [38;5;196m%\e% [16;14HDifficulty [1-5] %\e% [38;5;39m(%\e% [38;5;228mdefault%\e% [0m= %\e% [38;5;14m1%\e% [38;5;39m)%\e% [0m: "
15
+ rem --------------------------------------
16
+
17
+ set /a " speed = 1"
18
+ set /a " jump = 6"
19
+ set /a " floor = hei - 6"
20
+ set /a " player.x = 6"
21
+ set /a " player.y = floor"
22
+ set /a " sunOsc = 1"
23
+
24
+ rem if !delay! gtr 100000 set "delay=100000"
25
+ if !difficulty! gtr 5 set " difficulty = 5"
26
+ title Chrome Game - difficulty: !difficulty! ^ | W to jump
27
+
28
+ for /l %%i in (1,1,10) do (
29
+ set /a " particle[%%i].x = (! random! %% wid) + ! random! %% wid"
30
+ set /a " particle[%%i].y = ! random! %% (hei - floor + 1) + floor - 1"
31
+ )
32
+ for /l %%i in (1,1,2) do (
33
+ set /a " cloud[%%i].x = ! random! %% wid"
34
+ set /a " cloud[%%i].y = ! random! %% 10 + 3"
35
+ set /a " cloud[%%i].i = ! random! %% 3 + 1"
36
+ )
37
+
38
+ " %~F0 " Controller > " %temp% \%~n0 _signal.txt" | " %~F0 " Main < " %temp% \%~n0 _signal.txt"
39
+ exit
40
+
41
+ :Main
42
+
43
+ for /f " tokens=1-4 delims=:.," %%a in (" !time: =0 ! " ) do set /a " t1 = (((1%%a * 60)+ 1%%b )* 60+ 1%%c )* 100+ 1%%d - 36610100"
44
+
45
+ for /l %% # in () do (
46
+
47
+ for /f " tokens=1-4 delims=:.," %%a in (" !time: =0 ! " ) do set /a " t2 = (((1%%a * 60)+ 1%%b )* 60+ 1%%c )* 100+ 1%%d - 36610100, dt = t2- t1"
48
+
49
+ if !dt! gtr 5 (
50
+
51
+ set /a " t1 = t2"
52
+
53
+ REM set /a "frameCount+=1"
54
+ set /a " $TT += dt","fps = 60 * (1000 / (dt + 1)) / 1000","$sec = $TT / 100 %% 60","$min = $TT / 100 / 60 %% 60","frameCount = (frameCount + 1) %% 0x7FFFFFFF"
55
+ if " !$sec:~1 ! " equ " " set " $sec = 0!$sec! "
56
+ title FPS:!fps! Time: !$min! :!$sec! Frames: !frameCount! /!$TT!
57
+
58
+ rem sun
59
+ set /a " sunRate = frameCount %% 7"
60
+ if !sunRate! equ 0 (
61
+ set /a " sunID += sunOsc
62
+ )
63
+ if ! sunID! leq 0 set / a " sunID = 0" , " sunOsc *= - 1"
64
+ if ! sunID! geq 2 set / a " sunID = 2" , " sunOsc *= - 1"
65
+ for %%i in (! sunID! ) do (
66
+ set "scrn = ! scrn! %\e%[2;7H! sun[%%i ]! "
67
+ )
68
+
69
+ rem ground particles
70
+ for / l %%i in (1,1,10) do (
71
+ set / a "particle[%%i].x -= 2"
72
+ if ! particle[%%i ].x! leq 1 set / a "particle[%%i].x = wid"
73
+ if ! particle[%%i ].x! lss %wid% (
74
+ set "scrn = ! scrn! %\e%[48;5;34;38;5;232m%\e%[! particle[%%i ].y! ;! particle[%%i ].x! H."
75
+ )
76
+ )
77
+ rem clouds
78
+ for / l %%i in (1,1,2) do (
79
+ set / a "rate = frameCount %% 4"
80
+ if ! rate! equ 0 set / a "cloud[%%i].x -= cloud[%%i ].i"
81
+ if ! cloud[%%i ].x! leq 1 set / a "cloud[%%i].x = wid", "cloud[%%i].y = ! random! %% 10 + 3"
82
+ if ! cloud[%%i ].x! lss %wid% (
83
+ set "scrn = ! scrn! %\e%[! cloud[%%i ].y! ;! cloud[%%i ].x! H! cloud[%%i ]! "
84
+ )
85
+ )
86
+
87
+ rem score
88
+ set " icon = "
89
+ set " return = "
90
+ set / a " string = frameCount" , " length = 0"
91
+ set " str = x! frameCount! "
92
+ for / l %%b in (4,- 1,0) do (
93
+ set / a "length |= 1 << %%b "
94
+ for %%c in (! length! ) do (
95
+ if "! str:~ %%c ,1! " equ "" (
96
+ set / a "length &= ~ 1<< %%b "
97
+ )
98
+ )
99
+ )
100
+ set / a " length -= 1"
101
+ for / l %%i in (0,1,! length! ) do (
102
+ set "return = ! return! "! string:~ %%~i ,1! " "
103
+ )
104
+ for %%i in (! return! ) do (
105
+ set "icon = ! icon!! [%%~i ]! %\e%[C"
106
+ )
107
+ set " scrn = ! scrn! %\e%[8;27H%\e%[48;5;228;38;5;16m! icon! "
108
+
109
+ if defined spawned (
110
+ set / a "block.x -= speed * (difficulty + 1)"
111
+
112
+ set /a " end = block.w - block.x - 1"
113
+ if !block.x! leq !end! (
114
+ for %%i in (x y w h) do set " block.%%i = "
115
+ set " spawned = "
116
+ )
117
+
118
+ set /a " a = player.x,b = player.y,c = 4,d = 4,e = block.x,f = block.y,g = block.w-1,h = block.h- 1" , " $collisionRectRect = %@collisionRectRect% "
119
+
120
+ for /f " tokens=1,2" %%x in (" !block.w! !block.h! " ) do (
121
+ set " scrn = !scrn!%\e% [!block.y! ;!block.x! H!box[%%~x ][%%~y ]! "
122
+ )
123
+ ) else (
124
+
125
+ set /a " spawnBlock = frameCount %% 50"
126
+
127
+ if !spawnBlock! equ 0 (
128
+ set " spawned = true"
129
+ set /a " block.x = wid" , " block.y = floor" , " block.w = ! random! %% 3 + 2" , " block.h = ! random! %% 3 + 2"
130
+ )
131
+ )
132
+
133
+ set " com = " & set /p " com = "
134
+ if /i " !com:~0 ,4 ! " equ " quit" (
135
+ exit
136
+ )
137
+ if /i " !com:~0 ,1 ! " equ " w" if !player.y! equ %floor% (
138
+ set /a " velocity += jump * - 1"
139
+ )
140
+
141
+ set /a " acceleration += 1" , " velocity += acceleration" , " acceleration = 0" , " player.y += velocity"
142
+
143
+ if !player.y! geq %floor% (
144
+ set /a " player.y = floor" , " velocity = 0"
145
+ )
146
+
147
+ echo %\e% [2J%\e% [H%background%!scrn!%\e% [!player.y! ;!player.x! H!player!
148
+ set " scrn = "
149
+
150
+ if !$collisionRectRect! gtr 0 ( exit )
151
+
152
+ rem for /l %%Z in (0,%delay%,1000000) do rem
153
+
154
+ )
155
+
156
+ )2> nul
157
+ exit
158
+
159
+
160
+ :Controller
161
+ Setlocal DISABLEdelayedExpansion
162
+ REM Environment handling allows use of ! key
163
+ For /l %%C in () do (
164
+ Set " Key = "
165
+ for /f " delims=" %%A in ('C:\Windows\System32\xcopy.exe /w " %~f0 " " %~f0 " 2^ > nul ') do If not Defined Key (
166
+ set " key = %%A "
167
+ Setlocal ENABLEdelayedExpansion
168
+ set key = ^ !KEY:~-1 !
169
+ If " !key! " == " !TAB! " (
170
+ > " %SignalFile:Signal =Abort % " Echo(
171
+ < nul Set /P " = quit"
172
+ EXIT
173
+ )
174
+ 1 > %~n0 txt.tmp (echo(!key!!sub! )
175
+ copy %~n0 txt.tmp /a %~n0 txt2.tmp /b > nul
176
+ type %~n0 txt2.tmp
177
+ del %~n0 txt.tmp %~n0 txt2.tmp
178
+ Endlocal
179
+ )
180
+ )
181
+
182
+
183
+
184
+
185
+
186
+ :init
187
+ for /f " tokens=1 delims==" %%a in ('set') do (
188
+ set " unload = true"
189
+ for %%b in ( cd Path ComSpec SystemRoot temp windir ) do if /i " %%a " == " %%b " set " unload = false"
190
+ if " !unload! " == " true" set " %%a = "
191
+ )
192
+
193
+ set " signalFile = %temp% \%~n0 _signal.txt"
194
+ del /f /q " %SignalFile% " 2 > nul 1 > nul
195
+ del /f /q " %SignalFile:Signal =Stop % " 2 > nul 1 > nul
196
+ del /f /q " %SignalFile:Signal =Abort % " 2 > nul 1 > nul
197
+
198
+ for /f " delims=" %%T in ('forfiles /p " %~dp0 ." /m " %~nx0 " /c " cmd /c echo(0x09" ') do set " TAB = %%T "
199
+
200
+ set /a " wid = %~1,hei = %~2 " & mode %~1 ,%~2
201
+
202
+ for /f %%a in ('echo prompt $E^ | cmd') do set " \e = %%a " & < nul set /p " = [?25l"
203
+
204
+ (set \n=^^ ^
205
+ %= This creates an escaped Line Feed - DO NOT ALTER =%
206
+ )
207
+
208
+ REM %collisionRectRect% x1 y1 w1 h1 x2 y2 w2 h2 => 1 if true, else 0
209
+ set " @collisionRectRect = ((~((a+c)-e)>>31)&1) & ((~((e+g)-a)>>31)&1) & ((~((b+d)-f)>>31)&1) & ((~((f+h)-b)>>31)&1)"
210
+ goto :eof
211
+
212
+ :sprites
213
+ set " [1] = %\e% [C %\e% [2D%\e% [B %\e% [2D%\e% [B² %\e% [2D%\e% [B² %\e% [3A"
214
+ set " [2] = %\e% [2D%\e% [B%\e% [C %\e% [2D%\e% [B %\e% [C%\e% [2D%\e% [B %\e% [3A"
215
+ set " [3] = %\e% [3D%\e% [B%\e% [2C %\e% [3D%\e% [B%\e% [C %\e% [3D%\e% [B %\e% [3A"
216
+ set " [4] = ² %\e% [3D%\e% [B ² %\e% [3D%\e% [B %\e% [3D%\e% [B%\e% [2C %\e% [3A"
217
+ set " [5] = %\e% [2D%\e% [B %\e% [C%\e% [2D%\e% [B%\e% [C %\e% [2D%\e% [B %\e% [3A"
218
+ set " [6] = %\e% [2C%\e% [3D%\e% [B %\e% [3D%\e% [B %\e% [C %\e% [3D%\e% [B %\e% [3A"
219
+ set " [7] = %\e% [3D%\e% [B%\e% [2C %\e% [3D%\e% [B²² %\e% [3D%\e% [B²² %\e% [3A"
220
+ set " [8] = %\e% [3D%\e% [B %\e% [3D%\e% [B %\e% [C %\e% [3D%\e% [B %\e% [3A"
221
+ set " [9] = %\e% [3D%\e% [B %\e% [C %\e% [3D%\e% [B %\e% [3D%\e% [B%\e% [2C %\e% [3A"
222
+ set " [0] = %\e% [3D%\e% [B %\e% [C %\e% [3D%\e% [B %\e% [C %\e% [3D%\e% [B %\e% [3A"
223
+
224
+ set " cloud[1] = %\e% [48;5;15m%\e% [2A%\e% 7 %\e% 8%\e% [B %\e% [0m"
225
+ set " cloud[2] = %\e% [48;5;15m%\e% [2A%\e% 7 %\e% 8%\e% [B%\e% [D %\e% [0m"
226
+
227
+ set " box[2][2] = %\e% [48;5;1m%\e% [2A%\e% 7 %\e% 8%\e% [B %\e% [0m"
228
+ set " box[4][2] = %\e% [48;5;1m%\e% [2A%\e% 7 %\e% 8%\e% [B %\e% [0m"
229
+ set " box[2][4] = %\e% [48;5;1m%\e% [2A%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B %\e% [0m"
230
+ set " box[3][3] = %\e% [48;5;201m%\e% [3A%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B %\e% [0m"
231
+ set " box[3][4] = %\e% [48;5;201m%\e% [3A%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B %\e% [0m"
232
+ set " box[4][3] = %\e% [48;5;201m%\e% [3A%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B %\e% [0m"
233
+ set " box[4][4] = %\e% [48;5;196m%\e% [4A%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B %\e% [0m"
234
+ set " box[2][3] = %\e% [48;5;226m%\e% [3A%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B %\e% [0m"
235
+ set " box[3][2] = %\e% [48;5;202m%\e% [2A%\e% 7 %\e% 8%\e% [B %\e% [0m"
236
+
237
+ set " player = %\e% [48;5;57m%\e% [4A%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B %\e% [48;5;16m%\e% [2A%\e% [3D %\e% [C %\e% [9D%\e% [4A%\e% [48;2;190;90;190m%\e% [3C%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% [C%\e% [48;5;15m %\e% [48;2;190;90;190m%\e% 8%\e% [B%\e% [C%\e% 7 %\e% 8%\e% [B%\e% [2D %\e% [0m%\e% [0m"
238
+ set " background = %\e% [48;5;39m%\e% [0J%\e% [23;1H%\e% [48;5;34m%\e% [0J"
239
+
240
+ set " sun[0] = %\e% [48;5;226m%\e% 7%\e% [2C %\e% 8%\e% [B%\e% 7%\e% [C %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% [48;5;16m %\e% [48;5;226m %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% 7%\e% [C %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% [2C %\e% [0m"
241
+ set " sun[1] = %\e% [48;5;226m%\e% 7%\e% [2C %\e% 8%\e% [B%\e% 7%\e% [C %\e% 8%\e% [B%\e% 7 %\e% [48;5;16m %\e% [48;5;226m %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% 7%\e% [C %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% [2C %\e% [6A%\e% [5D%\e% [48;5;39;38;5;202m\%\e% [5C/%\e% [6B%\e% [7D/%\e% [5C\%\e% [0m"
242
+ set " sun[2] = %\e% [48;5;226m%\e% 7%\e% [C %\e% 8%\e% [B%\e% 7 %\e% [48;5;16m %\e% [48;5;226m %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% 7 %\e% 8%\e% [B%\e% 7 %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% 7 %\e% [48;5;16m %\e% [48;5;226m %\e% 8%\e% [B%\e% [C %\e% [5A%\e% [5D%\e% [48;5;39;38;5;202m\%\e% [4C/%\e% [5B%\e% [6D/%\e% [4C\%\e% [0m"
243
+ goto :eof
0 commit comments