- 2Dゲーム当たり判定総合 [転載禁止]©2ch.net
11 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 15:28:57.97 ID:7uWOp/tU - キャラクターと同じサイズの当たり判定2ビットデータを用意する(8ビット境界だと結構楽)
例:当たり判定データ ■true□false □□□□□□□□ □□□■□□□□ □□■■■□□□ □■■■■■□□ キャラクターの座標に合わせて、I軸のビットシフト補正をする pos(34,15)だったら34%8=2ビット右シフト等 必要なら回転も考える 全表示キャラの当たり判定データを重ねてANDを取ってTRUEならばHIT判定 以上
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
548 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 17:38:28.00 ID:7uWOp/tU - つか、末尾再帰ってループそのまんまで再帰の利点ないし
recHoge1(a,n,arg...){ dobefore()... if(a<n)recHoge1(a,n,arg...); } loopHoge1(a,n,arg...){ while(a<n){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(a,n,arg...){ dobefore()... recHoge2(a,n,arg...); doafter()... } loopHoge2(a,n,arg...){ while(a<n){ pushargstack(); dobefore()... popargstack(); doafter()... } } 再帰で有意味、この場合使える
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
549 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 17:44:32.72 ID:7uWOp/tU - pop,push逆だった
loopHoge2(a,n,arg...){ while(a<n){ popargstack(); dobefore()... pushargstack(); doafter()... } }
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
550 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 18:00:09.14 ID:7uWOp/tU - pushargstack();
popargstack(); ユーザー定義のこれらはめんどくさいから 再帰関数使ってコンパイラ任せにするよ
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
552 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 18:16:50.81 ID:7uWOp/tU - recHoge1(term,arg...){
dobefore()... if(term)recHoge1(term,arg...); } loopHoge1(term,arg...){ while(term){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(term,arg...){ dobefore()... if(term)recHoge2(term,arg...); doafter()... } loopHoge2(term,arg...){ while(term){ popargstack(); dobefore()... if(term)continue; pushargstack(); doafter()... } } 再帰で有意味、この場合使える pushargstack(); popargstack(); ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ たったこれだけの内容
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
553 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 18:19:28.48 ID:7uWOp/tU - >>551
>>552 以上のことの何があるか説明してみてよ
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
554 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 18:42:48.29 ID:7uWOp/tU - ttp://nas6.main.jp/Maze.cpp
再帰、ループ、等価迷路
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
555 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 18:55:15.40 ID:7uWOp/tU - recHoge1(term,arg...){
dobefore()... if(term)recHoge1(term,arg...); } loopHoge1(term,arg...){ while(term){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(term,arg...){ dobefore()... if(term)recHoge2(term,arg...); doafter()... } loopHoge2(term,arg...){ while(term){ pushargstack(); dobefore()... if(term)continue; popargstack(); doafter()... } } 再帰で有意味、この場合使える pushargstack(); popargstack(); ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ たったこれだけの内容 、勘違い訂正
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
556 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 19:03:49.25 ID:7uWOp/tU - >>554で、
ループ実装が好きなやつはいないと思うんだけどな
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
558 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 21:51:32.16 ID:7uWOp/tU - 「{C++規則をかなり抑えてCライク}で書かれたソースコード」
のクロスランゲッジなんて、ほぼ、ライブラリの関数名を書き換えるだけだろ
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
559 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 21:54:46.92 ID:7uWOp/tU - あ、あと制御構文もちゃっちゃっと書き換えれば出来上がり
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
566 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 23:00:49.51 ID:7uWOp/tU - ruby知らんがこんな感じだろ
def recHoge2(term,arg...) dobefore(arg...) if term recHoge2(term,arg...) end doafter(arg...) end end def loopHoge2(term,arg...) while term pushargstack(arg...) dobefore(arg...) if term next end popargstack(arg...) doafter(arg...) end end
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
567 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 23:01:55.35 ID:7uWOp/tU - class stack
def initialize @ret = -1 @crnt = 0 @MAX_STACK = 32768 @stk[MAX_STACK] end def pop_stk() if -1 < crnt ret = stk[crnt] crnt = crnt - 1 end end def push_stk(v) if crnt < MAX_STACK - 1 crnt = crnt + 1 stk[crnt] = v end end end stk = stack def pushargstack(arg1...argn) stk.push_stk(arg1) ... stk.push_stk(argn) end def popargstack(arg1...argn) argn = stk.pop_stk() ... arg1 = stk.pop_stk() end
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
568 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 23:07:46.09 ID:7uWOp/tU - def recHoge2(term,arg...)
dobefore(arg...) if term recHoge2(term,arg...) end doafter(arg...) end で、こんだけで済むのに、 ループにしたいからって スタックのユーザー定義なんて馬鹿だろう
|
- なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
569 :NAS6 ◆n3AmnVhjwc []:2016/01/04(月) 23:22:49.68 ID:7uWOp/tU - 再帰をループにしたかったら
こういうのをいちいち作らなきゃだめだよ class stack def initialize @crnt = 0 @MAX_STACK = 32768 @stk[MAX_STACK] end def pop_stk() if -1 < crnt ret = stk[crnt] crnt = crnt - 1 return ret end end def push_stk(v) if crnt < MAX_STACK - 1 crnt = crnt + 1 stk[crnt] = v end end end
|