トップページ > 記事閲覧
迷路について2
名前:FFGX 日時: 2020/06/08 10:54

今僕は疑似3dダンジョンを作っています。 ですが画像を重ねてbufという変数に保存したいと思っています。 <loading.h> #pragma once #include<DxLib.h> int gr[15][4]; int gr2[4]; void loading() { gr[0][2] = LoadGraph("madia\\0_2.png", true); gr[1][2] = LoadGraph("madia\\1_2.png", true); gr[2][2] = LoadGraph("madia\\2_2.png", true); gr[3][2] = LoadGraph("madia\\3_2.png", true); gr[3][3] = LoadGraph("madia\\3_3.png", true); gr[4][1] = LoadGraph("madia\\4_2.png", true); gr[4][2] = LoadGraph("madia\\4_3.png", true); gr[5][2] = LoadGraph("madia\\5_2.png", true); gr[6][2] = LoadGraph("madia\\6_2.png", true); gr[6][3] = LoadGraph("madia\\6_3.png", true); gr[7][1] = LoadGraph("madia\\7_2.png", true); gr[7][2] = LoadGraph("madia\\7_3.png", true); gr[8][2] = LoadGraph("madia\\8_2.png", true); gr[9][2] = LoadGraph("madia\\9_2.png", true); gr[9][3] = LoadGraph("madia\\9_3.png", true); gr[10][1] = LoadGraph("madia\\10_1.png", true); gr[10][2] = LoadGraph("madia\\10_2.png", true); gr[11][2] = LoadGraph("madia\\11_2.png", true); gr[12][3] = LoadGraph("madia\\12_3.png", true); gr[13][1] = LoadGraph("madia\\13_1.png", true); gr2[0] = LoadGraph("madia\\_0.png", true); gr2[1] = LoadGraph("madia\\_1.png", true); gr2[2] = LoadGraph("madia\\_2.png", true); gr2[3] = LoadGraph("madia\\_3.png", true); } <define.h> #pragma once #include"loading.h" #define ROAD 0 #define WALL 1 #define LOCATION_MAX 15 #define ONE 42 int maphierarchy = 1; enum { DIRECTION_N, DIRECTION_W, DIRECTION_S, DIRECTION_E, DIRECTION_MAX }; enum { WALL_NONE, WALL_WALL, WALL_MAX }; int location[DIRECTION_MAX][LOCATION_MAX][2] = { { {-1,-4}, {1,-4}, {0,-4}, {-1,-3}, {1,-3}, {0,-3}, {-1,-2}, {1,-2}, {0,-2}, {-1,-1}, {1,-1}, {0,-1}, {-1,0}, {1,0}, {0,0}, }, { {-4,1}, {-4,-1}, {-4,0}, {-3,1}, {-3,-1}, {-3,0}, {-2,1}, {-2,-1}, {-2,0}, {-1,1}, {-1,-1}, {-1,0}, {0,1}, {0,-1}, {0,0}, }, { {-1,-4}, {1,-4}, {0,-4}, {-1,-3}, {1,-3}, {0,-3}, {-1,-2}, {1,-2}, {0,-2}, {-1,-1}, {1,-1}, {0,-1}, {-1,0}, {1,0}, {0,0}, }, { {-4,1}, {-4,-1}, {-4,0}, {-3,1}, {-3,-1}, {-3,0}, {-2,1}, {-2,-1}, {-2,0}, {-1,1}, {-1,-1}, {-1,0}, {0,1}, {0,-1}, {0,0}, }, }; int walls[ONE][ONE][DIRECTION_MAX] = { 省略 }; int Px, Py = 41,Pd; int aa[LOCATION_MAX][DIRECTION_MAX] = { {NULL,NULL,gr[0][2],NULL},{NULL,NULL,gr[1][2],NULL},{NULL,NULL,gr[2][2],NULL}, {gr[0][2],NULL,gr[3][2],gr[3][3]},{gr[1][2],gr[4][1],gr[0][2],NULL},{gr[2][2],gr[3][3],gr[5][2],gr[4][1]}, {gr[3][2],NULL,gr[6][2],gr[6][3]},{gr[4][2],gr[7][1],gr[7][2],NULL},{gr[5][2],gr[6][3],gr[8][2],gr[7][1]}, {gr[6][2],NULL,gr[9][2],gr[9][3]},{gr[7][2],gr[10][1],gr[10][2],NULL},{gr[8][2],gr[9][3],gr[11][2],gr[10][1]}, {gr[9][2],NULL,NULL,gr[12][3]},{gr[10][2],gr[13][1],NULL,NULL},{gr[11][2],gr[12][3],NULL,gr[13][1]}, }; <main.cpp> #include "define.h" int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { SetOutApplicationLogValidFlag(false); SetWindowText("maze"); ChangeWindowMode(true); SetBackgroundColor(255, 255, 255); SetDrawScreen(DX_SCREEN_BACK); DxLib_Init(); int buf; loading();// 読み込み while (1) { ClearDrawScreen(); for (int i = 0; i < LOCATION_MAX; i++) { int x = Px + location[Pd][i][0], y = Py + location[Pd][i][1]; x = (ONE + x) % ONE; y = (ONE + y) % ONE; for (int j = 0; j < DIRECTION_MAX; j++) { int dir = (Pd + j) % DIRECTION_MAX; if (walls[y][x][dir] == WALL_WALL) { int src = aa[i][j]; if (src != NULL) { buf = DerivationGraph(0, 0, 640, 480, src); } } } } DrawGraph(0, 0, buf, true); ScreenFlip(); if (ProcessMessage() != 0) break; if (CheckHitKey(KEY_INPUT_ESCAPE)) break; } DxLib_End(); return 0; } これだと 1.ローディング 2.画面消去 3.壁を裏画面に描画 4.裏画面を表画面に の3.ができません 助けてください。
メンテ

Page: 1 | 2 |

Re: 迷路について2 ( No.1 )
名前:ギウ 日時:2020/06/10 20:21

ソースは見てないですが、 「3.壁を裏画面に描画」ができないということなら、 まずは、1枚の画像を画面に表示するところから始めて、少しずつプログラムを拡張していくのが良いです。
メンテ
Re: 迷路について2 ( No.2 )
名前:FFGX 日時:2020/06/17 19:18

<define.h> #pragma once #include"loading.h" #define LOCATION_MAX 14 #define ONE 41 int maphierarchy = 1; enum { DIRECTION_N, DIRECTION_W, DIRECTION_S, DIRECTION_E, DIRECTION_MAX }; enum { WALL_NONE, WALL_WALL, WALL_MAX }; int location[DIRECTION_MAX][LOCATION_MAX][2] = { { // 0 {-1,-4}, {1,-4}, {0,-4}, {-1,-3}, {1,-3}, {0,-3}, {-1,-2}, {1,-2}, {0,-2}, {-1,-1}, {1,-1}, {0,-1}, {-1,0}, {1,0} }, { // 1 {-4,1}, {-4,-1}, {-4,0}, {-3,1}, {-3,-1}, {-3,0}, {-2,1}, {-2,-1}, {-2,0}, {-1,1}, {-1,-1}, {-1,0}, {0,1}, {0,-1} }, { // 2 {-1,-4}, {1,-4}, {0,-4}, {-1,-3}, {1,-3}, {0,-3}, {-1,-2}, {1,-2}, {0,-2}, {-1,-1}, {1,-1}, {0,-1}, {-1,0}, {1,0} }, { // 3 {-4,1}, {-4,-1}, {-4,0}, {-3,1}, {-3,-1}, {-3,0}, {-2,1}, {-2,-1}, {-2,0}, {-1,1}, {-1,-1}, {-1,0}, {0,1}, {0,-1} }, }; int maps[ONE][ONE] = { 省略 }; int Px = 1, Py = 1,Pd = 3; bool fov[LOCATION_MAX]; int fov2[LOCATION_MAX]; int fov3[LOCATION_MAX]; int aa[LOCATION_MAX][4] = { {NULL,NULL,gr[0][2],NULL},{NULL,NULL,gr[1][2],NULL},{NULL,NULL,gr[2][2],NULL}, {gr[0][2],NULL,gr[3][2],gr[3][3]},{gr[1][2],gr[4][1],gr[0][2],NULL},{gr[2][2],gr[3][3],gr[5][2],gr[4][1]}, {gr[3][2],NULL,gr[6][2],gr[6][3]},{gr[4][2],gr[7][1],gr[7][2],NULL},{gr[5][2],gr[6][3],gr[8][2],gr[7][1]}, {gr[6][2],NULL,gr[9][2],gr[9][3]},{gr[7][2],gr[10][1],gr[10][2],NULL},{gr[8][2],gr[9][3],gr[11][2],gr[10][1]}, {gr[9][2],NULL,NULL,gr[12][3]},{gr[10][2],gr[13][1],NULL,NULL} }; <main.cpp> #include "define.h" void check_and_paint() { for (int i = 0; i < 14; i++) { if (maps[Py + location[Pd][i][1]][Px + location[Pd][i][0]] == 1) { fov[i] = true; } } for (int i = 0; i < 15; i++) { if (i % 3 == 0) fov2[i] = 3; else if (i % 3 == 1) fov2[i] = 1; else if (maps[Py + location[Pd][i][1]][Px + location[Pd][i][0]] == 1) fov2[i] = 2; } for (int i = 0; i < 14; i++) { fov3[i] = aa[i][fov2[i]]; } for (int i = 0; i < 14; i++) { DrawGraph(0, 0, fov3[i], true); } } void mapPaint() { check_and_paint(); } void mainloop() { ClearDrawScreen(); mapPaint(); if (CheckHitKey(KEY_INPUT_UP)) { } if (CheckHitKey(KEY_INPUT_DOWN)) { } if (CheckHitKey(KEY_INPUT_RIGHT)) { Pd--; if (Pd == -1) Pd = 3; } if (CheckHitKey(KEY_INPUT_LEFT)) { Pd++; if (Pd == 4) Pd = 0; } ScreenFlip(); } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { SetOutApplicationLogValidFlag(false); SetWindowText("maze"); ChangeWindowMode(true); SetBackgroundColor(70, 70, 70); SetDrawScreen(DX_SCREEN_BACK); DxLib_Init(); loading();// 読み込み while (1) { mainloop(); if (ProcessMessage() != 0) break; if (CheckHitKey(KEY_INPUT_ESCAPE)) break; } DxLib_End(); return 0; } これでも表示されないのですが、どうすればいいですか。
メンテ
Re: 迷路について2 ( No.3 )
名前:管理人 日時:2020/06/18 00:02

とりあえず SetDrawScreen は DxLib_Init を呼び出した後ではないと効果がありませんので、 SetDrawScreen(DX_SCREEN_BACK); を DxLib_Init(); より下の行に移動してみてください
メンテ
Re: 迷路について2 ( No.4 )
名前:FFGX 日時:2020/06/18 20:32

とりあえずやってみました。 ですが 1.ローディング 2.画面消去 3.壁を裏画面に描画 3-1.壁の有無を配列からとりfovに保存 3-2.fovからデータを取り出しfov2に保存 3-3.fov2をfov3に保存 3-4.fov3のデータから描画 4.裏画面を表画面に という流れにしたいのですがどうしたらよいのでしょう。
メンテ
Re: 迷路について2 ( No.5 )
名前:管理人 日時:2020/06/18 23:53

> とりあえずやってみました。 > ですが > 1.ローディング > 2.画面消去 > 3.壁を裏画面に描画 > 3-1.壁の有無を配列からとりfovに保存 > 3-2.fovからデータを取り出しfov2に保存 > 3-3.fov2をfov3に保存 > 3-4.fov3のデータから描画 > 4.裏画面を表画面に > という流れにしたいのですがどうしたらよいのでしょう。 大きな流れとしては間違っていないように感じますので、細かい部分のプログラムの 誤りを一つ一つ修正していくしかないと思います というわけで、もう一つ誤っている箇所を見つけました int aa[LOCATION_MAX][4] = { {NULL,NULL,gr[0][2],NULL},{NULL,NULL,gr[1][2],NULL},{NULL,NULL,gr[2][2],NULL}, {gr[0][2],NULL,gr[3][2],gr[3][3]},{gr[1][2],gr[4][1],gr[0][2],NULL},{gr[2][2],gr[3][3],gr[5][2],gr[4][1]}, {gr[3][2],NULL,gr[6][2],gr[6][3]},{gr[4][2],gr[7][1],gr[7][2],NULL},{gr[5][2],gr[6][3],gr[8][2],gr[7][1]}, {gr[6][2],NULL,gr[9][2],gr[9][3]},{gr[7][2],gr[10][1],gr[10][2],NULL},{gr[8][2],gr[9][3],gr[11][2],gr[10][1]}, {gr[9][2],NULL,NULL,gr[12][3]},{gr[10][2],gr[13][1],NULL,NULL} }; ↑こちらですが、こちらは DxLib_Init が実行されたり、関数 loading が実行されたりする前に実行されてしまいます つまり、gr[0][2] や gr[3][2] などの中身は関数 loading の中で gr[0][2] = LoadGraph("madia\\0_2.png", true); gr[1][2] = LoadGraph("madia\\1_2.png", true); gr[2][2] = LoadGraph("madia\\2_2.png", true); gr[3][2] = LoadGraph("madia\\3_2.png", true); gr[3][3] = LoadGraph("madia\\3_3.png", true); ↑このように画像を読み込んで値を代入されているのですが、この代入が行われる前、つまり gr[0][2] や gr[3][2] の中身が 0 の状態で int aa[LOCATION_MAX][4] = { {NULL,NULL,gr[0][2],NULL},{NULL,NULL,gr[1][2],NULL},{NULL,NULL,gr[2][2],NULL}, {gr[0][2],NULL,gr[3][2],gr[3][3]},{gr[1][2],gr[4][1],gr[0][2],NULL},{gr[2][2],gr[3][3],gr[5][2],gr[4][1]}, {gr[3][2],NULL,gr[6][2],gr[6][3]},{gr[4][2],gr[7][1],gr[7][2],NULL},{gr[5][2],gr[6][3],gr[8][2],gr[7][1]}, {gr[6][2],NULL,gr[9][2],gr[9][3]},{gr[7][2],gr[10][1],gr[10][2],NULL},{gr[8][2],gr[9][3],gr[11][2],gr[10][1]}, {gr[9][2],NULL,NULL,gr[12][3]},{gr[10][2],gr[13][1],NULL,NULL} }; ↑が実行されてしまうので、結果として aa[LOCATION_MAX][4] の中身は全部数値 0 となってしまいます なので、それを避けるには関数 loading で画像を読み込み終わった後に代入する、つまり void loading() { gr[0][2] = LoadGraph("madia\\0_2.png", true); gr[1][2] = LoadGraph("madia\\1_2.png", true); gr[2][2] = LoadGraph("madia\\2_2.png", true); gr[3][2] = LoadGraph("madia\\3_2.png", true); gr[3][3] = LoadGraph("madia\\3_3.png", true); gr[4][1] = LoadGraph("madia\\4_2.png", true); gr[4][2] = LoadGraph("madia\\4_3.png", true); gr[5][2] = LoadGraph("madia\\5_2.png", true); gr[6][2] = LoadGraph("madia\\6_2.png", true); gr[6][3] = LoadGraph("madia\\6_3.png", true); gr[7][1] = LoadGraph("madia\\7_2.png", true); gr[7][2] = LoadGraph("madia\\7_3.png", true); gr[8][2] = LoadGraph("madia\\8_2.png", true); gr[9][2] = LoadGraph("madia\\9_2.png", true); gr[9][3] = LoadGraph("madia\\9_3.png", true); gr[10][1] = LoadGraph("madia\\10_1.png", true); gr[10][2] = LoadGraph("madia\\10_2.png", true); gr[11][2] = LoadGraph("madia\\11_2.png", true); gr[12][3] = LoadGraph("madia\\12_3.png", true); gr[13][1] = LoadGraph("madia\\13_1.png", true); gr2[0] = LoadGraph("madia\\_0.png", true); gr2[1] = LoadGraph("madia\\_1.png", true); gr2[2] = LoadGraph("madia\\_2.png", true); gr2[3] = LoadGraph("madia\\_3.png", true); aa[0][0] = NULL; aa[0][1] = NULL; aa[0][2] = gr[0][2]; aa[0][3] = NULL; aa[1][0] = NULL; aa[1][1] = NULL; aa[1][2] = gr[1][2]; aa[1][3] = NULL; aa[2][0] = NULL; aa[2][1] = NULL; aa[2][2] = gr[2][2]; aa[2][3] = NULL; aa[3][0] = gr[0][2]; aa[3][1] = NULL; aa[3][2] = gr[3][2]; aa[3][3] = gr[3][2]; aa[4][0] = gr[1][2]; aa[4][1] = gr[4][1]; aa[4][2] = gr[0][2]; aa[4][3] = NULL; aa[5][0] = gr[2][2]; aa[5][1] = gr[3][3]; aa[5][2] = gr[5][2]; aa[5][3] = gr[4][1]; aa[6][0] = gr[3][2]; aa[6][1] = NULL; aa[6][2] = gr[6][2]; aa[6][3] = gr[6][3]; aa[7][0] = gr[4][2]; aa[7][1] = gr[7][1]; aa[7][2] = gr[7][2]; aa[7][3] = NULL; aa[8][0] = gr[5][2]; aa[8][1] = gr[6][3]; aa[8][2] = gr[8][2]; aa[8][3] = gr[7][1]; aa[9][0] = gr[6][2]; aa[9][1] = NULL; aa[9][2] = gr[9][2]; aa[9][3] = gr[9][3]; aa[10][0] = gr[7][2]; aa[10][1] = gr[10][1]; aa[10][2] = gr[10][2]; aa[10][3] = NULL; aa[11][0] = gr[8][2]; aa[11][1] = gr[9][3]; aa[11][2] = gr[11][2]; aa[11][3] = gr[10][1]; aa[12][0] = gr[9][2]; aa[12][1] = NULL; aa[12][2] = NULL; aa[12][3] = gr[12][3]; aa[13][0] = gr[10][2]; aa[13][1] = gr[13][1]; aa[13][2] = NULL; aa[13][3] = NULL; } ↑こちらのようにする必要があります
メンテ
Re: 迷路について2 ( No.6 )
名前:FFGX 日時:2020/06/19 14:01

そうでしたか… 直してみます。
メンテ
Re: 迷路について2 ( No.7 )
名前:FFGX 日時:2020/06/19 14:50

何故か3マス先に壁があるのが4マスになっています なぜでしょうか。 どこを訂正すればいいのか教えてください。
メンテ
Re: 迷路について2 ( No.8 )
名前:管理人 日時:2020/06/19 23:02

> 何故か3マス先に壁があるのが4マスになっています > なぜでしょうか。 何か表示はされたということでしょうか? 見た目の問題となりますと、私も同じ状態を確認した方が原因を調べやすいので、 お手数で申し訳ありませんが、プログラム中で読み込まれている 0_2.png 1_2.png 2_2.png 3_2.png 3_3.png 4_2.png 4_3.png 5_2.png 6_2.png 6_3.png 7_2.png 7_3.png 8_2.png 9_2.png 9_3.png 10_1.png 10_2.png 11_2.png 12_3.png 13_1.png _0.png _1.png _2.png _3.png ↑こちらの画像ファイルをメールで BQE00322(あっとまーく)nifty.com (あっとまーく)を@に置き換えてください に送っていただけないでしょうか? あと、最初のお書き込みで『省略』となっている部分も省略していない状態の 最新のプログラムを書き込んでください m(_ _)m ( 手元で実行して確認したいので… )
メンテ
Re: 迷路について2 ( No.9 )
名前:FFGX 日時:2020/06/20 10:24

zipファイルにて送らせていただきます。 mapsの省略部分 int maps[ONE][ONE] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0}, {0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0}, {0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0}, {0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0}, {0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0}, {0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0}, {0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0}, {0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0}, {0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0}, {0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0}, {0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,0}, {0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}, {0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}, {0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}, {0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0}, {0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0}, {0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0}, {0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0}, {0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0}, {0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0}, {0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0}, {0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0}, {0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0}, {0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0}, {0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0}, {0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0}, {0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0}, {0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0}, {0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0}, {0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0}, {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0}, {0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0}, {0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0}, {0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0}, {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0}, {0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0}, {0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0}, {0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0}, {0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} };
メンテ
Re: 迷路について2 ( No.10 )
名前:FFGX 日時:2020/06/20 17:35

多分迷惑メールに入っている可能性があります。 〜@nagi.be となっていると思います
メンテ
Re: 迷路について2 ( No.11 )
名前:管理人 日時:2020/06/20 23:36

mapsの中身の掲載とメールを送っていただきありがとうございます m(_ _)m ( 仰られた通り迷惑メールに入っていました(・・;; ) 実行したところ、画面は表示されました プログラムを改めて拝見したところ、check_and_paint はなかなか複雑ですね… お手数で申し訳ありませんが check_end_paint の各行で何をされているのか コメントを入れていただけないでしょうか?
メンテ
Re: 迷路について2 ( No.12 )
名前:FFGX 日時:2020/06/21 06:38

void check_and_paint() { for (int i = 0; i < 14; i++) { // 壁の有無の確認 if (maps[Py + location[Pd][i][1]][Px + location[Pd][i][0]] == 1) { fov[i] = true; } } for (int i = 0; i < 15; i++) { // 壁の有無を4の数にしぼる(ロケーションごとに4個のデータがある) if (i % 3 == 0) // 左だったら fov2[i] = 3; else if (i % 3 == 1) // 右だったら fov2[i] = 1; else // 中央だったら if (maps[Py + location[Pd][i][1]][Px + location[Pd][i][0]] == 1) // その場所に壁があるなら fov2[i] = 2; } for (int i = 0; i < 14; i++) { // データを移す fov3[i] = aa[i][fov2[i]]; } for (int i = 0; i < 14; i++) { // 描画 DrawGraph(0, 0, fov3[i], true); } }
メンテ
Re: 迷路について2 ( No.13 )
名前:FFGX 日時:2020/06/21 14:40

ONEは15にしました。 fov2とfov3は bool fov2[LOCATION_MAX][DIRECTION_MAX]; int fov2[LOCATION_MAX][DIRECTION_MAX]; としました。 aa[?][0]では厄介な点があります。 意味のある0と意味のない0で分けたいです。 そして void check_and_paint() { for (int i = 0; i < LOCATION_MAX; i++) { // 壁の有無の確認 if (maps[Py + location[Pd][i][1]][Px + location[Pd][i][0]] == 1) { fov[i] = true; } } for (int i = 0; i < LOCATION_MAX; i++) { // 壁の有無を4の数にしぼる(ロケーションごとに4個のデータがある) for (int j = 0; j < DIRECTION_MAX; j++) { int vec[4][2] = { {-1, 0}, {0, 1}, {1, 0}, {0, -1} }; if (i % 3 == 0) { // 左側だったら if (i % 5 == 0) { if (fov[i]) { fov2[0][2] = true; } } else if (i % 5 == 4) { if (fov[i]) { fov2[12][0] = fov2[12][3] = true; } } else { } } else if (i % 3 == 0) { // 右側だったら if (i % 5 == 0) { if (fov[i]) { fov2[1][2] = true; } } else if (i % 5 == 4) { if (fov[i]) { fov2[12][0] = fov2[12][3] = true; } } else { } } else { // 中央だったら if (i % 5 == 0) { if (fov[i]) { } } else if (i % 5 == 4) { if (fov[i]) { } } else { } } } } for (int i = 0; i < LOCATION_MAX; i++) { // データを移す for (int j = 0; j < DIRECTION_MAX; j++) { fov3[i][j] = aa[i][fov2[i][j]]; } } for (int i = 0; i < LOCATION_MAX; i++) { // 描画 for (int j = 0; j < DIRECTION_MAX; j++) { DrawGraph(0, 0, fov3[i][j], true); } } } となりました。
メンテ
Re: 迷路について2 ( No.14 )
名前:管理人 日時:2020/06/22 01:50

コメントの追加ありがとうございます だんだん理解できてきました まだ完全には理解できていない状態なのですが、すこし疑問が… aa は int aa[LOCATION_MAX][4]; と、2番目の配列要素は4つと定義されていますが for (int i = 0; i < LOCATION_MAX; i++) { // データを移す for (int j = 0; j < DIRECTION_MAX; j++) { fov3[i][j] = aa[i][fov2[i][j]]; } } ↑こちらでは、fov2 は bool型なので、aa が使用される範囲が aa[0〜13][0〜1] と2番目の配列要素が 0 と 1 の二つしか使用されません ( bool の true を数値にすると 1、false を数値にすると 0 なので ) これはFFGXさんの意図した処理でしょうか?
メンテ
Re: 迷路について2 ( No.15 )
名前:FFGX 日時:2020/06/22 06:41

全然意図していません。 fov2をint型にすれば良いのでしょうか。
メンテ
Re: 迷路について2 ( No.16 )
名前:FFGX 日時:2020/06/22 13:30

3ができません。 どうすればいいのか、 アドバイスしていただきたいです。
メンテ
Re: 迷路について2 ( No.17 )
名前:でぃあぶろ 日時:2020/06/22 15:46

すみませんソースコード何も読んでないのですが No.14の管理人さんの指摘は修正(?)したのでしょうか. >fov2をint型にすれば良いのでしょうか。 (ソースコードを読んで居ない上に,設計思想すらわからない)私たちに聞かれても答えにくいです. fov2はどのような目的で使っているのでしょうか?0〜3の値が入るべきものとして使っているのであれば bool型で宣言されているのが間違っており,int型などの整数型にすれば意図したものとなります. ただfov2がbool型で使用される(何らかのフラグ?)べきものであるならば, 0〜3の値を取り得る配列のインデックスとして使用するのが間違っている可能性が高いです. 管理人さんは一応「ご返信は一週間に一度、土日のどちらかで行います。平日は時間に余裕があるときだけご返信します。」 と明記されておりますので,日中に催促したところで意見を貰うことはできません. またソースコードが通常のPCの画面で表示するには長いうえ省略箇所もあったり当初と変わっている部分?もあるため, 管理人さん以外から意見を受け付けたい場合,完全なソースコード(読みこむ画像ファイルなども含む)を何らかのアップローダにアップした方が良いかと. ここまで書き込んで全然ソース読まないのも不義理だと思い読んでみたのですが No.13の「//壁の有無を4の数にしぼる(ロケーションごとに4個のデータがある)」のコメントのあるforループが全体的にわかりません… ところどころelse文の中身がないですし,fov2のインデックスが固定値なのもちょっとすみません何を意図しているのかわかりません. またint vec[4][2]を宣言してますが使用していません.このソースコードが完全ではないということでしょうか? もっと言うと if (i % 3 == 0) { // 左側だったら 省略 } else if (i % 3 == 0) { // 右側だったら 省略 } となってますがelse if(i % 3 == 0)には入ることが不可能な気がするのですが,コピペミス?か何かでしょうか. 全体的にソースコードの意図が不明です.一度FFGXさんご自身でアルゴリズムを整理してみてはいかかでしょうか. 整理した後,書き込んでいただけるともう少し回答が得られやすくなるかも知れません. 何にせよ現状の情報だけだとFFGXさんがどのようなことを意図し,それをどの様に実装し, どういったところで上手く行っていないのかをこちらでは判断することができません.
メンテ
Re: 迷路について2 ( No.18 )
名前:FFGX 日時:2020/06/22 16:10

すみませんでした。 しばらくこの件については自分なりに考えます。
メンテ
Re: 迷路について2 ( No.19 )
名前:FFGX 日時:2020/06/29 17:24

自分なりに考えてきましたが gr2を削除して fovとfov2をint型にして どちらも[LOCATION_MAX][DIRECTION_MAX]; としました。 check_and_paintは int data[LOCATION_MAX]; for (int i = 0; i < LOCATION_MAX; i++) { data[i] = maps[Px + location[Pd][i][0]][Py + location[Pd][i][1]]; } for (int i = 0; i < LOCATION_MAX; i++) { for (int j = 0; j < DIRECTION_MAX; j++) { if (data[i] == 0) { switch (i) { case 13: fov[i][0] = 0; fov[i][1] = 1; break; case 12: fov[i][0] = 0; fov[i][3] = 3; break; case 5: case 8: case 11: fov[i][0] = 0; fov[i][1] = 1; fov[i][2] = 2; fov[i][3] = 3; break; case 4: case 7: case 10: fov[i][0] = 0; fov[i][1] = 1; fov[i][2] = 2; break; case 3: case 6: case 9: fov[i][0] = 0; fov[i][2] = 2; fov[i][3] = 3; break; case 0: case 1: case 2: fov[i][2] = 2; break; } } } } for (int i = 0; i < LOCATION_MAX; i++) { for (int j = 0; j < DIRECTION_MAX; j++) { if (fov[i][j] == -1) { continue; } else { fov2[i][j] = aa[i][fov[i][j]]; } } } for (int i = 0; i < LOCATION_MAX; i++) { for (int j = 0; j < DIRECTION_MAX; j++) { if (fov2[i][j]) { DrawGraph(0, 0, fov2[i][j], true); } } } のようにしましたが、 ここでもうまくいきません。 助けてください。
メンテ

Page: 1 | 2 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存