前几期一直再聊计算机病毒,今天我们聊聊电子游戏。由于我最近很忙,所以只能写一个较简单的bat贪吃蛇游戏。废话不多说,直接上代码:
@echo off
setlocal enabledelayedexpansion
:: 初始化变量
set "snake=HH"
set "direction=RIGHT"
set "food=O"
set /a width=20, height=10
set /a score=0
set /a snake_x=width / 2, snake_y=height / 2
:: 清屏并隐藏光标
cls
echo ^[[?25l
:: 生成食物
call :spawn_food
:: 游戏主循环
:main
cls
call :draw_board
call :move_snake
timeout /nobreak /t 1 > nul
call :check_collision
goto main
:: 生成食物函数
:spawn_food
:spawn_again
set /a food_x=%random% %% (width - 2) + 1
set /a food_y=%random% %% (height - 2) + 1
if %food_x% equ %snake_x% if %food_y% equ %snake_y% goto spawn_again
goto :eof
:: 画板函数
:draw_board
for /l %%y in (0,1,%height%) do (
for /l %%x in (0,1,%width%) do (
set "char= "
if %%x equ 0 if %%y equ 0 set "char=#"
if %%x equ %width%-1 if %%y equ %height%-1 set "char=#"
if %%x equ %width%-1 if %%y equ 0 set "char=#"
if %%x equ 0 if %%y equ %height%-1 set "char=#"
if %%x equ 0 if %%y gtr 0 if %%y lss %height%-1 set "char=#"
if %%x equ %width%-1 if %%y gtr 0 if %%y lss %height%-1 set "char=#"
if %%y equ 0 if %%x gtr 0 if %%x lss %width%-1 set "char=#"
if %%y equ %height%-1 if %%x gtr 0 if %%x lss %width%-1 set "char=#"
if %%x equ %food_x% if %%y equ %food_y% set "char=%food%"
if %%x equ !snake_x! if %%y equ !snake_y! set "char=%snake%"
set /p "=!char!" < nul
)
echo.
)
goto :eof
:: 移动蛇函数
:move_snake
set /a prev_x=snake_x, prev_y=snake_y
if "%direction%" equ "UP" set /a snake_y-=1
if "%direction%" equ "DOWN" set /a snake_y+=1
if "%direction%" equ "LEFT" set /a snake_x-=1
if "%direction%" equ "RIGHT" set /a snake_x+=1
if %snake_x% equ %food_x% if %snake_y% equ %food_y% (
set /a score+=1
call :spawn_food
)
goto :eof
:: 检查碰撞函数
:check_collision
if %snake_x% leq 0 goto gameover
if %snake_x% geq %width%-1 goto gameover
if %snake_y% leq 0 goto gameover
if %snake_y% geq %height%-1 goto gameover
goto :eof
:gameover
cls
echo Game Over! Your score: %score%
echo.
pause
exit /b