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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

DXライブラリ

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

Q&A

解決済

1回答

528閲覧

tekiの初期位置の座標を(2,2)として描画しようとしたのですが、その座標にtekiが描画されません。

carnage0216

総合スコア194

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

DXライブラリ

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

0グッド

2クリップ

投稿2019/08/27 17:14

編集2019/08/27 17:16

tekiの初期位置の座標を(2,2)として描画しようとしたのですが、その座標にtekiが描画されません。

環境 Windows10、visual studio 2019、DXライブラリです。

以下はコードです。

#include <stdio.h> #include <stdlib.h> #include <time.h> #include "DxLib.h" int Key[256]; int gpUpdateKey() { char tmpKey[256]; GetHitKeyStateAll(tmpKey); for (int i = 0; i < 256; i++) (tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++;//キーのフレームの習得 return 0; } int idou[5][5] = { { 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1 }, }; int box[4][7][2], teki[5][5][2];//tekiの移動できる範囲の配列を表す int WINAPI WinMain(HINSTANCE hi, HINSTANCE hp, LPSTR cl, int cs) { SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定 ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用 if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理 SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定 //int boxColor = GetColor(160, 64, 64);//ステージの色 int nx = 2, ny = 2; // tekiのxとyでの初期位置 int px = teki[ny][nx][0], py = teki[ny][nx][1]; // tekiのx、y、zでの初期位置 int gh[12]; //グラフィックハンドル格納用配列 // 5:正面、7:右向き、2:左向き、4:上向き、3:下向き、9:移動不可 LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh); //画像読み込み int playerphoto = gh[5]; while (ProcessMessage() == 0) { gpUpdateKey(); // キーの入力状態を取得 if (Key[KEY_INPUT_RIGHT] == 10) { // 右キーが押されている if (idou[nx + 1][ny] == 0) { // 移動先が空いていれば nx++; playerphoto = gh[7]; // 右向き } } if (Key[KEY_INPUT_LEFT] == 1) { if (idou[nx - 1][ny] == 0) { // 移動先が空いていれば nx--; playerphoto = gh[2]; // 左向き } } ClearDrawScreen(); // 裏画面をクリア DrawGraph(teki[ny][nx][0], teki[ny][nx][1], playerphoto, FALSE);//tekiの画像が描画される最初の位置 ScreenFlip(); // 裏画面を表画面に反映 } DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }

以上のコードを説明しますと、idouと置いた配列

int idou[5][5] = { { 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1 }, };

上でtekiの移動できる配列の範囲をteki[5][5][2]として、座標nx = 2, ny = 2を考慮して関数DrawGraphを用いて
関数LoadDivGraphtekiにより12分割した画像の一部であるtekiを[ny][nx][0], teki[ny][nx][1]の座標に描画しようとしたのですが、うまく機能しませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

int px = teki[ny][nx][0], py = teki[ny][nx][1]; // tekiのx、y、zでの初期位置

この時点で teki のナカミが初期化されていない。
ちゃんと動かないのはアタリマエ。

投稿2019/08/27 18:58

episteme

総合スコア16614

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

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

carnage0216

2019/08/27 19:09 編集

いつもどうもありがとうございます おかげで解決できました。
kazuma-s

2019/08/27 22:53

teki は、グローバル変数で静的変数ですから、0 には初期化されている んですが、プログラムに使用する適正な値には初期化されていません。 元のプログラムを解読せず、意味も分からないまま処理を追加しよう としてもうまく行くわけがありません。 基礎を固めず、これからも質問をしまくっていくつもりでしょうか? なお元のプログラムには、今は露呈していないバグがあります。
carnage0216

2019/08/28 03:37 編集

どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問