こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

迷路作成のプログラミング

迷路作成のプログラミングをC++で作ったのですが、エラーが出ます。
どのように直せば良いか教えてください。
エラー内容は
'randoomize': 識別子が見つかりませんでした。
16 進型定数には、少なくとも 1 桁の 16 進数が必要です。
'kbhit': 識別子が見つかりませんでした
'getch': 識別子が見つかりませんでした
です、、お願いします。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define YOKO_MAX 200
#define ESC '\xlb'

int n;
int map[YOKO_MAX],count[YOKO_MAX];

int rr()
{
return rand() % 10>3;
}

void tate()
{
int i,j,k;
printf("■");
for (i=0; i<n-1;i++)
if(map[i]!=map[i+1] && rr()) {
k=map[i+1]; count[k]=0;
for(j=0; j<n; j++)
if(map[j]==k) {
map[j]=map[i];
count[map[i]]++;
}
printf(" ");
} else
printf("■");
printf("■\n");
}

void last_tate()
{
int i,j,k;
printf("■");
for (i=0; i<n-1;i++) {
if(map[i]==map[i+1]) printf("■");
else {
k=map[i+1];
for (j=0; j<n; j++)
if (map[j]==k) map[j]=map[i];
printf(" ",map[i]);
}
}
printf("■\n");
}

void yoko()
{
int i,j;
for (i=0; i<n; i++)
if (count[i]>1 && rr()) {
printf("■■");
for(i=0; i<n; i++) {
if (count[j]==0) {
count[j]=1; count[map[i]]--;
map[i]=j;break;
}
}
} else {
printf("■");
}
printf("■\n");
}

void enter()
{
int i,k;
k=rand() % n;
for (i=0; i<n; i++)
if(i==k) {
printf("■");
} else {
printf("■■");
}
printf("■\n");
}

void initialize()
{
int i;
for (i=0; i<n; i++) {
map[i]=i;
count[i]=1;
}
randoomize();
}

int main()
{
printf("無限に大きな迷路\n");
do {
printf("\n迷路の横幅(2~200)?");
scanf("%d",&n);
} while (n<2||n>=YOKO_MAX);
printf("\n ESCキーを押すと止まる。\n");
initialize();
enter();
do {
tate();
yoko();
} while (!kbhit()||getch()!=ESC);
last_tate();
enter();
}

投稿日時 - 2013-11-12 21:48:32

QNo.8344974

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

いちお~、以下のようにすれば、コンパイルも出来て実行も出来るが、マトモな迷路にはならん。

投稿時にソース上の半角スペースが消えちゃって、スペースがあった場所からスペースが無くなったのが原因だろうけど。

あと、致命的な書き間違いがあって、そこを直さないと無限ループに落ちて、配列アクセスでメモリ壊して例外吐いて落ちる。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

#define YOKO_MAX 200
#define ESC '\x1b'

int n;
int map[YOKO_MAX+1],count[YOKO_MAX+1];

int rr(void)
{
return rand() % 10>3;
}

void tate(void)
{
int i,j,k;
printf("■");
for (i=0; i<n-1;i++)
if(map[i]!=map[i+1] && rr()) {
k=map[i+1]; count[k]=0;
for(j=0; j<n; j++)
if(map[j]==k) {
map[j]=map[i];
count[map[i]]++;
}
printf(" ");
} else
printf("■");
printf("■\n");
}

void last_tate(void)
{
int i,j,k;
printf("■");
for (i=0; i<n-1;i++) {
if(map[i]==map[i+1]) printf("■");
else {
k=map[i+1];
for (j=0; j<n; j++)
if (map[j]==k) map[j]=map[i];
printf(" ",map[i]);
}
}
printf("■\n");
}

void yoko(void)
{
int i,j;
for (i=0; i<n; i++)
if (count[i]>1 && rr()) {
printf("■■");
for(j=0; j<n; j++) {
if (count[j]==0) {
count[j]=1; count[map[i]]--;
map[i]=j;break;
}
}
} else {
printf("■");
}
printf("■\n");
}

void enter(void)
{
int i,k;
k=rand() % n;
for (i=0; i<n; i++)
if(i==k) {
printf("■");
} else {
printf("■■");
}
printf("■\n");
}

void initialize(void)
{
int i;
for (i=0; i<n; i++) {
map[i]=i;
count[i]=1;
}
randomize();
}

int main(void)
{
printf("無限に大きな迷路\n");
do {
printf("\n迷路の横幅(2~200)?");
scanf("%d",&n);
} while (n<2||n>=YOKO_MAX);
printf("\n ESCキーを押すと止まる。\n");
initialize();
enter();
do {
tate();
yoko();
} while (!kbhit()||getch()!=ESC);
last_tate();
enter();
return 0;
}

投稿日時 - 2013-11-20 15:39:55

ANo.2

まず。
エラーメッセージと一緒に、ファイルと行番号も表示されたはずです。
> 16 進型定数には、少なくとも 1 桁の 16 進数が必要です。
みたいエラーは、どこかに打ち間違いがあるのですが、その行を見ないと、とてもじゃないが「全部眺めて見付ける」なんてことはできません。
今回のは短いからまだなんとかなりますが。

メッセージからして、 0xXX とか \xXX とかで、XXに0~9A~F以外の文字が紛れているのでしょう。


> 'randoomize': 識別子が見つかりませんでした。
> 'kbhit': 識別子が見つかりませんでした
> 'getch': 識別子が見つかりませんでした

識別子、というのは、変数名や関数名などの「名前」のことです。
これが見つからない、という場合は
○単純なスペルミス:
 ・まぎらわしい文字(1とIとlとか)
 ・ 大文字小文字の不一致
○宣言されていない。
 ・#includeの不足
 ・本当に宣言/定義されていない

randoomize はおそらく randomize の間違いでしょうが、そうだとしても、 randomize関数などというものは、CにもC++にも標準では存在していなかったと思います。

kbhitもgetchも標準ではありません。
Windowsだと、#include <conio.h>で使えるようになりますが、他OSなら代替手段を考える必要があります。

ということで、Linux等でやっているなら、「・本当に宣言/定義されていない」
Windowsなら、kbhit、getchについては「#includeの不足」です。

/* C++特有の機能がまったく使わていない点は、ツッコんだ方がよいのでしょうか? */

投稿日時 - 2013-11-12 22:57:19

ANo.1

> 'randoomize': 識別子が見つかりませんでした。
'randomize' でないかい?

雑誌の記事など、元ネタがあるものを打ち込んだ?
よく見比べた?

投稿日時 - 2013-11-12 22:05:17

補足

アルゴリズムの本にのっているものを見て作りました。
C++ではrandomizeとしていたと思いますが、それでもエラーが出ました。

投稿日時 - 2013-11-12 22:36:41

あなたにオススメの質問