再び  このゲームに構造体を使いたいのですが

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

再び  このゲームに構造体を使いたいのですが

#1

投稿記事 by C太郎 » 6年前

すみません。先ほど出したのですがcodeでくくってくださいと言われたので、貼り直しました。初めてだったのでよく使い方を理解していませんでした。こんな感じでいいのかわかりませんが駄目だったら指摘ください。

ここから本題です。
このプログラムで構造体を使うならどうしたらいいですか。皆さんの考えたプログラムを張ってくれると助かります。(迷路の内容は未完成です)


コード:

#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;
}

初級者
記事: 200
登録日時: 9年前

Re: 再び  このゲームに構造体を使いたいのですが

#2

投稿記事 by 初級者 » 6年前

とりあえず、構造体を使った簡単なプログラムを
いくつか書いてみて、構造体の概念を
じゅうぶん理解することをおすすめします。

苦手意識を払拭することが先決でありましょう。

その上で、そのプログラムでそもそも構造体を
使う必要があるのかどうか、使うとしたら
どう使うか、については、プログラム全体の
根幹ともいうべきデータ構造に関わる話ですので、
ぜひご自分でお考えになってみてください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 再び  このゲームに構造体を使いたいのですが

#3

投稿記事 by softya(ソフト屋) » 6年前

むやみにトピックを立ち上げることは過去ログとして有効性を失いかねないのでご遠慮頂いております。
元のトピックで続けてください。
「このゲームに構造体を使いたいのですが • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=14390

こちらは書き込み不能にさせていただきます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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