たびたびすみません

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

たびたびすみません

#1

投稿記事 by » 14年前

先ほどの続きですが、これで壁を突き抜けないようにしたいのですが。どのようにすれば壁を突き抜けなくなりますか??

コード:

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

#define XSIZE 16
#define YSIZE 12

 int x, y;     //x,yを定義
 struct masu {

 int p;        //pを定義
 int right;    //rightを定義
 int bottom;   //bottomを定義

};


  struct masu board[XSIZE][YSIZE];


void print_board()
{
int i, j;


system("cls"); /* windowsではsystem("cls");、macではsystem("clear"); */


  for (j=0; j<YSIZE; j++)
   printf("+---");
   printf("+\n");

  for (i=0; i<XSIZE; i++) {
   printf("|");

  for (j=0; j<YSIZE; j++) {
   if (i == x && j == y) printf("you");
   else if (board[i][j].p == 1) printf(" o ");
   else printf("   ");
   if (j==YSIZE-1 || board[i][j].right == 1) printf("|");
   else printf(" ");
 }


  printf("\n");
   for (j=0; j<YSIZE; j++) {
   printf("+");
   if (i==XSIZE-1 || board[i][j].bottom == 1) printf("---");
   else printf("   ");
  }
  printf("+\n");
 }
  printf("\n");
}

  void initialize()
  {
   int i, j;
   //srandom(time(NULL));
   

   for (i=0; i<XSIZE; i++) {
    for (j=0; j<YSIZE; j++) {
     board[i][j].right = 0;
     board[i][j].bottom = 0;
     if (rand() % 3 == 0) board[i][j].right = 1;
     if (rand() % 3 == 0) board[i][j].bottom = 1;
     board[i][j].p = 1;
    }
  }
}

int main()
{
 char input;


   initialize();
  x = 0;
  y = 0;
  board[x][y].p = 0;


  while (1) {


   print_board();
//if (x == XSIZE && y == YSIZE);{ break;}


   printf("input(2,3,4,5)> ");
   scanf("%c", &input);
   printf("\n");

if (input == '2'){
   x=x-1;

}
else if (input == '3'){
   y=y-1;

}
else if (input == '4'){
   x=x+1;

}
else if (input == '5'){
   y=y+1;
}
else{
}

  board[x][y].p = 0;
 }
 printf("goal!!\n");




return 0;



}

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: たびたびすみません

#2

投稿記事 by 沖 滉均 » 14年前

k さんが書きました:先ほどの続きですが、これで壁を突き抜けないようにしたいのですが。どのようにすれば壁を突き抜けなくなりますか??
こちらの続きということでしょうか?
http://dixq.net/forum/viewtopic.php?f=3&t=7674

なぜ、先ほどのトピックを放置してわざわざ新規トピックを立てるのでしょうか?
解決していないのであれば元のトピックに継続して記入してください。

とりあえず、学校の課題でしたね。
では、答えを直接は書きません。

突き抜けるというのは壁を抜けて動いてしまうということで良いですね?
現在、2~5の値を入力された際に移動の処理を行っている部分で、
現在は座標にかかわらず強制的に移動してしまっています。

そのため、画面外にも移動できてしまう状態になっています。

例えば、x=0,y=0にいるときにx=x-1とやってしまうとxは-1(ボードの外)に移動できてしまいますので、
if文でxが0の時は移動しないか、xが0より大きいときだけ移動するように条件で処理を分ければ良いでしょう。
例1:

コード:

if(x > 0){
    x = x -1;
}
同様にボードサイズの端にいる場合も

コード:

if(x < XSIZE -1){
    x = x + 1;
}
のようにすることで画面外に出るのを防止することができます。

また、これはどちらでもかまわないのですが

コード:

x = x + 1;  //←これは
x += 1;     //←このようにも書くことができます
x++;        //←変化する数が1なのであればこちらのほうがシンプルです
上記に書いたのはボードから抜けない条件であって個々の壁を抜けない条件は、
また別に書く必要がありますが、どのような条件が必要か考えてみてください。
There is no royal road to learning.
codeタグで指定できる言語
画像

閉鎖

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