[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
どうも、本編初登場の大西( はかせ )です。
C++やシェーダー以外にもC#とかいろんなツールいじったり手広くやってます。
今までコメント欄だけだったのですが、記事を書いた順番がドベだけは避けたかったので…
( これで記事書いてないの上原といいんちょだけだよねって煽ってみたり。 )
今回は2年生向けに( 3年生にも通じる部分もある )プログラムのアドバイスなんかをしようと思います。
現在、2年生はJavaでゲームを作っていると思います。そこでいくつかコード例を挙げます。
今回は、プログラミング中の些細なことについて説明します。
また、共同開発においても重要ですよ!
些細なことというのは、コーディングルールです。
コーディングルールというのは、ソースコード中での決まり事で
統一性が出て、可読性や保守性が高まります。
コーディングルールの一つである、
ソースコード中でのルールを説明していきたいと思います。
中括弧の位置について
例えば条件分岐の際の中括弧の位置は
if( i == 0 ) {
} else if( i == 1 ) {
}
if( i == 0 ) {
}
else if( i == 1 ) {
}
if( i == 0 )
{
}
else if( i == 1 )
{
}
色々なパターンがあり、人それぞれだと思います。
また、中括弧だけではなく
if (i == 0)
ifと小括弧の位置にスペースを空けたりや
小括弧の始まりと終わりはスペースを空けたり空けなかったりと
色々決めることが出来ます。
他にもfor文やインデント、演算子等様々な所で
ルールを決めることができます。
そうすることにおいて、自分のソースコードが見やすくなる事に繋がります。
共同開発においても、ルールを守ることで
統一性が出てデバッグ効率を上げる事にも繋がるかもです。
些細なことですが、続けることで役に立つ事なので
今からでもやってみましょう!
ども、こんばんわ~
最近こたつが恋しいZAKIです
部屋が狭くてこたつ置けないんですよねぇ…
いいなぁ、こたつ…
さて、今回のテーマは「メモリリークを探せっ!」です。
メモリリークとはプログラム中で確保したメモリ(画像データ、new,mallocなど)を開放し忘れて残してしまうことです
こいつが残り続けるとどんどん使用可能メモリが無くなってOSがフリーズすることがあります(一回ありました
探すにも一つずつコードを調べていくのも面倒。
そこで!プログラムで表示させちゃいましょー!
ども、こんばんわ~
さっき最後まで記事を書いたのに、ブラウザが落ちて記事が消えてしまったZAKIです
涙をこらえながら書き直そうと思います。
さてええぇぇぇぇ今回のおおおおぉぉぉぉテーーーーーーマはああああぁぁぁぁあぁぁぁぁ
シーン制御です。
すんません。マジで悔しいんですorz
さて、シーンとは何でしょうか。
シーンとは、タイトル、キャラセレクト、ゲーム、ゲームオーバー、などなど、ゲームの場面を指します。
皆さんはどんな感じで管理していますか?
while(1) {
if(sceneNo == 0) {
Title();
} else if(sceneNo == 1) {
CharaSelect();
} else if(sceneNo == 2) {
Game();
} else {
break;
}
}
こんな感じですか?
出来てるといえば出来ていますが、Game()関数を実行するとき毎回3回if判定が起こりますね
メインループだけに無駄な処理は避けたいところです
それを防ぐにはいろいろと使い回しの効く憎い奴を使います
そう、ポインタです。
しかも、関数ポインタです。
ああ引かないで待ってがんばるから僕がんばって説明するからぁ
続けて読んでもらえる人。ありがとう。
読んでくれない人、コノヤロウ。
関数ポインタとは関数のアドレスを入れるポインタ変数のことです。
関数ポインタの定義はサンプルではmain.hの38行目でやっていますね。
typedef void *(*LPSCENE)();
この行がそうです
typedefとは新しい型の定義を行います。
この場合はLPSCENEという自作の型を作っています。
説明すると結構長くなるので、詳しくは教科書、ネットで見てみてください。
あ、C言語の教科書あれは必携ですよ
みんな邪険にしますが、あれ見ればほっとんどのことが書いてあるので、実習中は持ってくことをオススメしますよ
あ、すいません。話を戻しますね
残りの部分が関数ポインタの宣言です
この場合は「void *型を返す引数なし」の関数のポインタです。
(*LPSCENE)が型の名前です
typedefが無ければこの部分は、変数名になります
()内の*はポインタであることをさします。
詳しくは教科書およびネットで(ry
関数ポインタ変数の宣言はmain.cppの18,19行目で行っています。
これをシーンの制御に使うので、これをシーン変数と呼びましょう
それじゃ、シーン制御の全体の流れを説明します