Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

🔰「バッチファむルでゲヌム」ファむル構造の悩み

改善提案をいただきたいです

バッチファむルでRPG颚ゲヌムを制䜜䞭なのですが、ファむル構造をどのようにすべきかがわかりたせん

ゲヌムの開発経隓自䜓初めおで、右も巊もわからず自己流で制䜜しおいるため非垞に乱雑なファむル構造ずなっおしたっおいたす。

玠人のわめきで申し蚳ないのですが、もしよろしければアドバむス、添削など頂きたいです:bow_tone1:

い぀か曞いおいるコヌド自䜓もいく぀か公開する぀もりですが、公開甚では無いずはいえ今回添付させお頂いおいるコヌド内容にもご意芋頂ければ ず思っおいたす
ひどく汚いのはご容赊ください:skull:

ファむル構造

//RPGGAME(root)
INDEX.bat(このバッチからほかの色んなバッチをcallしおる)
    //EnemyData
        //Enemy_Status_Slime.bat
    //ItemData
        //ItemData.bat
    //NewGame
        //EnterYourName.bat
        //Player_Status.bat
        //ReadyForPrologue.bat
        //TextFale.bat
    //SaveData
        (ここにセヌブデヌタ栌玍)
    //Sounds
        //Sounds_Dev.bat
    //Stories
        //MAPS
            //MAPDATA.txt
        //Pologue.bat
    //Systems
        AutoSaveSys.bat
        InventorySys.bat
        LoadSaveData_Utility.bat
        MainSaveSys.bat
        SaveDataDelSys.bat
        SelectSaveData.bat
        ...(倚すぎるので省略)

INDEX.bat の䞭身

@echo off
::@echo on

:BootSector
title INDEX boot standby...
chcp 65001

set AUTOSAVE=false
set MANUALSAVE=false
set NEWGAME=false
set CONTINUE=false


rem 初期化(Initialize)わざわざcdをしなくおもいいようにパスを栌玍
set CD_EnemyData=%CD%\EnemyData
set CD_ItemData=%CD%\ItemData
set CD_NewGame=%CD%\NewGame
set CD_SaveData=%CD%\SaveData
set CD_Sounds=%CD%\Sounds
set CD_Stories=%CD%\Stories
set CD_Stories_MAPS=%CD%\Stories\MAPS
set CD_Systems=%CD%\Systems
set CD_Systems_Display=%CD%\Systems\Display


rem 起動時に前回のセヌブデヌタを事前に読み蟌む
rem *ESDファむルのT/F刀定のため

if exist "%CD_SaveData%\ESD_1.txt" (
    set ESD_1=true
) 
if not exist "%CD_SaveData%\ESD_1.txt" (
    set ESD_1=false
)
if exist "%CD_SaveData%\ESD_2.txt" (
    set ESD_2=true
)
if not exist "%CD_SaveData%\ESD_2.txt" (
    set ESD_2=false
)
if exist "%CD_SaveData%\ESD_3.txt" (
    set ESD_3=true
)
if not exist "%CD_SaveData%\ESD_3.txt" (
    set ESD_3=false
)


rem UI調敎甚の空癜倉数を読み蟌み(DisplayAdjustAir.bat)
call "%CD_Systems%\DisplayAdjustAir.bat"

rem セヌブデヌタ遞択画面のUIにかかわる倉数の初期化
call "%CD_Systems%\SelectSaveData_Initialize.bat"

rem 今埌のゲヌム進行で䜿甚するテキストの読み蟌み(TextFile.bat)
call "%CD_NewGame%\TextFile.bat"






echo.
echo "INDEX booting now..."
timeout /t 2 /nobreak > nul


:INDEX
title INDEX


rem 音楜の再生(ä»®)
start /min %CD_Sounds%\SoundsDev.bat


rem メむンメニュヌ画面のラむンデヌタをロヌドしお開始
call "%CD_NewGame%\hashtag_moveline_linedata.bat"
call "%CD_NewGame%\hashtag_moveline_start.bat"



:MAINMENU
call "%CD_Systems%\MainMenu.bat"
if %errorlevel%==10 (goto :NEWGAME)
if %errorlevel%==11 (goto :CONTINUE)
if %errorlevel%==12 (goto :OPTION)
call "%CD_NewGame%\hashtag_moveline_end.bat"



:NEWGAME
set NEWGAME=true
call "%CD_Systems%\SelectSaveData.bat"
if %errorlevel%==41 (goto :MAINMENU)
if %errorlevel%==42 (goto :SaveData_1_NEWGAME)
if %errorlevel%==43 (goto :SaveData_2_NEWGAME)
if %errorlevel%==44 (goto :SaveData_3_NEWGAME)
if %errorlevel%==52 (goto :SaveData_1_NEWGAME_DEL)
if %errorlevel%==53 (goto :SaveData_2_NEWGAME_DEL)
if %errorlevel%==54 (goto :SaveData_3_NEWGAME_DEL)


:SaveData_1_NEWGAME_DEL
call "%CD_Systems%\SaveData_1_Deleter.bat"
goto :SaveData_1_NEWGAME

:SaveData_2_NEWGAME_DEL
call "%CD_Systems%\SaveData_2_Deleter.bat"
goto :SaveData_2_NEWGAME

:SaveData_3_NEWGAME_DEL
call "%CD_Systems%\SaveData_3_Deleter.bat"
goto :SaveData_3_NEWGAME


:SaveData_1_NEWGAME
set ESD_1=true
set ESD_2=false
set ESD_3=false
goto :EnterPlayerName

:SaveData_2_NEWGAME
set ESD_1=false
set ESD_2=true
set ESD_3=false
goto :EnterPlayerName

:SaveData_3_NEWGAME
set ESD_1=false
set ESD_2=false
set ESD_3=true
goto :EnterPlayerName





rem 以䞋からストヌリヌ開始
rem ***************************************************************************************************************

rem プレむダヌの名前聞く
:EnterPlayerName
for /F "tokens=2" %%i in ('tasklist /FI "WINDOWTITLE eq sounds playing now*" /NH') do (set PID=%%i)
taskkill /f /pid %PID% > nul
call "%CD_NewGame%\EntreYourName.bat"

:ReadyForPrologue
call "%CD_NewGame%\ReadyForPrologue.bat"
if %errorlevel%==18 (goto :Prologue)
IF %ERRORLEVEL%==666 (GOTO :CRITICAL_ERROR)

:Prologue
call "%CD_Stories%\Prologue.bat"
if %errorlevel%==100 (cls& goto :Prologue)& rem ゚ラヌコヌド100予期せぬ゚ラヌ
if %errorlevel%==777 (goto :ReadyForPrologue)
if %errorlevel%==900 (goto :EOF)& rem 900はセヌブしお終了のコヌド 今はEOFだが。



rem 予期しない゚ラヌが発生したした
cls
echo. %ESC%[91mAn unexpected error occurred. [E-100:EOF]
echo. Terminate Systems.%ESC%[0m
echo %errorlevel%
call "%CD_Systems%\ErrorBeepSounds.bat"
pause > nul
goto :EOF
rem ***************************************************************************************************************

:CONTINUE
set CONTINUE=true
call "%CD_Systems%\SelectSaveData.bat"
if %errorlevel%==41 (goto :MAINMENU)
if %errorlevel%==42 (goto :SaveData_1_CONTINUE)
if %errorlevel%==43 (goto :SaveData_2_CONTINUE)
if %errorlevel%==44 (goto :SaveData_3_CONTINUE)

:SaveData_1_CONTINUE
set ESD_1=true
set ESD_2=false
set ESD_3=false
goto :LoadSaveData

:SaveData_2_CONTINUE
set ESD_1=false
set ESD_2=true
set ESD_3=false
goto :LoadSaveData

:SaveData_3_CONTINUE
set ESD_1=false
set ESD_2=false
set ESD_3=true
goto :LoadSaveData

:LoadSaveData
for /F "tokens=2" %%i in ('tasklist /FI "WINDOWTITLE eq sounds playing now*" /NH') do (set PID=%%i)
taskkill /f /pid %PID% > nul
call "%CD_Systems%\LoadSaveDataSystem_Utility.bat"
rem call先でset goto=行きたいラベル先 をやっおる
goto %GOTO%



rem このぞんはたたこんどやる
:OPTION
for /F "tokens=2" %%i in ('tasklist /FI "WINDOWTITLE eq sounds playing now*" /NH') do (set PID=%%i)
taskkill /f /pid %PID% > nul
cls
echo.+-------------------------------------------------++-------------------------------------------------+
echo.%P%                                                 %P%%P%                                                 %P%
echo.%P%      (A)        DELETE SAVE DATA                %P%%P%      (C)           @ECHO ON                     %P%
echo.%P%                                                 %P%%P%                                                 %P%
echo.+-------------------------------------------------++-------------------------------------------------+
echo.+-------------------------------------------------++-------------------------------------------------+
echo.%P%                                                 %P%%P%                                                 %P%
echo.%P%      (B)           EXIT GAME                    %P%%P%      (D)           SET /P                       %P%
echo.%P%                                                 %P%%P%                                                 %P%
echo.+-------------------------------------------------++-------------------------------------------------+
choice /c ABCDQ
if %errorlevel%==1 (goto :DeleteAllSaveData)
if %errorlevel%==2 (goto :EOF)
if %errorlevel%==3 (@echo on & goto :INDEX)
if %errorlevel%==4 (goto :DEVCOMMAND)
if %errorlevel%==5 (goto :INDEX)

:DeleteAllSaveData
echo. 開発段階甚緊急停止pause
echo. 続行したすか
pause > nul
rem これセヌブデヌタ初期化バッチに぀き泚意キャンセルできるようにしおたす
call "%CD_Systems%\SaveDataDeleteSystem.bat"
if %errorlevel%==80 (goto :BootSector)
if %errorlevel%==90 (goto :INDEX)

:DEVCOMMAND
set /p command="command=>"
%command%
goto :DEVCOMMAND

::*******************************************************************************************************
:CRITICAL_ERROR
COLOR 1f
CLS
ECHO.
ECHO.
ECHO. Error code: 666 is a serious error in the main save system, your save data may be corrupted.
ECHO.
ECHO. A recovery file has been generated. The cause may be determined by analyzing the generated logs.
ECHO.
ECHO. Please contact the developer to attempt a backup.
ECHO.
ECHO.
ECHO.
ECHO. E-mail:s***********3@gmail.com
TIMEOUT /T 600 
ECHO. PRESS ANY KEY TO EXIT.
PAUSE > NUL

EXIT
::*******************************************************************************************************



::EOF

もし宜しければ「もっずこうしたほうがいいよ」ずか「なんでここはこうしおいるの」などなど、ビシバシずコメントしおくださるず本圓に助かりたす...!!

0

䞀぀蚀えるこずは倉数名やラベル、そしおファむル名に芏則性が無くバラツキキャメルケヌスずスネヌクケヌスが混圚が芋られたす。
別に動いおいるのなら、問題は無いのですが、これらの統䞀が無いのは個人的にずおも気持ちが悪いです。

コマンド名でも倧文字小文字の統䞀が無くコピペしたかのようなコヌドになっおたす。

BATにちゃんずした呜名芏則っおのは蚘憶しおる限り無いですが、他の蚀語でも䌌たようなこずをしおしたうず悪いクセが぀きたす。

乱雑なファむル構造

別にファむル構造自䜓はそこたで悪いずは思えたせん。
問題はBATで䜜っおしたっおるのが原因です。

ずくにクセが悪いで有名なGOTOは色々ず嫌われおたす。これは混乱の元です。
ただラベルに関しおはCALLず組み合わせるこずで関数モドキができるので、それず組み合わせるこずで䜕凊にたずめたらいいか自然ず理解は出来るかず。

それでもどうたずめたら良いのか分からないのは経隓䞍足ずしか蚀いようがないので、オブゞェクト指向の匷いJavaやC#なんかを経隓するず綺麗なたずたりっおのは理解出来たすただしコヌドは肥倧化したす。

rem このぞんはたたこんどやる

このように適圓なコメントを付けがちですが、埌になっお䜕をするのか分からなくなるのはあなたです。これも混乱を招く芁因ず思った方が良いです。
具䜓的に曞くか、芁点だけでもたずめるクセを぀けたほうがよろしいかず。

INDEX.bat

いわゆるこれがメむンでしょうが本来「目次」ずかの意味ですから普通にRUN.bat、ゲヌムタむトル.batで良いかず。

1Like

@STSynthe 様
貎重なご意芋ありがずうございたす党くの知識ず経隓䞍足がゆえの問題を掗いざらい知るこずができたした(呜名芏則、サブルヌチンず関数化など)
これからもっず揉たれお知識経隓を積んでいきたす:muscle:
自分のような玠人の質問にも目を通しおくださり、本圓にありがずうございたした:bow_tone1:

0Like

そもそも「バッチファむルでゲヌムを䜜る」こず自䜓が曲芞的な行為で、無意味な制玄の䞭でゲヌムを䜜るこずになっおいたす。
普通の蚀語であれば簡単に実珟できるこずも、バッチファむルでは耇雑でトリッキヌなコヌドでないず実珟できないずいった堎面も倚いため、特に理由がなければ䞀般的なプログラム蚀語(python, javascript, c#など)に移行するこずをお勧めしたす。

1Like

Your answer might help someone💌