- C++14/C++1z 20
495 :デフォルトの名無しさん[sage]:2015/06/01(月) 00:00:41.46 ID:s3ZcdtNu - >>492
std::dequeにはbegin()end()があります。 そして>>485には、std::dequeはリングバッファを使う実装もありえると書いてあります。 素人考えでは、リングバッファにbegin()end()を設けることは可能だと感じましたが。 どうしてリングバッファだとbegin()end()の実装が出来ないんですか?
|
- ゲームプログラムなら俺に聞け31 [転載禁止]©2ch.net
409 :デフォルトの名無しさん[sage]:2015/06/01(月) 01:26:27.60 ID:s3ZcdtNu - >>407
だから書いてやっただろ。 for( auto c: charactors ) for( auto e: enemies ) { c->weapon; } 何でこんな単純なことが理解できないの?君もOO脳なの?
|
- ゲームプログラムなら俺に聞け31 [転載禁止]©2ch.net
411 :デフォルトの名無しさん[sage]:2015/06/01(月) 02:07:07.43 ID:s3ZcdtNu - なんでバトルクラスが敵クラスを管理しているのか謎ではあるが、それは置いていおいて。
まず今何が起こっているか整理する必要があるだろうね。 もし、プレイヤーと敵が一体ずつしか居ないなら、何も考えずにこう書けばよいよね。 battle( player, enemy ); 超シンプルだよね。誰が読んでも誤解しようのない意図の明確なコードだよね。 それで、プレイヤーがパーティー制になって、敵が複数出てくる場合でも、 このスタイルは極力維持されるべきだよね。
|
- ゲームプログラムなら俺に聞け31 [転載禁止]©2ch.net
413 :デフォルトの名無しさん[sage]:2015/06/01(月) 02:36:34.83 ID:s3ZcdtNu - ゲームは普通のアプリと違って相互作用が無茶苦茶多いよね。
そして相互作用の多さそのものが、ゲームの面白さに繋がってるよね。 何とも相互作用しないオブジェクトは有っても無くても一緒だよね。化学反応してもらわないと。 その上、オブジェクトの生成と破棄も激しいよね。無効なポインタ怖いよね。 処理順の依存関係も多いよね。 その辺の性質をよく理解して設計しないとね。 例えばオブジェクトをどっかで一元管理してもらって、使う都度列挙すれば無効なポインタを防げるね。 適応したい処理は、インターフェースごとに異なるので、少なくとも型ごとに別のコンテナに入れなきゃね。 複数対複数の相互作用が多いから、for文で列挙できるようにしておくと二重ループも自然に書けるね。 処理順の依存関係も多いから、ソースコード上で上から下に自然に処理が流れるように、 シーケンシャルな記述が出来るとうれしいよね。
|
- ゲームプログラムなら俺に聞け31 [転載禁止]©2ch.net
414 :デフォルトの名無しさん[sage]:2015/06/01(月) 02:52:20.17 ID:s3ZcdtNu - >>412
はいバカ一人発見。 攻撃はプレイヤーと敵との間に跨る処理なのに、プレイヤーもしくは敵の、 どちらか片方のメソッドに実装してしまってよいの? カプセル化ってなんでしたっけ。自分の受け持つことだけをするのが基本ではなかったかな? OOPに執着するあまり、OOPの基本すら忘れる。それがOOPの罠。糞みたいなコードを量産する羽目になる。 ということで、 battle( player, enemy ); もしくは状態が必要でクラス化したほうが良い場合は、 battle_class->battle( player, enemy ); が自然な発想というもの。むしろこういった自然な記述をサポートするのがOOPの役目とも。 当たり前ですが、OOPは万能ではないんですよ。苦手なシチュエーションもある。 ただ闇雲に使えばよいわけではないんですよ。 多くの人がこのことに気づいて、もう昔みたいにOOPバンザーイな人いなくなったでしょ。新しい、いまどきの常識だね。 だからって関数型言語に走るのはちょっと反動が強すぎると思うけどね。そんな最近の雰囲気。Ruby死んだしね。 まー多くの実用的な言語がマルチパラダイムになっている意味を理解しなさい。
|
- ゲームプログラムなら俺に聞け31 [転載禁止]©2ch.net
418 :デフォルトの名無しさん[sage]:2015/06/01(月) 03:47:05.39 ID:s3ZcdtNu - >たとえばバトルクラス(のオブジェクト)がキャラクラス(のメソッド)に、
>キャラクラスがウェポンクラスに、と短いアクセスを繰り返す AがBのメソッドを呼び出して、その呼び出され先で、 BがAのメソッドを呼び出し返す、という糞みたいなコードが量産されるわけですね。 わかります。相互参照最高!卓球楽しいですよね。 >セッターすら使わず、コンストラクタで設定する方法 設定されたオブジェクトが途中で破棄されうる場合は一体どうするんですか? 汚い相互参照しているだろうから、参照カウンタ方式は使えませんよね。 GCのある言語を想定しているんですか?でも彼はC++で書きたいみたいですよ。 それとも、お得意のweak_ptr悪用テクニックですか?
|
- 【初心者歓迎】C/C++室 Ver.95【環境依存OK】 [転載禁止]©2ch.net
883 :デフォルトの名無しさん[sage]:2015/06/01(月) 03:54:33.10 ID:s3ZcdtNu - >>879
スタックのサイズに制限かけて、オーバーしたらエラー返せばよいだろ。バカじゃね。 だけど、君の言うことにも一理ある。 再帰のネストをカウントする作りにしておけば、再帰でのオーバーフローは防げるからな。 わざわざ自前のスタック用意して、再帰を展開する必要はない罠。
|
- C#, C♯, C#相談室 Part87 [転載禁止]©2ch.net
703 :デフォルトの名無しさん[sage]:2015/06/01(月) 04:08:07.78 ID:s3ZcdtNu - はて。
エスパーさん出番ですよ。
|
- 【JavaScript】スクリプト バトルロワイヤル50【php,py,pl,rb】 [転載禁止]©2ch.net
29 :デフォルトの名無しさん[sage]:2015/06/01(月) 14:33:42.23 ID:s3ZcdtNu - AJAXと言えば、JSがここまでになったのも、
GoogleがGoogleMap作ったせいだよな。 あれ以前はJSはもっと小バカにされていた。
|
- HSP総合スレ【part 8】 [転載禁止]©2ch.net
487 :デフォルトの名無しさん[sage]:2015/06/01(月) 14:39:34.39 ID:s3ZcdtNu - HSPは実質的に再帰が使えないから、
一番簡単な方法の、再帰下降型の構文解析が使えないわけだが。
|
- Win32API質問箱 Build120©2ch.net
519 :デフォルトの名無しさん[sage]:2015/06/01(月) 14:43:08.35 ID:s3ZcdtNu - でもBOOLなのに0、1以外を返すこともあるって・・・
なんでintにしなかったんだろう。
|
- Win32API質問箱 Build120©2ch.net
521 :デフォルトの名無しさん[sage]:2015/06/01(月) 16:23:37.99 ID:s3ZcdtNu - 何言ってんの?
BOOLには0、1以外入れちゃダメだろ。 「Cでは非0が真だから、BOOLに2入れちゃお」ってどんな判断だよ。 そんなの、BOOLは実はintだから-1返しても良いよね!っていう、 件のMSの発想と同じじゃねーか。わざわざそんないたずらする意味あるか? BOOLの真に1を使うのはそれなりの根拠があるよ。 まず、TRUEが1に定義されていること。でもこれはMSが勝手にやっていることでしかないんだがな。 それでもWin32APIを使う上ではMSの流儀にあわせるべきだよね。 つぎに、Cは比較や論理演算の結果が真になった場合、1を返すと規格で決まっている。 また、C++のboolをintにキャストすると0、1になる。 これらをふまえると、BOOLに2や3を入れようという発想は生まれないはずだ。 >でもBOOLなのに0、1以外を返すこともあるって・・・ なるほど、問題ない文章じゃないか。
|
- Win32API質問箱 Build120©2ch.net
523 :デフォルトの名無しさん[sage]:2015/06/01(月) 16:29:28.74 ID:s3ZcdtNu - それじゃなくてもMSはTRUEを1に定義するという無茶をやってのけているわけだから、
その上で戻り値がBOOLのAPIで真に1以外が使われたりしたら、 もうやっていることが無茶苦茶だよね。何がしたいんだと。 戻り値がBOOLなのに0、1以外が返ったら、批判してよい。
|
- C++14/C++1z 20
500 :デフォルトの名無しさん[sage]:2015/06/01(月) 18:34:30.61 ID:s3ZcdtNu - >std::queueを定義した人たちはわざわざ隠蔽したから違う意図があったんだろうけど
>どういう議論でそこに落ち着いたのかは興味のある所だな 一週回ってまたもとの話題にたどり着きましたね。 std::dequeにはbegin()end()clear()があるのに、 std::queueにはないのは何故ですか?と。 やっと分かってもらえたようで、とてもうれしいです。 実装的な意味で隠す意味は全くないですよね。なにせstd::dequeには有るのだから。実装可能ですよね。 だから使い勝手の面で考慮して削ったのは明白なわけですが、 有ったほうが便利なのも明白なので、何故削ったか教えてください。 また、コンテナというコンテナにbegin()end()clear()が有るのに、 例外的に省く必要があったのは何故ですか? std::dequeには有るのに、std::queueにはないのは何故ですか?
|
- C++14/C++1z 20
508 :デフォルトの名無しさん[sage]:2015/06/01(月) 19:20:31.72 ID:s3ZcdtNu - >>504
コンテナアダプタだと、どうしてbegin()end()clear()は要らないのですか? 単純に、queueをdequeのスタック機能禁止版、 stackをdequeのキュー機能禁止版、として実装せず、 あえてbegin()end()clear()を削ったのは何故ですか? そうすることで何のメリットがありますか?
|
- C++14/C++1z 20
510 :デフォルトの名無しさん[sage]:2015/06/01(月) 19:23:42.90 ID:s3ZcdtNu - >>509
ではどうしてstd::dequeにはbegin()end()があるのですか? >俺低レベルプログラムの出身だから 低レベルプログラマの間違いですか? あなたの文章からは知性が感じられません。
|
- Win32API質問箱 Build120©2ch.net
534 :デフォルトの名無しさん[sage]:2015/06/01(月) 19:54:53.91 ID:s3ZcdtNu - だからさーお前らの言ってるのはAPIを呼び出す側の姿勢の問題だろ。
BOOLはintだから0、1以外の何が入ってるか分からんから、 そういう場合にも対応した安全なコード書けって観点だろ。 でも俺はそんなこと一言も言及してねーんだよ。 俺は戻り値がBOOLのAPIで、0、1以外が返るのは糞だ、と言ってるだけ。 こんなことは当たり前で、荒れる要素は全くない。 APIを設計する側のMSに文句を言っているだけで、 それを使うお前らに文句を言っているわけではない。 真の値にあえて1以外が使われる意味はあるか? MS「今日は2にしてみよう。明日は3にしてみよう。」 おかしいだろ。 MSは自らTRUEを1に定義してるんだよ。だったら真の値に1を使うのは当たり前だろ。 あえて他の値を使う必要性もないから、当然だよな。 どこに反論の余地があるの?
|
- Win32API質問箱 Build120©2ch.net
535 :デフォルトの名無しさん[sage]:2015/06/01(月) 20:18:56.34 ID:s3ZcdtNu - それともあれか?お前らはMSにBOOLが戻り地のAPIで、
真の値に1以外を使って欲しいのか?何の目的で? 別に1で構わないなら、俺の発言に文句ないはずだよな。 それに世の中にはif( ret == TRUE )とかいう糞みたいなコードだって散らばってるわけ。 TRUEを1と定義したのはMSなので、これはMSの責任でもあるわけ。 MSはこういった糞コードでもプログラムがクラッシュしないようにAPIの仕様を定めなければならない立場。 今回のケースでは、単に真の値に1を使うようにするというだけのことなので、そうするのは当たり前。 他の値を使う意味が全くないからな。2や3じゃなく、1を使えばそれで済む話。ノーコスト。 この場面で、あえて他の値を使ったとしたら、糞だろ。 そういう消極的な観点からも、戻り値がBOOLのAPIで0、1以外を返すのは 糞仕様なわけ。お前らがif( ret == TRUE )と書かないのと全く同じ理由で、 逆にMS側はif( ret == TRUE )と書かれている糞コードでもクラッシュしないように勤めるの。 可能な限り無意味なトラブルを避けるのは、使う側もMSも同じ。
|