星田オステオパシー

Racketで何か・・KATAN-O 005 ロンゲストロードがようやく算出される

 さて、前回は画面出力の目処が立ったところまでやったわけですが・・

 「あ、そう言えば勝利条件にも関わってくる「ロンゲストロード」関係が出来てなかった」

 と気づいてずっとやってました。そしてこの度、ようやく!返り値として(マイ)ロンゲストロードを返すことに成功しましたので・・続きます!
 なお、試行錯誤の部分は学習日記にメモしておきましたんで、こちらには既に完成したものをご用意しております

 まずコチラ。前回までで作っていたroad-kiteru?述語をバラしましてクロージャに特攻(ブッこ)んでおります。
 更に、Road-mapリストの真偽のみでのチェックだったものを各プレイヤーのカラーと対応したチェックが出来るようにちょっと改造し、画面ハジのチェックは計算式だと面倒なので見た目は悪いですけど数値のリストに変更しました。こいつらを・・

 リストにしまして

 任意のポイントから何本の道が延びているのかを返す関数に使います。学習日記にも書きましたけど、この関数でようやく「関数をただの1引数として扱う」事が出来た!という実感がありまして、こっそりと喜んでおりました。

 ロンゲストロードの起点となる「端」かを返す述語。1本であれば端

 そして特定のポイントから「どのポイントへ」道が延びているのかを返す関数。check-funcsを再利用

 今までの補助関数やらを使って、任意の端ポイントから分岐先もたどって終端までのポイントをリストで返す関数。正直「なんかたまたま」動いてる感じなので、いずれちゃんと探索を学習する予定。
 つながってるポイントの内、やって来た方向を消すためにpre-pを設定、更新しつつdokohe?で返ってきたリストから削除。このRemove、標準をsrfi/1が上書きしてたせいでエラーが出てちょっと時間取られました

 上の関数を実行するとこのような入れ子リストが出ます。ここから最奥の数値のみのリストを取り出すのに大層苦労しました(-_-;)

 GPTの力を借りて(質問しても駄目だったけど、こっちがコメント入りの動かないコードを提示したら、ちょっと勘違いした動くコードを返してくれた)、全ての数値が連続した1つのリストを返してくれたので・・

 起点のポイントを頭にして'((1 2 3 4 ...) (1 3 4 5 ...) (1 3 7 8 ...))という感じの各連続ポイントのリストを返す関数を書きまして・・

 そこから最長のリストを選んで−1(ポイント−1が道路の数なので)を返すmy-longest-road関数を作って

 画面表示部分のplace-statusの引数として設定し(テストなので直接数字を入れてます)

 ようやくステータス表示の続きを書き始めることが出来たのでした!
 結構大変でしたわ〜(-_-;)

 えーっと、次は・・ターンごとに行われるカード配布かな?
 で、カードの条件が満たされていれば村・道の設置に町へのアップグレード・・あたりを作っていこうかと。



名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

※ブログ作成者から承認されるまでコメントは反映されません。

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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

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