さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.367
DrawFormatString関数を使ってPAD_INPUT_DOWN, PAD_INPUT_LEFT,PAD_INPUT_RIGHT,PAD_INPUT_UPに格納されている数値を表示してみよう
DrawFormatString関数を使ってPAD_INPUT_DOWN, PAD_INPUT_LEFT,PAD_INPUT_RIGHT,PAD_INPUT_UPに格納されている数値を表示してみよう
マックス「ところで
そもそも
なんで
🐭 🐁 🐭 🐁 🐭 🐁
PAD_INPUT_DOWNは1
PAD_INPUT_LEFTは2
PAD_INPUT_RIGHTは4
PAD_INPUT_UPは8
🐭 🐁 🐭 🐁 🐭 🐁
をあらわしていることがわかったんだ?」
ソーラー「実はね
DrawFormatString関数を使って
PAD_INPUT_DOWN
PAD_INPUT_LEFT
PAD_INPUT_RIGHT
PAD_INPUT_UP
に格納されている数値を
ゲーム画面に表示させることができるんだよ
PAD_INPUT_DOWN
PAD_INPUT_LEFT
PAD_INPUT_RIGHT
PAD_INPUT_UP
は
文字の並びに見えますが
数値データ
1
2
4
8
を
表しています
そして
DrawFormatString関数を使えば
PAD_INPUT_DOWN
PAD_INPUT_LEFT
PAD_INPUT_RIGHT
PAD_INPUT_UP
に格納されている数値をゲーム画面に表示することができます」
マックス「DrawFormatString関数?」
ソーラー「DXライブラリでは
printf関数に相当する
DrawFormatString関数が用意されています
printf 関数は
printf( "おはようございます\n" ) ;
や
int a=100;
printf( "リンゴが%d個あります\n",a ) ;
のように用いられましたね
そして
printf関数とDrawFormatString関数は仕組みがとてもよく似ていて
DrawFormatString関数は
int Color ;
Color = GetColor( 255 , 255 , 255 ) ;
DrawFormatString( 0, 0, Color, "おはようございます\n" ) ;
や
int a=100;
int Color ;
Color = GetColor( 255 , 255 , 255 ) ;
DrawFormatString( 0, 0, Color,"リンゴが%d個あります\n",a ) ;
のように用います」
マックス「この
DrawFormatString( 0, 0, Color,"リンゴが%d個あります\n",a ) ;
の
第1引数0
第2引数0
第3引数Color
は
なんだ?」
ソーラー「
第1引数0
第2引数0
は
文字をゲーム画面に表示する開始位置が(0,0)
であることを表しています
すなわち
文字の画像データの左上の頂点が
x座標が0
y座標が0
となる位置から
文字が表示されることになります」
そのプログラムはこちらです
👇
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE); // ウインドウモードに設定します
if (DxLib_Init() == -1) // DXライブラリを初期化処理しています
{
return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します
}
int graphichandle;
graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");
SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です
int x = 0;
int y = 0;
while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {
int a = 100;
int Color;
Color = GetColor(255, 255, 255);
DrawFormatString(0, 0, Color, "リンゴが%d個あります\n", a);
ScreenFlip();
ClearDrawScreen();
};
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://solalion.blogspot.com/2021/08/blog-post_30.html
ソーラー「
画像データ
り
の
左上の頂点の座標が(0,0 )
となっていますね
その様子を示す図はこちらです
👇
https://solalion.blogspot.com/2021/08/blog-post_29.html
そして
白い文字で
リンゴが100個あります
が表示されています
DrawFormatString関数の第3引数
は
どの色で文字列を表示するかを指定するためにあります
int Color;
Color = GetColor(255, 255, 255);
が実行されると
GetColor(255, 255, 255)には戻り値として-1が返され
Color に-1
が代入されることになります
その状態で
DrawFormatString(0, 0, Color, "リンゴが%d個あります\n", a);
が実行されると
Color に代入された-1
に対応する白い文字が
ゲーム画面に表示されるというわけです
第4引数"リンゴが%d個あります\n"
第5引数 a
は
printf関数の
printf( "リンゴが%d個あります\n",a ) ;
と
仕組みは全く一緒です」
マックス「なるほどぉ~
さりげなく便利な関数じゃないか」
solarplexuss「ゲーム画面に文字列を表示する関数って
ほんと必要な関数だよね」
ソーラー「それでは
DrawFormatString関数を使って
PAD_INPUT_DOWN
PAD_INPUT_LEFT
PAD_INPUT_RIGHT
PAD_INPUT_UP
に格納されている数値をゲーム画面にまったり表示
してみましょう」
solarplexuss「まったり(*´ω`)~
いいね~」
そのプログラムはこちらです
👇
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE); // ウインドウモードに設定します
if (DxLib_Init() == -1) // DXライブラリを初期化処理しています
{
return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します
}
int graphichandle;
graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");
SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です
int x = 0;
int y = 0;
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, y, graphichandle, TRUE);
DrawFormatString(180, 150, GetColor(255, 255, 255), "PAD_INPUT_UPの値は%dです\nPAD_INPUT_DOWNの値は%dです\nPAD_INPUT_LEFTの値は%dです\nPAD_INPUT_RIGHTの値は%dです",PAD_INPUT_UP, PAD_INPUT_DOWN, PAD_INPUT_LEFT, PAD_INPUT_RIGHT);
ScreenFlip();
WaitKey();
ClearDrawScreen();
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://solalion.blogspot.com/2021/08/blog-post_0.html
ソーラー「ゲーム画面に
PAD_INPUT_DOWNの値は8です
PAD_INPUT_LEFTの値は1です
PAD_INPUT_RIGHTの値は2です
PAD_INPUT_UPの値は4です
が表示されたね」
マックス「ちょっと
DrawFormatString関数の記述が長いような気がするが・・・
DrawFormatString(180, 150, GetColor(255, 255, 255), "PAD_INPUT_UPの値は%dです\nPAD_INPUT_DOWNの値は%dです\nPAD_INPUT_LEFTの値は%dです\nPAD_INPUT_RIGHTの値は%dです",PAD_INPUT_UP, PAD_INPUT_DOWN, PAD_INPUT_LEFT, PAD_INPUT_RIGHT);
の中で用いられているエスケープシーケンス\nは
改行の働きをしているわけだ
PAD_INPUT_DOWNの値は8です
PAD_INPUT_LEFTの値は1です
PAD_INPUT_RIGHTの値は2です
PAD_INPUT_UPの値は4です
を
一挙に表示するために
DrawFormatString関数の記述が長くなっているわけだ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます