課題がわかりません。解いてください。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
natu

課題がわかりません。解いてください。

#1

投稿記事 by natu » 15年前

課題ですが、『#を使って通路を作り、その通路をXが移動していく』というものです。
通路はできたのですが、Xの移動がどうしてもできません。#がないところにXを表示
させようとすると、#がないところすべてにXが表示されてしまいます。しかも、Xを
表示させると#がずれてしまいます。

どこが悪いのでしょうか??

条件:
1.#の通路は二次元配列を使う
2.Xは配列を参照して移動させる。

画像

ROM

Re:課題がわかりません。解いてください。

#2

投稿記事 by ROM » 15年前

私が言わなくともまず規約をしっかり読んでから投稿して下さいという書き込みがある事でしょう。
ここは宿題を誰かにやらせる場所じゃありません。
だいたい自分の宿題を誰かにやらせて単位を取って何の意味があるんでしょうかね。

シエル

Re:課題がわかりません。解いてください。

#3

投稿記事 by シエル » 15年前

「解いて下さい」はちょっとまずいかな。
自分がまずどこまで出来るかを明確にして、出来るところまでのコードを提示して下さい。

#最近、課題丸投げの投稿多いですね。

Dixq (管理人)

Re:課題がわかりません。解いてください。

#4

投稿記事 by Dixq (管理人) » 15年前

出番ですね。

[flash 600,100]http://dixq.net/flash/kiyaku4.swf[/flash]

なんちゃって・・。

> natuさん

今どこまで出来ていてどこで躓いていますか?
作っているプログラムがあるようなので、それを提示して、解らない所を聞くとスムーズにやり取りできるように思います。

後、仕様が良く解らないのですが、Xが移動しさえすればいいんですか?
じゃウロウロ同じ所を左右に移動するだけでもいいんですか?
ゴールなどがあり、迷路のゴールへの道探索プログラムを作るわけではないんですか?

パコネコ

Re:課題がわかりません。解いてください。

#5

投稿記事 by パコネコ » 15年前

配列を参照するときにいじっちゃってるところはないですか?
皆さん書いてますが…ソースを書いといてください。
どこが間違ってるかがわからないので…

シエル

Re:課題がわかりません。解いてください。

#6

投稿記事 by シエル » 15年前

>>管理人さん

いや~すばらしいFLASHです。
掲示板のトップにでも貼っといてほしいぐらいですw

パコネコ

Re:課題がわかりません。解いてください。

#7

投稿記事 by パコネコ » 15年前

後ついでに、いつまでなのか(提出期限)書いといていただけないと、時間が足りなくなりますよ?

パコネコ

Re:課題がわかりません。解いてください。

#8

投稿記事 by パコネコ » 15年前

いつの間に編集を…できれば後に書かないとだれも気がづきませんよ。
移動のプログラムはどれですか?

ROM

Re:課題がわかりません。解いてください。

#9

投稿記事 by ROM » 15年前

どうやら規約を読む気が無いようです。

natu

Re:課題がわかりません。解いてください。

#10

投稿記事 by natu » 15年前

>>パコネコさん

プログラム載せました。

パコネコ

Re:課題がわかりません。解いてください。

#11

投稿記事 by パコネコ » 15年前

移動のプログラムはどれですか?
自動でうごくものなんですか?
自分で動かすものだと思っていました…

パコネコ

Re:課題がわかりません。解いてください。

#12

投稿記事 by パコネコ » 15年前

/*
int x, y, i;

for(i = 19; i >= 0; i--){
for(x = 0; x < 20; x++){
for(y = 0; y < 20; y++){
printf("%c", nk[x][y]);
if(i == x){
if(nk[x][y] == ' '){
nk[x][y] = 'x';
printf("%c", nk[x][y]);
}
}
}
printf("\n");
}
}
return 0;
}
*/
プログラムはこれですね
移動はiを使っているんですか?
空白にxを入れて移動させているんですね。
移動させるなら移動させた後にもともとxがあった場所は空白にすべきでは?と思いました。
何か食い違いがありそうなので、何がしたいのか1つずつ書いてもらっていいですか?

パコネコ

Re:課題がわかりません。解いてください。

#13

投稿記事 by パコネコ » 15年前

連続すいません
迷路のプログラムだと勝手に思っています。
まずnk[x][y]の中は0&1にして描写するときに#を描写すべきです。
あと移動させるときに条件として
たとえば上に移動するなら
if(nk[x][y-1]==0){//0なら空欄
nk[x][y]=0;
nk[x][y-1]=2;//2はXのこと
}
ダメですか?
少し長くなりますが(ソースが)わかりやすいです。
scanf文を使って0なら上へなどできますから…

パコネコ

Re:課題がわかりません。解いてください。

#14

投稿記事 by パコネコ » 15年前

この#って小文字ですか?
×が大文字だとしたらその分ずれます
#と空欄を大文字にしたらずれないと思います
================
//printf("%c", nk[x][y]);
if(i == x){
if(nk[x][y] == ' '){
nk[x][y] = 'x';
printf("%c", nk[x][y]);
}
}else printf("%c", nk[x][y]);
ずれるのは両方描写してたから?ですかね
画像

natu

Re:課題がわかりません。解いてください。

#15

投稿記事 by natu » 15年前

>>パコネコさん

返答ありがとうございます。
 
>>移動はiを使っているんですか?
 iは#の通路の空白をしたから探すために使ってます。
 こんなことしなくてもできるのでしょうか??

>>移動させるなら移動させた後にもともとxがあった場所は空白にすべきでは?
 そうしたかったのですが、今できているのは空白にできなかったんです。

>>まずnk[x][y]の中は0&1にして描写するときに#を描写すべきです。
 通路の描画は、二次元配列で書いてあると思うのですが…

>>この#って小文字ですか?
 大文字です。

私としては、ユーザーからの入力で上、下、右、左に動かせるようにしたいんです。

Dixq (管理人)

Re:課題がわかりません。解いてください。

#16

投稿記事 by Dixq (管理人) » 15年前

>>この#って小文字ですか?
> 大文字です。

そうじゃなくて全角か半角かってことじゃないですか?
全角ならこのままではだめです。
しかし本当に課題は全角ですか?
全角ならば余計に0,1で管理する必要性が高くなります。

同じようなプログラムがゲームプログラミングの館の24章にありますのでよければご覧ください。

フリオ

Re:課題がわかりません。解いてください。

#17

投稿記事 by フリオ » 15年前

 
>2.Xは配列を参照して移動させる。
 ひょっとして、こういうことでしょうか。
#include <stdio.h>

#define SIZE 5

void print_map(char map[/url][SIZE], int p[/url])
{
    int i;
    
    for(i = 0; i < SIZE; ++ i){
        int j;
        
        for(j = 0; j < SIZE; ++ j){
            if(i == p[0] && j == p[1]) putchar('@');
            else putchar(map[j]);
        }
        putchar('\n');
    }
}

int main(void)
{
    char map[SIZE][SIZE] = {".....", ".....", ".....", ".....", "....."};
    int p[/url][2] = {{0, 0}, {0, 1}, {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {4, 3}, {4, 4}};
    int x, n = sizeof p / sizeof p[0];
    
    for(x = 0; x < n; ++ x){
        print_map(map, p[x]);
        getchar();
    }
    return 0;
}


画像

パコネコ

Re:課題がわかりません。解いてください。

#18

投稿記事 by パコネコ » 15年前

ようやくやりたいことがわかりました。
>そうじゃなくて全角か半角かってことじゃないですか?
すいません、間違えました。
フリオさんは自動でうごくものを作ったんですね。(あらかじめ決められたルートを進む)


書いてみました
#include<stdio.h>
int main(void){
int map[/url][5]={ {1,1,1,1,1},
{1,0,1,0,1},
{1,0,0,0,1},
{1,0,1,0,1},
{1,1,1,2,1}};
int a,b,c;
int x=1,y=3;

do{
for(b=0;b<5;b++){
for(a=0;a<5;a++){
if(a==x&&b==y)putchar('x');
else{
if(map[a]==0)putchar(' ');
else if(map[a]==1)putchar('#');
else putchar('G');
}
}
putchar('\n');
}
do{
printf("0=左、1=右、2=上、3=下ーーー");
scanf("%d",&c);
}while(4<c);
if(c==0&&map[y][x-1]!=1)x--;
if(c==1&&map[y][x+1]!=1)x++;
if(c==2&&map[y-1][x]!=1)y--;
if(c==3&&map[y+1][x]!=1)y++;


}while(map[y][x]!=2);
printf("CREA");

}
================
500ポイントも落したとは…少し残念です。
どこが何を意味しているのかわかりますか?
わからないままコピーだけするのは絶対にしないでくださいね。
わかるならいいけど… 画像

ISLe

Re:課題がわかりません。解いてください。

#19

投稿記事 by ISLe » 15年前

壁に沿って自動で移動するプログラムを作ってしまったのですがせっかくなので貼っておきます。
#include <stdio.h>

int main(void)
{
    char nk[20][20] = {
        {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'}
    };
    int x, y, i;
    enum DIR { /* 進行方向を表す */
        DIR_UP,
        DIR_RIGHT,
        DIR_DOWN,
        DIR_LEFT,
        DIR_NUM
    } dir;

    x = 10; y = 18; /* スタート地点 */
    dir = DIR_UP; /* 最初の進行方向 */

    for (;;) {
        int col, row;
        for (row=0;row<20;++row) {
            for (col=0;col<20;++col) {
                if (col == x && row == y)
                    putchar('x');
                else
                    putchar(nk[row][co[/url]);
            }
            putchar('\n');
        }
        if (x <= 0 || x >= 19 || y <= 0 || y >= 19) {
            puts("Congratulations on the escape!!!");
            break;
        }
        puts("Press enter key to next step...");
        getchar();

        {   /* 左回りに移動可能な方向を探索 */
            enum DIR d;
            for (i=0;i<DIR_NUM;++i) {
                int vx, vy;
                d = (dir + i - 1 + DIR_NUM) % DIR_NUM;
                vy = (d == DIR_DOWN) - (d == DIR_UP);
                vx = (d == DIR_RIGHT) - (d == DIR_LEFT);
                if (nk[y+vy][x+vx] == ' ') {
                    x += vx;
                    y += vy;
                    dir = d;
                    break;
                }
            }
        }
    }
    return 0;
}

通りすがり

Re:課題がわかりません。解いてください。

#20

投稿記事 by 通りすがり » 15年前

宿題代わりにやって下さいなんて要望に応えてたらそういう質問が増えますよ。

パコネコ

Re:課題がわかりません。解いてください。

#21

投稿記事 by パコネコ » 15年前

でもソース書いてくれましたし…一緒に考えてください的なのだったら楽しい上に勉強になるからいいんですけど…丸投げが増えるのは困りますね。

natu

Re:課題がわかりません。解いてください。

#22

投稿記事 by natu » 15年前

お手伝い頂きありがとうございます!!

皆さんのを参考にして考えてみます。

閉鎖

“C言語何でも質問掲示板” へ戻る