TNP資料室 @ ウィキ内検索 / 「ifの使い方と演算子について」で検索した結果

検索 :
  • ifの使い方と演算子について
    ifの使い方と比較演算子について  この項目で学ぶこと 条件分岐について 比較演算子について ifについて elseについて 論理演算子について サンプルソース 条件分岐について  プログラムは通常、上から下に処理を行います。しかし、それだけでは単純な動作しか定義できません。状況によって処理する内容を変えたいときに使用するのが制御文です。今回はその制御文のひとつであるifについて紹介します。 比較演算子について  実際にifを使用する前に、比較演算子について学びます。比較演算子とは2つの値を比較する演算子です。まんまです。条件が成立した場合を真(true)、成立しない場合を偽(false)といいます。また、真は0以外の値、偽は0のことをいいます。比較演算子には以下のものがあります。 ==a == baとbは等しい a baはbより小さい a baはbより大...
  • C言語
    ...数について 第4回 ifの使い方と演算子について 第5回 switchの使い方について 第6回 forの使い方について 第7回 whileの使い方について 第8回 配列の使い方について 第9回 関数の作り方について 第10回 構造体の使い方について 第11回 ファイル操作について 第12回 DXライブラリについて 補足資料 ビット演算について
  • ビット演算について
    ビット演算について  補足資料です。 ビット演算について 論理演算子について シフト演算子について typedefについて 型変換について sizeof演算子について 条件演算子について ビット演算  このページは、講義資料ではありません。講義では最低限覚えなければならないことを教えていますが、こちらで紹介する物は必ずしも覚えなくてもよい、しかし使えるとちょっと役に立つ機能を紹介します。マニア向け。 ビット演算は、整数型変数の各ビットに対して、論理演算やシフト演算などをします。ビット演算ができるのは符号付整数型、符号なし整数型のオペランドに対してのみであり、浮動小数点型などのオペランドには使えません。  コンピュータで使われる記憶素子は2通りの値をとります。それをn個並べることで、2n通りの情報を表現することができます。この記憶素子1個分の情報量をビット(bit)といいます。...
  • 構造体の使い方について
    構造体について  この項目で学ぶこと 構造体とは 構造体のアクセスの仕方 ポインタを使った構造体のアクセスの仕方 Cの構造体の宣言について サンプルソース 構造体とは 構造体とは複数の変数をまとめたものです。たとえば人のデータとして氏名、身長、体重が必要だったとします。構造体を用いるとこれらの変数をまとめることが出来ます。 構造体の使い方 構造体は標準で定義されている構造体のほかに、自分で定義することが出来ます。ここでは自分で定義し、使用する方法の一例を紹介します。C++からサポートされた記述の仕方になりますが、最近のコンパイラはほとんどC++に対応しているのでエラーは出ないと思います。  構造体の定義は関数の外に以下のように記述します。 struct 構造体タグ名{ データ型 変数名; データ型 変数名; ... }; 構造体内に定義された変数はメンバ変数とい...
  • forの使い方について
    forの使い方について  この項目で学ぶこと forの使い方 break文の使い方 ( )内の省略 二重ループ サンプルソース forの使い方  プログラムを作成していると、同じよう処理を繰り返すことがよくあります。そのような処理を効率よく行うための制御文のひとつにforがあります。機能が多いのでしっかり覚えましょう。まずサンプルソースを見てみましょう。「変数++」は変数の値を+1する演算子です。 変数の値を5回表示する #include stdio.h int main (){ int i;// カウンタは慣例的に「i」を用いる for( i=0 ; i 5 ; i++ ){// 初期設定式;条件式;再設定式 printf("iの値は%d\n",i); } return 0; } これの実行結果は iの値は0 iの値は1  : iの値は4 ...
  • 配列の使い方について
    配列の使い方について  この項目で学ぶこと 配列とは 使い方 ループと組み合わせて使用してみる アドレスとポインタについて 多次元配列について 配列とは  配列とは、複数の同じ方の変数を1つにまとめたものです。複数の変数を一列に並べたものと考えてもいいでしょう。 使い方  配列を使ってint型の変数「a」を10個用意したいときはこのように記述します。 int a[10];  この宣言により、a[0],a[1],a[2]...a[8],a[9]という10個の変数が使えるようになりました。配列で用意された変数のことを要素といいます。カッコの中の数字を添え字(インデックス)といいます。添え字は0から始まるので、最後の添え字は「要素数-1」になります。太字ばっかり。  要素は同じ型の普通の変数のように扱うことが出来ます。int型の配列を使って適当に計算して結果を出力してみ...
  • whileの使い方について
    今回の講義について  この項目で学ぶこと whileの使い方について ループの前判定と後判定 whileの使い方について whileはforと同じようにループの制御を行います。 while( 条件式 ){ ここの処理が実行される }  条件式が満たされているならブロック内の処理を実行します。実行順序は 1.条件が真の場合 2へ  条件が偽の場合 ループを抜ける 2.ブロックの処理を実行 3.1へもどる  つまり最初の条件式が成り立たなかった場合、ブロック内の処理は一度も実行されません。これはforも一緒です。  forと異なり( )条件式を省略することはできません。 無限ループを使用する場合は( )内にセミコロンを必要とするforよりもシンプルな書き方の出来るこちらが使われます 。 while(1){ ここに無限ループしたい処理を書く }  使い道は...
  • switchの使い方について
    switchの使い方について  この項目で学ぶこと switchの使い方 列挙型、defineマクロについて サンプルソース switchの使い方 switchもifと同様に、分岐処理を行うことが出来ます。 switch( 値 ){ case 1 値が1のときの処理 break; case 2 値が2のときの処理 break; case 3 値が3のときの処理 break; default どれにも当てはまらないときの処理 break; }// breakでここにくる  switchは値とcaseの値が一致したときのみ分岐することが出来ます。また、値には整数しか使えません。 入力された値で分岐するプログラム #include stdio.h int main (){ int money; printf("1~3の整数を入力してください "...
  • 変数について
    変数について  この項目で学ぶこと 変数とは 変数の宣言の仕方について 変数に値を入れる 変数を表示する 計算してみる 計算するときに注意すること 変数名について printf関数のいろいろ 変数とは 変数とは、名前の通り「変化する数」です。プログラムを実行しているとき、さまざまな計算が行われ値が変化します。たとえばRPGのキャラのHPであったり、レベルであったり。そういう数です。文字も変数として扱えるのですが、C言語の文字の扱いは複雑なので別の講義で詳しく説明します。  今の時点ではあまり関係ありませんが、変数はメモリ(主記憶)上に記憶されます。この辺りの考え方がいずれ必要になってくるので一応覚えておいて下さい。 変数の宣言の仕方について  変数を使うにはまず変数を宣言しなくてはなりません。変数を宣言するというのは、値を入れることが出来る箱を用意することと考えてくださ...
  • ファイル操作について
    ファイル操作について  この項目で学ぶこと ファイル操作について ファイルを出力する ファイルを読み込む 標準入出力ストリーム サンプルソース ファイル操作について  今回はテキストファイルの操作のみ紹介します。ファイル操作をするにはstdio.hに定義されているFILE構造体を用います。ファイル操作が出来るようになるとゲームのセーブデータなどを作ることが出来るようになります。 ファイルを出力する  まずはサンプルソースを見てください。 #include stdio.h int main(){ FILE *fp;// ファイルポインタを宣言 fp = fopen("output.txt","w");// ファイル名,オープンモード fprintf(fp,"output.txtを出力します。\n");// フ...
  • 連絡
    サンプルソースについて  各人に下記の内容についてのサンプルソースを作成してもらいます。 !必ず結果を出力するソースにすること! 1.変数について ・変数の代入 ・変数の値を表示 ・2つの変数の値を入れ替える ・さまざまな方法で変数を表示 2.四則演算子、scanf関数を用いる ・四則演算の結果を表示 ・図形の面積を表示 ・座標を2つ指定し、2点を通る直線の方程式をもとめる 3.論理演算子、ifを用いる ・scanf関数を用いた分岐 ・論理演算子を用いた分岐 ・比較演算子を用いた分岐 4.switchを用いる ・scanf関数を用いた分岐 ・defineマクロを用いた分岐 5.forを用いる ・同じ文字を10回表示させる ・九九の表をつくる ・1~100までを足す ・2重ループを用いる 6.whileを用いる ・同じ文字を...
  • scanf関数について
    scanf関数について  この項目で学ぶこと scanf関数について 使い方 サンプルソース scanf関数について scanf関数を用いることで、キーボードから入力された値を変数に格納することが出来ます。 使い方  まずはサンプルソースを見てください。 #include stdio.h int main (){ int sampleInput; printf("整数を入力して、Enterキーを押してください\n"); scanf("%d", sampleInput); printf("あなたが入力した整数は「%d」です。\n",sampleInput); return 0; }  これで変数に値を格納することが出来ました。scanf関数で値を変数に格納するには第1引数(カッコの一つ目の情報)に受け取る...
  • 関数の作り方について
    関数の作り方について  この項目で学ぶこと 関数とは 関数の定義の仕方 プロトタイプ宣言について 戻り値を利用する グローバル変数について 参照渡しについて 再帰呼び出しについて main関数について サンプルソース 関数とは  いつだか触れたとおり、関数とは複数の文、一連の処理の集まりで、数学で扱う関数とはまったくの別物です。C言語には今まで使ってきたようなprintf関数やscanf関数などのあらかじめ用意している標準ライブラリ関数のほかに、プログラマが独自の関数を定義することが出来ます。多くの場合、関数は引数を変えることで動作を制御します。引数とは処理の材料となる値のことで、今まで( )の中に記述してきた値のことです。関数呼び出し時に渡す引数を特に実引数といいます。これまで使ってきたのが実引数です。 関数名(引数); 引数がない関数も存在します。今回はそのような関数...
  • 構造体に関数書く
    構造体に関数を書く  これは本来C++の機能なのか?よく分からないけど少なくともC++ではこの機能が実装されています。基盤で使用している機能を中心に説明します。本来は継承やら多様性やらアクセス指定子やらコンストラクタやらデストラクタやらやたら機能が多いのです。気になったら調べてみてください。 C++での構造体の定義と宣言の仕方について  関数に関することを説明することの前に、C++での構造体の実体宣言の仕方を紹介します。Cの書き方でもサポートされていますが、何かとC++のほうが高機能です(関数の引数に使用するときなど)。 Cの構造体定義と宣言 #include stdio.h struct SScore{// struct Scoreの略 int japanese;// 日本語の点数 int math;// 数学の int english;// 英語の }; int ma...
  • グローバル変数の扱い方について
    グローバル変数の扱い方について  基盤では積極的にグローバル変数を用いてます。メリット・デメリットがありますが、メリットのみ紹介しますw値を保持するのが簡単、アクセスが簡単の2点が挙げられます。  値を保持するのが簡単とはどういうことでしょうか。ゲームは開始した直後から終了する直前まで保持するべき値を持ちます。たとえばRPGのレベルやステータスといったものから、読み込んだ画像や音声のハンドル、アニメーションのための経過時間などさまざまなものがあります。しかし、関数内で普通に宣言された変数(auto宣言されたローカル変数)は、その関数が終了するとき、値が破棄されます(正確な内部動作は違いますが)。これでは値を記憶することが出来ません。しかし、グローバル変数はプログラムが開始した直後からプログラムが終了する直前まで値を保持します。先の変数と違い、関数が終わるとかそういったことがありませんか...
  • C言語について
    C言語について  この項目で学ぶこと なぜ数ある言語からC言語を学ぶのか プログラムのソースに必ず必要な記述について コンソールに文字を表示する方法について プログラミングの際の基礎知識 なぜ数ある言語からC言語を学ぶのか  C言語は他の言語よりも広く普及しています。それは、システムの深いところまで取り扱うことが出来ること、移植性が高いこと、記述が容易であるといった理由があります。C言語は他のプログラミング言語と比べて、記述方法が柔軟かつ記号的で、始めてみた人にとっては少し分かりづらい面があります。しかし、一度理解してしまうと簡潔で記述しやすいものです。 プログラムのソースに必ず必要な記述について  プログラムのソースには必ず記述しないといけないものがあります。下のソースファイルは最小限の記述ではありませんが、講義中は必ずソースファイルに記述する必要があるものです。 ...
  • sound.cppについて
    sound.hについて  BGM制御構造体の定義と効果音の制御構造体の定義、それぞれの配列の添え字用の列挙型が用意されています。長いのでBGMと効果音に分けて説明します。 enum eBGM_INDEX{ BGM_TITLE,BGM_GAMEMAIN,BGM_GAMECLEAR,BGM_GAMEOVER }; // BGMコントロール const int BGM_NUM = 16;// BGMの数 struct SBgmControl{ bool PlayFlag;// 再生中かどうか int NowPlayIndex;// 再生中の添え字 struct{ int Handle;// ハンドル int Count;// 再生時間(フレーム) }Bgm[BGM_NUM];// BGMの数だけ用意する void Process();// 全体処理 void FirstInit()...
  • title.cppについて
    title.cppについて  もうここまで読んだらなんとなく分かってきたかもしれませんが、やってることはびっくりするほど簡単です。正確にはやってることがとても簡単に見えるくらいまで関数を細分化しているのです。関数を分けて書かないで長文を書くと、やってることは同じなのにとても難しく見えます。  にしても驚くほど説明することがない・・・。  まずはヘッダーファイルから見ます。重複インクルード防止のマクロ記述は腸略します。 const int TG_NUM = 8;//TitleGraphicNumberの略 enum eTG_INDEX{ TG_BACK, }; struct STitle{ int Graphic[TG_NUM]; void Process();// この中でループする void Init();// 初期化 void FirstInit();// コンスト...
  • main.cppについて
    さて、この項目からようやく基盤のソースの詳しい説明に入ります。基本的にその関数が持っている機能を紹介するのであって、他の関数との連携についてはあまりふれません。そんなことしてると説明が延々となってしまうので。そのため、ここからの.cppシリーズは1つ1つをきっちり理解しながら読み進めるより、2~3回流し読みしたほうが理解しやすいと思います。  ソースファイルの上から順に読み進めいていきます。 #define _GLOBAL_SET_について #define _GLOBAL_SET_  これですね。これは、global.hでグローバル変数の本体の宣言を行うための定義です。詳しくは別の項で。 メイン関数について #include"main.h" // メイン関数 int WINAPI WinMain( HINSTANCE hInstance, HIN...
  • プログラミングをする前の仕様書について
     仕様書とは、それを用いることで何が出来るのかを使い方とともに明確に書かれたもの?大体そんな感じ。  ゲームを作成するときも仕様書は重要です。先にゲームでやりたいことを明確に決めておかず、後から新しい機能を追加しようとすると、プログラムに無理が出ることが多く、膨大な量の書き換えが必要になり面倒です。  ですので、実際にプログラミングをする前に最低でも必要な関数やフラグなどを紙に書き出すなどをして、無理の無い設計を心がけるべきです。プログラミングには初期化?がつき物です。初期化が必要なタイミングというのはその処理、関数を実行する前になります。先に関数などを作ってから変数初期化用の関数を作るというのはあまり現実的でありません。体験談です。 タイトル画面 → メインのゲーム → ゲームクリアorゲームオーバー → タイトル画面 → メインのゲーム... このようなゲームについて...
  • DXライブラリについて
    DXライブラリについて  この項目で学ぶこと DXライブラリとは DXライブラリで出来ること DXライブラリの導入について ゲームプログラミングについて DXライブラリとは  Xライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。(本家サイト)より引用) DXライブラリで出来ること  Windowsアプリケーションで画像や文字の表示、音楽の再生などをするための関数が使えるようになります。 DXライブラリの導入について  ここ見てください。 ゲームプログラミングについて  こっちみてください。
  • fps.cppについて
     これはあまり理解しなくてもいいかもしれません。  今回は1秒間に60フレームの描画になるようにします。ただし、60FPSよりも早くならないようにする内容です。しかもこの方法、かなりアバウトです(1/1000秒単位なので見て分かるほどではありませんが)。精度の高いFPS管理をしたいのなら別の方法をとりましょう。 fps.hについて struct SFpsControl{ int Index,One;// 添え字、1フレームあたりの時間 double Fps;// Fps int RemTime[60];// 60回の描画にどれだけ時間がかかったか int PreCount;// 1フレーム前の時間を記憶 void FirstInit(); void Process(); };  Indexはメンバ変数RmTime配列の添え字に使用する変数です。  Oneは1フレーム...
  • Visual C++の警告抑止について
    Visual C++の警告抑止について 警告抑止の対象 警告抑止の方法 警告抑止の対象  まず第一に、何でもかんでも警告抑止するのはやめましょう。本当にこの警告は抑止するべきなのかどうか見極めましょう。  多くの場合、VisualC++独自で定義している関数を使用しなさいという警告は抑止してかまいません。筆者は積極的に抑止しています。  警告の抑止の方法には多くのパターンがありますが、今回は警告を抑止する方法を2つ紹介します。  注意:筆者の開発環境はVisual C++ 2008 Express Editionです。 警告抑止の方法  つぎのソースをコンパイルしてみましょう。  #include stdio.h int main(){ int Damare; scanf("%d", Damare); return 0; }  デフォルトの設...
  • gameMain.cppについて
    まずはmain.hから。 const int MG_NUM = 8 ; //MAIN_GRAPHIC_NUMの略 enum eMG_INDEX{ MG_BACK, }; struct SGameMain{ int Graphic[MG_NUM];// グラフィック bool PoseFlag;// ポーズかどうかのフラグ void Process();// この中でループする void Init();// 初期化 void FirstInit();// コンストラクタ void Load();// ロード void Draw();// 描画系をここにまとめる bool Pose();// ポーズ };  タイトルとほとんど一緒です。よってほとんど省きます。さて、異なる点としてbool型のPoseFlag変数がありますね。bool型とは、C++でサポートされている型で、真か偽か...
  • other.cppについて
    other.cppについて  ここのシートには、どこに入れればいいのかよくわかんなかった関数が詰め込まれています。全部main.cppに移してもいいかもしれませんね。  このシリーズ読まなくてもコメントアウト見れば大体分かるような気がしてきた。 GetKeyInput関数について // キーボードの押下時間を調べる関数 void GetKeyInput( int *KeyBuf ){ char damy[256];// 押下状況を格納する配列 GetHitKeyStateAll( damy ) ;// 押下状況を格納 for( int i=0 ; i 256 ; i++ ){// 全要素 if( damy[i] == 1 )// 押下されていたら KeyBuf[i]++;// インクリメント else KeyBuf[i] = 0;// ゼロにする } if( Key[KEY_IN...
  • オブジェクト指向について
     オブジェクト指向とは、プログラミングの際に「1つの関数に1つの役割を持たせる」考え方です。超噛み砕くとこんな感じな意味になると思う。たぶん。 ゲームプログラミングの際に分割を考えた場合、たとえばこのようになります。 タイトル画面を処理する関数 メインゲーム関数 ゲームクリア画面を処理する関数 ゲームオーバー画面を処理する関数  どこまでを「1つの役割」と考えるかは状況によって異なりますし、必ず1つでないといけないというわけでもありません。  さらに深く考えてみるために、「シューティングゲーム」について考えてみます。シューティングゲームの場合、メインゲーム関数の中にはさらに 自機を制御する関数 敵を制御する関数 サウンドを制御する関数 などが考えられます。これらをそれぞれ関数にします。 さらに、「自機を制御する関数」について考えてみると、 キー入力で自機...
  • gameOver.cppについて
    gameOver.hについて  タイトル、ゲームクリアと一緒です。手抜きじゃないよ! const int OG_NUM = 8 ; //OVER_GRAPHIC_NUMの略 enum eOG_INDEX{ OG_BACK, }; struct SGameOver{ int Graphic[OG_NUM];// グラフィック void Process();// この中でループする void Init();// 初期化 void FirstInit();// コンストラクタ void Load();// ロード void Draw();// 描画系をここにまとめる }; gameOver.cppについて タイトル、ゲームクリアと一緒です。手抜きじゃねぇぞ! #include"main.h" // ゲームオーバー画面の処理 void SGameO...
  • 通れるマス、通れないマスをつくる
    通れるマス、通れないマスを作る  いかにもゲームらしくなってきました。今回はステージ情報に応じて移動を制御します。  識別番号1(赤マス)を通れないようにします。今回はキー入力されて移動しようとしたとき、移動先が1(赤マス)だったら元に戻すという方法で実現します。 game.cppのMovePlayerに赤マスへは移動できないように追加 game.cpp ... void MovePlayer(){ if( Key[KEY_INPUT_RIGHT] == 1 ){// 右が押されたら Player.x++;// x座標を増やす if( Player.x == 8 )// 飛び出たら Player.x--;// 戻す if( Bord[Player.y][Player.x].Kind == 1 )// 赤マスだったら Player.x--;// 戻す } if( Key[KEY_...
  • gameClear.cppについて
    gameClear.hについて const int CG_NUM = 8 ; //CLEAR_GRAPHIC_NUMの略 enum eCG_INDEX{ CG_BACK, }; struct SGameClear{ int Graphic[CG_NUM];// グラフィック void Process();// この中でループする void Init();// 初期化 void FirstInit();// コンストラクタ void Load();// ロード void Draw();// 描画系をここにまとめる };  タイトルと一緒です。駄文→コンストラクタじゃないですけど、コンストラクタもどきってことでそんなコメントがついてます。コンストラクタだじゃないです。機能としては大体一緒ですけど、コンスt(ryコンストラクタとは、その構造体が呼び出されたとき、、自動的に1度だけ呼び...
  • どんなゲームでも必要な機能について考える
    この章(?)では、どんなゲームでも必要な機能について考え、作成します。  ほとんどの関数はおおよその機能を持っているだけで、実際にゲームを作る際はその機能を残したまま、ソースを追加していくという形をとります。 実際に作る関数とその機能 メイン関数 DXライブラリの初期化 ゲームで使うデータのロード 以上が終わったら下のMainLoopを実行する void MainLoop(); メインループの関数です。 ESCAPEキーが押されたらゲーム終了 裏画面の反映、クリアを行う 現在のゲームの状態(タイトル画面なのか、メインゲーム中なのか)に応じて、実行する関数を選択する void ProcessTitle(); タイトルの処理をする関数です。 Zボタンを押すことでゲームがスタートする void ProcessGameMain(); メインゲームの処理をする関数...
  • はじめに
    はじめに  ここではすでに完成しているゲームの基盤のソースを公開し、その基盤のアルゴリズム、使い方、拡張の仕方などについて学びます。重用なのはすでに完成しているということです。一緒にこういうプログラムを作りましょうといった形式ではないです。そっちの形式に慣れてる人には理解しずらいかもしれません。  基盤のソースですが、いくつかC++の書き方を用いてます。特に構造体のメンバに関数があるというのは普通は使わないので文法が分からない人がいると思います。それについては後の項で詳しく説明します(classでも良かったのですが、説明が面倒なので構造体にしました)。  下のリンク先からファイルを落とし、使用してください。 frame_c++  少し下にスクロールすると「ダウンロード」というリンクがあるので、そこにアクセスすると自動的にダウンロードが始まります。  私のプロジェクト...
  • はじめに(文章の形式について)
     この章では、基盤に必要な機能を考え、作成します。文章を読みながら実際にプログラムを打ち込みながら読み進めることを推奨します。読むだけではそのときは理解できたとしても、なかなか身につかないものです。  完成したソースファイルがまとめにあがっています。先にこちらをダウンロードし、一通り目を通してから読み進めると理解しやすいと思います。かなりコメントアウトが入っていますので、邪魔であれば消してしまってもかまいません。なぜこのように関数を分割したのか、ソースファイルを分割したのかといった理由を後の項目で詳しく解説していきます。
  • プロジェクトを作成する
    さて、プロジェクトを作成しましょう。 私の開発環境はVisual C++ 2008 Express Edition です。 無料の統合開発環境ですので、余裕がある方は本家サイトの使い方解説のページよりインストールしていただければ以下の文章が読み進めやすくなりますwインストールしない方はこのページを読まないでもらってかまいません。ソースコードは一切ありません。  本家サイトの使い方解説のページの「2.」までは終了しているものとします。「2.」までは一度設定すれば設定しなおす必要はありません。「3.」以降は新しいプロジェクトを作成することに設定しなおす必要があります。 新しいプロジェクトを作る  大部分が本家サイト様の引用になりますが、一部変更がありますので以下の文章のとおりにプロジェクトを作成してください。プロジェクト名は「frame(基盤)」とします。 ...
  • DXライブラリ
     ここではDXライブラリについて学びます。DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。(本家サイト)より引用)  DXライブラリを用いることで画像の描画、音声の再生を容易に行うことが出来るようになります。 [重要]私が思ってること、やってることを書いてるだけです。最善のプログラムであるはずがありませんw全ての情報はあくまで参考程度に。 DXライブラリの初歩  需要が高い関数やちょっとしたテクニックを解説します。 ESCAPEキーを入力すると終了するプログラム 文字を描画する方法 キーがどれだけの時間押されたかを調べる方法 画像を表示する方法 音声を再生する方法? ゲームプログラミングを始める前に  実際...
  • これ以降の文章の方向性の変更について
     前の章ではソースを書き換えながら解説をしてきました。それは、私が実際にどのように考えながら打ち込みをしているのかを知ってもらうためでした。  これ以降は、すでに完成したソースを解説していくかたちで書かれています。1つの項目で1つの機能を解説するような形になります。先にソースファイルを公開しておくので、ダウンロードして全体がどのような流れで書かれているのかを知っておけば理解しやすいと思います。
  • ESCAPEキーを入力すると終了するプログラム
     これはC言語での「魔法の言葉?」の一部に相当します。実際にDXライブラリが導入できているかを確かめることが出来ます。  画面が真っ黒だとなんか不安だったんで、白い四角を表示させてますw サンプルソース #include"DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE);// ウィンドウモードで起動 if(DxLib_Init()==-1)// DXライブラリを初期化 return 1;// 初期化に失敗したらプログラムを終了する SetDrawScreen(DX_SCREEN_BACK);// 裏画面を使用する int white = Ge...
  • 画像を表示する
    画像を表示する  画像を表示するため、title関数を書き換えます。DrawGraph関数については本家サイト様の関数リファレンスを参照してください。 title.cpp ... void Title(){ DrawGraph(0,0,TitleGraphic,FALSE);// 画像を表示 DrawString(100,100,"タイトル画面です",white); DrawString(100,120,"Zでゲームをはじめる",white); if( Key[KEY_INPUT_Z] == 1 )// Zキーが押されたらゲームを始める GameState = 1; }  画像は表示されましたか?もう必要ないのでmain関数のprintfDx関数は消しましょう。今は面倒くさいので作りませんが、クリア画面、リタイア画面にも同じように画像を表...
  • 画像をメモリに読み込む
    画像をメモリに読み込む  さて、いよいよ目に見える部分を作成していくことが出来ます。  まずはタイトル画面に画像を表示してみようと思います。画像を画面に表示するためには 画像をメモリに読み込む 読み込んだ画像を表示するよう命令する という2つのプロセスが必要です。今回は前者の画像をメモリに読み込む処理を説明します。ただ読み込ませるだけならあまり説明は必要ないのですが、実用的な使い方をするためにはちょっと頭を使う必要があります。  DXライブラリの画像を読み込む関数を使用します。読み込んだ画像はint型の整数値で管理します。画像を表示したい場合、この整数値の画像を描画しなさいと命令します。この整数値のことをグラフィックハンドルといいます。よってこのグラフィックハンドルはプログラムが終了するまで記憶しておく必要があります。そこでグラフィックハンドルを格納する変数をグローバル変...
  • どんな機能を持っているか
    どんな機能を持っているのか  出来ることとか書きます 最初にタイトル画面が表示される 簡単にタイトル画面、ゲーム画面、ゲームクリア画面、ゲームオーバー画面に移動できる 上の画面切り替えの際、それぞれの初期化を行うことが出来る関数が用意されている。また、画面切り替えの際、自動でBGMを切り替えてくれる 簡単に音声を再生、切り替え、停止することが出来る メインゲームの間、Aキーを押すことでポーズ状態になる 基盤から学ぶことが出来ること  この基盤、そこそこ必要な機能はサポートしていると思います。一番重要なのは、関数の中身自体ではなくどのタイミングでどのような関数を呼び出せばいいのかが分かりやすいということだと思います。  説明の便宜上、プログラムを「タイトル、ゲーム、クリア画面など、全てをまとめたもの」、ゲームを「プログラムの中の、プレイヤーが遊べるもの」とします。また、ゲームはミ...
  • temp_kougi
    について  この項目で学ぶこと link_anchor plugin error 画像もしくは文字列を必ずどちらかを入力してください。 link_anchor plugin error 画像もしくは文字列を必ずどちらかを入力してください。 link_anchor plugin error 画像もしくは文字列を必ずどちらかを入力してください。 link_anchor plugin error 画像もしくは文字列を必ずどちらかを入力してください。
  • キー入力で自分の位置が移動するようにする
    キー入力で自分位置が移動するようにする  大改造はいります。まずプレイヤー構造体を作ります。構造体定義は新しくヘッダーファイルstruct.hをつくり、そこに記述します。メンバ変数はx座標、y座標とします。座標系は左上を(0,0)とし、右方向がxの正方向、下方向がyの正方向とします。また、(0,0)のときしっかりボードの上にプレイヤーがいる状態になるよう描画位置を修正します。また、その構造体をグローバルにします。本体はgame.cppに記述します。構造体の外部変数宣言も他の変数と同じように記述します。なお、構造体の宣言はC++がサポートしている方法で行います(宣言するときにstructをつけない)。  とりあえず構造体をつくり、左上のマスにプレイヤーを表示するところまで作ります。 struct.hを追加、構造体の定義を記述 main.hにPlayer構造体を外部変数宣言する...
  • キーボードの押下時間を調べる関数を作る
    つまり、コピペです。 other.cpp void GetKeyInput( int *KeyBuf ){ char damy[256]; GetHitKeyStateAll( damy ) ; for( int i=0 ; i 256 ; i++ ){ if( damy[i] == 1 ) KeyBuf[i]++; else KeyBuf[i] = 0; } }  この関数で取得したキーボードの押下時間というのは、さまざまな関数、さまざまなソースファイルから呼び出されることになります。そこで、キーボードの押下時間を保持した変数をグローバル変数?として使いたいと思います。マクロ定義?をうまく用いると変数の宣言と外部変数の宣言をきれいに書くことが出来るのですが、解説が面倒くさいのでここではマクロ定義を用いない方法をとります(キリッ  ソースフォルダに今までと同じように「g...
  • 自分の位置を画像で表示する
    自分の位置を画像で表示する  とりあえず今回は画像を読み込み、透過処理をして左上に表示します。透過色を指定するためにSetTransColor関数を使用します。使い方は本家サイトを見てください。  画像はこれを用います。サイズはマス目に合わせて32×32です。 player.bmp game.cpp  グラフィックハンドルを格納するグローバル変数PlayerGraphicの本体と描画の記述を書き足します。 ... void Game(){ for(int y=0 ; y 8 ; y++){ for(int x=0 ; x 8 ; x++){ DrawGraph(x*32+50,y*32+100,BordGraphic[0],FALSE); } } DrawGraph(0,0,PlayerGraphic,TRUE); ... } main.h  外部変数宣言を書き足し...
  • キーがどれだけの時間押されたかを調べる方法
    DXライブラリにはキーボードの押下状況を調べる関数としてGetHitKeyStateAll関数が用意されています。 int GetHitKeyStateAll( char *KeyStateBuf ) ; 引数にchar型の配列を渡すことで、全てのキーボードの押下状況を配列に格納します。 キーボードの押下状況を格納し、特定のキーが押されていたら文字を表示するプログラム サンプルソース #include"DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE); if(DxLib_Init()==-1) return 1; SetDrawS...
  • クリア画面に進めるようにする
    クリア画面に進めるようにする  全てのマスを通ったらGameClearフラグを立てることでクリアしたかどうかを調べます。もしGameClearフラグが立っていたらゲームクリア画面に進むようにします。GameClearフラグはゲームが始まる前に初期化します。もちろんGameClearはグローバル変数でとします。では実装してみましょう。 main.hにGameClearの外部変数宣言を追加 game.cppにGameClear変数の本体の宣言を追加、Game関数のゲームクリア画面に移動する条件を追加、CheckAllBord関数に全て通ったのならフラグを立てる処理を追加 title.cppにClearFlag変数を初期化する処理を追加 main.h ... extern int BordGraphic[4];// マス目のグラフィック extern int PlayerGraphic;...
  • プレイヤーの初期位置をステージに合わせる
    プレイヤーの初期位置をステージに合わせる  青マスの上からゲームを始めようというものです。  ここではfor文でBord構造体配列をしらべ、2(青マス)が見つかったらプレイヤーの初期位置をそこにするというものです。この処理はInitPlayerに書きます。この文章を書いてるときに私が実際に遭遇したバグも紹介します。 game.cppのInitPlayer関数にステージ情報を調べて初期位置を決める処理を追加 game.cpp ... void InitPlayer(){ for(int y=0 ; y 8 ; y++){ for(int x=0 ; x 8 ; x++){ if( Bord[y][x].Kind == 2 ){// 開始位置が見つかったら Player.x = x;// 座標を指定 Player.y = y;  printfDx("(%d,%d)から...
  • タイトル画面からキー入力でメインゲームの画面に移動する(続き)
    では、ChangeGameState関数を用いて画面切り替えをやってみましょう。 さまざまな関数を書き変えます。 title.cpp ... void ProcessTitle(){ int Color = GetColor(255,255,255); DrawString(100,100,"タイトル画面です。",Color); DrawString(100,120,"Zでゲームスタート。",Color); if( Key[KEY_INPUT_Z] == 1 )// Zが押されたら ChangeGameState( GS_MAIN );// メインゲームに切り替える } ... gameMain.cpp ... void ProcessGameMain(){ int Color = GetColor(255,128,255); Dra...
  • 全部のマスを通ったか調べる
    全部のマスを通ったか調べる  ゲームのクリア条件をおさらいします。全ての薄緑マスを黄マスに変更する、です。ではどうやって全ての薄緑マスを黄マスに変えたかどうかを判断すればいいのでしょうか。今回はfor文を使って、薄緑マス(識別番号0)がステージにないか調べる、もしなければクリアということにします。薄緑マスがなくなるタイミングは、移動したときです。よって、移動したときに薄緑のマスがあるかを確認します。  移動したときにマスを調べる関数を呼び出してもいいのですが、今回は移動したときに移動したというフラグを立て、マスを調べる関数を呼び出すかどうかを決めます。この方法はさまざまな場面で活用します。  ここでは全てのマスが薄緑以外になったら一度だけprinfDx関数で文字列を表示するようにします。あと、役に立たないステージデータも書き換えます。全てのマスを調べる関数をCheckAllBordと...
  • タイトル画面からキー入力でメインゲームの画面に移動する
    メインゲームに移動したかどうかを知るために、ProcessGameMain関数に次を書き足します。 gameMain.cpp ... void ProcessGameMain(){ int color = GetColor(255,128,255); DrawString(100,100,"メインゲーム画面です",color); } ... 「現在のゲームの状態」を記憶するグローバル変数「GameState」を作成し、この変数の値によってどの画面を表示するのかを分岐してみましょう。 新しくグローバル変数を追加します。 global.cpp int Key[256]; int GameState; global.h ... extern int Key[256]; extern int GameState; ... define?マクロを用いて...
  • コンパイラとか
    コンパイルのために  C言語(C++)はコンパイラ言語です  コンパイルということをしないと、プログラムとして動いてくれません  よってC言語(C++)などを扱う場合には、コンパイルするための準備が必要です 準備  コンパイルするためには、コンパイラというソフトウェアが必要です  ついでに、ソースとか書くのに便利な総合開発環境なんぞ入れてしまいましょう  とりあえず紹介する候補は3つ  C言語の基本的なことだけやりたい、軽く触れるだけでいい  ⇒⇒ 「bcc + C言語を始めよう!」  快適な環境でやりたい 早くゲーム作りたい C++もやりたい  ⇒⇒ 「Visual C++」  Linux等にもう慣れてる 家でも使いたい PCで色々やりたい ⇒⇒ 「Cygwin」  多分どれでもOKなはず  ちなみに導入方法とかが面倒な順は「 Cygwi...
  • @wiki全体から「ifの使い方と演算子について」で調べる

更新順にページ一覧表示 | 作成順にページ一覧表示 | ページ名順にページ一覧表示 | wiki内検索

目安箱バナー