ページ 11

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

Posted: 2010年7月05日(月) 21:09
by natu
課題ですが、『#を使って通路を作り、その通路をXが移動していく』というものです。
通路はできたのですが、Xの移動がどうしてもできません。#がないところにXを表示
させようとすると、#がないところすべてにXが表示されてしまいます。しかも、Xを
表示させると#がずれてしまいます。

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

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

画像

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

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

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

Posted: 2010年7月05日(月) 21:21
by シエル
「解いて下さい」はちょっとまずいかな。
自分がまずどこまで出来るかを明確にして、出来るところまでのコードを提示して下さい。

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

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

Posted: 2010年7月05日(月) 21:28
by Dixq (管理人)
出番ですね。

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

なんちゃって・・。

> natuさん

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

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

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

Posted: 2010年7月05日(月) 21:50
by パコネコ
配列を参照するときにいじっちゃってるところはないですか?
皆さん書いてますが…ソースを書いといてください。
どこが間違ってるかがわからないので…

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

Posted: 2010年7月05日(月) 21:56
by シエル
>>管理人さん

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

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

Posted: 2010年7月05日(月) 22:14
by パコネコ
後ついでに、いつまでなのか(提出期限)書いといていただけないと、時間が足りなくなりますよ?

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

Posted: 2010年7月05日(月) 22:25
by パコネコ
いつの間に編集を…できれば後に書かないとだれも気がづきませんよ。
移動のプログラムはどれですか?

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

Posted: 2010年7月05日(月) 22:33
by ROM
どうやら規約を読む気が無いようです。

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

Posted: 2010年7月05日(月) 23:11
by natu
>>パコネコさん

プログラム載せました。

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

Posted: 2010年7月05日(月) 23:13
by パコネコ
移動のプログラムはどれですか?
自動でうごくものなんですか?
自分で動かすものだと思っていました…

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

Posted: 2010年7月05日(月) 23:20
by パコネコ
/*
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:課題がわかりません。解いてください。

Posted: 2010年7月05日(月) 23:27
by パコネコ
連続すいません
迷路のプログラムだと勝手に思っています。
まず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:課題がわかりません。解いてください。

Posted: 2010年7月05日(月) 23:37
by パコネコ
この#って小文字ですか?
×が大文字だとしたらその分ずれます
#と空欄を大文字にしたらずれないと思います
================
//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]);
ずれるのは両方描写してたから?ですかね
画像

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

Posted: 2010年7月06日(火) 07:55
by natu
>>パコネコさん

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

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

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

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

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

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

Posted: 2010年7月06日(火) 08:11
by Dixq (管理人)
>>この#って小文字ですか?
> 大文字です。

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

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

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

Posted: 2010年7月06日(火) 09:50
by フリオ
 
>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:課題がわかりません。解いてください。

Posted: 2010年7月06日(火) 13:57
by パコネコ
ようやくやりたいことがわかりました。
>そうじゃなくて全角か半角かってことじゃないですか?
すいません、間違えました。
フリオさんは自動でうごくものを作ったんですね。(あらかじめ決められたルートを進む)


書いてみました
#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ポイントも落したとは…少し残念です。
どこが何を意味しているのかわかりますか?
わからないままコピーだけするのは絶対にしないでくださいね。
わかるならいいけど… 画像

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

Posted: 2010年7月06日(火) 16:36
by ISLe
壁に沿って自動で移動するプログラムを作ってしまったのですがせっかくなので貼っておきます。
#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:課題がわかりません。解いてください。

Posted: 2010年7月06日(火) 17:51
by 通りすがり
宿題代わりにやって下さいなんて要望に応えてたらそういう質問が増えますよ。

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

Posted: 2010年7月06日(火) 18:03
by パコネコ
でもソース書いてくれましたし…一緒に考えてください的なのだったら楽しい上に勉強になるからいいんですけど…丸投げが増えるのは困りますね。

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

Posted: 2010年7月06日(火) 21:45
by natu
お手伝い頂きありがとうございます!!

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