広告
↓発売日:2018年09月22日↓
新品価格 |
まずはDXライブラリを使う上での最低限のプログラムを見てみましょう!
#include "DxLib.h" int my_get_key(void); int key[256]; int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ ChangeWindowMode(TRUE); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); /*ここは最初の一度だけ実行されるので*/ /*変数の初期化などを書く*/ int gamecount = 0; int Color_White = GetColor(255,255,255); while (ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && my_get_key()==0){ /*ここにプログラムを書く*/ DrawFormatString(0,0,Color_White, "%d",gamecount); gamecount++; } DxLib_End(); return 0; } int my_get_key(){ char keys[256]; GetHitKeyStateAll(keys); for (int i = 0; i < 256; i++){ if (keys[i] != 0){ key[i]++; } else{ key[i] = 0; } } return 0; }
左上に勢いよくカウントアップされる数字が表示されれば成功です。
と思われた方はご安心ください。
この「最低限のプログラム」以外はほぼ入門時に習ったであろうC言語のお作法で大丈夫です。
コメントの場所にプログラムを書いていく感じになります。
※メインプログラムという部分が高速で繰り返されるので、初期化などは必ずその前のコメントの部分で行うようにしてください。もしわかりずらかったら中間ソースと見比べながら進めてください。
C言語を初めた時に意味もわからず
#include <stdio.h> int main(){ printf(""hello world!"); return 0; }
「hello world」していた時のように難しい事は置いといてまずはカタチから入りましょう。
DXライブラリなどを使ったC言語によるグラフィカルなプログラムが初体験という方へ少し説明します。
まずプログラムの種類が今までの「コンソール画面」に文字だけ表示する「コンソールアプリケーション」から「ウィンドウ画面」にグラフィックも表示できる「Win32アプリケーション」に変わります。
そのため昔の
int main()
は
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
というものになります。
そして本来この「Win32アプリケーションプログラム」を作るのは「DirectX」という大変難しい技術を使いこなさなければいけないのですが、そこにこの「DXライブラリ」が登場した事によって誰でも簡単に「Win32アプリケーションプログラム」を作れるようになったというワケです。
広告
さきほどのプログラムで使われているDXライブラリの関数を軽く紹介したいと思います。
DxLib_Init(); DxLib_End();
DXライブラリの初期化と終了を行います。
ChangeWindowMode(TRUE);
(640×480)のウィンドウを作ります。
SetDrawScreen(DX_SCREEN_BACK); ScreenFlip(); ClearDrawScreen();
アニメーションの際の画面の「ちらつき」を抑える裏画面処理というものです。「SetDrawScreen(DX_SCREEN_BACK);」で画面の後ろに完全に描き切った画像を「ScreenFlip();」で表へ表示します。「ClearDrawScreen();」で前の画面を消去します。
実は画面は目に見えないすごい早さで画面を書き換えているのですが、この書き換えのタイミングを無視してアニメーションを入れるとアニメーション自体の画像を描くタイミングとこの画面の書き換えのタイミングが合わなくなって非常に「ちらつく」のです。
ProcessMessage();
いろいろなアプリケーションが同時に動くいわゆる「マルチタスク」環境において他のアプリケーションと適切に連携をとるための処理をしております。
これ以上は少し小難しい話になるのでそういうものだと軽く受け流しましょう。
GetHitKeyStateAll();
キー入力を処理している関数「my_get_key()」の中で使われているこちらはキーが押された時に押されたキーも含め全てのキーの入力情報を取得するものになります。
そしてこれらを「while」ループで回してその中にプログラムを書いていくような感じになります。それぞれの「==0」というのはエラー処理になります。「0」以外はエラーになります。
少し話が長くなりましたが「最低限のプログラム」の内容はざっとこんな感じです。STG作成以外でも使えるのでコピペして使いまわしましょう。
それでは引き続きDXライブラリの関数を説明しながら少しずつ本題に入っていきます。
DrawFormatString(x座標,y座標,色の指定, "本文",変数);
まずこちらは見た感じわかりそうですが文字を表示する関数です。座標は初期状態では左上が(0,0)右下が(639,479)になるので
さきほどのプログラムでは左上に表示されます。色の指定というのは
GetColor(赤,緑,青);
こちらの関数を使います。赤・緑・青の色の度合いを「0~255」で指定します。出来上がった色をint型の変数に保存します。
あとは「printf()」同じく変数を「%d」などで表示する事ができます。
複数表示したい場合も「,」カンマで分けて追加していけば大丈夫です。
そして上のプログラムでは「gamecount」という変数を表示しているワケですが、こちらの変数は画面表示処理の「while」ループ内で
gamecount++;
インクリメントしてますよね。これは画面の書き換えの早さに合わせてインクリメントしているという事になります。
そしてこの早さは決まっているので(ディスプレイによって違います。ほとんどのディスプレイは1秒間に60回です)これをゲーム内での仮の時間としてしまおうというワケです。
例えば「gamecount」が「300」になったらイベントを起こすとか「1000」になったら次のステージとかそんな感じです。
そしてこれはキャラクターの移動速度などにも関わってきます。
このへんはやってみた方が早いと思いますので次のプログラムを実行してみてください。
#include "DxLib.h" int my_get_key(void); int key[256]; int gamecount; int x; int Color_White; int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ ChangeWindowMode(TRUE); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); /*ここは最初の一度だけ実行されるので*/ /*変数の初期化などを書く*/ gamecount = 0; x = 0; Color_White = GetColor(255,255,255); while (ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && my_get_key()==0){ /*ここにメインプログラムを書く*/ DrawFormatString(x,240,Color_White, "(^o^)"); x++; if(x == 639)x = 0; gamecount++; } DxLib_End(); return 0; } int my_get_key(){ char keys[256]; GetHitKeyStateAll(keys); for (int i = 0; i < 256; i++){ if (keys[i] != 0){ key[i]++; } else{ key[i] = 0; } } return 0; }
左から右へ移動する文字を確認できたと思います。
「gamecount」の早さを座標に置き換えるとこんな感じになります。
要はこの画面切り替えの速度を基準として他の早さも決まるという事です。
ここまでの中間ソースになります。
では「最低限のプログラム」の準備ができたところで次回は簡単な背景を書いてみましょう。
広告
↓発売日:2016年02月29日↓
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
新品価格 |
↓発売日:2018年03月09日↓
新品価格 |
↓発売日:2017年06月14日↓
新品価格 |
↓発売日:2018年05月21日↓
新品価格 |
↓発売日:2017年12月07日↓
新品価格 |
↓発売日:2017年02月08日↓
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
新品価格 |