Загрузить файлы в «windows/bat»

This commit is contained in:
2026-05-13 23:39:42 +00:00
parent e308e9d489
commit 1f5f334b69
2 changed files with 238 additions and 0 deletions
+173
View File
@@ -0,0 +1,173 @@
@echo off
::подготовка
cd %~dp0
title Mine Sweater :3 (Score: 0)
chcp 65001 > nul
setlocal EnableDelayedExpansion
mode con cols=50 lines=17
::открываем меню
call :menu
::начало игры
:start
::задаем размер поля
set size=8
::обнуляем счет
set score=0
title Mine Sweater :3 (Score: 0)
::создаем поле с минами
for /l %%i in (1,1,%size%) do (
for /l %%j in (1,1,%size%) do (
call :getrandtxt
set pole[%%i][%%j]=!randtxt!
)
)
::основной цикл
:loop
cls
::рисуем поле
call :drawpole
echo.
::получаем координаты
set /p "input=Y,X: "
::обрабатываем координаты
for /f "delims=, tokens=1,2" %%m in ("%input%") do (
call :getpoint %%m %%n
echo !point! %%m %%n
if !point! equ m (
::мина - выход в меню
cls
echo Boom! 
echo Score: !score!
call :menu nologo
) else (
::мины нет, обновляем счет
set "pole[%%m][%%n]=□"
call :check %%m %%n
set /a "score+=1"
title Mine Sweater :3 (Score: !score!^)
)
)
goto loop
:::::::::::::::::::::::
::блок описания функций
:::::::::::::::::::::::
::выдача случайного числа
:getrandnum
set randnum=%random:~-2%
goto :eof
::выдача буквы: n - пусто, m - мина
:getrandtxt
call :getrandnum
if %randnum% gtr 70 (
set "randtxt=m"
) else (
set "randtxt=n"
)
goto :eof
::получение буквы по координатам
:getpoint
set point=!pole[%1][%2]!
goto :eof
::рисуем поле
:drawpole
::переменная с текстом поля
set "text="
::печатаем верхнюю строку
set "up= "
for /l %%a in (1,1,%size%) do (
set "up=!up! %%a"
)
echo %up%
for /l %%k in (1,1,%size%) do (
if %%k lss 10 (
set "text= %%k"
) else (
set "text=%%k"
)
for /l %%l in (1,1,%size%) do (
if !pole[%%k][%%l]! equ n (
::ячейка закрыта - добавляем ■
set "text=!text! ■"
) else if !pole[%%k][%%l]! equ m (
::ячейка закрыта - добавляем ■
set "text=!text! ■"
) else (
::ячейка открыта - добавляем символ ячейки
set "text=!text! !pole[%%k][%%l]!"
)
)
::вывод поля на экран
echo !text!
)
goto :eof
::меню игры
:menu
::если не передан параметр nologo, печатаем название игры
if "%1" neq "nologo" (
echo MINE SWEATER
echo.
)
echo ^[S^] Start new game
echo ^[E^] Exit
::запрос
choice /c se /m "" > nul
if %errorlevel% equ 1 (
::новая игра
goto start
) else (
::выход
exit
)
goto :eof
::проверка ячеек
:check
::переменные для хранения координат
set y=%1
set x=%2
::переменные для различных вариантов координат
set /a "ym2=y-2"
set /a "xm2=x-2"
set /a "ym1=y-1"
set /a "xm1=x-1"
set /a "yp2=y+2"
set /a "xp2=x+2"
set /a "yp1=y+1"
set /a "xp1=x+1"
::проверки мин
::верх
if !pole[%ym1%][%x%]! equ m set "pole[%y%][%x%]=1"
if !pole[%ym2%][%x%]! equ m set "pole[%ym1%][%x%]=1"
::низ
if !pole[%y%][%xp1%]! equ m set "pole[%y%][%x%]=1"
if !pole[%yp2%][%x%]! equ m set "pole[%yp1%][%x%]=1"
::лево
if !pole[%y%][%xm1%]! equ m set "pole[%y%][%x%]=1"
if !pole[%y%][%xm2%]! equ m set "pole[%y%][%xm1%]=1"
::право
if !pole[%y%][%xp1%]! equ m set "pole[%y%][%x%]=1"
if !pole[%y%][%xp2%]! equ m set "pole[%y%][%xp1%]=1"
goto :eof