質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

2回答

1112閲覧

DxLibでパズルゲームを作りたいです。

kaichoo

総合スコア7

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2017/10/17 11:04

###前提・実現したいこと
こんな初心者で勉強不足な自分がこのような素晴らしいサイトで質問するのは恐縮ですが、DxLibでパズルゲームを作ることに関して質問です。4枚の画像から背景画像を一枚選んでシャッフルし、パズルを組み立てるというものですが、うまくいきません。直しかけのぐちゃぐちゃなソースですが、どうか細かく直していただきたいです。それとBGMをちゃんと流せるようにしたいです。
###発生している問題・エラーメッセージ
エラーメッセージは特にありません。しかしスタート画面から何を押しても進みません。
###該当のソースコード
include"DxLib.h"

// グローバル変数
int pics[3][16];
int pic_all[3];
int start;
int panel[16];
enum { TITLE, CHOSE, MAIN, CLEAR } status = TITLE;

//選択したパネルと空白を入れ替える
void change(int x, int y) {
int p1 = y * 4 + x;
int p2 = -1;
if (x > 0 && panel[p1 - 1] == 15) p2 = p1 - 1;
if (x < 3 && panel[p1 + 1] == 15) p2 = p1 + 1;
if (y > 0 && panel[p1 - 4] == 15) p2 = p1 - 4;
if (y < 3 && panel[p1 + 4] == 15) p2 = p1 + 4;
if (p2 != -1) {
panel[p2] = panel[p1];
panel[p1] = 15;
}
}
// タイトル画面
void gameTitle() {
DrawGraph(0, 0, start, FALSE);
DrawString(102, 60, "パズル", GetColor(255, 0, 0));
DrawString(102, 80, "背景1", GetColor(255, 0, 0));
DrawString(102, 100, "背景2", GetColor(255, 0, 0));
DrawString(102, 120, "背景3", GetColor(255, 0, 0));
DrawString(102, 140, "背景4", GetColor(255, 0, 0));

}
//背景選択
void chose() {
if (CheckHitKey(KEY_INPUT_NUMPAD1)) {

for (int i = 0; i < 16; i++) panel[i] = i;
for (int i = 0; i < 1000; i++) {
change(GetRand(3), GetRand(3));
}
status = MAIN;
DrawGraph(0, 0, pic_all[0], FALSE);
}

if (CheckHitKey(KEY_INPUT_NUMPAD2)) {
pics[1][16] = pics[2][16];
for (int i = 0; i < 16; i++) panel[i] = i;
for (int i = 0; i < 1000; i++) {
change(GetRand(3), GetRand(3));
}
status = MAIN;
DrawGraph(0, 0, pic_all[1], FALSE);
}

if (CheckHitKey(KEY_INPUT_NUMPAD3)) {
pics[1][16] = pics[3][16];
for (int i = 0; i < 16; i++) panel[i] = i;
for (int i = 0; i < 1000; i++) {
change(GetRand(3), GetRand(3));
}
status = MAIN;
DrawGraph(0, 0, pic_all[2], FALSE);
}

if (CheckHitKey(KEY_INPUT_NUMPAD4)) {
pics[1][16] = pics[4][16];
for (int i = 0; i < 16; i++) panel[i] = i;
for (int i = 0; i < 1000; i++) {
change(GetRand(3), GetRand(3));
}
status = MAIN;
DrawGraph(0, 0, pic_all[3], FALSE);
}

}

// メイン画面
void gameMain() {
if (GetMouseInput() & MOUSE_INPUT_LEFT) {
int x, y;
GetMousePoint(&x, &y);
change(x / 80, y / 80);
// パネルが全部揃ったか判定
bool clear = true;
for (int i = 0; i < 16; i++) {
if (panel[i] != i) clear = false;
}
if (clear) status = CLEAR;
}
// パネルの描画
for (int i = 0; i < 16; i++) {
if (panel[i] < 15) {
DrawGraph((i % 4) * 80, (i / 4) * 80, pics[i][panel[i]], FALSE);
}
}
}

// 終了画面
void gameClear() {
//DrawGraph(0, 0, gakki, FALSE);
DrawString(115, 142, "完成!!!", GetColor(255, 255, 0));
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
SetGraphMode(320, 320, 32);
ChangeWindowMode(TRUE);//ウインドウモードに変更
DxLib_Init();
SetDrawScreen(DX_SCREEN_BACK);
int wait_time = 100;
int BGMHandle = LoadSoundMem("be00402.wav");//BGMの識別番号
LoadDivGraph("pic1.png", 16, 4, 4, 80, 80, pics[0]);
LoadDivGraph("pic2.png", 16, 4, 4, 80, 80, pics[1]);
LoadDivGraph("pic3.png", 16, 4, 4, 80, 80, pics[2]);
LoadDivGraph("pic4.png", 16, 4, 4, 80, 80, pics[3]);
pic_all[0] = LoadGraph("pic1.png");
pic_all[1] = LoadGraph("pic2.png");
pic_all[2] = LoadGraph("pic3.png");
pic_all[3] = LoadGraph("pic4.png");
start = LoadGraph("start.png");

while (!ProcessMessage()) {
ClearDrawScreen();
PlaySoundMem(BGMHandle, DX_PLAYTYPE_LOOP);//BGMを流す
switch (status) {
case TITLE: gameTitle(); break;
case CHOSE:chose(); break;
case MAIN: gameMain(); break;
case CLEAR: gameClear(); break;
}
ScreenFlip();
StopSoundMem(BGMHandle);//BGMを止める
}
DxLib_End();
return 0;
}
###試したこと
すみません。何をどうすればいいのかわかりません。
###補足情報(言語/FW/ツール等のバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

BGMに関してましてはDXライブラリさんのこちらが役に立つかと思います!
https://dxlib.xsrv.jp/function/dxfunc_sound.html

投稿2020/06/16 15:05

KZK13

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

とりあえず、パズルうんぬんの記述を全て一時的に削除し、
スタート画面でボタンを押したら何か動く、という事を目標にしてみたらどうでしょうか。

投稿2017/10/18 00:07

torisan

総合スコア678

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問