忍者ブログ
ADMINWRITE
日々の覚え書き。 まだまだぴよぴよ。 最近は勉強過程をさらして恥かいてます。
[22]  [21]  [20]  [19]  [18]  [17]  [16]  [15]  [14]  [13]  [12
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

というわけで、とある有名なゲーム(そう○ばん)っぽいものを作成しました。
「ゲームプログラマになる前に覚えておきたい技術 by 平山尚(株式会社セガ)」という本に載っていた最初の課題です。

意気揚々と作ってみたわけですが。。。。。
恥だね、これ。
バグも発見されてしまいましたし。
機会があれば、もう一度、書き直したいです。

しかし、またしてもクラスと関数を勘違いしてしまったおいら。
クラスを使うな=関数を使うな、と、思ってしまい、mainにすべてぶち込んでる謎。
師匠!こんなプログラム書く子でごめんなさい!!!



#include<iostream>
using namespace std;

//にもっくん@ゆうひ
int main()
{
    char cView[5][8] ={""};
    int i = 0;
    int j = 0;
    char c[8];
    int iManx,ikariManx;
    int iMany,ikariMany;

    bool bFlg = false;
    bool bPpFlg = false;
    bool bloopflg = true;
    bool bOoFlg = false;

    //最初の物の位置
    ///ゴール位置
    cView[1][2]='.';
    cView[1][3]='.';
    
    ///人の位置
    iManx = 1;
    iMany = 5;
    cView[1][5] ='p';

    cView[2][2]='o';
    cView[2][3]='o';

    while(bloopflg)
    {
        if(bFlg)
        {
            //入力
            cout<<"Push key! w:up a:left s:right z:down "<<endl;
            cin >> c;
        
            //判定
            i=0;
            while(c[i])
            {
                //pとPで違う
                if(cView[iManx][iMany]=='p')
                {
                    //ゴールじゃなかったらfalse
                    bPpFlg=false;
                }
                else
                {
                    //ゴールだったらtrue
                    bPpFlg=true;
                }
                

                ikariManx=0;
                ikariMany=0;

                switch(c[i])
                {
                    case 'a':
                        //左
                        ikariMany=-1;
                        break;
                    case 's':
                        //右
                        ikariMany=1;
                        break;
                    case 'w':
                        //上
                        ikariManx=-1;
                        break;
                    case 'z':
                        //下
                        ikariManx=1;
                        break;
                    default:
                        break;
                }

            if(cView[iManx+ikariManx][iMany+ikariMany]=='o')
            {
                bOoFlg=false;
            }
            else
            {
                bOoFlg=true;
            }
            switch(cView[iManx+ikariManx][iMany+ikariMany])
            {
                case 0:
                    {
                        //空白だったら
                        if(bPpFlg)
                        {
                            cView[iManx][iMany]='.';
                        }
                        else
                        {
                            cView[iManx][iMany]=NULL;
                        }
                        cView[iManx+ikariManx][iMany+ikariMany]='p';
                        iManx+=ikariManx;
                        iMany+=ikariMany;
                        break;
                    }
                case '#':
                {
                    //壁だったら
                    break;
                }
                case '.':
                    {
                        //ゴールだったら
                        if(bPpFlg)
                        {
                            cView[iManx][iMany]='.';
                        }
                        else
                        {
                            cView[iManx][iMany]=NULL;
                        }
                        
                        cView[iManx+ikariManx][iMany+ikariMany]='P';
                        iManx+=ikariManx;
                        iMany+=ikariMany;
                        break;
                    }
                case 'O':
                case 'o':
                    {
                        //ゴール後の荷物だったら
                        ///その隣の値は?
                        switch(cView[iManx+(ikariManx*2)][iMany+(ikariMany*2)])
                        {
                            //空白
                            case 0:
                                {
                                    cView[iManx+(ikariManx*2)][iMany+(ikariMany*2)]='o';
                                    if(bOoFlg)
                                    {
                                        cView[iManx+ikariManx][iMany+ikariMany]='P';
                                        cView[iManx][iMany]='.';
                                    }
                                    else
                                    {
                                        cView[iManx+ikariManx][iMany+ikariMany]='p';
                                        cView[iManx][iMany]=NULL;
                                    }                                    
                                    iManx+=ikariManx;
                                    iMany+=ikariMany;
                                    break;
                                }
                            //ゴールだったら
                            case '.':
                                {
                                    cView[iManx+(ikariManx*2)][iMany+(ikariMany*2)]='O';
                                    if(bOoFlg)
                                    {
                                        cView[iManx+ikariManx][iMany+ikariMany]='P';
                                    }
                                    else
                                    {
                                        cView[iManx+ikariManx][iMany+ikariMany]='p';
                                    }
                                    cView[iManx][iMany]=NULL;
                                    iManx+=ikariManx;
                                    iMany+=ikariMany;
                                    break;
                                }
                            //壁
                            case '#':
                            //荷物だったら(これはなさそうですが)
                            case 'O':
                            case 'o':
                                {
                                    break;
                                }
                            default:
                                break;
                        }
                        
                        
                        break;
                    }
                default:
                    break;
                }
            i++;
            }
        }

        //壁の作成
        ///上下の壁
        for(i=0;i<8;i++)
        {
            cView[0][i]='#';
            cView[4][i]='#';
        }

        ///左右の壁
        for(i=1;i<=3;i++)
        {
            cView[i][0] ='#';
            cView[i][7] ='#';
        }

        //表示
        for(i=0;i<5;i++)
        {
            for(j=0;j<8;j++)
            {
                cout<<cView[i][j];
            }
            cout<<'\n';
        }
        bFlg = true;

        if(    cView[1][2]=='O' && cView[1][3]=='O')
        {
            bloopflg = false;
        }

    }

    cout<<"OMEDETOU!!"<<endl;
    
    return 0;
}
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
最新コメント
[12/13 sakushisyou]
[10/19 sakushisyou]
[08/26 ゆうひ]
[08/13 sakushisyou]
[11/23 ゆうひ]
最新トラックバック
プロフィール
HN:
ゆうひ
性別:
非公開
自己紹介:
はやく一人前になりたーい(謎)
成長していければいいな。。。
成長してるよね?
自称・メイドプログラマー(修行中)
料理の味付けはおおざっぱ。
バーコード
ブログ内検索
カウンター
クリック募金♪
世界樹の迷宮

Designed by 湯月   Material by ウタノツバサ
Copyright c [ ゆうひ堂本舗 ] All Rights Reserved.

忍者ブログ [PR]