a[0][6]には0を代入して、a[8][5]には1を最終的に代入したいです。しかし現段階で、プログラムを実行させると止まってしまいます。main関数は省略させていただきます。変数で構成された配列(a[s][t]など)には、sやyが代入されていないのでしょうか。よくわかりませんので教えていただけると幸いです。宜しくお願い致します。
C
1/* 抜粋です */ 2 3・ 4・ 5・ 6int AAA(int x,int s){ 7 s=x; 8 return s; 9} 10 11int BBB(int y,int t){ 12 t=y; 13 return t; 14} 15 16void CCC(int s,int t){ 17 a[s][t]=0; 18} 19 20void DDD(int x,int y){ 21 a[x][y]=1; 22} 23・ 24・ 25・
先ほどの抜粋のもとのコードです。15×15の四角く並んだ0の、真ん中一番下がスタート位置で、1としています。そこから1か2か3か4を入力して真ん中一番上の座標まで辿りついたら(真ん中一番上が1になったら)終了というプログラムを組んだつもりでした。先ほどの0を代入する部分は、移動後のもといた場所を0とするためです。このプログラムを動かすには、たぶんCopyxとCopyyが問題だと思いますので、教えていただけると幸いです。よろしくお願いします。1で上、2で左、3で右、4で下に行きます。
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4int a[15][15]; 5 6void Explain1(); 7void Initialize1(int x,int y); 8void Initialize2(); 9void Output1(int x,int y); 10int Input(int b); 11int Copyx(int x,int s); 12int Copyy(int y,int t); 13int Calculatex(int b,int x); 14int Calculatey(int b,int y); 15void Beforemove(int s,int t); 16void Aftermove(int x,int y); 17void Output2(int x,int y); 18void Finish(); 19 20int main(){ 21 int x; 22 int y; 23 int b=0; 24 int s,t; 25 26 Explain1(); 27 Initialize1(x,y); 28 Initialize2(); 29 Output1(x,y); 30 while(a[0][7]==0){ //ゴールにたどり着くまでループ 31 Input(b); 32 Copyx(x,s); 33 Copyy(y,t); 34 Calculatex(b,x); 35 Calculatey(b,y); 36 Beforemove(s,t); 37 Aftermove(x,y); 38 Output2(x,y); 39 } 40 Finish(); 41 return 0; 42 } 43 44void Explain1(){ 45 printf("ゴールを目指すゲームです\n"); 46} 47 48void Initialize1(int x,int y){ //座標平面の初期化 49 for(x=0; x<15; x++){ 50 for(y=0; y<15; y++){ 51 a[x][y]=0; 52 } 53 } 54} 55 56void Initialize2(){ //最初の位置である真ん中一番下に1を置く 57 a[14][7]=1; 58} 59 60void Output1(int x,int y){ //Initialize1の出力。マス出力 61 for(x=0; x<15; x++){ 62 for(y=0; y<15; y++){ 63 printf("%d ",a[x][y]); 64 } 65 printf("\n"); 66 } 67} 68 69int Input(int b){ //移動方向、またキャンセルの選択、1~5の整数の選別 70 while(1){ 71 scanf("%d",&b); 72 if((b==1)||(b==2)||(b==3)||(b==4)){ 73 break; 74 } 75 else{ 76 printf("1から4の整数を入力して下さい\n"); 77 } 78 } 79 return b; 80} 81 82int Copyx(int x,int s){ //x座標のコピー 83 s=x; 84 return s; 85} 86 87int Copyy(int y,int t){ //y座標のコピー 88 t=y; 89 return t; 90} 91 92int Calculatex(int b,int x){ //Inputの選択によるx方向に進む座標の計算 93 switch(b) 94 { 95 case 1: 96 if(x==0){ 97 printf("これより上には進めません\n"); 98 break; 99 } 100 else{ 101 x++; 102 break; 103 } 104 case 4: 105 if(x==14){ 106 printf("これより下には進めません\n"); 107 break; 108 } 109 else{ 110 x--; 111 break; 112 } 113 default: 114 break; 115 } 116 return x; 117} 118 119int Calculatey(int b,int y){ //Inputの選択によるy方向に進む座標の計算 120 switch(b) 121 { 122 case 2: 123 if(y==0){ 124 printf("これより左には進めません\n"); 125 break; 126 } 127 else 128 y--; 129 break; 130 case 3: 131 if(y==14){ 132 printf("これより右には進めません\n"); 133 break; 134 } 135 else 136 y++; 137 break; 138 default: 139 break; 140 } 141 return y; 142} 143/* 144void Beforemove(int s,int t){ //移動後への座標変換 145 a[s][t]=0; 146} 147*//* 148void Aftermove(int x,int y){ //移動後への座標変換 149 a[x][y]=1; 150} 151*/ 152void Output2(int x,int y){ //Initialize1の出力。マス出力 153 for(x=0; x<15; x++){ 154 for(y=0; y<15; y++){ 155 printf("%d ",a[x][y]); 156 } 157 printf("\n"); 158 } 159} 160 161void Finish(){ 162 printf("到着です\n"); 163}
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/18 06:55