11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

.bat(バッチファイル)でポーカー(完成版)

Last updated at Posted at 2015-07-10

そのまんまコピペしてください。

【仕様】
 ・好きなだけメダルを賭けます。(はじめは100枚持っています)
 ・ポーカーを行い、役に応じてメダルが増減します。かなりぬるいです。
 ・適当に増やしてください。増やしてもいいことは無いです。数値がオーバーフローしたら終わりでいいと思います
           (オーバーフロー対策をしていないのは断じて仕様です。めんどくさかったわけではないです。)
 ・ハートは「は」、スペードは「す」のように、スートは頭文字で表記されています。
 ・「バッチでこんな(アホな)ことができるんだー」と思ってもらうために作ったものです。ゲーム性は追及しないでください…。
 ・所持しているメダルの枚数と設定情報が、バッチファイル本体に保存されます。
   一回のプレイで3~10バイト程度ずつ、設定変更ごとに4バイトずつ、バッチファイルの容量が増えていきますので、(おそらくそんなことは起きないと思いますが、)やりすぎるとアレなことになります。

  セーブデータファイルを使わないで保存するのに微妙に苦労しました(アピール)。

好きな名前で保存してください
@echo off
setlocal enabledelayedexpansion
mode con:cols=70 lines=24
cd /d %~dp0
echo.>>%cd%\%~n0.bat
goto top
:cursorinitialize
set cursor=1
set change=0
set echocards%resort%2=%echocards2%
set echocards%resort%3=%echocards3%
for /l %%i in (1,1,5) do set change[%%i]=0
exit /b
:top
cls
echo poker
for /f "delims=" %%i in ('findstr /b "yy" %0') do set gold=%%i
set gold=%gold:~2%
for /f "delims=" %%i in ('findstr /b "ooo" %0') do set option=%%i
set option=%option:~3%
if %gold% == 0 goto gameover
echo.
echo 所持メダル:%gold%枚
echo  何枚賭けますか?(1~%gold%枚)
echo   (0と入力で設定画面へ。ウェイトの有無が変更できます。)
echo   (所持枚数以上を入力すると、自動的に最大BETになります。)
set /p bet=""
if %bet% == 0 goto setting
if %bet% gtr %gold% set bet=%gold%
set /a nowgold=gold-bet
set resort=0
set echocards1=
set echocards2=
set echocards3=
set echocards4=
if %option% == 0 echo Now Waiting...&timeout /t 1 /nobreak >nul
:shuffle1
for /l %%i in (1,1,52) do set used[%%i]=0
set loop=0
:shuffle2
set /a loop+=1
set /a rndcard=%random%*52/32768+1
if !used[%rndcard%]! == 1 set /a loop-=1&goto shuffle2
set hand[%loop%]=%rndcard%
set used[%rndcard%]=1
if %loop% neq 5 goto shuffle2
set loop=0
:deal
set /a loop+=1
if !hand[%loop%]! leq 9 (
set dealcard=0!hand[%loop%]!
) else (
set dealcard=!hand[%loop%]!
)
echo %dealcard%>>%cd%\hand.txt
if %loop% == 5 set loop=0&goto sort1
goto deal

:sort1
sort %cd%\hand.txt /o %cd%\hand.txt
set allhand=
for /f "delims=" %%i in ('findstr [0123456789] %cd%\hand.txt') do set allhand=!allhand!%%i
del /q %cd%\hand.txt
set loop=0
:sort2
set /a loop+=1
set /a int1=loop*2-2
set hand[%loop%]=!allhand:~%int1%,2!
if "!hand[%loop%]:~0,1!" == "0" set hand[%loop%]=!hand[%loop%]:~1,1!
if %loop% neq 5 goto sort2
set loop=0
:subtend1
if %loop% == 5 set loop=0&goto subtend2
set /a loop+=1
call :subtend01 %loop% 
if !suit[%loop%]! == 1 set echosuit[%loop%]=く
if !suit[%loop%]! == 2 set echosuit[%loop%]=だ
if !suit[%loop%]! == 3 set echosuit[%loop%]=は
if !suit[%loop%]! == 4 set echosuit[%loop%]=す
if !number[%loop%]! == 1 set echonumber[%loop%]=2&goto subtend1
if !number[%loop%]! == 2 set echonumber[%loop%]=3&goto subtend1
if !number[%loop%]! == 3 set echonumber[%loop%]=4&goto subtend1
if !number[%loop%]! == 4 set echonumber[%loop%]=5&goto subtend1
if !number[%loop%]! == 5 set echonumber[%loop%]=6&goto subtend1
if !number[%loop%]! == 6 set echonumber[%loop%]=7&goto subtend1
if !number[%loop%]! == 7 set echonumber[%loop%]=8&goto subtend1
if !number[%loop%]! == 8 set echonumber[%loop%]=9&goto subtend1
if !number[%loop%]! == 9 set echonumber[%loop%]=10&goto subtend1
if !number[%loop%]! == 10 set echonumber[%loop%]=J&goto subtend1
if !number[%loop%]! == 11 set echonumber[%loop%]=Q&goto subtend1
if !number[%loop%]! == 12 set echonumber[%loop%]=K&goto subtend1
set echonumber[%loop%]=A
goto subtend1
:subtend01
set /a int2=hand[%1]-1
set /a suit[%1]=int2%%4+1,number[%1]=int2/4+1
exit /b
:subtend2
set /a loop+=1
set echocards1=!echocards1!┌─┐
set echocards2=!echocards2!│!echosuit[%loop%]!│
set echocards3=!echocards3!│!echonumber[%loop%]!│
set echocards4=!echocards4!└─┘
if %loop% neq 5 goto subtend2
set loop=0
call :cursorinitialize
if %resort% geq 1 exit /b
:echo1
if %cursor% == 0 set cursor=5
if %cursor% == 6 set cursor=1
set /a loop+=1
if %loop% == %cursor% (set str1%loop%=↑) else (set str1%loop%= )
if !change[%loop%]! == 1 (set str2%loop%=交換) else (set str2%loop%=  )
if !change[%loop%]! == 1 (set str3%loop%=↓) else (set str3%loop%= )
if %loop% neq 5 goto echo1
cls
echo.
echo 所持メダル:%nowgold%枚
echo 賭けメダル:%bet%枚
echo          ┌─┐
echo          │山│
echo          │札│
echo          └─┘
echo.
echo ■■■■■■■■■■■■■■■■■■
echo ■  1  2  3  4  5  ■
echo ■ %echocards1% ■
echo ■ %echocards2% ■
echo ■ %echocards3% ■
echo ■ %echocards4% ■
echo ■  %str11%  %str12%  %str13%  %str14%  %str15%  ■
echo ■  %str21% %str22% %str23% %str24% %str25%  ■
echo ■■■■■■■■■■■■■■■■■■
echo.
echo  ADでカーソル移動
echo  WSで交換/非交換の切り替え
echo  Lで決定
echo  決定以外の動作は数字キーの1~5でも可。
set loop=0
choice /c wasd12345l /n
set command=%errorlevel%
if %command% == 2 set /a cursor-=1&goto echo1
if %command% == 4 set /a cursor+=1&goto echo1
if %command% == 1 (if !change[%cursor%]! == 0 set /a change+=1&set change[%cursor%]=1)&goto echo1
if %command% == 3 (if !change[%cursor%]! == 1 set /a change-=1&set change[%cursor%]=0)&goto echo1
if %command% == 10 set loop=0&goto change1
set /a cursor=command-4
if !change[%cursor%]! == 0 set /a change+=1&set change[%cursor%]=1&goto echo1
set /a change-=1&set change[%cursor%]=0&goto echo1
:change1
if %loop% == 5 goto resort
set /a loop+=1
if !change[%loop%]! == 0 goto change1
set /a rndcard=%random%*52/32768+1
if !used[%rndcard%]! == 1 set /a loop-=1&goto change1
set used[%rndcard%]=1
set hand[%loop%]=%rndcard%
goto change1
:resort
set /a loop=0,resort=1
set echocards1=
set echocards2=
set echocards3=
set echocards4=
call :subtend1
cls
echo.
echo 所持メダル:%nowgold%枚
echo 賭けメダル:%bet%枚
echo          ┌─┐
echo          │山│
echo          │札│
echo          └─┘
echo.
echo ■■■■■■■■■■■■■■■■■■
echo ■ %echocards1% ■
echo ■ %echocards02% ■
echo ■ %echocards03% ■
echo ■ %echocards4% ■交換前
echo ■  %str31%  %str32%  %str33%  %str34%  %str35%  ■ ↓
echo ■ %echocards1% ■交換後
echo ■ %echocards2% ■
echo ■ %echocards3% ■
echo ■ %echocards4% ■
echo ■■■■■■■■■■■■■■■■■■
set /a loop=0,resort=1
set echocards1=
set echocards2=
set echocards3=
set echocards4=
call :deal
:judge1
set suitpattern=%suit[1]%%suit[2]%%suit[3]%%suit[4]%%suit[5]%
set numberpattern=%number[1]%%number[2]%%number[3]%%number[4]%%number[5]%
set /a flush=0,straight=0
for /f "delims=" %%i in ('findstr /b "xx%suitpattern%" %0') do set flush=%%i
for /f "delims=" %%i in ('findstr /b "xx%numberpattern%" %0') do set straight=%%i
if %flush% neq 0 set flush=1
if %straight% neq 0 set straight=1
set /a loop=0,paircount=0
:judge2
set /a loop+=1,loop2=loop+1
if !number[%loop%]! == !number[%loop2%]! set /a paircount+=1&set pair!paircount!=!number[%loop%]!
if %loop2% neq 5 goto judge2
:judge3
 if !flush! == 1 (
  if !straight! == 1 (
   if !number[1]! == 9 (
   set score=9&goto judge4
   ) else (
    set score=8&goto judge4
   )
  ) else (
   set score=5&goto judge4
  )
 ) else (
  if !straight! == 1 (
   set score=4&goto judge4
  ) else (
   if !paircount! == 0 (
    set score=0&goto judge4
   ) else (
    if !paircount! == 1 (
     set score=1&goto judge4
    ) else (
     if !paircount! == 2 (
      if !pair1! == !pair2! (
       set score3&goto judge4
      ) else (
       set score=2&goto judge4
      )
     ) else (
      if !pair1! == !pair2! (
       if !pair2! == !pair3! (
        set score=7&goto judge4
       )
      )
     )
    )
   )
  )
 )
set score=6&goto judge4

:judge4
for /f "delims=" %%i in ('findstr /b "xxx%score%" %0') do set str4=%%i
set str4=%str4:~4%
for /f "delims=" %%i in ('findstr /b "zzz%score%" %0') do set str5=%%i
set odds=%str5:~4%
if %option% == 0 timeout /t 2 /nobreak >nul
cls
echo.
echo          ┌─┐
echo          │山│
echo          │札│
echo          └─┘
echo.
echo ■■■■■■■■■■■■■■■■■■
echo ■ %echocards1% ■
echo ■ %echocards2% ■
echo ■ %echocards3% ■
echo ■ %echocards4% ■
echo ■■■■■■■■■■■■■■■■■■
echo.
echo 【結果:%str4%】
echo   賭けメダル:%bet%枚
echo      倍率:%odds%倍
set /a total=bet*odds
set /a gold=nowgold+total
echo      結果:+%total%枚
echo   所持メダル:%nowgold%+%total%=%gold%枚
echo yy%gold%>>%cd%\%~n0.bat
pause >nul
goto top

:setting
cls
if %option% == 0 (set stropt=ON) else (set stropt=OFF)
echo 設定
echo. 
echo              役:配当倍率
echo ロイヤルストレートフラッシュ:1000000
echo     ストレートフラッシュ:100000
echo         フォーカード:5000
echo          フルハウス:500
echo          フラッシュ:350
echo          ストレート:250
echo         スリーカード:25
echo           ツーペア:10
echo           ワンペア:1
echo            役なし:0
echo.
echo 1.ウェイトON/OFF(現在:%stropt%)
echo    (BET枚数決定後及び交換カード選択後の待ち時間の有無を切り替えられます)
echo 0.もどる
choice /c 10 /n
if %errorlevel% == 2 goto top
set /a option+=1
set /a option%%=2
echo ooo%option%>>%cd%\%~n0.bat
goto setting
:gameover
cls
echo あなたはメダルをすべて失ってしまった!
echo そなたにもう一度機会を与えましょう!(100枚付与します)
pause >nul
goto top

xx11111
xx22222
xx33333
xx44444
xx131234
xx12345
xx23456
xx34567
xx45678
xx56789
xx678910
xx7891011
xx89101112
xx910111213
xxx9ロイヤルストレートフラッシュ
xxx8ストレートフラッシュ
xxx7フォーカード
xxx6フルハウス
xxx5フラッシュ
xxx4ストレート
xxx3スリーカード
xxx2ツーペア
xxx1ワンペア
xxx0役なし
zzz91000000
zzz8100000
zzz75000
zzz6500
zzz5350
zzz4250
zzz325
zzz210
zzz11
zzz00
yy100
ooo0

コメントなどなどお待ちしています。それではー。

11
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?