2017-06-21 5 views
2

So.現在、バッチで自分の国を作成するゲームに取り組んでいます。あなたが署名することも拒否することもできます。そうすると、法案は消えます。しばらくすると、新しい請求書がポップアップします。物事には、5つの請求書があります。これは、一度に5つの請求書があなたの承認を待つことができることを意味します。バッチで詰め替え可能なリスト

ここまではコードです。

:leg 
title Borderlines BETA - Legislation 
cls 
echo ===== 
echo 1-Legislation (%notify_leg%) ===== 2-Disputes (%notify_disputes%) ===== 3-Mailbox (%notify_mailbox%) 
echo ===== 
echo Legislation 
if %notify_leg% GTR 0 (
    echo You have new bills from Congress awating your approval! 
) else (
    echo Its been a slow day in %nation%... 
) 
echo --- 
echo Select a bill... 
echo %leg_01% 
echo %leg_02% 
echo %leg_03% 
echo %leg_04% 
echo %leg_05% 
echo. 
echo --- 
echo A - Home 
echo. 
echo --- 
set /p leg_choice="" 
if %leg_choice%==A goto home 
if %leg_choice%==1 goto leg 
if %leg_choice%==2 goto disputes 
if %leg_choice%==3 goto mail 
if %leg_choice% GTR 3 goto bill_%leg_choice% 
goto home 

基本的に%leg_01%、%leg_02%などがスロットです。あなたがあなたの国を創設するとき、法案が割り当てられます。請求書を通過または拒否すると、通知が削除されます。

ただし、時間がたつにつれて、別の請求書がリストに追加されます。どのようにして請求書に署名したり拒否したりすれば、それをリストから削除し、スロットが利用可能であることをプログラムに伝え、残りのアイテムを一番上まで移動させることができます。最終的に、そのリストに表示されるゲーム内に複数の請求書が存在する可能性があるため、これは不可欠です。

希望するのは〜

+0

6thが表示されたらどうなるのでしょうか?それは最も古いものを上書きしますか?まだ存在していますが、表示されていませんか? – Regejok

+0

@Regejokこれまでのところ、スロットを交換する方法がわからないため、5つしかありません。 – OhNoItIsAnotherAccount

+0

@Regejokよくスロットから新しい請求書を削除するときに、プログラムはそのリストから削除するものを知りません... – OhNoItIsAnotherAccount

答えて

0

あなたのニーズに合っていますか?

:newleg 
if "%~1"=="" exit /b 
for /l %%# in (4 -1 1) do (
    set /a n=%%#+1 
    call set leg_0%%n%%=%%leg_0%%#%% 
) 
set leg_01=%~1 

call :newleg This_is_a_new_legでお電話ください。すべての値が下にシフトします。つまり、leg_05が失われ、leg_04の値がleg_05に割り当てられます。 leg_01は指定されたパラメータとして再定義されます。

関数を呼び出すときに値をスペースで引用しないようにするには、代わりに%*を使用します。

for-loop(n-1、この場合は「4」)の制限を大きくすることによって、leg_06などの値を保持することもできます。

あなたはリストから項目を削除してから、この機能を上向きにシフトすることができます。leg_02を削除するcall :delleg 2

:delleg 
if "%~1"=="" exit /b 
set leg_0%1= 
for /l %%# in (1 1 5) do if not defined leg_0%%# call :dl %%# 
exit /b 
:dl 
set /a n=%1+1 
for /l %%# in (%n% 1 6) do (
    set /a n=%%#-1 
    call set leg_0%%n%%=%%leg_0%%#%% 
) 
exit /b 

コール。

+0

返事をありがとう。ちょっとした質問。 1.なぜ「exit/b」があるのですか?それは重要ですか? 2. 'call set leg_0 %% n %% = %% leg_0 %%#%%'は何をしますか?それ以外は感謝! (私はあなたがセクションを呼ぶことができるか分からなかった...それは将来的には助けになるだろう!) – OhNoItIsAnotherAccount

+0

@ RecyclingBinちょうどその関数が与えられたパラメータなしであまり役に立たないと思った。それはリストの最初の項目を削除し、とにかく下に移動します。 %1が空の場合、終了します。 – Regejok

+0

さて、現在、私はそれを持っているので、 'このセクションでは新しい請求書はありません 'のようなテキストがあります。 – OhNoItIsAnotherAccount

関連する問題