Darkside(https対応しました)

<< 前のページ

2026年3月2日(月) 21:05

スカイリムでスローライフ

 以前スカイリムで遊んだが、switc 2 入手を機にバージョンアップすることにした。アニバーサリーエディションは入れていなかったので、入れた上で switch 2 EDITION である。データーはレベル130の強力キャラを引き継ぐが、新イベントやアイテムが大量に追加されている。
 これで、スローライフを楽しみたい。

 最近の話題として、「ぽこ あ ポケモン」がある。ドラクエビルダーズ難民(自分もそうだ)の避難先としても注目されているし魅力も感じているが、引っ掛かるのは戦闘がなさそうなこと。ドラクエビルダーズでも、敵が攻めて来なくなると物足りなかった。
 ガチバトルとは言わないが、動物を狩って楽しむのもスローライフのうちだよ、みたいなスローライフゲームは無いだろうか?

 そう考えたときに思い付いたのが、スカイリムだ。
 スカイリムでスローライフって何?と言われそうだが、たっぷり強化したキャラであれば身の危険を感じることは殆どない。つまりは、スローライフできるのだ。そして獲物は幾らでもいる。動物もモンスターも、なんなら人間(盗賊とかです)狩りもできる。

 ほとんど使わなかった弓をメインウエポンにして動物を撃つのも楽しそうだ。

 イベントも大量に残っている。もちろん、スカイリムだとビルダーズ的な楽しみはほぼ無い。でもそれを言ったら、ぽこあの方は戦闘や狩りが無いわけで。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2024年12月6日(金) 22:02

もういいかな

 明らかに、動作がおかしい。

 最後に置いたブロックは、右隣りに置いて縦位置列を消す方が明白に好形である。それを判断できていない。更には、1マスだけの空き地が多過ぎる。1マスだけの空き地は大きな減点要素にしているのに、まるで考慮されていないようだ。

 空き地の広さを判定する処理は動いているはずなのに・・・とその周辺をチェックし、単純ミス発見。修正する。

 その後もいろいろ修正して試していたが、どうしても1万点と行かないうちに解無しゲームオーバーを食らう。人間に対する優位性が感じられない。

 そもそもがブロックブラストをソフト打ちする意味がなく自己満足でしかない。もういいかな、と思い始めた。エアガン機動戦闘車の製作に戻る頃合いだ。

 普通に人力でプレイするのが楽しめるアドベンチャーモードも、日数制限あってそれまでクリアしたラウンド数が初期化されてしまうのに萎えた。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2024年12月5日(木) 21:05

コンボについて

 空きブロックごとに、隣接4方向ではなく斜めも含めた8方向をチェック。空きブロックうが何箇所あるかをカウント。空き地ごとに、空き地に属するすべてのブロックの隣接空き数を合計したのが数字である。

 こうして計算した隣接空きの多さを足し算したうえで、空き地の数で割って評価値を算出。256倍したうえで小数部は切り捨ててしまう。
 txは足し算した結果で、それを256倍して空き地の数(今の場合は8)で割ったものがtyとなる。実際には計算ミスで、9で割ってしまっている。しかし、大勢に影響はない。

 tyが大きいほど盤面は良いという評価関数にして、ゲームを進めてみた。だが、途中経過でも良い盤面に導かれている感じがしない。tyの値と人間が感じる盤面の良さが、大して相関していないように感じる。
 そして案の定、しばしばコンビが途切れるくせに突然の解無しゲームオーバー。その時の盤面も空き地が8分割されているなどボロボロである。

 またしても、評価関数の作成に失敗したようだ。

 人間が見て好形と感じる度合いを数値化するのは、想像以上に難しい。ちっとも改善していない。コンピューターは見落としがないという一点だけで断然有利なのに、自分で普通にプレイしたときと変わらないスコアしか取れていない。盤面の好悪判断で、圧倒的に人間(自分)に劣っているのだ。
 こうなると、アプローチを変えざるを得ない。

 古典的手法の方が適しているかもしれない。すなわち、人間の判断基準を片っ端からリストアップし、それをプログラムとして記述しまくるのだ。

 その前に、まずコンボについて言及したい。
 クラシックでハイスコアを狙うには、コンボが必須である。コンボが続かない状態だと、悲しいほど全然スコアが伸びない。コンボを続けるには、適切なリソース管理がキモとなる。リソースとは、縦横のライン消しを行う取っ掛かりになるブロックのことだ。適切にブロックが存在していないと、コンボができにくくなる。だから、全消しは望ましくない。一方でブロックが存在し過ぎていても、イコール空き地が少ないということなので置き場所がなくてゲームオーバーになり易い。
 すなわち、コンボ切れとゲームオーバーの両方を回避できるような「適度な」ブロックが盤上に存在しているのが望ましい。そんな状態をできるだけキープしつつコンボを途切れさせないのがリソース管理である。

 リソース管理の観点から見ると、最外周にブロックが存在しているのが望ましい。それ以外の場所にブロックが存在していても得失は両方あって難しいので、最外周にブロックがある場合にボーナス評価というのが妥当だろう。

 コンボが連続すると、リソースが消費されがち。3ブロック中に1回はライン消しを発生させることは極めて重要だが、複数回のライン消しを発生させてもリソース消費のデメリットが一般には上回る。よって、ライン消し発生回数の評価は 1>2>3>>0 と行うべきだろう。コンボ余裕は多いに越したことはないが、余裕を重視し過ぎて盤面を汚くする方が悪い。よって、コンボ余裕は評価するがスコアは小さくする。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2024年12月4日(水) 22:06

再帰呼び出しと塗り潰し

 隣空き地の数が2でもペナリティーを増やし、3や4でないと損になるよう評価関数を微調整してみる。

 やはりコンボは繋がらず、点数がなかなか増えない。そして、突然の解無しゲームオーバー。
 盤面は幾つもの空き地に分割されてしまっている。空き地の分断も悪い盤面なのに、それを評価できていない。
 盤面の好悪を数値化するのは、意外に難しいと実感して来た。

 ただ、評価関数以外のガワはまっとうに動作しているようだ。つまり、今後は適切な評価関数を作ることだけに集中できる。

 空き地を分割するのは、明らかに悪い盤面である。

 そこで、空き地ごとにリストアップするプログラムを作り、正しく動作していることを表示で確認。同じ番号は同じ空き地に属し、異なる番号は異なる空き地に属している。
 塗り潰し処理を応用したもので、自分は「塗り潰し」処理が最も「再帰呼び出し」のサンプルに適していると思っている。プログラムの学習で再帰呼び出しの概念は結構な壁だと思うが、塗り潰しプログラムを見ながら概念を実感するのが分かり易いと考えている。

 再帰呼び出しのサンプルには階乗を計算するプログラムが良く登場するが、階乗はわざわざ再帰呼び出しを使わなくても直感的なアルゴリズムで計算できる。それに対し塗り潰しは、再帰呼び出しを使わずに記述するのは難しい。どうやって処理すれば良いか途方に暮れるだろう。いっぽう再帰呼び出しを使うと、数行でサラっと書けてしまう。
 こんな感じである。

void paint1(char *cp) { // cp と上下左右を塗り潰す
  if (*cp) return; // cp が空白でなければ何もせず処理終了
  (*cp) = 1; // cp を塗る
  paint1(*(cp-9)); // 上隣とその上下左右を塗り潰す
  paint1(*(cp+9)); // 下隣とその上下左右を塗り潰す
  paint1(*(cp-1)); // 左隣とその上下左右を塗り潰す
  paint1(*(cp+1)); // 右隣とその上下左右を塗り潰す
}

 これを、paint1(塗り潰し開始位置); で呼び出す。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2024年12月3日(火) 20:41

評価関数の調整

 手始めに、周辺空白をカウント。

 空所をリストアップし、それぞれの空所において上下左右の4隣も空所になっているかカウントする。1マスの飛び空き地なら4隅の空所はゼロ。広い空き地の中央部は空所が4。
 空所におけるこの隣接空所数の「平均値」を算出し、評価関数に活用。

 この修正版を動かすと、相変わらず連鎖をガンガンつなげつつ盤面も乱れにくく、快調に得点を重ねて行く。

 良さげだと思って進めていると、突然「解無しゲームオーバー」になった。

 その盤面を見ると、1マスの飛び空き地が5箇所もある上に空所が分断されていて、極悪盤面になっている。どうやらコンボを優先し過ぎて、盤面の悪化が無視された模様。
 

 盤面の好形を重視してコンボの重要性を下げてみる。

 すると、頻繁にコンボが途切れて、得点が伸びなくなった。それでも延々と続ければ得点は加算されるのだが、これまた解無しに遭遇。
 盤面を見ると、1マスの飛び空き地こそ1箇所だけだが、好形とは言い難い。空き地が細長く伸び過ぎている。これは、好形かどうかを適切に数値化できていない。隣空き地の数が2あれば「それなりの盤面」とされてしまい、しかしてその盤面の実態がコレというわけだ。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

<< 前のページ

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4