FC2ブログ
汎用ヒト型決戦遊具はじめました。
トルクスドライバーT2が必要だ。
2010年11月30日 (火) | 編集 |

もうモンハン3の発売になってしまうので、視点チェンジ用の追加ボタンを組み立てることに。



虎の巻だったサイトのURLを無くしてしまったり、
検索でようやく見つけたと思ったら、該当サイトの親サービスが終了していたりといきなりの難関。
そこであの手この手をつかい、過去のURLからようやくリンク先の再発掘に成功。

こちら。



ほっと一息ついたところで、作業に取りかかろうとしますが、
PSPの分解にトルクスドライバーのT2サイズが必要だということで頓挫。
(持っていたのはT4でした・・・)



はい、万事休す><
明日またがんばります!

スポンサーサイト



ポケモンが知りたい
2010年11月26日 (金) | 編集 |

こども達が思いっきりポケモン(アニメとか絵本)にハマっていてよく問題を出されるので、
こっそりポケモンの特訓をしています。

買ったのはGB版「ピカチュウ」バージョン。
間もなくクリアできそうです。

ポケモンというと「赤・緑」はなんとなくわかるのですが、
他にもいろいろ出ていて混乱します。本当におっさんになったんだなと思います。

というわけで、ウィキペディアで調べてみました。



【第一章】(カントー地方/ロケット団)
『赤・緑・青・ピカチュウ』(GB用)96~98

   『ファイアレッド・リーフグリーン』(GBA用)04

 【第二章】(ジョウト・カントー地方・3年後/ロケット団)
 『金・銀・クリスタル』(GBC用)99~00

     『ハートゴールド』・『ソウルシルバー』(DS用)09

   【第三章】(ホウエン地方/マグマ団・アクア団)
   『ルビー・サファイア・エメラルド』(GBA用)02~04


     【第四章】(シンオウ地方/ギンガ団)
     『ダイヤモンド・パール・プラチナ』(DS用)06


       【第五章】(イッシュ地方/プラズマ団)
       『ブラック・ホワイト』(DS用)10


・第○章というのがストーリーによる分類。
・インデントと色がシステムの世代による分類。(第三世代で大きく変化)
・各章タイトル2色がデフォルト作品で、3色目以降は追加シナリオ付の作品。

ふむふむふむ。

制御の系列が知りたい(2)
2010年11月22日 (月) | 編集 |

CHEでは射撃と移動に代表されるように、
いくつかのハードウェア系列がそれぞれ独立に動き、
命令もそれぞれに同時併行的に行えるようです。

以下、
いろいろなブログ記事やコメントを読んでの仮説です。
旋回やガンサイトがひっかけ問題っぽいです。
まだ脳内カルポの状態ですが、以下の仮説をもとに、手元でも検証していきたいと思います。
近々全容が明らかになると思います。



【単独系】:急速移動・格闘・ガード・動作中止(移動?)
      (他の動作と重複せず、また他の動作をリセットする特性かも)

【砲塔系】:範囲射撃・角度指定射撃・ガンサイト・動作中止(射撃)

【移動系】:前進・後退・ジャンプ・動作中止(移動)・被弾中も?

【旋回系】:旋回・動作中止(旋回)

【自動旋回系】:自動旋回ON/OFF

【高度系】:高度指定

(他に大事な要素として)
【ロック系】:ロックターゲットが自動旋回対象は別系統
【接地系】:BREAKIN判定


燃費についても、それぞれの系列の燃費の積算で計算されている。
ガンサイトは起動するだけで射撃中の燃費として計上される。
単独系の動作中は、他の挙動が無効になるため、その動作単体分の燃費しかかからない。



参考記事は、ほとんどがyoshiさんのブログ記事にまとめられていて、
しかも日々アップデートされています^^(多謝!)
http://yoshiexa.blog25.fc2.com/blog-entry-12.html

制御の系列が知りたい(1)
2010年11月21日 (日) | 編集 |

CHEでは射撃系と動作系の制御がはっきり分離しましたが、
その理解だけでは追いつかない部分があります。

他のブログでも次々レポートが上がっております。
旋回成分(自動・任意)、ガンサイト成分、副武装成分、ブレーキン成分など、
制御成分はもう少し細分化できそうです。

ほとんどの情報については、すでにあるブログを読むだけで解決しそうです。
(が、みなさんのブログ、専門的なのでちょっと難しくて腰を据えてよまないと理解できません。)

全成分を体系的にまとめた記事はないかもしれないので、
ブログを読んだり、手元で調べたりしてみたいと思います。



制御の全系列がスッキリ理解できれば、よりスムースなOKEを組めること間違いなし!と思います。

今日は1度もPSPに触れていないのに記事を2度もアップしてしまいました。
カルネージってそういうゲームだと思います。

ねじ俳句
2010年11月21日 (日) | 編集 |

カルネージのTIPの説明は、得てして長くなりがちで、読んでる途中で投げ出したくなるものばかりです。
大犬太さんのところで
「ガンサイトオフすると、燃費が良くなる!!!」
という端的なTIPをお見かけし、カッと新企画がひらめきました。

それは省CPUにプログラムを詰め込むがごとく、
CHEの大事な原則やTIPsを俳句形式にまとめるという作業です。

上の例で言うならば

「ガンサイト オフれば燃費 よくなるよ」 (機語:ガンサイト)

という感じです。
俳句っていうけど、季語がなければ俳句じゃないじゃんという難しいことを指摘される文系の方も
いらっしゃるかもしれませんが、ここでは「ガンサイト」が機語になります。
要はエクサ関連や数式の説明であれば、自然と機語が入ってくるという仕組みです。
ついでに言えば機語は何関連の説明かというインデックスにもなります。

ChipCodexに代わるTIPS集として、そういうサイトを暇があったら作るのかもしれません。

という思いつき報告。

小CPU大会:結果
2010年11月20日 (土) | 編集 |

小CPU大会が終了しました。
主催者&副審のみなさまありがとうございました&お疲れ様でした。
1週間近くかけての進行は、お楽しみが毎日続く感じでとても楽しめました。
2~3日でササッと終わるより、最終結果まで4~5日はかかった方がいいなと個人的にも思います。



バグのまま提出し成績のふるわなかった「いい塗装の日」大会でしたが、
「小CPU大会」に出していた1つ前のバージョンはよくがんばってくれました。

特に2次リーグは強いオーナーだらけの地獄のリーグ。
1割ぐらい勝てる相性の試合の勝ち星を運で拾いまくったような戦績で、
(ひょっとして間違いかも?)という好成績で決勝進出となりました。



いつものアラクネですが、機体名は「マングレオン」から「ラスカル」にバージョンアップしました。
本年中にラスカルをデビューさせると年始に誓いましたが、
ラスカルの条件は「強いアラクネー」ということだったので、運もありましたが決勝進出機体。野望達成ということにしたいと思います。

対地のダメージソースがカノン1本というのも気に入っています。
EXAではカノンは遅すぎて予測射撃も実用できないという声もあるようですが、
装甲は全般的に薄くなりがちですし、ジャンプしながら打てる一般機最強の主武装は捨てがたい魅力があります。
当初は連射2枚で運用を考えていましたが、ECMを積んで連射1枚に。
それでも1個で9回も使える連射チップはとても便利で、カノンの威力を十二分に発揮してくれました。
今後のカノン機の主流オプションになれそうです。



カノン連射という武装チョイスが有効だったとはいえ、
あんな機体で決勝に進めたのはなぜでしょう。
対空、対地雷を備えてた受け身型の消極設計ですが、
「どんな相手にもちょっとずつ勝てる可能性を満遍なく持っていた」
というのが良かったのかもしれません。
可能性さえあれば、長く続けているうちにツキが回ってくる大会が1回ぐらいはあるだろうということで。。。

最終順位は 6/88位。

アンテナ管理人の面目躍如!発売直後の混乱に乗じてとはいえ、いい夢を見させていただきました。
またがんばります。

ビット入門(6)
2010年11月17日 (水) | 編集 |
CHEの通常の試合で実際に使う場面はおそらく無いと断言できそうな使い方ですが、
何か他のことに応用できそうな可能性はとても感じる原理ですし、
ビット演算の復習にもちょうどよいということで、紹介させていただきます。
(作文にはジェイ先生のご協力をいただきました。)(18日各誤記訂正)


【複数データを1カウンタに格納する原理】


以前もご説明した「シフト演算」を使います。
シフト演算とは、
2進数に2のn乗をかけた場合、
そのビットパターンは左にn個ずつずれるという性質を利用するものです。
(右に動かす時は-n乗、つまりn乗で割ります。)

シフト演算は元々の値をそのままに左右にずらせるので、
上位ビットと下位ビットにそれぞれ違う値を格納できます。



まずビットに2つの数字を格納してみます。
上位9ビットに角度(0~360)、下位7ビットに高度(0~127)
を格納するとします。

 0000000000000000
 └───────┘└─────┘
上位9ビットが角度  下位7ビットが高度



例えば角度が324、高度が37の場合。
324の2進数は101000100
37の2進数は   0100101

324をビットパターンの左側に格納するために、
7個左にビットシフトします。
7個左に動かすには2の7乗ですので、128をかけます。

324は、2進数で、
0000000101000100

324×128は、2進数で、
1010001000000000
└───────┘└─────┘


324を上位9ビットに格納できました。



さらに、下位7ビットに37を格納します。
格納には論理和を使います。
論理和は、各ケタを比較し、どちらかが1なら1を出力するルールでした。


 1010001000000000(324×128)
 0000000000100101(37)
 ――――――――――――――――――――――――――――――――
 1010001000100101


となり、1つのビットパターンに2つの数値が格納できました。

 1010001000100101
 └───────┘└─────┘

上位9ビットが角度  下位7ビットが高度

2進数で見るとスッキリしていますが、
10進数では41509と表現されます。(324×128+37の計算結果と同じ)



次に、格納された数値を取りだす場合。

A)下位7ビットを取り出す。

論理積を使います。
論理積は、各桁を比較し、どちらかに0があったら、0を出力するルールでした。

上位の9ビットを無効にすればよいので、
下位7ビットのみがすべて1になる127で論理積します。

 1010001000100101(324×128+37)
 0000000011111111(127)
 ――――――――――――――――――――――――――――――――
 0000000000100101(37)


これで下位7ビットの37を取り出せました。


B)上位9ビットを取り出す。

まず、下位7ビットを論理で消します。

 1010001000100101(324×128+37)
 1111111110000000(65408)
 ――――――――――――――――――――――――――――――――
 1010001000000000(41472)


次に、7つ右へビットシフトするために、2の7乗の128で割りますと、

 0000000101000100(324)

となり、元の数が取り出せます。



数値を上書きする場合には、
該当箇所を論理積で0にしてクリアし、論理和で合成すればOKです。



以上が、
ビット演算を使い1つのカウンタに複数のデータを格納する概念となります。



CHEのチップの流れで表現すると、

[01] カウンタA:角度を取得 (カウンタのクリアを兼ねる)
[02] カウンタA=A+180 (CHE角度を360度に換算)
[03] カウンタB:高度を取得
[04] カウンタA←カウンタA×128
[05] カウンタA←カウンタA or カウンタB (上位に角度、下位に高度)

ここまでが格納。

取り出しは、

[06] カウンタB←カウンタA
[07] カウンタB←カウンタB and 65408
[08] カウンタB←カウンタB ÷ 128 (カウンタBに角度が入る)

[09] カウンタC←カウンタA
[10] カウンタC←カウンタC and 127 (カウンタCに高度が入る)

となります。



なお、このデータ格納には性質上、課題が残ります。
1.小数は含まない(特にCHEでは小数点以下のビットは無視されるようです)
2.このままの方法では負の値が格納できない。
3.合わせて16ビット分までしか格納できない(99999.99までしか扱えないため)。
4.お手元に関数電卓やPCの電卓。(特に上位ビット。換算ページはこちらなどにも。)
5.効果の割にチップ食いすぎ。
6.8個のデータまでなら、チャンネルに格納した方が超便利!

ファミコンの驚くべき発想力
2010年11月17日 (水) | 編集 |

『ファミコンの驚くべき発想力』という本が出ていたので読んでみました。

マンション住まいで収納を工夫してみたり、1/200のガンプラを弄んだり、江戸時代の長屋にあこがれてみたり、カルポで4チップを組んだり・・・
とにかく弁当箱にいろいろ詰め込むようなチマチマとした世界が大好きなので、ファミコンソフトにもあこがれてしまいます。

【ファミコン時代のデータ詰め込みの工夫例】

・ドラクエ1のカタカナは
 「イ・カ・キ・コ・シ・ス・タ・ト・ヘ・ホ・マ・ミ・ム・メ・ラ・リ・ル・レ・ロ・ン」
 の20文字み。
 「へ」と「り」はひらがなと併用。
・ドラクエの復活の呪文には、レベルやHP、取得魔法などのデータは含まれておらず、
 再開時に経験値のデータから算出、復元される。
・スーパーマリオの木と雲が同じドット絵の使いまわし。
・マリオの走る絵のスプライトは3枚のみ。
 クリボーが歩くスプライトに至っては1枚のみ。左右反転させて歩いているように見せている。
・ドルアーガの迷路は、ステージ数を種としたランダム生成。
 60面であの整然としたステージが出るような式を使っている。

その筋の方には有名すぎる話かもしれませんが、へぇ~って感じですね。



ファミコンの仕組みを全然しらなかったのですが、
1)CPU(計算コンピュータ)
2)PPU(画像処理コンピュータ)
の2つを使って、ゲームを実行しているそうです。
PPUは全力で画面の更新を行っていて、データの更新を受け付けるのはTV出力の捜査線が右下から左上に戻る一瞬(VBlank)だけということです。
その一瞬に合わせてCPUが仕事をする、ということです。

カルネージでいえば、
1)思考・判断チップ
2)動作チップ
という感じでしょうか。



ふと思ったこと。
今までビジュアル的にピンとくるフローチャートがどうしても書けなかったのですが、
1週間のスケジュール帳のような感じでフローチャートを作ればよいのではないかと。

♪月曜日にターゲットロック~
♪火曜日に射撃をオンオフ~
♪水曜日にオプション起動~
♪木曜日に地雷を調べ~
♪金曜日に敵弾チェック~
♪土曜日にターゲット見て~
♪日曜日にア~ク~ショ~ン

という感じで。
下に行くほど処理が膨らむので、
ピラミッド型のスケジュール帳をイメージしてみようと思います。



よく「疑似乱数」みたいなことを聞きますが、
その代表例が載っていたのでメモ。


【線形合同法】

1)まず「種」の数字を決める。R0とする。(ステージ数や時間など)
2)たとえば(R×11)+3の余りをR1とする。
3)R1を種として、R2を導き出す。
4)以降繰り返し。

カルネージでも「リプレイデータ」にはOKEのプログラム以外には初期値(種)だけしか入っていないと聞いたことがあります。
ランダムの種だけ入っていれば、何度実行しても全く同じ結果がでる、というのは、
言われてみれば当たり前なのですが、なんだか不思議な感じがしますね。



36チップ大会&いい塗装の日大会


36チップ大会の機体ですが、よく見たら
ピクつきとアースクエイク、隣接時の後ろジャンプがなくなっているなど、
おもてたんと違う!的な挙動になっておりました。

「塗装の日大会」用には少し時間があったので修正しようとあたふた。
アースクエイクをジャンプしながら撃つように戻そうとしましたがうまくいかず。
元に戻してファイルをアップ・・・と思ったのですが、
恒例の矢印ギャクのバグ入り。
地雷があったらアースクエイクではなく、地雷が無ければアースクエイク(一時停止)という仕様に。
序盤に接近されたら終了という機体ができあがりました。
実力こんなもんです。



まのさんのマリアエレナがすごいことになってます。あんな戦法どうやって思いつくんでしょう!?
上級演習場に「スケボー禁止」の張り紙しておかないと・・・

はみだし大会と小CPU大会
2010年11月16日 (火) | 編集 |

CHEアンテナZZをちまちま更新しております。

該当ブログを検索するのはけっこう難しいのですが、
ちょっとだけ、宝探しのような面白さもあります。

最近は大会名で検索しておりますが、発見率がアップしました。
今後も大会の度に検索かけてみようと思います。
HIROYさんや6四の兵さんのような、盛り上げ上手な方がまた現れてにぎやかになればよいなと期待しております。
(もちろん、ご本人の復帰も待ってます。)



「はみだし大会」を運営、少しの残務を残し、無事終了。

きっかけは自分が出しそびれたことですが、
軽い気持ちで大会を開けてしまうのもカルネージのよいところです。

叩き台大会のオマケということで、いくつか気づいた点。

1)小規模大会を2chの本スレ以外でやると、けっこうさみしい!


 →時期が被らないようにすれば、大会スレでどんどんやればよいと思います。
  @wikiに告知されたものはすべて大会スレで進行もよいと思います。

2)開催中で結果もまだ出ていないのに@wikiのトップから外されると、これまたさみしい!

 →「開催中」の項目と進行場所へのリンクを足したらよかろと思います。
 

3)敗者復活は相変わらず反応薄し。

 →「その大会での強さをはかる」という意味合いは薄いとは思いますが、
  順位決定戦に上位進出というご褒美がつくのは、演出として面白いと思っています。
  とくに私のような中位~下位プレイヤーには面白さ倍増だと思うのです。
  個人的には気に入っているシステムですが、どうでしょうか。

4)早送りは便利!
 
 →こうかはばつぐんです

5)フルリーグでハーフ2回と同じ効果があるのかも。(要検証)

 →回して放置の場合には、フルリーグはありかもしれません。
  ハーフリーグの複数審判によるマルチタスクは依然、捨てがたい魅力ですね。
  フルリーグの確実性を証明するのは面倒っぽいので、
  そのままハーフリーグが基本になるような気がします。

そんなこんなで、はみだし大会へのご参加ありがとうございました&副審の方本当にありがとうございました。



小CPU大会に出してみました。
いつものクセで受け身型。
霧なり飽和攻撃なりでフィールドを作るべきなのですが、どうしても受け身型。
受け身型しか作れないので、今後とも徹底して受け身型を作り続けようと思います。
特に小CPUは作戦が分かりやすいので、どんな作戦を持ったチームが出るのか、とても楽しみです。


【ラスカルα〔36〕】
機体:アラクネー×3
装甲:100mm/耐熱
武装:大カノン/アースクエイク/クラーケン
OP:連射/冷却/冷却/ECM

作戦:
・基本的に常に大カノンを打ち続けます
・熱管理で必要に応じて射撃を休みます
・相手が近距離なら連射機能を使います
・相手が格闘距離なら一応格闘をします
・弾が飛んできたらジャンプで避けます
・相手が近くならバックジャンプします
・ミサイルだったらECMを発動します
・地雷があったらアースクエイクします
・頭上に飛行がいたらクラーケンします
・外周と味方から離れるように動きます
・霧下では外周判断で中央に集まります

エリア内への復帰はあまりいいのが思いつきませんでした。
はみ出してしまった後は、敵機を探し、いたらそっちへ移動、という風にしましたが、
特に霧下では復帰に失敗します。
押し出し狙いが苦手のようです。

ビット演算入門(5)
2010年11月12日 (金) | 編集 |
(22時22分若干記事変更)


ほーりーぐれいるさんのところに、より実用的な解説が紹介されています。

ビット演算を使った「マスク」を、
こちらでもマネして使ってみたいと思います。



チェックさんのところに動作コードがアップされています。

一見複雑な数字の羅列に見えますが、
ビットパターンに変換すると、スッキリします。


ビットパターン(10進数表記) 動作
00000100000000(256) 射撃1
00001000000000(512) 射撃2
00001100000000(768) 射撃3
00010000000000(1024)射撃4
00010100000000(1280)射撃5
01000000000000(4096)右旋回
10000000000000(8192)左旋回
00000001111111(127) 基本動作(0~95が使われている)


各ビットに1と0で動作のフラグを立て、
フラグをガッチャンコしたものを10進数で出力しているというわけですね。



ここで、「マスク」してみます。
「マスク」とは何か。
画像処理ソフトを使ってる方ならしっくりくると思いますが、
データベース系ならフィルタリングと言ってもよいでしょう。(いいですよね?)
余計な部分を隠してふるいにかけるイメージです。

単純に取得すると大きな数字になりがちな動作コードですが、
「マスク」を使って必要な部分だけを取り出そうというわけです。



ずばり、基本動作コードを取得し、
127で論理和ANDでマスクすれば、
前回と同じ動作コードを取得できます。


例1:取得動作コードが4354(後退+右射+射撃1)

1000100000010:(4354の2進数表記)
0000001111111:(127の2進数表記)

これを論理和ANDする。(上下を比較して両方1の時のみ1を出力)
0000000000010:(これは十進数の2。コード2は前進)




CHP時代に比べて1チップ余分に使ってしまいますが、
おなじみの追撃プログラムを並べてみましょう。


【ターゲットのダメージ判定】

一覧表より、
動作コード87~95が、小ダメージおよび起き上がり判定なので、

[01]カウンタA=ターゲット動作コード
[02]カウンタA=AND 127(フィルタリング)
[03]カウンタA>87か? Y→(ターゲット被弾中!追撃GO!)



でもこれは
[01]カウンタA=ターゲット動作コード
[02]カウンタA<95か?
[03]カウンタA>87か? Y→(ターゲット被弾中!GO!?)

と同じチップ数だったりしますが・・・
ビット演算を使った方が理屈上確実性が高く、また余分な矢印も1個減らせるので、使いどころはあるような気がします。



10進数と2進数の変換機
http://hogehoge.tk/tool/number.html

2の補数表現
http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/fusu.htm

ほーりーぐれいるさんの記事『[CHE]ビット演算機能を使う』
http://isadin.cocolog-nifty.com/blog/2010/11/che-a7be.html#more

チェックさんのコード表
http://check-check.at.webry.info/201011/article_2.html



ビット演算入門ですが、あとでなるべく正しくかつ分かりやすい解説に書き下ろしたいと思います。
しばしお待ちください。

※追記:
上の方法ですと、射撃は無視されます。
たとえば、立ち止まって射撃をしている場合、上のマスク方法では、静止と判断されますので注意が必要です。

はみだし大会
2010年11月09日 (火) | 編集 |

叩き台大会には無様に遅刻しましたが、はみだし大会に出すことに。
http://www37.atwiki.jp/chex/pages/76.html



すてきな舞踏会があるのに着ていくドレスがないシンデレラの気持ちがよく分かるような気がします。
まともに動く機体がまだありません。
エムブレムのインポート方法とかもさっぱりわからなかったり。



【エムブレムのインポート方法】
・画像ソフトなどで32×32のロゴを作成。16色に減色
(ディザ.Ditherをアンチェックにすると、きれいに減色できます。)
・ファイルを.BMPで保存(.bmpの小文字でもOK。たぶんGIFもOK。)
・メモリスティックの「PICTURE」内に「CHE」フォルダを作成。そこに該当ファイルを入れる。
・ゲームを起動し、OKE作成画面の「ハードウェア」→「エムブレム」にて
 「sample」を選択し、△を押す。
・無事インポートに成功していれば、アイコンリストが表示されるので選択。



はみだし大会は本日締め切りです。

ようやく全金
2010年11月07日 (日) | 編集 |

仕事を終えて「上がりま~ッス!」という挨拶で会社を出るところを、
最近は「アグリオ~ッス!」と言って帰宅してみているのですが、誰も気づいてくれません。



バトルモードのバトルアリーナをようやく全金しました。
(シナリオモードのアリーナだけを開放し、コンプ完了とか思ってました。)

・薄装甲→レールガン尽くし
・ECM無し→ミサイル尽くし
・対空無し→地雷尽くし
・ECM飛行型→カノン尽くし
・オールラウンド→ボス格闘尽くし

で、後出しジャンケン的に攻略。

BATTLE ARENA B06「フリーダム」(機雷地雷のラスティ×3)が最後まで課題として残りました。
これは結局

・グラスホッパーによる炸裂砲尽くし

で蒸しました。



ニコニコ動画にけっこうUPされていますね。
前作では特殊な挙動紹介などは、ほとんど文章で説明されていたのですが、
解説や、公式試合の名場面が動画でアップされるとなると、見ているだけでも楽しめそうです。

インベーダーやギャラクシャン風の動画は面白いですね。
格闘ゲームを作られている方もいるようなので、できあがりが楽しみです。



チーム01に操作型を1機入れて、
02以降を全滅すべしというステージクリア型のアクションゲームなんかは、
手軽に作れそうですね。

ビット演算入門(補足1)
2010年11月06日 (土) | 編集 |

ビット演算入門(2)で、間違ったような表記があり、
ご指摘をいただきました(ありがとうございます!)

> ちょっと気になる書き方だったので、コメントで失礼します。
> 論理和(OR)と四則演算の加算(+)は別物です。
> なので、奇数倍の例での加算をORでやっては間違いとなります。
> 3倍の例の最初の数値を3(00000011)でやってみるとわかりますが、
> [1]00000011(3)
> を2倍するために左に1個シフトで
> [2]00000110(6)
> これに元の数1を足すと(論理和OR)
> [1]00000011(3)
> [2]00000110(6)
> -----------
> [3]00000111(7)
> となってしまいます。

とのことです。
繰り上がり(キャリーというらしい)が出来てません。
本来であれば、両方が1の時には、ケタ上がりします。
[1]00000011(3)
[2]00000110(6)
-----------
[3]00001001(9)



紙と鉛筆でやるビット演算の足し算の正しいやり方は・・・
もう一度しらべておきます。



最初の大会ですが、5分前にはデスクトップにアップロード用のファイルを置いたのですが、
いろいろあって5分遅刻しました!
(あまりにも恥ずかしかったので引っ込めました)
それにしても200人超とはすごいですね。
前作の下火期の約4倍!と考えてしまうと、発売直後のソフトとしてどうかとも思いますが、
そんなカルネージが大好きです。

ビット演算入門(4)
2010年11月03日 (水) | 編集 |
今回は、ビット演算のCHEへの応用可能性について考えてみたいと思います。


どうやらビット演算の世界では、一番左のビットを正負用に使うという一般ルールがあるようです。
そして、その場合のビットは、プラスは0、マイナスは1となるそうです。
これはまた腑に落ちやすい理屈であります。
当然といえば当然かもしれませんが、
表で見比べても、一番左のビットが正負を表すことになっていて面白いです。

[数値] ビット表記 →[not数値] ビット表記
[+00] 0000 →[-01] 1111
[+01] 0001 →[-02] 1110
[+02] 0010 →[-03] 1101
[+03] 0011 →[-04] 1100
[+04] 0100 →[-05] 1011
[+05] 0101 →[-06] 1010
[+06] 0110 →[-07] 1001
[+07] 0111 →[-08] 1000
[+08] 01000 →[-09] 1 0111
[+09] 0 1001 →[-10] 1 0110
[+10] 0 1010 →[-11] 1 0101
[+11] 0 1011 →[-12] 1 0100
[+12] 0 1100 →[-13] 1 0011
[+13] 0 1101 →[-14] 1 0010
[+14] 0 1110 →[-15] 1 0001
[+15] 0 1111 →[-16] 1 0000
[+16] 01 0000→[-17] 10 1111
[+17] 01 0001→[-18] 10 1110



さて、このビット処理をいかにCHEで利用できるか。
8ビット時代のドラクエはおそらくイベントのフラグをこのビットで処理していたと予想されます。
○○に出会ったか?○×を持っているか?××を倒したか?などの情報を、
0と1のフラグとしてビットカウンタに格納していたと思われます。

フラグの情報量が多ければ多いほど、ビット演算によるフラグ処理の恩恵が大きくなるのでしょう。



イベントの情報を入れたビットパターンを仮にカウンタAとします。
新しいイベントが発生した場合には、
カウンタAにそのイベントに応じた1を立てればよいわけです。
他の情報はそのままに、該当箇所だけ1を立てるには、論理和(OR)を使うのでした。

たとえば、右から2番目のビットにフラグを立てるとするならば、

カウンタA=A OR 2(0010)

となるわけです。



では、次のイベントを起こす場合に、条件を満たしているかどうかを判断する場合。

たとえば、一番右と右から2番目の2つのビットにフラグが立っているかどうかを
判断する場合。

[01] カウンタB←A(カウンタAの内容を保存するため、Bにコピーを作る。)
[02] カウンタB=B AND 3(0011)
[03] カウンタB=3(0011)か?
  →Yならフラグ条件を満たしている、
  →Nならフラグ条件を満たしていない。

となります。
3チップも消費してしまうので、もう少し省チップな方法が見つかりそうですが・・・
今のところ思い至りません。(どなたか教えてください!)



やはりフラグ条件が多い情報ほど、ビット格納には向いていると考えられます。
CHEではチップ数に制限があるので、
壁スイッチや地雷・飛翔物の回避条件などに使うのは難しいかと思われます。

しかし、たとえば相手の機種別、武装別、混成構成に合わせた機体を作るとしたら、
役に立つかもしれません。

開幕処理で相手のデータをガシガシと取得し、
2秒目からはそのテータを元に、こちらの行動パターンを適正化していく、
という使い方があり得るかもしれません。
これはCHP時代にもくろんでいた「ラスカル計画」そのものであります。

また、
ビットパターンはデータベースとしての活用も可能だと思います。
具体的な使い方はまだ分かりませんが、たとえば学習型の予測射撃を搭載する際に、役立つかもしれません。



「CHPアンテナZ」ですが、「CHPアンテナZZ」にステージアップしてみました。
基本方針は、CHEブログを見つけ次第登録。
ただし、放置気味かつ広告やスパムコメントで記事更新されずに上がってくるサイトに関しては、
記事更新の判断をフィルタリングするという方式にしてみたいと思います。
(つまり放置していても、記事更新次第ちゃんと上にあがる、という仕組みです。)

ビット演算入門(3)
2010年11月02日 (火) | 編集 |
CHEにおけるビットと、プラスマイナスの関係についてスッキリさせてみたいと思います。



○ボタンを押す度にカウンタAに+1し、
カウンタBにnotAの結果を出力するプログラムを作ってみました。
(×ボタンを押す度にカウンタAにー1にしました。)

以下、[+01] 0001と仮定した場合の結果は、以下のようになりました。

[ 整数 ] ビットパターン → [ 反転結果の整数 ] 反転ビットパターン

[+00] 0000 →[-01] 1111
[+01] 0001 →[-02] 1110
[+02] 0010 →[-03] 1101
[+03] 0011 →[-04] 1100
[+04] 0100 →[-05] 1011
[+05] 0101 →[-06] 1010
[+06] 0110 →[-07] 1001
[+07] 0111 →[-08] 1000
[+08] 1000 →[-09] 0111
[+09] 1001 →[-10] 0110
[+10] 1010 →[-11] 0101
[+11] 1011 →[-12] 0100
[+12] 1100 →[-13] 0011
[+13] 1101 →[-14] 0010
[+14] 1110 →[-15] 0001
[+15] 1111 →[-16] 0000
[+16] 1 0000→[-17] 0 1111
[+17] 1 0001→[-18] 0 1110



なるほどなるほど。
[+15] 1111と[-01] 1111 のビット表記が同じというのは変なので、
プラスとマイナスを判定するビットが別途存在する予測。



XORは2つのビットパターンを比較し、同じもの同士は0、違うもの同士の場合のみ1を出力する関数なので、
プラス版とマイナス版の同じビットパターンのものを比較すれば、何かがあぶり出せそうです。

[1] カウンタA=A←15(1111)
[2] カウンタB=B←ー1(1111)
[3] カウンタA=A XOR B

とCHEで計算したところ返された答えはー16(0000)
ふむふむふむ。

もう一つおまけに、
[1] カウンタA=A←10(1010)
[2] カウンタA=NOT A
と計算してみるとどうでそうか。
ビットの反転にプラスマイナスの反転もオマケで付いてくるので・・・
答えは予想通り、[-11] 0101です。

これで分かったような気がします。
マイナスを判定するビットはどこかに存在します。
プラス版とマイナス版のビットの排他的論理和XORを使ったので、
プラスマイナスのフラグビットだけが残り、そのフラグが立った状態の解答が出力されたのでしょう。



仮にプラスのビットを(1)、マイナスのビットを(0)とすると、
0~15に相当するビットパターンを扱った場合でも、
マイナス側の-01から-16がセットで付いてくることになり、
計32ビットの情報量ということになります。

つまり、ビットの各ケタをフラグとして扱うと考えると
0 0000 という5つのスロットを持つことになります。
(左端がプラスマイナスビット、右の4桁が数値)



逆に言えば、4つのフラグだけ使いたい場合には、
[+00] 0000 →[-01] 1111
[+01] 0001 →[-02] 1110
[+02] 0010 →[-03] 1101
[+03] 0011 →[-04] 1100
[+04] 0100 →[-05] 1011
[+05] 0101 →[-06] 1010
[+06] 0110 →[-07] 1001
[+07] 0111 →[-08] 1000

で十分ということになります。
この場合、左端のビットをプラスマイナスビットとみなしても合点がいきます。
(そう考えた場合、プラスのビットが0、マイナスのビットは1になる。)

ビット演算入門(2)
2010年11月02日 (火) | 編集 |

ビットシフトについてもう少し考えてみます。

ビットパターンで2倍、4倍、8倍と2のx乗するのがカンタンなことは、
以下の表を見るといかにも腑に落ちます。。


[10進数] ビットパターン

[000] 00000000
[001] 00000001
[002] 00000010
[004] 00000100
[008] 00001000
[016] 00010000
[032] 00100000
[064] 01000000
[128] 10000000

[003] 00000011
[006] 00000110
[012] 00001100
[024] 00011000
[048] 00110000


では3倍、5倍と奇数倍するにはどうすればよいのでしょう。



たとえば3倍にするには、2倍して元の数を足す、という手順になるようです。




1×3=3
の計算は、
1×2+1=3と同じ。
ということで、

[1]00000001
を2倍するために左に1個シフトで
[2]00000010
これに元の数1を足すと(論理和OR)
[1]00000001
[2]00000010
-----------
[3]00000011




3×5=15
の計算は、
3×4+3=15
と同じなので、

[03]00000011
を4倍するために左に2個シフトして、
[12]00001100
これに元の数3を足すと(論理和OR)
[12]00001100
[03]00000011
------------
[15]00001111


ふむふむふむふむ!!!

ビット演算入門(1)
2010年11月01日 (月) | 編集 |

今回からビット演算が使えるということで、
ビット演算について復習してみました。
ロボット製作の時に触れ、概念はなんとなく知っていたのですけど、実際に使ってどうこうしたことはまだないので、この世界に踏み込むのは、ちょっと楽しみであります。

ということで、プログラミング系のサイトを見つつ、
勝手にビット演算の世界に入門してみたいと思います。



【ビット演算】
・0(オフ)と1(オン)のスイッチを並べたもの。
 これを「ビットパターン」と呼ぶ(のかな?)。
 例:0001(off,off,off,on)
・2進数は整数に置き換えられる。
 例:0001=1; 0010=2; 1000=8
・ビット演算は、
 ビットパターン同士を比較し、演算に見合った答えを出すということ。



【ビット演算は、4種類。】
・| 論理和
・~ 反転
・& 論理積
・^ 排他的論理和



【論理和(OR)】

0101 = 5
0011 = 3
______________

0111 = 7

2つのビットパターンの各桁を比較し、
どちらかに1があれば1を出力。
(足し算ですが、足して1以上なら1とする。)



【論理積(AND)】

0101 = 5
0011 = 3
______________

0001 = 1

2つのビットパターンの各桁を比較し、
両方1の場合だけ1を出力。
(掛け算なので、どちらかが0なら0になる。)



【反転(NOT)】

0101 = 5
______________

1010 = 10

ビットパターンを単純に反転させて出力。



【排他的論理和(XOR)】

0101 = 5
0001 = 1
______________

0100 = 4

2つのビットパターンの各桁を比較し、
同じもの同士に関して0を出力。
(足し算ですが、足して1以上なら1とする。)(←コピペミス)

※同じ数値同士をXORすると、必ず0が出力されて便利。



【ビットシフト】

0101 = 5 のビットパターンを

左側に1つずつずらすと、01010 = 10 (2倍)
左側に2つずつずらすと、10100 = 20 (4倍)

右側に1つずつずらすと、0010.1 =2.5 (1/2)
右側に2つずつずらすと、0001.01 =1.25 (1/4)

ということで、
ビットを左右に移動させたいときは、
CHEでは整数化されたものを2倍なり1/2なりすればよし。


これでビット操作の基本は一通り出来た・・・のでしょうか?



プログラミングや測定などのテストでボタン操作が必要になるような気がしたので、
少しずつやってみます。

まずは、「押しボタン式カウンター」を作ってみました。

○ボタンを押す度に、カウンターに+1されていくだけのもの。

ボタン取得を「変化するまで思考停止」で、3チップ。

[1]ボタン入力状態修得(変化するまで思考停止)
[2]○ボタン押下か?N→[1]へ
↓Y
[3]カウンタA=A+1

button.jpg




『腕立てカウンター』:使用例

1)うつ伏せに寝る。
2)アゴの位置にPSPを配置。
3)腕立て伏せ開始。アゴで○ボタンを押す。
エクササイズ


・・・これがホントのエクササイズ。いえなんでもないです。

Gアーマー(6)
2010年11月01日 (月) | 編集 |

1/200Gファイターのギミックを作成中。
エクサの発売でモチベーションが低下するかと思いましたが、
シナリオ&アリーナ解放が思いの外すぐに終わったのでプラモも進めておきます。



一番の難関が、キャタピラの処理。
基本的にキャタピラはBパーツに格納することになるのですが、
劇中のGファイターにはキャタピラが完全に隠れるモードと、
半分だけ顔を覗かせるモードがあり、それらを再現するにはハッチを付ける他ありません。

小ささと強度のあるハッチをどうするか迷います。。。



Bハッチ

そこで試してみたのがこちら。
プラ版で作成したハッチですが、0.5mmの真鍮線でハッチ板の保持と蝶番を兼ねさせています。
真鍮線のホルダーには、スプリング線を配置。(同内径の真鍮パイプよりも安いので。)
また、開きすぎ防止のストッパーとしても、真鍮線を使っています。
もう少しスマートな構造にもできたような気がしますが、先を急ぎます。



ちなみに、HG版Gファイターの説明書ですが、
以前、なまけものさんに教わったサイトでカンニングしました。
今後も1/100や1/144のギミックは参考にする予定なので、このサイトの存在は救世主的なものになりそうです。