Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 3
Регистрация: 10.09.2013
Сообщений: 126

Как сделать дополнительное окно?

30.10.2013, 19:21. Показов 2073. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, хотел спросить как сделать дополнительное окно, тоесть перед тем как зайти в игру выходило там надпись и загрузка и потом токо меню игры
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.10.2013, 19:21
Ответы с готовыми решениями:

Как скрыть окно браузера в панели задач, а потом обратно сделать его видимым?
как скрыть "от любопытных глаз" окно работающего браузера в панели задач не закрывая его , при помощи запуска bat файла, а потом обратно...

Как сделать так, чтобы консольное окно при открытии было определённого размера?
Для конкурса елок нужно))) https://www.cyberforum.ru/contests/thread1060675-page6.html#post5582150

Модальные окна. Сделать, чтобы дополнительное окно не выходило за границу главного
по нажатию кнопки в главном окне, главное окно блокируется и появляется дополнительное, чаще всего оно выходит за пределы главного, как...

12
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
30.10.2013, 23:18
И при чем здесь БАТ ?
0
2 / 2 / 3
Регистрация: 10.09.2013
Сообщений: 126
31.10.2013, 19:25  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
И при чем здесь БАТ ?
Ну как бы я все это делаю в БАТ файле!!!
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
01.11.2013, 05:45
А, ну тогда что в этом БАТ-файле есть на данный момент?
А вообще смысл всего этого?
Неужели имитация ожидания прогрузки игры, как в Battlefield 3 ?
0
2 / 2 / 3
Регистрация: 10.09.2013
Сообщений: 126
01.11.2013, 07:13  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
А, ну тогда что в этом БАТ-файле есть на данный момент?
А вообще смысл всего этого?
Неужели имитация ожидания прогрузки игры, как в Battlefield 3 ?
У меня есть игра змейка, теперь хочу добавить загрузку игры ну там просто написать название игры и все, вот незнаю как добавить выделить новое окно для этого
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
02.11.2013, 00:54
Такая загрузка подойдет:

Bash
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
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
mode con lines=34
color 00
echo.
 
call :GetConsoleWidth
call :GetDEL
 
Set DEC=5
set S=2
set E=%conWidth%
set /A HZ=%conWidth%/7
 
For /L %%H in (4,1,%HZ%) do (
  echo.
  set /A E-=5
  For /L %%N in (1,1,!S!) do set /p "=%DEL%  "<NUL
  For /L %%N in (!S!,1,!E!) do >NUL ping 127.1 -n 1& set /p "=*"<NUL
  echo.
  For /L %%N in (1,1,!E!) do set /p "=%DEL%  "<NUL
  echo *
  set /A S+=5
  For /L %%N in (1,1,!E!) do set /p "=%DEL%  "<NUL
  set B=-1
  For /L %%N in (!E!,-1,!S!) do (
    set /A B+=1
    For /L %%N in (1,1,!B!) do (
      set /p "=%DEL%"<NUL
    )
    For /L %%N in (1,1,!B!) do (
      set /p "=*"<NUL
    )
  )
  echo *
  For /L %%N in (1,1,!S!) do set /p "=%DEL%  "<NUL
  set /p "=*"<NUL
  call :ChangeColor
)
md "%temp%\_ColorText" 2>nul& >NUL move /y "Default" "%temp%\_ColorText\Y A - Z M E Y A =)))"& pushd "%temp%\_ColorText"
findstr /V /a:0E "I Like It :)" "Y A - Z M E Y A =)))*" 2>NUL
popd& rd /s /q "%temp%\_ColorText"
 
pause>NUL
Exit /B
 
:GetConsoleWidth
For /F "skip=4 tokens=1,2" %%v In ('mode con') Do Set /A conWidth=%%w - 5& Exit /B
 
:GetDEL
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%A in (1) do rem"') do set "DEL=%%a"& <nul set /p "=%%a">Default
Exit /B
 
:ChangeColor
set /A DEC+=1
cmd /c exit /b %DEC%
color 1%=ExitCode%
Миниатюры
Как сделать дополнительное окно?  
0
2 / 2 / 3
Регистрация: 10.09.2013
Сообщений: 126
02.11.2013, 12:53  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Такая загрузка подойдет:

Bash
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
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
mode con lines=34
color 00
echo.
 
call :GetConsoleWidth
call :GetDEL
 
Set DEC=5
set S=2
set E=%conWidth%
set /A HZ=%conWidth%/7
 
For /L %%H in (4,1,%HZ%) do (
  echo.
  set /A E-=5
  For /L %%N in (1,1,!S!) do set /p "=%DEL%  "<NUL
  For /L %%N in (!S!,1,!E!) do >NUL ping 127.1 -n 1& set /p "=*"<NUL
  echo.
  For /L %%N in (1,1,!E!) do set /p "=%DEL%  "<NUL
  echo *
  set /A S+=5
  For /L %%N in (1,1,!E!) do set /p "=%DEL%  "<NUL
  set B=-1
  For /L %%N in (!E!,-1,!S!) do (
    set /A B+=1
    For /L %%N in (1,1,!B!) do (
      set /p "=%DEL%"<NUL
    )
    For /L %%N in (1,1,!B!) do (
      set /p "=*"<NUL
    )
  )
  echo *
  For /L %%N in (1,1,!S!) do set /p "=%DEL%  "<NUL
  set /p "=*"<NUL
  call :ChangeColor
)
md "%temp%\_ColorText" 2>nul& >NUL move /y "Default" "%temp%\_ColorText\Y A - Z M E Y A =)))"& pushd "%temp%\_ColorText"
findstr /V /a:0E "I Like It :)" "Y A - Z M E Y A =)))*" 2>NUL
popd& rd /s /q "%temp%\_ColorText"
 
pause>NUL
Exit /B
 
:GetConsoleWidth
For /F "skip=4 tokens=1,2" %%v In ('mode con') Do Set /A conWidth=%%w - 5& Exit /B
 
:GetDEL
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%A in (1) do rem"') do set "DEL=%%a"& <nul set /p "=%%a">Default
Exit /B
 
:ChangeColor
set /A DEC+=1
cmd /c exit /b %DEC%
color 1%=ExitCode%
Большое Спасибо да подойдет, есть последний вопрос куда его впихнуть, чет у меня не получается вот код
Bash
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: SNAKE.BAT - A pure Windows batch implementation of the classic game
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF
if "%~1" == "startGame" goto :game
if "%~1" == "startController" goto :controller
::---------------------------------------------------------------------
:: setup some global variables used by both the game and the controller
 
setlocal disableDelayedExpansion
:getSession
if defined temp (set "tempFileBase=%temp%\") else if defined tmp set "tempFileBase=%tmp%\"
set "tempFileBase=%tempFileBase%Snake%time::=_%"
set "keyFile=%tempFileBase%_key.txt"
set "cmdFile=%tempFileBase%_cmd.txt"
set "gameLock=%tempFileBase%_gameLock.txt"
::------------------------------------------
:: Lock this game session and launch.
:: Loop back and try a new session if failure.
:: Cleanup and exit when finished
 
call :launch 7>"%gameLock%" || goto :getSession
del "%tempFileBase%*"
exit /b
::------------------------------------------
:launch the game and the controller
 
copy nul "%keyFile%" >nul
copy nul "%cmdFile%" >nul
start "" /b cmd /c ^""%~f0" startController 9^>^>"%keyFile%" 8^<"%cmdFile%" 2^>nul ^>nul^"
cmd /c ^""%~f0" startGame 9^<"%keyFile%" 8^>^>"%cmdFile%" ^<nul^"
echo(
::--------------------------------------------------------------
:: Upon exit, wait for the controller to close before returning
 
:close
2>nul (>>"%keyFile%" call )||goto :close
exit /b 0
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:game
title %~nx0
cls
::---------------------------------------
:: user configurable options
::   Note - do not use the * ~ ! or = key
 
set "up=W"
set "down=S"
set "left=A"
set "right=D"
 
set "space= "
set "bound=:"
set "food=$"
set "head=@"
set "body=+"
set "death=X"
 
set "width=50"   max=99
set "height=30"  max=99
:: max playing field: (width-2)*(height-2) <= 1365
 
::----------------------------
:: resize the console window
 
set /a cols=width+1, lines=height+10, area=(width-2)*(height-2)
if %area% gtr 1365 (
  echo ERROR: Playfield area too large
  %sendCmd% quit
  exit
)
if %lines% lss 14 set lines=14
if %cols% lss 46 set cols=46
mode con: cols=%cols% lines=%lines%
::----------------------------
:: define variables
 
set "playerSpace=%space%%food%"
 
set "spinner1=-"
set "spinner2=\"
set "spinner3=|"
set "spinner4=/"
set "spinner= spinner1 spinner2 spinner3 spinner4 "
 
set "xDiff%up%=+0"
set "xDiff%down%=+0"
set "xDiff%left%=-1"
set "xDiff%right%=+1"
 
set "yDiff%up%=-1"
set "yDiff%down%=+1"
set "yDiff%left%=+0"
set "yDiff%right%=+0"
 
set "%up%Axis=Y"
set "%down%Axis=Y"
set "%left%Axis=X"
set "%right%Axis=X"
 
set "delay1=20"
set "delay2=15"
set "delay3=10"
set "delay4=7"
set "delay5=5"
set "delay6=3"
set "delay0=0"
 
set "desc1=Sluggard"
set "desc2=Crawl"
set "desc3=Slow"
set "desc4=Normal"
set "desc5=Fast"
set "desc6=Insane"
set "desc0=Unreal"
 
set "spinnerDelay=3"
 
set /a "width-=1, height-=1"
::---------------------------
:: define macros
 
::define a Line Feed (newline) string (normally only used as !LF!)
set LF=^
 
::Above 2 blank lines are required - do not remove
 
::define a newline with line continuation
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
 
:: setErr
:::  Sets the ERRORLEVEL to 1
set "setErr=(call)"
 
:: clrErr
:::  Sets the ERRORLEVEL to 0
set "clrErr=(call )"
 
 
:: sendCmd  command
:::  sends a command to the controller
set "sendCmd=>&8 echo"
 
 
:: getKey  ValidKey [ValidKey...]
::: Check for keypress from the controller. Only accept a ValidKey.
::: Token delimiters and poison characters must be quoted.
::: Accept any key if no ValidKey specified.
::: Return result in Key variable. Key is undefined if no valid keypress.
set getKey=%\n%
for %%# in (1 2) do if %%#==2 (%\n%
  set key=%\n%
  set inKey=%\n%
  set keyTest=%\n%
  ^<^&9 set /p "inKey="%\n%
  if defined inKey (%\n%
    set inKey=!inKey:~0,-1!%\n%
    for %%C in (!args!) do set /a keyTest=1^&if /i !inKey! equ %%~C set key=!inKey!%\n%
  )%\n%
  if not defined keyTest set key=!inKey!%\n%
) else set args=
 
 
:: draw
:::  draws the board
set draw=%\n%
cls%\n%
for /l %%Y in (0,1,%height%) do echo(!line%%Y!%\n%
echo Speed=!Difficulty!%\n%
echo Score=!score!
 
 
:: test  X  Y  ValueListVar
:::  tests if value at coordinates X,Y is within contents of ValueListVar
set test=%\n%
for %%# in (1 2) do if %%#==2 (for /f "tokens=1-3" %%1 in ("!args!") do (%\n%
  for %%A in ("!line%%2:~%%1,1!") do if "!%%3:%%~A=!" neq "!%%3!" %clrErr% else %setErr%%\n%
)) else set args=
 
 
:: plot  X  Y  ValueVar
:::  places contents of ValueVar at coordinates X,Y
set plot=%\n%
for %%# in (1 2) do if %%#==2 (for /f "tokens=1-3" %%1 in ("!args!") do (%\n%
  set "part2=!line%%2:~%%1!"%\n%
  set "line%%2=!line%%2:~0,%%1!!%%3!!part2:~1!"%\n%
)) else set args=
 
 
::--------------------------------------
:: start the game
setlocal enableDelayedExpansion
call :initialize
::--------------------------------------
:: main loop (infinite loop)
for /l %%. in (1 0 1) do (
 
  %=== compute time since last move ===%
  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, tDiff=t2-t1"
  if !tDiff! lss 0 set /a tDiff+=24*60*60*100
 
  if !tDiff! geq !delay! (
    %=== delay has expired, so time for movement ===%
 
    %=== establish direction ===%
    %getKey% "%up%" "%down%" "%left%" "%right%"
    for %%K in (!key!) do if "!%%KAxis!" neq "!axis!" (
      set /a "xDiff=xDiff%%K, yDiff=yDiff%%K"
      set "axis=!%%KAxis!"
    )
 
    %=== erase the tail ===%
    set "TX=!snakeX:~-2!"
    set "TY=!snakeY:~-2!"
    set "snakeX=!snakeX:~0,-2!"
    set "snakeY=!snakeY:~0,-2!"
    %plot% !TX! !TY! space
 
    %=== compute new head location and attempt to move ===%
    set /a "X=PX+xDiff, Y=PY+yDiff"
    set "X= !X!"
    set "Y= !Y!"
    set "X=!X:~-2!"
    set "Y=!Y:~-2!"
    (%test% !X! !Y! playerSpace) && (
 
      %=== move successful ===%
 
      %=== remove the new head location from the empty list ===%
      for %%X in ("!X!") do for %%Y in ("!Y!") do set "empty=!empty:#%%~X %%~Y=!"
 
      (%test% !X! !Y! food) && (
        %=== moving to food - eat it ===%
 
        %=== restore the tail ===%
        %plot% !TX! !TY! body
        set "snakeX=!snakeX!!TX!"
        set "snakeY=!snakeY!!TY!"
 
        %=== increment score and locate and draw new food ===%
        set /a "score+=1, F=(!random!%%(emptyCnt-=1))*6+1"
        for %%F in (!F!) do (%plot% !empty:~%%F,5! food)
 
      ) || (
        %=== moving to empty space ===%
 
        %=== add the former tail position to the empty list ===%
        set "empty=!empty!#!TX! !TY!"
      )
 
      %=== draw the new head ===%
      if defined snakeX (%plot% !PX! !PY! body)
      %plot% !X! !Y! head
 
      %=== Add the new head position to the snake strings ===%
      set "snakeX=!X!!snakeX!"
      set "snakeY=!Y!!snakeY!"
      set "PX=!X!"
      set "PY=!Y!"
 
      %draw%
 
    ) || (
 
      %=== failed move - game over ===%
      %plot% !TX! !TY! body
      call :spinner !PX! !PY! death
      %draw%
      echo(
      call :ask "Would you like to play again? (Y/N)" Y N
      if /i "!key!" equ "N" (
        %sendCmd% quit
        exit
      ) else (
        call :initialize
      )
    )
 
    set /a t1=t2
  )
)
 
::-------------------------------------
:ask  Prompt  ValidKey [Validkey]...
:: Prompt for a keypress.
:: Wait until a ValidKey is pressed and return result in Key variable.
:: Token delimiters, ), and poison characters must be quoted.
%sendCmd% prompt
<nul set /p "=%~1 "
(set validKeys=%*)
(set validKeys=!validKeys:%1=!)
:purge
(%getKey% {purged})
if not defined key goto :purge
:getResponse
(%getKey% !validKeys!)
if not defined key (
  if defined inKey %sendCmd% one
  goto :getResponse
)
exit /b
 
::-------------------------------------
:spinner  X  Y  ValueVar
set /a d1=-1000000
for /l %%N in (1 1 5) do for %%C in (%spinner%) do (
  call :spinnerDelay
  %plot% %1 %2 %%C
  %draw%
)
call :spinnerDelay
(%plot% %1 %2 %3)
exit /b
::-------------------------------------
:spinnerDelay
for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "d2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, dDiff=d2-d1"
if %dDiff% lss 0 set /a dDiff+=24*60*60*100
if %dDiff% lss %spinnerDelay% goto :spinnerDelay
set /a d1=d2
exit /b
::-------------------------------------
 
:initialize
cls
color 4
echo =========================
echo SNAKE BY KOZHABAY ALISHER
echo =========================
echo Speed Options:
echo                       delay
echo    #   Description  (seconds)
echo   ---  -----------  ---------
echo    1   Sluggard        0.20
echo    2   Crawl           0.15
echo    3   Slow            0.10
echo    4   Normal          0.07
echo    5   Fast            0.05
echo    6   Insane          0.03
echo    0   Unreal      none
echo(
call :ask "Pick a speed (1-6, 0):" 1 2 3 4 5 6 0
set "difficulty=!desc%key%!"
set "delay=!delay%key%!"
echo %key% - %difficulty%
echo(
<nul set /p "=Initializing."
set "axis=X"
set "xDiff=+1"
set "yDiff=+0"
set "empty="
set /a "PX=1, PY=height/2, FX=width/2+1, FY=PY, score=0, emptyCnt=0, t1=-1000000"
set "snakeX= %PX%"
set "snakeY= %PY%"
set "snakeX=%snakeX:~-2%"
set "snakeY=%snakeY:~-2%"
for /l %%Y in (0 1 %height%) do (
  <nul set /p "=."
  set "line%%Y="
  for /l %%X in (0,1,%width%) do (
    set "cell="
    if %%Y equ 0        set "cell=%bound%"
    if %%Y equ %height% set "cell=%bound%"
    if %%X equ 0        set "cell=%bound%"
    if %%X equ %width%  set "cell=%bound%"
    if %%X equ %PX% if %%Y equ %PY% set "cell=%head%"
    if not defined cell (
      set "cell=%space%"
      set "eX= %%X"
      set "eY= %%Y"
      set "empty=!empty!#!eX:~-2! !eY:~-2!"
      set /a emptyCnt+=1
    )
    if %%X equ %FX% if %%Y equ %FY% set "cell=%food%"
    set "line%%Y=!line%%Y!!cell!"
  )
)
(%draw%)
echo(
echo Movement keys: %up%=up %down%=down %left%=left %right%=right
echo Avoid running into yourself (%body%%body%%head%) or wall (%bound%)
echo Eat food (%food%) to grow.
echo(
call :ask "Press a key to start..."
%sendCmd% go
exit /b
 
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:controller
:: Detects keypresses and sends the information to the game via a key file.
:: The controller has various modes of input that are activated by commands sent
:: from the game via a cmd file.
::
:: Modes:
::
::   hold   - no input, wait for command
::
::   go     - continuously get/send key presses
::
::   prompt - send {purged} marker to allow game to purge input buffer, then
::            get/send a single key press and hold
::
::   one    - get/send a single key press and hold
::
::   quit   - immediately exit the controller process
::
:: As written, this routine incorrectly reports ! as ), but that doesn't matter
:: since we don't need that key. Both <CR> and Enter key are reported as {Enter}.
:: An extra character is appended to the output to preserve any control chars
:: when read by SET /P.
 
setlocal enableDelayedExpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
set "cmd=hold"
set "inCmd="
set "key="
for /l %%. in (1 0 1) do (
  if "!cmd!" neq "hold" (
    for /f "delims=" %%A in ('xcopy /w "%~f0" "%~f0" 2^>nul') do (
      if not defined key set "key=%%A"
    )
    set "key=!key:~-1!"
    if !key! equ !CR! set "key={Enter}"
  )
  <&8 set /p "inCmd="
  if defined inCmd (
    if !inCmd! equ quit exit
    set "cmd=!inCmd!"
    set "inCmd="
  )
  if defined key (
    if "!cmd!" equ "prompt" >&9 (echo {purged}.)
    >&9 (echo(!key!.)
    if "!cmd!" neq "go" set "cmd=hold"
    set "key="
  )
)
Добавлено через 2 часа 8 минут
Сорри вот правильный код))

Bash
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: SNAKE.BAT - A pure Windows batch implementation of the classic game
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
if "%~1" == "startGame" goto :game
if "%~1" == "startController" goto :controller
 
::---------------------------------------------------------------------
:: setup some global variables used by both the game and the controller
 
setlocal disableDelayedExpansion
:getSession
if defined temp (set "tempFileBase=%temp%\") else if defined tmp set "tempFileBase=%tmp%\"
set "tempFileBase=%tempFileBase%Snake%time::=_%"
set "keyFile=%tempFileBase%_key.txt"
set "cmdFile=%tempFileBase%_cmd.txt"
set "gameLock=%tempFileBase%_gameLock.txt"
 
 
::------------------------------------------
:: Lock this game session and launch.
:: Loop back and try a new session if failure.
:: Cleanup and exit when finished
 
call :launch 7>"%gameLock%" || goto :getSession
del "%tempFileBase%*"
exit /b
 
 
::------------------------------------------
:launch the game and the controller
 
copy nul "%keyFile%" >nul
copy nul "%cmdFile%" >nul
start "" /b cmd /c ^""%~f0" startController 9^>^>"%keyFile%" 8^<"%cmdFile%" 2^>nul ^>nul^"
cmd /c ^""%~f0" startGame 9^<"%keyFile%" 8^>^>"%cmdFile%" ^<nul^"
echo(
 
 
::--------------------------------------------------------------
:: Upon exit, wait for the controller to close before returning
 
:close
2>nul (>>"%keyFile%" call )||goto :close
exit /b 0
 
 
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:game
title %~nx0
cls
 
::---------------------------------------
:: user configurable options
::   Note - do not use the * ~ ! or = key
 
set "up=W"
set "down=S"
set "left=A"
set "right=D"
 
set "space= "
set "bound=:"
set "food=$"
set "head=@"
set "body=+"
set "death=X"
 
set "width=50"   max=99
set "height=30"  max=99
:: max playing field: (width-2)*(height-2) <= 1365
 
 
::----------------------------
:: resize the console window
 
set /a cols=width+1, lines=height+10, area=(width-2)*(height-2)
if %area% gtr 1365 (
  echo ERROR: Playfield area too large
  %sendCmd% quit
  exit
)
if %lines% lss 14 set lines=14
if %cols% lss 46 set cols=46
mode con: cols=%cols% lines=%lines%
 
 
::----------------------------
:: define variables
 
set "playerSpace=%space%%food%"
 
set "spinner1=-"
set "spinner2=\"
set "spinner3=|"
set "spinner4=/"
set "spinner= spinner1 spinner2 spinner3 spinner4 "
 
set "xDiff%up%=+0"
set "xDiff%down%=+0"
set "xDiff%left%=-1"
set "xDiff%right%=+1"
 
set "yDiff%up%=-1"
set "yDiff%down%=+1"
set "yDiff%left%=+0"
set "yDiff%right%=+0"
 
set "%up%Axis=Y"
set "%down%Axis=Y"
set "%left%Axis=X"
set "%right%Axis=X"
 
set "delay1=20"
set "delay2=15"
set "delay3=10"
set "delay4=7"
set "delay5=5"
set "delay6=3"
set "delay0=0"
 
set "desc1=Sluggard"
set "desc2=Crawl"
set "desc3=Slow"
set "desc4=Normal"
set "desc5=Fast"
set "desc6=Insane"
set "desc0=Unplayable"
 
set "spinnerDelay=3"
 
set /a "width-=1, height-=1"
 
 
::---------------------------
:: define macros
 
::define a Line Feed (newline) string (normally only used as !LF!)
set LF=^
 
 
::Above 2 blank lines are required - do not remove
 
::define a newline with line continuation
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
 
:: setErr
:::  Sets the ERRORLEVEL to 1
set "setErr=(call)"
 
:: clrErr
:::  Sets the ERRORLEVEL to 0
set "clrErr=(call )"
 
 
:: sendCmd  command
:::  sends a command to the controller
set "sendCmd=>&8 echo"
 
 
:: getKey  ValidKey [ValidKey...]
::: Check for keypress from the controller. Only accept a ValidKey.
::: Token delimiters and poison characters must be quoted.
::: Accept any key if no ValidKey specified.
::: Return result in Key variable. Key is undefined if no valid keypress.
set getKey=%\n%
for %%# in (1 2) do if %%#==2 (%\n%
  set key=%\n%
  set inKey=%\n%
  set keyTest=%\n%
  ^<^&9 set /p "inKey="%\n%
  if defined inKey (%\n%
    set inKey=!inKey:~0,-1!%\n%
    for %%C in (!args!) do set /a keyTest=1^&if /i !inKey! equ %%~C set key=!inKey!%\n%
  )%\n%
  if not defined keyTest set key=!inKey!%\n%
) else set args=
 
 
:: draw
:::  draws the board
set draw=%\n%
cls%\n%
for /l %%Y in (0,1,%height%) do echo(!line%%Y!%\n%
echo Speed=!Difficulty!%\n%
echo Score=!score!
 
 
:: test  X  Y  ValueListVar
:::  tests if value at coordinates X,Y is within contents of ValueListVar
set test=%\n%
for %%# in (1 2) do if %%#==2 (for /f "tokens=1-3" %%1 in ("!args!") do (%\n%
  for %%A in ("!line%%2:~%%1,1!") do if "!%%3:%%~A=!" neq "!%%3!" %clrErr% else %setErr%%\n%
)) else set args=
 
 
:: plot  X  Y  ValueVar
:::  places contents of ValueVar at coordinates X,Y
set plot=%\n%
for %%# in (1 2) do if %%#==2 (for /f "tokens=1-3" %%1 in ("!args!") do (%\n%
  set "part2=!line%%2:~%%1!"%\n%
  set "line%%2=!line%%2:~0,%%1!!%%3!!part2:~1!"%\n%
)) else set args=
 
 
::--------------------------------------
:: start the game
setlocal enableDelayedExpansion
call :initialize
 
 
::--------------------------------------
:: main loop (infinite loop)
for /l %%. in (1 0 1) do (
 
  %=== compute time since last move ===%
  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, tDiff=t2-t1"
  if !tDiff! lss 0 set /a tDiff+=24*60*60*100
 
  if !tDiff! geq !delay! (
    %=== delay has expired, so time for movement ===%
 
    %=== establish direction ===%
    %getKey% "%up%" "%down%" "%left%" "%right%"
    for %%K in (!key!) do if "!%%KAxis!" neq "!axis!" (
      set /a "xDiff=xDiff%%K, yDiff=yDiff%%K"
      set "axis=!%%KAxis!"
    )
 
    %=== erase the tail ===%
    set "TX=!snakeX:~-2!"
    set "TY=!snakeY:~-2!"
    set "snakeX=!snakeX:~0,-2!"
    set "snakeY=!snakeY:~0,-2!"
    %plot% !TX! !TY! space
 
    %=== compute new head location and attempt to move ===%
    set /a "X=PX+xDiff, Y=PY+yDiff"
    set "X= !X!"
    set "Y= !Y!"
    set "X=!X:~-2!"
    set "Y=!Y:~-2!"
    (%test% !X! !Y! playerSpace) && (
 
      %=== move successful ===%
 
      %=== remove the new head location from the empty list ===%
      for %%X in ("!X!") do for %%Y in ("!Y!") do set "empty=!empty:#%%~X %%~Y=!"
 
      (%test% !X! !Y! food) && (
        %=== moving to food - eat it ===%
 
        %=== restore the tail ===%
        %plot% !TX! !TY! body
        set "snakeX=!snakeX!!TX!"
        set "snakeY=!snakeY!!TY!"
 
        %=== increment score and locate and draw new food ===%
        set /a "score+=1, F=(!random!%%(emptyCnt-=1))*6+1"
        for %%F in (!F!) do (%plot% !empty:~%%F,5! food)
 
      ) || (
        %=== moving to empty space ===%
 
        %=== add the former tail position to the empty list ===%
        set "empty=!empty!#!TX! !TY!"
      )
 
      %=== draw the new head ===%
      if defined snakeX (%plot% !PX! !PY! body)
      %plot% !X! !Y! head
 
      %=== Add the new head position to the snake strings ===%
      set "snakeX=!X!!snakeX!"
      set "snakeY=!Y!!snakeY!"
      set "PX=!X!"
      set "PY=!Y!"
 
      %draw%
 
    ) || (
 
      %=== failed move - game over ===%
      %plot% !TX! !TY! body
      call :spinner !PX! !PY! death
      %draw%
      echo(
      call :ask "Would you like to play again? (Y/N)" Y N
      if /i "!key!" equ "N" (
        %sendCmd% quit
        exit
      ) else (
        call :initialize
      )
    )
 
    set /a t1=t2
  )
)
 
 
::-------------------------------------
:ask  Prompt  ValidKey [Validkey]...
:: Prompt for a keypress.
:: Wait until a ValidKey is pressed and return result in Key variable.
:: Token delimiters, ), and poison characters must be quoted.
%sendCmd% prompt
<nul set /p "=%~1 "
(set validKeys=%*)
(set validKeys=!validKeys:%1=!)
:purge
(%getKey% {purged})
if not defined key goto :purge
:getResponse
(%getKey% !validKeys!)
if not defined key (
  if defined inKey %sendCmd% one
  goto :getResponse
)
exit /b
 
 
::-------------------------------------
:spinner  X  Y  ValueVar
set /a d1=-1000000
for /l %%N in (1 1 5) do for %%C in (%spinner%) do (
  call :spinnerDelay
  %plot% %1 %2 %%C
  %draw%
)
call :spinnerDelay
(%plot% %1 %2 %3)
exit /b
 
 
::-------------------------------------
:spinnerDelay
for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "d2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, dDiff=d2-d1"
if %dDiff% lss 0 set /a dDiff+=24*60*60*100
if %dDiff% lss %spinnerDelay% goto :spinnerDelay
set /a d1=d2
exit /b
 
 
::-------------------------------------
:initialize
cls
color 4
echo =========================
echo SNAKE BY KOZHABAY ALISHER
echo =========================
echo Speed Options:
echo                       delay
echo    #   Description  (seconds)
echo   ---  -----------  ---------
echo    1   Sluggard        0.20
echo    2   Crawl           0.15
echo    3   Slow            0.10
echo    4   Normal          0.07
echo    5   Fast            0.05
echo    6   Insane          0.03
echo    0   Unplayable      none
echo(
call :ask "Pick a speed (1-6, 0):" 1 2 3 4 5 6 0
set "difficulty=!desc%key%!"
set "delay=!delay%key%!"
echo %key% - %difficulty%
echo(
<nul set /p "=Initializing."
set "axis=X"
set "xDiff=+1"
set "yDiff=+0"
set "empty="
set /a "PX=1, PY=height/2, FX=width/2+1, FY=PY, score=0, emptyCnt=0, t1=-1000000"
set "snakeX= %PX%"
set "snakeY= %PY%"
set "snakeX=%snakeX:~-2%"
set "snakeY=%snakeY:~-2%"
for /l %%Y in (0 1 %height%) do (
  <nul set /p "=."
  set "line%%Y="
  for /l %%X in (0,1,%width%) do (
    set "cell="
    if %%Y equ 0        set "cell=%bound%"
    if %%Y equ %height% set "cell=%bound%"
    if %%X equ 0        set "cell=%bound%"
    if %%X equ %width%  set "cell=%bound%"
    if %%X equ %PX% if %%Y equ %PY% set "cell=%head%"
    if not defined cell (
      set "cell=%space%"
      set "eX= %%X"
      set "eY= %%Y"
      set "empty=!empty!#!eX:~-2! !eY:~-2!"
      set /a emptyCnt+=1
    )
    if %%X equ %FX% if %%Y equ %FY% set "cell=%food%"
    set "line%%Y=!line%%Y!!cell!"
  )
)
(%draw%)
echo(
echo Movement keys: %up%=up %down%=down %left%=left %right%=right
echo Avoid running into yourself (%body%%body%%head%) or wall (%bound%)
echo Eat food (%food%) to grow.
echo(
call :ask "Press a key to start..."
%sendCmd% go
exit /b
 
 
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:controller
:: Detects keypresses and sends the information to the game via a key file.
:: The controller has various modes of input that are activated by commands sent
:: from the game via a cmd file.
::
:: Modes:
::
::   hold   - no input, wait for command
::
::   go     - continuously get/send key presses
::
::   prompt - send {purged} marker to allow game to purge input buffer, then
::            get/send a single key press and hold
::
::   one    - get/send a single key press and hold
::
::   quit   - immediately exit the controller process
::
:: As written, this routine incorrectly reports ! as ), but that doesn't matter
:: since we don't need that key. Both <CR> and Enter key are reported as {Enter}.
:: An extra character is appended to the output to preserve any control chars
:: when read by SET /P.
 
setlocal enableDelayedExpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
set "cmd=hold"
set "inCmd="
set "key="
for /l %%. in (1 0 1) do (
  if "!cmd!" neq "hold" (
    for /f "delims=" %%A in ('xcopy /w "%~f0" "%~f0" 2^>nul') do (
      if not defined key set "key=%%A"
    )
    set "key=!key:~-1!"
    if !key! equ !CR! set "key={Enter}"
  )
  <&8 set /p "inCmd="
  if defined inCmd (
    if !inCmd! equ quit exit
    set "cmd=!inCmd!"
    set "inCmd="
  )
  if defined key (
    if "!cmd!" equ "prompt" >&9 (echo {purged}.)
    >&9 (echo(!key!.)
    if "!cmd!" neq "go" set "cmd=hold"
    set "key="
  )
)
1
02.11.2013, 12:53

Не по теме:

AlisherIITU, Какой курс? тоже змейку задали? ) Отпишись

0
2 / 2 / 3
Регистрация: 10.09.2013
Сообщений: 126
02.11.2013, 16:25  [ТС]
Цитата Сообщение от Nevermore_ Посмотреть сообщение

Не по теме:

AlisherIITU, Какой курс? тоже змейку задали? ) Отпишись

токо не бери мою змейку
0
02.11.2013, 16:56

Не по теме:

AlisherIITU,http://www.dostips.com/forum/viewtopic.php?t=4741 Без проблем

0
02.11.2013, 17:22

Не по теме:

И мою тоже не трогайте
:D

По одной на рыло, а то укусит.

0
2 / 2 / 3
Регистрация: 10.09.2013
Сообщений: 126
02.11.2013, 17:42  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение

Не по теме:

И мою тоже не трогайте
:D

По одной на рыло, а то укусит.

ахах)))
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
02.11.2013, 17:48
Цитата Сообщение от Dragokas Посмотреть сообщение
И мою тоже не трогайте
По одной на рыло, а то укусит.
поздно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.11.2013, 17:48
Помогаю со студенческими работами здесь

Как организовать дополнительное диалоговое окно
Смысл такой, при нажатии на кнопку создается дополнительно окошко, естественно первоначальное окно должно быть disableed при закрытии...

Как вставить дополнительное окно с записем в кэш
Всем привет, есть один пример, который очень заинтересовал. Помогите сделать так-же? При первом заходе на сайт за день, сразу вылазит...

Как запустить дополнительное окно на submit если неправильный password
Есть Login.asp page которая посылает login и password на validate.asp стницу из которой если user существует то продолжение программы,...

Как найти на сайте код, который открывает дополнительное окно
Всем привет ! В общем у меня проблема когда на сайте тыкаешь на верху одну из кнопок - к примеру контакты открывается еще одна...

Дополнительное окно
Подскажите у меня есть программа и я хочу сделать некие настройки как бы тыкаешь и поверх открывается дополнительное окно типа MEssageBox...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru