件名のとおりこのゲームのプログラムに構造体を使いたいのですが、自分は構造体が得意ではなくて困っています。
皆さんならどのようにしますか?
(迷路の内容はまだできてないです。)
#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*/"■ ■",
/*10*/"■ ■",
/*11*/"■ ■",
/*12*/"■ ■",
/*13*/"■ ■",
/*14*/"■ ■",
/*15*/"■ ■",
/*16*/"■ ■",
/*17*/"■ ■",
/*18*/"■ ■",
/*19*/"■ ■",
/*20*/"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■"};
//マップ範囲算出
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;
}
このゲームに構造体を使いたいのですが
Re: このゲームに構造体を使いたいのですが
とりあえず、コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつきちんとインデントをしていただけると、見やすくて助かります。
かつきちんとインデントをしていただけると、見やすくて助かります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: このゲームに構造体を使いたいのですが
あちらを書き込み不能とさせていただきましたので、こちらに返答したします。
「再び このゲームに構造体を使いたいのですが • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=14392#p114461
この質問だと答えを貼って下さいでは禁止事項の課題の丸投げと思われてしまいかねません。
なので、構造体を何がわからないか質問して頂ければと思います。
あるいは正しい使い方が分からなくとも無闇に使っていれば、そのうち分かって来るものでもあります。
なので、エラーが出ても構わないので分かる範囲で使ってみて、そのコードを使って質問してみては如何でしょうか?
「再び このゲームに構造体を使いたいのですが • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=14392#p114461
この質問だと答えを貼って下さいでは禁止事項の課題の丸投げと思われてしまいかねません。
なので、構造体を何がわからないか質問して頂ければと思います。
あるいは正しい使い方が分からなくとも無闇に使っていれば、そのうち分かって来るものでもあります。
なので、エラーが出ても構わないので分かる範囲で使ってみて、そのコードを使って質問してみては如何でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。