画像(logo)

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

広告

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

広告

↓発売日: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;
}

■実行結果■

画像(cdxb_2_1)

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

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

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

この「最低限のプログラム」以外は普通のC言語のお作法で大丈夫です。

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

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

#include <stdio.h>

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

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

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

少し説明します。

まずプログラムの種類が今までの「コンソール画面」に文字だけ表示する「コンソールアプリケーション」から「ウィンドウ画面」にグラフィックも表示できる「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();

これはキーが押された時に押されたキーも含め全てのキーの入力情報を取得するものです。

今はとりあえず変数「key」に保存して後ほど処理を加えていきます。

そしてこれらを「while」ループで回してその中にプログラムを書いていくような感じになります。それぞれの「==0」というのはエラー処理になります。「0」以外はエラーになります。

少し話が長くなりましたが「最低限のプログラム」の内容はざっとこんな感じです。ブロック崩し作成以外でも使えるのでコピペして使いまわしましょう。

ゲーム内の時間

それではDXライブラリの関数を説明しながら少しずつ本題に入っていきます。

DrawFormatString(x座標,y座標,色の指定, "本文",変数);

まずこちらは見た感じわかりそうですが文字を表示する関数です。座標は左上が(0,0)右下が(639,479)になるので

画像(cdxb_2_2)

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

GetColor(赤,緑,青);

こちらの関数を使います。赤・緑・青の色の度合いを「0~255」で指定します。出来上がった色をint型の変数に保存します。

あとは「printf()」と同じく変数を「%d」などで表示する事ができます。

複数表示したい場合も「,」カンマで分けて追加していけば大丈夫です。

そして上のプログラムでは「gamecount」という変数を表示しているワケですが、こちらの変数は画面表示処理の「while」ループ内で

gamecount++;

インクリメントしてますよね。これは画面の書き換えの早さに合わせてインクリメントしているという事になります。

そしてこの早さは決まっているので(ディスプレイによって違います。ほとんどのディスプレイは1秒間に60回です)これをゲーム内での仮の時間としてしまおうというワケです。

つまりはこの速さに合わせて毎回1ピクセルずつインクリメントすれば1秒間で60ピクセル移動する事になりますよね。

そんな感じでこの速さを基準にキャラクターが動く速度などを調整していくというワケです。

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

中間ソース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時点)