画像(logo)

HOME/[C言語DXライブラリ]STGの作り方 目次/二日目 最低限のプログラム

広告

[C言語 DXライブラリ STGの作り方]
二日目 最低限のプログラム

広告

↓発売日:2018年09月22日↓

たった1日で基本が身に付く! C言語 超入門

新品価格
¥2,225から
(2018/10/8 23:10時点)

目次へ戻る

最低限のプログラム

まずは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;
}

実行結果

画像(cdxs_2_1)

左上に勢いよくカウントアップされる数字が表示されれば成功です。

DXライブラリは簡単だと聞いていたのに話が違うじゃないか!

と思われた方はご安心ください。

この「最低限のプログラム」以外はほぼ入門時に習ったであろうC言語のお作法で大丈夫です。

コメントの場所にプログラムを書いていく感じになります。

※メインプログラムという部分が高速で繰り返されるので、初期化などは必ずその前のコメントの部分で行うようにしてください。もしわかりずらかったら中間ソースと見比べながら進めてください。

C言語を初めた時に意味もわからず

#include <stdio.h>

int main(){
	
	printf(""hello world!");
	
	return 0;
}

「hello world」していた時のように難しい事は置いといてまずはカタチから入りましょう。

DXライブラリ初体験の方へ

DXライブラリなどを使ったC言語によるグラフィカルなプログラムが初体験という方へ少し説明します。

まずプログラムの種類が今までの「コンソール画面」に文字だけ表示する「コンソールアプリケーション」から「ウィンドウ画面」にグラフィックも表示できる「Win32アプリケーション」に変わります。

そのため昔の

int main()

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

というものになります。

そして本来この「Win32アプリケーションプログラム」を作るのは「DirectX」という大変難しい技術を使いこなさなければいけないのですが、そこにこの「DXライブラリ」が登場した事によって誰でも簡単に「Win32アプリケーションプログラム」を作れるようになったというワケです。

広告

DXライブラリの関数

さきほどのプログラムで使われている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)になるので

画像(cdxs_2_2)

さきほどのプログラムでは左上に表示されます。色の指定というのは

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;
}

実行結果

画像(cdxs_2_3)

左から右へ移動する文字を確認できたと思います。

「gamecount」の早さを座標に置き換えるとこんな感じになります。

要はこの画面切り替えの速度を基準として他の早さも決まるという事です。

ここまでの中間ソースになります。

中間ソース1

では「最低限のプログラム」の準備ができたところで次回は簡単な背景を書いてみましょう。

次回

三日目 簡単な背景

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓発売日:2016年02月29日↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2018/10/8 23:25時点)

↓発売日:2018年06月22日↓

スッキリわかるC言語入門

新品価格
¥2,916から
(2018/10/8 23:15時点)

↓発売日:2018年03月09日↓

C言語本格入門 ~基礎知識からコンピュータの本質まで

新品価格
¥3,218から
(2018/10/8 23:16時点)

↓発売日:2017年06月14日↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2018/10/8 23:17時点)

↓発売日:2018年05月21日↓

作って身につく C言語入門

新品価格
¥2,462から
(2018/10/8 23:18時点)

↓発売日:2017年12月07日↓

新・標準プログラマーズライブラリ C言語 ポインタ完全制覇

新品価格
¥2,678から
(2018/10/8 23:19時点)

↓発売日:2017年02月08日↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2018/10/8 23:20時点)

↓発売日:2017年09月26日↓

かんたん C言語 [改訂2版] (プログラミングの教科書)

新品価格
¥2,916から
(2018/10/8 23:22時点)