如何讓這種效率更高,以及如何在移動時保持網格不會斷裂。第一組代碼是批處理文件的設置,第二組是網格生成的一部分(我發現要長),第三組代碼是移動和顯示。4x4幻燈片拼圖BATCH
@echo off
title Slide Puzzle && setlocal enabledelayedexpansion && set default= %
set pos=16
set loop=1
以下是4x4網格中的第15個框。之前的那些並不長,但相同。它首先生成一個1到15之間的隨機數,並檢查它是否已被使用。在此之後,它會測試它是否是單個數字,如果它是單個數字,它會在它前面添加一個空格,以便它不會破壞網格。
有沒有辦法縮短這個?
:R15
set /a R15=%random% %% 15 +1
if %R15%==%R1% goto R15
if %R15%==%R2% goto R15
if %R15%==%R3% goto R15
if %R15%==%R4% goto R15
if %R15%==%R5% goto R15
if %R15%==%R6% goto R15
if %R15%==%R7% goto R15
if %R15%==%R8% goto R15
if %R15%==%R9% goto R15
if %R15%==%R10% goto R15
if %R15%==%R11% goto R15
if %R15%==%R12% goto R15
if %R15%==%R13% goto R15
if %R15%==%R14% goto R15
set slide15=%R15%
if %R15% lss 10 set slide15= %R15%
這就是數字顯示在4x4的方格
:display
cls
echo ____ ____ ____ ____
echo ^| ^| ^| ^| ^|
echo ^| %slide1% ^| %slide2% ^| %slide3% ^| %slide4% ^|
echo ^|____^|____^|____^|____^|
echo ^| ^| ^| ^| ^|
echo ^| %slide5% ^| %slide6% ^| %slide7% ^| %slide8% ^|
echo ^|____^|____^|____^|____^|
echo ^| ^| ^| ^| ^|
echo ^| %slide9% ^| %slide10% ^| %slide11% ^| %slide12% ^|
echo ^|____^|____^|____^|____^|
echo ^| ^| ^| ^| ^|
echo ^| %slide13% ^| %slide14% ^| %slide15% ^| %slide16% ^|
echo ^|____^|____^|____^|____^|
下面的一切,這是數字到側面如何移動到另一側及上下。這裏的問題是,如果您移動一個數字號碼,則會移除其中一個使網格不均勻和扭曲的空間。
:movew
if %pos% GEQ 13 goto display
set /a helper=%pos% + 4
set /a slide%pos%=!slide%helper%!
set slide%helper%=%default%
set /a pos=%pos% + 4
goto display
:movea
if %pos% == 4 goto display
if %pos% == 8 goto display
if %pos% == 12 goto display
if %pos% == 16 goto display
set /a helper=%pos% + 1
set /a slide%pos%=!slide%helper%!
set slide%helper%=%default%
set /a pos=%pos% + 1
goto display
:moves
if %pos% LEQ 4 goto display
set /a helper=%pos% - 4
set /a slide%pos%=!slide%helper%!
set slide%helper%=%default%
set /a pos=%pos% - 4
goto display
:moved
if %pos% == 1 goto display
if %pos% == 5 goto display
if %pos% == 9 goto display
if %pos% == 13 goto display
set /a helper=%pos% - 1
set /a slide%pos%=!slide%helper%!
set slide%helper%=%default%
set /a pos=%pos% - 1
goto display
感謝您的非常詳細的回覆。 – Votex