- 786: 名前:枯れた名無しの水平思考 :2010/11/01(月) 01:15:38 ID:xiQxL6A+0(11)
- 低速CPUでのミサイル回避ルーチンが難物過ぎる
バッタで省スペースな回避アイデアをくれ・・・ - 795: 名前:枯れた名無しの水平思考 :2010/11/01(月) 01:42:35 ID:xiQxL6A+0(11)
- >>792
いまいち言いたいことが分からなかったけど多分
該当ビットだけを0でANDすればそこだけ0にできる
つまり>>433の一番下の処理は右と前の壁の判定を消してるわけだ - 796: 名前:枯れた名無しの水平思考 :2010/11/01(月) 01:48:10 ID:xiQxL6A+0(11)
- 1でorすると無条件でフラグ立って
0でandすると無条件でフラグが折れる
1でxorするとフラグが反転する
これだけ憶えとけばフラグ管理したいのなら十分だと思う - 798: 名前:枯れた名無しの水平思考 :2010/11/01(月) 01:59:49 ID:xiQxL6A+0(11)
- >>797
1の補ビットとandするなんてandチップ一つでできちゃうじゃないか- 802: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:08:33 ID:YQ2ZIoTP0(6)
- >>798
こうかい?
2#は2進数。右、左、前、後ろの順に右から4ビットを割り当てるとして0 = 2#0000
右にあったら
WALL<-WALL or 1 = 2#0001
なかったら
WALL<-WALL and 14 = 2#1110
左にあったら
WALL<-WALL or 2 = 2#0010
なかったら
WALL<-WALL and 13 = 2#1101
前にあったら
WALL<-WALL or 4 = 2#0100
なかったら
WALL<-WALL and 11 = 2#1011
後ろにあったら
WALL<-WALL or 8 = 2#1000
なかったら
WALL<-WALL and 7 = 2#0111
壁チェックだけで大変だな- 805: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:18:23 ID:wDuUX9WW0(9)
- >>802
ちょっと違った。
普通の言語とintの内部表現が違うらしい。。
2#は2進数。右、左、前、後ろの順に右から4ビットを割り当てるとして0 = 2#0000
右にあったら
WALL<-WALL or 1 = 2#0001
なかったら
WALL<-WALL and -2 = 2#1110
14≠2#1110
いったいどんな内部表現しているんだろうな。
1!=-2
2!=-3
4!=-5
8!=-9
となっているらしい。
intとして考えたとき、和が-1になるのが補ビットとして扱われるらしい。- 806: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:25:07 ID:b+0iZL7P0(3)
- >>805
これが面倒なこと、intとして見たら正しいです
ようは負の数を表現するためのビットがあるせいで
全体を否定すると負になる
ゼロに正負は居らないのでその分ずれてるというわけ
正負のビット使わなければ気にしなくてもいいので
>>802でも上手く行くと思います- 808: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:27:04 ID:YQ2ZIoTP0(6)
- >>805>>806
調査サンクス
これで問題なくフラグをへし折れるねw
- 808: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:27:04 ID:YQ2ZIoTP0(6)
- >>805>>806
調査サンクス
これで問題なくフラグをへし折れるねw - 810: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:29:46 ID:xiQxL6A+0(11)
- >>805
intの仕様は知らないけど負の数が二の補数で表現されてるだけでしょ
あと14=1100な- 813: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:42:57 ID:YQ2ZIoTP0(6)
- >>810
14 = 2#1110ちゃうの?- 814: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:44:28 ID:xiQxL6A+0(11)
- >>813
なぜか14を12と勘違いしてたorz
- 806: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:25:07 ID:b+0iZL7P0(3)
- >>805
これが面倒なこと、intとして見たら正しいです
ようは負の数を表現するためのビットがあるせいで
全体を否定すると負になる
ゼロに正負は居らないのでその分ずれてるというわけ
正負のビット使わなければ気にしなくてもいいので
>>802でも上手く行くと思います- 808: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:27:04 ID:YQ2ZIoTP0(6)
- >>805>>806
調査サンクス
これで問題なくフラグをへし折れるねw
- 807: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:26:17 ID:Qe8QOqoe0
- 動き回る機体でどうにもエリア外の判定をうまくやってくれないから試行錯誤してたら
それだけ5×6チップのプログラムになってしまった。でも満足行く動きにはなったと思う
とか思ったら>>802の壁認識をエリア外に置き換えればもう少しスペース省けるのかなー(言ってることは半分理解できてるかも怪しいが)
壁とは結構勝手が違うしそうもいかないのかな
- 804: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:16:02 ID:xiQxL6A+0(11)
- >>799
マイナス六万くらいの値だったとしても大丈夫だろw - 812: 名前:枯れた名無しの水平思考 :2010/11/01(月) 02:41:09 ID:xiQxL6A+0(11)
- wikiあさってたら使えそうなの見つけた
2の補数では、ビットの立っている最下位ビットだけを残して残りのビットを0にするには、C言語で x & -x により、可能である。
これフラグに優先度つけて順番に処理したいときに便利そう- 819: 名前:枯れた名無しの水平思考 :2010/11/01(月) 03:12:02 ID:xiQxL6A+0(11)
- >>817
そこで>>812ですよ
カウンタコピーとandがかなり短縮できる
カウンタいっぱい使うときにしか効果ないと思うけど- 820: 名前:枯れた名無しの水平思考 :2010/11/01(月) 03:16:09 ID:wDuUX9WW0(9)
- >>819
ぉぉぉ
これで圧縮できるな!
すばらしい! - 821: 名前:枯れた名無しの水平思考 :2010/11/01(月) 03:18:55 ID:b+0iZL7P0(3)
- >>819
やってる事同じじゃね?
どのみち演算子一個でチップ一個使うし
- 824: 名前:枯れた名無しの水平思考 :2010/11/01(月) 03:24:55 ID:xiQxL6A+0(11)
- >>821
カウンタコピー→and→分岐→カウンタコピー→and→分岐→
が
最初の処理する→分岐→分岐→
になる
- 818: 名前:枯れた名無しの水平思考 :2010/11/01(月) 03:09:16 ID:xiQxL6A+0(11)
- >>816
たとえば開幕ミサイルしたかったらカウンタが0のときにミサイル撃ってカウンタに1入れたりするじゃん?
そのほかにもカウンタが0のとき普通に流して1のときに分岐するみたいなしていくとカウンタが足りなくなることあるじゃん?
けど論理演算でちょこちょこすればカウンタ一つでそういう0と1の分岐分をいっぺんに保存しとくことが出来る
まぁ確かに壁検出はその場でやってもあんまり変わらない
むしろチップ余計に使う- 827: 名前:枯れた名無しの水平思考 :2010/11/01(月) 03:36:20 ID:HSOdVMuT0(3)
- >>817
カウンタにまとめておけば壁全方向検出させるより若干時間かかるけど、
壁以外にも検出する対象が増えればこっちの方が便利…そういうことですか?
>>818
なるほど…カウンタ1つでディップスイッチみたいに並べておけるのか…
俺はまだそんな複雑なの組めないから不足してはいないけども、
そういう方法もあるということを覚えておきますね。
>>822
そういうことか!付近に壁が無い場合は確立分岐〜とかしてたけど、
それ使えば先を見た回避ができるわけだ!早速明日から導入しよう…。
■TOP■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- ツリー解除 dat