Ich erstelle ein kleines Skript, das Rollen wie in einer App zuweist. Es fragt nach der Anzahl der Personen und führt dann eine Zufallsauswahl durch, um die Rolle jeder Person festzulegen. So etwas wie:
:mrole
set/a player1=%random% * 4 / 32768 + 1
if %player1%==1 set 1role=Mörder
Aber was ist, wenn ich nur ein bestimmtes Verhältnis von Personen eine bestimmte Rolle bekommen möchte? Zum Beispiel sind 1:4 Mörder. Was ist, wenn ich bis zu 8 Spieler habe und 6 von ihnen Mörder sind? Was ist, wenn ich nochmal durchgehen möchte, um eine Detektivrolle zu erhalten, wenn es 8 Personen gibt? Das aktuelle, das ich für mrole habe, umfasst 29 Zeilen! Gibt es einen schnelleren Weg, als jedes Mal zu überprüfen, ob es zu viele gibt? Und die Detektivprüfung wird auch sehr lang sein!
Was ich bisher habe, ist unten und hier ist ein Link: http://pastebin.com/g2GfN7v9
@echo off
:new
set test=2
:main
cls
echo Ärger in Mordstadt
echo --------------------------
echo.
echo 1. Start
echo 2. Tester-Optionen
echo 3. Beenden
echo.
set/p m=
if %m%==1 goto start
if %m%==2 goto testrat
if %m%==3 exit
goto main
:testrat
cls
echo Chance, einen Tester zu haben
echo -----------------------
echo Derzeit eine 1 zu %test% Chance, einen Tester in einem Spiel zu haben
echo.
echo 1. Immer
echo 2. Nie
echo 3. 1/2 (Standard)
echo 4. 1/3
echo 5. 1/4
echo 6. 1/5
echo 7. Zurück
echo.
set/p t=
if %t%==1 set test=1
if %t%==2 set test=0
if %t%==3 set test=2
if %t%==4 set test=3
if %t%==5 set test=4
if %t%==6 set test=5
if %t%==7 goto options
goto testrat
:start
cls
echo Wie viele Spieler gibt es, ohne den am Computer mitzurechnen?
echo.
echo 1. 3
echo 2. 4
echo 3. 5
echo 4. 6
echo 5. 7
echo 6. 8
echo 7. Quit
echo.
set/p t=
if %t%==1 set players=3
if %t%==2 set players=4
if %t%==3 set players=5
if %t%==4 set players=6
if %t%==5 set players=7
if %t%==6 set players=8
if %t%==1 goto names
if %t%==2 goto names
if %t%==3 goto names
if %t%==4 goto names
if %t%==5 goto names
if %t%==6 goto names
if %t%==7 goto main
goto start
:names
cls
echo Bitte geben Sie ihre Namen ein.
echo.
set/p player1=Spieler 1:
echo.
set/p player2=Spieler 2:
echo.
set/p player3=Spieler 3:
echo.
if %players%==8 (
set/p player4=Spieler 4:
echo.
set/p player5=Spieler 5:
echo.
set/p player6=Spieler 6:
echo.
set/p player7=Spieler 7:
echo.
set/p player8=Spieler 8:
goto role
) else if %players%==7 (
set/p player4=Spieler 4:
echo.
set/p player5=Spieler 5:
echo.
set/p player6=Spieler 6:
echo.
set/p player7=Spieler 7:
goto role
) else if %players%==6 (
set/p player4=Spieler 4:
echo.
set/p player5=Spieler 5:
echo.
set/p player6=Spieler 6:
goto role
) else if %players%==5 (
set/p player4=Spieler 4:
echo.
set/p player5=Spieler 5:
goto role
) else if %players%==4 (
set/p player4=Spieler 4:
goto role
) else goto role
:role
set 1role=0
set 2role=0
set 3role=0
set 4role=0
set 5role=0
set 6role=0
set 7role=0
set 8role=0
set murderers=0
set detectives=0
goto mrole
:mrole
set/a player1=%random% * 4 / 32768 + 1
if %player1%==1 set 1role=Mörder
if %player1%==1 set/a murderers=%murderers% + 1
if %player1%==1 set mcheck=y
if %player1% neq 1 set mcheck=n
if %mcheck%==y if %players% lss 8 goto drole
set/a player2=%random% * 4 / 32768 + 1
if %murderers%==1 if %players%==8 if %player2%==1 set 2role=Mörder
if %mcheck%==y if %players% lss 8 goto drole
set/a player3=%random% * 4 / 32768 + 1
if %murderers%==1 if %players%==8 if %player3%==1 set 3role=Mörder
if %mcheck%==y if %players% lss 8 goto drole
set/a player4=%random% * 4 / 32768 + 1
if %mcheck%==y if %players% lss 8 goto drole
if %murderers%==1 if %players%==8 if %player4%==1 set 4role=Mörder
set/a player5=%random% * 4 / 32768 + 1
if %mcheck%==y if %players% lss 8 goto drole
if %murderers%==1 if %players%==8 if %player5%==1 set 5role=Mörder
set/a player6=%random% * 4 / 32768 + 1
if %mcheck%==y if %players% lss 8 goto drole
if %murderers%==1 if %players%==8 if %player6%==1 set 6role=Mörder
set/a player7=%random% * 4 / 32768 + 1
if %mcheck%==y if %players% lss 8 goto drole
if %murderers%==1 if %players%==8 if %player7%==1 set 7role=Mörder
set/a player8=%random% * 4 / 32768 + 1
if %mcheck%==y if %players% lss 8 goto drole
if %murderers%==1 if %players%==8 if %player8%==1 set 8role=Mörder
if %murderers% lss 1 goto mrole
if %players%==8 if %murderers% lss 2 goto mrole
:drole
if %players%==8 (
) else if %players lss 8 goto irole
:irole
if 1role==0 set 1role=Unschuldig
if 2role==0 set 2role=Unschuldig
if 3role==0 set 3role=Unschuldig
if 4role==0 set 4role=Unschuldig
if 5role==0 set 5role=Unschuldig
if 6role==0 set 6role=Unschuldig
if 7role==0 set 7role=Unschuldig
if 8role==0 set 8role=Unschuldig