#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//どちらも5以上の奇数にすること。
#define max_y 25
#define max_x 25
int main(void)
{
int field[max_y][max_x]; //フィールド(0が通路で、1が壁。)
int y; //フィールド配列の縦の要素番号
int x; //フィールド配列の横の要素番号
int r; //乱数の値
srand((unsigned)time(NULL)); //乱数の仕組みを初期化。
//通路(0)の生成
for (y = 0; y < max_y; y = y + 1) //フィールドの縦幅の分だけループする。
{
for (x = 0; x < max_x; x = x + 1) //フィールドの横幅の分だけループする。
{
field[y][x] = 0;
}
}
//上下の外壁(1)の生成
for (x = 0; x < max_x; x = x + 1) //フィールドの横幅の分だけループする。
{
field[0][x] = 1;
field[max_y - 1][x] = 1;
}
//左右の外壁(1)の生成
for (y = 0; y < max_y; y = y + 1) //フィールドの縦幅の分だけループする。
{
field[y][0] = 1;
field[y][max_x - 1] = 1;
}
//棒倒し法を使った壁(1)の生成(1行めのみ)
y = 2; //1行め
for (x = 2; x < max_x - 1; x = x + 2) //xの要素番号2から要素番号max_x-1まで、1マス飛ばしで棒倒し。
{
r = (rand() % 12) + 1; //乱数生成(r = 1から12のランダムな値)
field[y][x] = 1; //中心から……
if (r >= 1 && r <= 3) //rが1から3のとき
{
if (field[y - 1][x] == 0) //上に棒(壁)がなければ
{
field[y - 1][x] = 1; //上に棒を倒す。
}
else if (field[y - 1][x] == 1) //上に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 4 && r <= 6) //rが4から6のとき
{
if (field[y + 1][x] == 0) //下に棒(壁)がなければ
{
field[y + 1][x] = 1; //下に棒を倒す。
}
else if (field[y + 1][x] == 1) //下に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 7 && r <= 9) //rが7から9のとき
{
if (field[y][x - 1] == 0) //左に棒(壁)がなければ
{
field[y][x - 1] = 1; //左に棒を倒す。
}
else if (field[y][x - 1] == 1) //左に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 10 && r <= 12) //rが10から12のとき
{
if (field[y][x + 1] == 0) //右に棒(壁)がなければ
{
field[y][x + 1] = 1; //右に棒を倒す。
}
else if (field[y][x + 1] == 1) //右に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
}
//棒倒し法を使った壁(1)の生成(2行め以降)
for (y = 4; y < max_y - 1; y = y + 2) //yの要素番号4から要素番号max_y-1まで、1マス飛ばしで棒倒し。
{
for (x = 2; x < max_x - 1; x = x + 2) //xの要素番号2から要素番号max_x-1まで、1マス飛ばしで棒倒し。
{
r = (rand() % 12) + 1; //乱数生成(r = 1から12のランダムな値)
field[y][x] = 1; //中心から……
if (r >= 1 && r <= 4) //rが1から4のとき
{
if (field[y + 1][x] == 0) //下に棒(壁)がなければ
{
field[y + 1][x] = 1; //下に棒を倒す。
}
else if (field[y + 1][x] == 1) //下に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 5 && r <= 8) //rが5から8のとき
{
if (field[y][x - 1] == 0) //左に棒(壁)がなければ
{
field[y][x - 1] = 1; //左に棒を倒す。
}
else if (field[y][x - 1] == 1) //左に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 9 && r <= 12) //rが9から12のとき
{
if (field[y][x + 1] == 0) //右に棒(壁)がなければ
{
field[y][x + 1] = 1; //右に棒を倒す。
}
else if (field[y][x + 1] == 1) //右に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
}
}
field[0][1] = 0; //スタート地点の壁を撤去する。
field[max_y - 1][max_x - 2] = 0; //ゴール地点の壁を撤去する。
//結果表示
for (y = 0; y < max_y; y = y + 1) //フィールドの縦幅の分だけループする。
{
for (x = 0; x < max_x; x = x + 1) //フィールドの横幅の分だけループする。
{
if (field[y][x] == 0) //通路なら
{
printf("%2s", " "); //空白で表す。
}
else if (field[y][x] == 1) //壁なら
{
printf("%2s", "■"); //四角形で表す。
}
}
printf("\n"); //行の終了時点で改行する。
}
return(0);
}
サイトを見ながらまねしたのですが表示されてもすぐに消えてしまいます消えないようにするにはどうしたらいいですか?。どなたか教えてください。
迷路を作っているのですが、デバッグしたときにすぐに消えてしまいます。どうすれば表示したままに出来るか教えていただきたいです。
迷路を作っているのですが、デバッグしたときにすぐに消えてしまいます。どうすれば表示したままに出来るか教えていただきたいです。
- 添付ファイル
-
- Source.cpp
- (4.04 KiB) ダウンロード数: 99 回
Re: 迷路を作っているのですが、デバッグしたときにすぐに消えてしまいます。どうすれば表示したままに出来るか教えていただきたいです。
「すぐに消える」の意味が不明瞭だが,
「プログラムが即終了してしまうためにprintfの結果を見ることができない」という話なら,
main関数末尾のreturnの直前に getchar(); とでも書いておけばどうか.
あるいはリダイレクトでファイルに出してやるとか.
「プログラムが即終了してしまうためにprintfの結果を見ることができない」という話なら,
main関数末尾のreturnの直前に getchar(); とでも書いておけばどうか.
あるいはリダイレクトでファイルに出してやるとか.
Re: 迷路を作っているのですが、デバッグしたときにすぐに消えてしまいます。どうすれば表示したままに出来るか教えていただきたいです。
Windows だと仮定すると、
(1)Microsoft Visual Studio 2019 を使う。
(2)https://www.embarcadero.com/jp/free-too ... e-download Embarcadero Dev-C++ を使う。
(3)最後の return(0); の前位に、getchar(); を挿入する。
(1)Microsoft Visual Studio 2019 を使う。
(2)https://www.embarcadero.com/jp/free-too ... e-download Embarcadero Dev-C++ を使う。
(3)最後の return(0); の前位に、getchar(); を挿入する。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。