第8講 ロールプレイングゲーム風のアクションゲーム
第6話 道路上をリオが動き、ゴールに到達するとクリアの画面が出るようにする
リオが道路を動きゴールに到達するととなるコード例
#include "DxLib.h"
void syokika(); //しょきか ゲームの初期状態を設定する社員(関数)
void main(); //ゲームを進行させる社員
void saisyonogamen(); //さいしょのがめん ゲームの初期画面を描く社員(関数)
void make(); //まけ ゲームオーバーを描く社員(関数)
void kachi(); //かち ゲームクリアを描く社員(関数)
void chizusakusei(); //ちずさくせい 地図を作成する社員(関数)
void ugoki(); //うごき キャラクターの動きを制御
int m; //ゲームの状態 0:ゲーム始め 1:ゲーム 2:ゲームオーバー 3:ゲールクリア
int siro; //白色の出席番号収納する箱
int kiiro; //黄色の出席番号を収納する箱
int hai; //灰色の出席番号収納する箱
int haikeigazou, syujinkou, syuten; //はいけいがぞう しゅじんこう しゅうてん 背景画像と主人公とゴールの出席番号を入れる箱
int hx , hy; //ヒーローの hx:横位置 hy:縦位置
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(true); //ウィンドウモードの切り替え
SetGraphMode(640, 480, 32); //ウインドウサイズの変更
if (DxLib_Init() == -1)return(-1); // DXライブラリ初期化処理
syokika(); //初期化 ゲームの最初の状態を設定
m = 1; //ゲームの状態 0:ゲーム始め 1:ゲーム 2:ゲームオーバー 3:ゲールクリア
syokika(); //ゲーム初期状態の設定
SetDrawScreen(DX_SCREEN_BACK); //裏画像を描画対象に加える
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
switch (m) { //mはゲームの状態 0:ゲーム始め 1:ゲーム 2:ゲームオーバー 3:ゲールクリア
Case 0:
saisyonogamen(); //さいしょのがめん ゲームの初期画面を描く社員(関数)
break;
Case 1:
main(); //ゲームを進行させる社員(関数)
break;
Case 2:
make(); //まけ ゲームオーバーを描く社員(関数)
break;
Case 3:
kachi(); //かち ゲームクリアを描く社員(関数)
break;
default:
break;
}
}
WaitKey(); // キー入力待ち
DxLib_End(); // DXライブラリ終了処理
return 0;
}
void make() {
}
void kachi() {
SetFontSize(50); //フォントサイズを50に変更
DrawFormatString(20, 100, kiiro, "ヾ(^v^)k"); // 文字を描画する
DrawFormatString(20, 200, kiiro, "ゲームクリアです"); // 文字を描画する
DrawFormatString(20, 300, kiiro, "ゲームに再度挑戦する時は"); // 文字を描画する
DrawFormatString(20, 345, kiiro, "Zキーを押してください。"); // 文字を描画する
if (CheckHitKey(KEY_INPUT_Z) != 0) {
syokika();
m = 1;
}
}
void main() {
chizusakusei(); //地図作製
ugoki(); //うごき キャラクターの動きを制御
}
void chizusakusei() {
int i, j;
haikeigazou = LoadGraph("画像/b00.png"); //背景画像の出席番号を収納
//背景画像を描く
for (i = 0; i < 12; i++) {
for (j = 0; j < 16; j++) {
DrawGraph(35 * j, 35 * i, haikeigazou, false);
}
}
DeleteGraph(haikeigazou); //背景画像のハンドル(出席番号を収納する箱)の削除
DrawBox(40, 40, 600, 80, hai, true); //1本目の道路を描く
syuten = LoadGraph("画像/g00.png"); //ゴール(鍵凹)の出席番号を収納
DrawGraph(575, 40, syuten, true); //ゴール(鍵凹)を描く
DeleteGraph(syuten); //ゴール(鍵凹)のハンドル(出席番号を収納する箱)の削除
}
void ugoki() {
syujinkou = LoadGraph("画像/h00.png"); //主人公の出席番号を収納
//1本目の道路内に動きを限定
if (CheckHitKey(KEY_INPUT_RIGHT) != 0 && hx <= 560 && hy >= 32 && hy <= 53) hx += 4;
if (CheckHitKey(KEY_INPUT_LEFT) != 0 && hx >= 40 && hy >= 32 && hy <= 48) hx -= 4;
//ゲームクリアであるかを判定し、ゲームクリアの場合ゲームクリアの画面を出す
if (hx >= 555 && hx <= 565 && hy >=32 &&
hy <= 53) {
m = 3;
return;
}
DrawGraph(hx, hy, syujinkou, true); //ヒーローの hx:横位置 hy:縦位置
DeleteGraph(syujinkou); //ヒーロー(リオ)を描く
DeleteGraph(syujinkou); //リオのハンドル(出席番号を収納する箱)の削除
}
void saisyonogamen() {
SetFontSize(36); //フォントサイズを36に変更
DrawFormatString(0, 100, kiiro, "ゲームを始めるにはZキー"); // 文字を描画する
DrawFormatString(0, 140, kiiro, "を押してください。"); // 文字を描画する
if (CheckHitKey(KEY_INPUT_Z) != 0) m = 1; //ゲーム開始
}
void syokika() {
siro = GetColor(255, 255, 255); //白色に出席番号を割り振りその番号を箱siroに収納
hai = GetColor(220, 220, 220); //灰色に出席番号を割り振りその番号を箱kiiroに収納
kiiro = GetColor(255, 255, 0); //黄色に出席番号を割り振りその番号を箱kiiroに収納
hx = 40, hy = 42; //ヒーローの hx:横位置 hy:縦位置
}
コピペ用添付ファイル
次話の課題です。
今のゲームでは何の障害物もありませんから、
クリアできて当然です。
そこで、ハイエナ
(右クリックで名前を付けて保存でファイル名はm00.pngとしましょう。
保存先はもちろん「D:\ゲーム\PRG風アクションパズル\game\game\画像」です。)
を登場させてこれに当たってしまうと、
ゲームオーバーとすることにしましょう。
ただし、現在の直線だと必ずハイエナに遭遇してゲームオーバーになりますので、
一時避難所を設けます。
ハイエナは、道路を絶え間なく左右に動いているものとします。
ただし、左端と右端は少し間を空けましょう。
ブロック崩しゲームのように
const int houkougae = -1; //ほうこうがえ 方向チェンジ
int mx_houkou; //mxの方向 猛獣(ハイエナ)の横位置
int my_houkou; //myの方向 猛獣(ハイエナ)の縦位置
を導入すれば、ハイエナを左右に動かすことができます。
ハイエナに当たると、
ゲームオーバの画面になるようにしてください。
尚、ヒーローの縦方向の動きは、
溝のある場所のみにするように、
if文で工夫してください。
また、ハイエナとの当たり判定もif文を使いますが、
条件式は幅を持たせる必要があります。
結構むずかしいですよ。
第5話へ 第7話へ
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための]世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップ