× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
C++の勉強の一環で作成している空っぽのエンドレスバトルのような
ゲームですが、現在バグが取れません。UMLをしっかり作成して もう少し堅実に進める必要があると判断し、しばらくはUMLの習得 をしようと思います。 とりあえず現在のソースコードを別の記事にて公開します。 クラスだけになりますがUMLを作るだけなら、関数の中身は そこまで重要じゃないので後回しです。 PR |
適当に作ったクラスのメンバ関数
const Weapon (&getSubWeapon()const)[SUBW_NUM] {return ac.subw;} const Weapon型の配列を戻り値としたい。でもC++は配列を戻り値にできない。 そこで参照を使って配列の参照を戻り値とするとこんな変態的な書き方になる。 というわけでここにメモしておく。分からなくなったらここを見る作戦です。 ・参照なので当然のことかもだけど配列の大きさは省略不可能 ・戻り値が参照であることを示す&は関数名の前につけ()で囲む ※Weaponと離れてしまうけどこうしないとコンパイルが通らない ・メンバ変数を変更しないことを示すconst修飾子は関数名()の後ろにつける ・そのconst修飾子の後ろで括弧を閉じてから配列の大きさをつける とにかく分かりにくい。変態以外には読めないソースコードが 出来上がるので健常者の手に渡る可能性が低い場合に使いましょう。 参照の利点・欠点を理解している人なら、C++を勉強している途中で この書き方にたどり着くだろうと思います。ソースコードを見る人が そういう人に限られる環境なら使いこなしてみましょう。 以上、こんな偉そうなことを言う初心者からの助言でした。 あと、const Weapon型って表現は正しいのか分かりません。 constは修飾子、Weaponは列挙型につけた型名なので感覚的には正しい。 |
とりあえず4面までならクリアできた。
霊夢B Hard https://blog.cnobi.jp/v1/blog/user/3fcd22192bf5e01650aacd673244d958/1362131173 とにかく練習が足りないのかな。何十回かやってやっと1つが限界です。 1面とか被弾したらすぐリトライなのも良くないかも? それよりPracticeをやるべきでしょうか? |
http://bakadegomen.7narabe.net/Entry/38/
前回の記事の解説を書いておきます。 C言語だと変数宣言を最初にしないといけないから見づらい。 C++でやるべきだったかな・・・ OpenCLのAPIを呼び出すためだけに宣言・定義しているので、 APIを呼び出す寸前に書いた方が説明としては分かりやすいと思う。 疲れたのでOpenCLはここまででいいや。並列処理が必要になったら また参考書でも読みます。 そんなわけで続きに書きます。 |
並列処理を行う方法について書きます。
グラフィックカードやマルチコアのCPUなど、並列処理を行える ハードウェアには複数のプロセッサが搭載されています。 (4コアCPUなら4つのコアがこのプロセッサにあたる) 誤解を生む言い方をすれば、これらのプロセッサには番号が ふられています。したがってこれらの番号ごとに違う処理を 記述すれば複数のプロセッサが並列処理をします。 例えばこんな感じ id = get_id(); a[id] = b[id]+c[id]; プロセッサの番号を取得し、番号ごとに違う要素をいじる。 例えば番号として0がふられているプロセッサが実行する処理は id = 0; a[id] = b[id]+c[id]; つまりa[0] = b[0]+c[0];を実行します。 同じように1番のプロセッサはa[1] = b[1]+c[1];を、 2番のプロセッサはa[2] = b[2]+c[2];を、 3番のプロセッサはa[3] = b[3]+c[3];を、 それぞれ実行することになります。 これにより同時に実行させる処理が同じでも、 番号の違いにより並列処理を実現することができます。 実際には嘘八百だったりしますが原理は同じです。 とりあえずOpenCLでのサンプルを続きに書きます。 (バグ修正に疲れたので解説は次回) |
OpenCLの習得をしようと思います。
CUDAは学校でやったけど家のグラフィックカードがAMDでしたw そんなわけで参考書コピペメインでいきます。 詳しくは続きに書いておきます。 |
C++のオブジェクト指向について
Javaとあまり変わらないので省略します(ぉ 代わりに空っぽのEBができたら違いを比較しながら 記事でも書こうと思います。 とりあえずファイルの分割方法などのプログラミング以前のことが ある程度完了。参考書に書いてあることがちょっとずれてたりして 少し苦戦したかも。「Effective C++」もまだあまり読んでいないです。 この記事を書いてから20分後追記 Effective C++を理解できるレベルに達してないので数年後に後回し。 ある程度ファイルなどを作成して少し疲れたのでOpenCLに浮気します。 どうせそのうち両方やる予定だし並行しても良いと思います。 3/5追記 空っぽのEBがそろそろできそうな予感がするのですが、面倒臭い ので比較とかしなくて良いような気がする。C++っぽい書き方を した部分をちょっと抜き出すとかの方がずっと有用だと思うので、 それならやるかもしれません。 |
走りました。どうやら距離を測る機能の誤差が大きすぎるみたいです。
とりあえず4回走れば最低限の速さを取り戻せるということが判明? 25分は切れなかったけど、ある程度満足してしまったので多分また怠けるw いつものように続きに書きます。 |
C++に関するちょっとしたメモ
でも長いので続きにしまっておく ちょっとした小技の盛り合わせみたいな? オブジェクト指向以外の内容はほとんどこれで終わりです。 1日で参考書の300ページ以上をスルーする超駆け足でした。 いよいよ次回から空っぽのエンドレスバトルのようなゲームの 作成に関わってきます。 |
C++の参照(reference)の使い方
int variable; int &rvar = variable; 値やアドレスが初期化するときに与えた変数と同じになる したがって他の変数の値やアドレスをいじることができる |