ひでCPU ver1.0(for ABCD2.11)
ということで、itachiさんのCPUにならって、私も2つばかり作ってみました。
itachiさーん、BlockChkが複雑すぎて、どうやって動作しているかわからないですー。
しかも、カウンター探索動作も何か変な感じ...
助けてー。
自分で作れってこと?
大変すぎる!!!
| 固定リンク
ということで、itachiさんのCPUにならって、私も2つばかり作ってみました。
itachiさーん、BlockChkが複雑すぎて、どうやって動作しているかわからないですー。
しかも、カウンター探索動作も何か変な感じ...
助けてー。
自分で作れってこと?
大変すぎる!!!
| 固定リンク
コメント
製作おつです~
光がなかなか強い!
自分の発見したバグはこんな感じです
ジェットコースター
・MPが4以上あり手札に複数霊魂逆流がある場合、一度霊魂逆流をした後クリーチャーが場にいないのに別の霊魂逆流を使用する
300fフレイムキャット召喚→310f霊魂逆流使用→360f霊魂逆流発動→365f霊魂逆流使用
こんな感じっす
投稿: | 2009年7月31日 (金) 02時07分
うおおおおお!
ひでさんのCPUキター!!
今気付いてまだ対戦してませんが楽しみ!
しかも「itachifunc.lua」を使っていただいているようで恐縮です。
他の人に見られる前提で作ってないので使うの大変だったと思います。
で、BlockChkなのですが…詳細を語ると大変なのでざっくりとだけ。
動作概要としては次の手順を踏みます。
1.指定攻撃クリーチャーに対してブロックパターンを全て作成
2.全パターンのバトル結果に対してブロック側のリスクポイントを算出
(クリーチャーが死亡したらそのコストがリスクポイントとして加算
また、プレイヤーにダメージを受けた場合もリスクポイントとして加算)
3.リスクポイントが最も低いブロックパターンを引数「blcret」に格納
4.最も低いリスクポイントをリターン
こんな感じです。
あと、バトルスペルでの修正を考慮させたりできますが、
そこらへんは大変と言うか易しくない作りなのでこの場では省きます!
もうちょっとわかりやすく作り直します!ごめんなさい!
現状では「RegistBlock」のほうが良い動きをしそうです…
精進します。
あとカウンター探索ですが、
ChkAttackの第3引数「nocrts」にブロッククリーチャーのリスト(destBlock)を指定すればそれっぽく動作すると思います。
こんなところでしょうか…
続CPU楽しみにしてますー!
投稿: itachi | 2009年7月31日 (金) 09時46分
名無しさん
対戦ありがとうございます。
光は普通に天使装甲Ⅱを引かれると強いですねw
ジェットコースターのバグは修正しました。
itachiさん
早速のコメントありがとうございます。
リスクポイントの詳細が分からず、
プレイヤーのHPも計算しているのだと思いますが、
リスクポイント0のみだとブロックしなすぎのようでしたので、
とりあえずデフォルトのRegistBlock()を用いています。
後は「勝負どころ」以外ではバトルスペルを考慮しないようにできれば
いいのでしょうが...それを定量化するのは難しいかなあ。
カウンター探索はブロッククリーチャー指定に
RegistBlock()を利用しているので、
ブロッククリーチャーのリストを与えるのが無理っぽいです。
よくわからず空リストを与えていますが...だめですか、やっぱり(笑)。
投稿: ひで | 2009年7月31日 (金) 12時47分
おおうー
返信早いー
リスクポイントだけでのブロック判断は最近無理があるなーって気がしてきていまして
単純に損失HPと損失クリーチャーも返すようにしようかなぁと思ってます。
でもやっぱり難しそうですねー
>カウンター
RegistBlockを利用している場合
destBlockに値が入っている状態でSelectBlock()にはいっていた気がするので
destBlockをそのまま渡せばいけると思います………た、たぶん…
投稿: itachi | 2009年7月31日 (金) 13時34分
早速の返信ありがとうございます。
もちろん、リスクポイントの定義にも寄ると思います。
3/3の攻撃に対して2/2が2体でブロックできれば普通は嬉しいですし、
逆にそういう状況で攻撃してくるということは何らかのバトルスペルを持っているとも判断できますし...
まあ、でもバトルスペル無しでの損得判断(特にボードアドバンテージ)が基本になる気がしますね。
HPを考慮するのは後半になってからかなあ。
投稿: ひで | 2009年7月31日 (金) 22時18分