- 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