星田オステオパシー

Racketで石取りゲームに挑戦その1

ネタバレ!失敗してますw 

Cametanさんのところで出たお題、最近ずっと読み込みと写経ばっかりだったしちょっとやってみますか!と。

とりあえず
 この形にすればREPLって事になるのでは?と始めてみる。ババ抜きと違ってプレイヤーごとに情報を保持する必要もないし、場の石の数さえ更新できたらエエんやろ?プレイヤーは循環リストで回して、残りの石が1以下になった時点で勝負が決してるハズなので抜けてその時のプレイヤーが勝利と宣言したら良いんでは?と。


 初期の石の数は任意でその都度入力するのが本筋だけど、まあプロトタイプは初期設定で10+ランダム(1~10)で与えれば・・と思って乱数を作ろうと思ったら・・乱数にならないw。え~!なんか時計を使って乱数にする方法はあるんだけど、手間かけるのもなぁ・・しょうがないのでババ抜きで知ったShuffleを使って(11 12 13...20)のリストを並び替えてCarする。ま、結局毎回同じ数になるんですけどね、、、置いとこう。


 続きましてプレイヤー。狙いとしてはこれをCDRで回していくので例の循環リストを。

 メッセージ部分。ちゃんとFormatを使って・・とやるが、最初*mess*をそのまま渡してエラーになる。あ、そうか・・CARで取り出さないとStringにならんのね。

 取れる数の個数制限とか、石がマイナスになっても続くとか・・まあ、そういうのは置いといて入力して再帰してってのがちゃんと出来るか知りたいのでテキトーに。まあ、人間にルールを守ってもらうということでw


 とりあえず一度動かしてみる? 一回目で10個取ると予定通りの動きをするが・・


 あれ?2プレイヤーに勝たせようとすると?

 石を1つづつ取っていくとw これは最後の勝利宣言の部分が再帰で残っててまとめて処理されてんのか?と考えてるところで宿直の時間だったので中断。バイト中に調べたらそもそもUnlessの理解が間違っていたw。
 条件を満たさない場合を設定したい場合は普通にIfとかCondを使わないといかんのか・・。
 ただ、無理やりUnlessを使おうとした場合をちょっと考えると
 1,例の大域脱出を使って無理やり一度目の勝利宣言の後で抜けられないか?
 2,Unlessで再帰を使った場合、このReplで返り値として勝利プレイヤーを返せないか?Unlessって最後の式の値が返されるという記述を見ると再帰を使った場合返り値を渡すのは不可能なのでは?という予感がする

 明日再挑戦しますw。デビルスピークと湯殿山麓呪い村を見てる場合では無かった
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事