今回が質問初めてです。見にくかったらすいません。下のプログラムですが、これに構造体を使わなくてはいけないのですが、まったくわかりません。みなさんはどう書き換えますか?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int KEY(int *Kn,int *Y,int *X);
int main(void)
{
//数値格納
int kn; //入力キー
int sty,stx; //座標
int fy,fx; //マップ範囲
int jm[25][40]; //移動可不判定
char mapc[3]={0};//複写されたマップ構成情報
//カウント
int y,x; //判定生成、座標生成・描写用
//マップチップ
char mc[2][3]={
/*mc[0] 移動可能*/" ",
/*mc[1] 移動不可*/"■"};
//マップ構成 (最大値 25行x40列)
char map[][81]={
/*00*/"■■■■■■■■■■",
/*01*/"■ ■ ■",
/*02*/"■ ■■■■ ■ ■",
/*03*/"■ ■■ ■ ■",
/*04*/"■ ■ ■■■ ■",
/*05*/"■■ ■ ■ ■",
/*06*/"■ ■ ■ ■■■",
/*07*/"■ ■■ ■ ■",
/*08*/"■ ■ ■ ■",
/*09*/"■■■■■■■■■■"};
//マップ範囲算出
fy=sizeof(map)/81; //行
fx=strlen(map[0])/2; //列
//キャラクター初期座標指定
sty=8,stx=8;
/* 判定生成 */
for(y=0;y<fy;y++){
for(x=0;x<fx;x++){
strncpy(mapc ,&map[y][(x)*2] ,2 );
if(strncmp(mc[1],mapc,2)==0){jm[y][x]=1;} //移動不可判定
else if(strncmp(mc[0],mapc,2)==0){jm[y][x]=0;} //移動可能判定
}
}
/* 画面出力 */
while(1){
system("cls"); //画面消去
/* 座標生成、描写 */
for(y=0;y<fy;y++){
for(x=0;x<fx;x++){
strncpy(mapc ,&map[y][(x)*2] ,2);
if(jm[y][x]==0){
if(y==sty&&x==stx)
{printf("%s","○");} //キャラ表示
else if(strncmp(mc[0],mapc,2)==0)
{printf("%s",mapc );} //移動可能表示
}
else if (strncmp(mc[1],mapc,2)==0)
{printf("%s",mapc );} //移動不可表示
}
if(fx<40){printf("\n");} //fxが40未満の場合、改行
}
if(sty==1&&stx==1){
printf("ゴールしました\n");
}
/* 入力キー、移動座標出力 */
KEY(&kn,&sty,&stx);
/* 壁、マップ外への侵入防止 */
for(y=0;y<sty+1;y++){
for(x=0;x<fx;x++){
if((y==sty&&x==stx&&jm[y][x]==1)||(fy<=sty||fx<=stx)){
if(kn==0x4b){stx++;}
else if(kn==0x4d){stx--;}
else if(kn==0x48){sty++;}
else if(kn==0x50){sty--;}
break;
}
}
}
/* 終了操作 */
if(kn==0x1b){printf("▼終了します。\n") ;break;}
}
}
/* 入力キー、移動座標出力 */
int KEY(int *Kn,int *Y,int *X){
while(1){
*Kn=getch( ); //1:通常キー
if (*Kn==0){
*Kn=getch( ); //2:特殊キー
if (*Kn==0x4b){(*X)--;}// ←
else if (*Kn==0x4d){(*X)++;}// →
else if (*Kn==0x48){(*Y)--;}// ↑
else if (*Kn==0x50){(*Y)++;}// ↓
else if (*Kn==0x80){ }//特殊キー追加場所
else {continue;}
break;
}
else if (*Kn==0x1b){}// Esc
//else if (*Kn== ){} 通常キー追加場所
else {continue;}
break;
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語 3 2022/11/09 13:27
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
放射線取扱主任者令和5年度 物...
-
ガスタービンとガスエンジン、...
-
仮に自動車がAI化されても、私...
-
量子技術の社会実装、って、具...
-
低圧絶縁抵抗測定について教え...
-
配線の色の意味
-
グラフは横軸がすべり、縦軸が...
-
よろしくお願いします。 乾電池...
-
問1 複数の増幅回路を縦続接続...
-
工業 機械製図について この赤...
-
【ハケ】ダスター刷毛とラスタ...
-
ペースメーカに悪影響を与える...
-
【工業】ホツパーと漏斗(ジョ...
-
豆電球の明るさを調整したい。...
-
皆さん、おはようございます♪ ...
-
【電気設計者に質問です】なぜ...
-
乗用車にタイヤ・ホイールを取...
-
他励式インバータは交流電源を...
-
標本化周波数の図示
-
電子回路の記号
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ボタンのサイズの単位
-
物体の衝突判定について教えて...
-
Flashパブリッシュエラー
-
flash lite の質問です。flash ...
-
duplicateMovieClip
-
photoshopで書いた四角の枠の中...
-
VBScriptでMsgBoxのYesNoボック...
-
webページ上、TABフォーカス出...
-
プログラミング、アーキテクチ...
-
VBAで改行の入ったデータの正規...
-
python ボタンを押すと複数の関...
-
YOASOBI
-
RPG(AS400)の本、サイトってあ...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
ホームぺージ制作で間違って重...
-
五芒星は、悪魔崇拝とどういう...
-
else if文の順序を変えることに...
-
【VB.NET】別Formのボタンが押...
-
テキストボックスにセルの値を...
おすすめ情報