2ちゃんねるログビューア

【枯れ草エクササイズ】カルネージハートエクサ6機目   を含む(ツリー表示)

■TOP■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- ツリー解除
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