忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[20] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10]
×

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

クソース。
気になりだしたら気になるところ?
そろそろ明日にまわしたいけど、明日見るソースは奇麗なほうがいい。



ダウンロード  Entry010.zip(2009.07.30)


マジックナンバー。
自分の世界で統一されてるような気はするんだけど、果たしてこのプロジェクトが終わって
1週間後の俺に、Result(結果)の2番が何で3番が何か言い当てることができるだろうか。

実際、すでに街の処理と戦闘の処理で番号がぶれてるんだから怖い。

enum列挙子で、この乱世のプログラムを一応の形だけでも統一させておく。


main.cpp


#include "Unit.h"
#include "Histgram.h"

enum Result
{
    NONE = 0,
                    // 街滞在時
    DEPARTURE,      // 出発、旅立ち
    STAY,           // 宿に泊まる

                    // 戦闘時
    WIN,            // 勝利
    RUNAWAY,        // 逃亡
    LOSE,           // 敗北

                    // システム共通
    ABORT,          // 強制終了
    UNKNOWN         // 不明
};


int NormalAttack(Unit &lst, Unit &rst)



既存箇所の変更
main.cpp

Result Battle(Unit &player, Unit &enemy)
{
    int cnt = 1, cmd, cmdcnt;
    Result res;

    while(1){
        cmdcnt = 0;
        Sleep(600);
        cout << "\ncnt:" << cnt << "\n";
        player.ShowStatus();
        enemy.ShowStatus();
        while(1){
            cout << "どうする?(1:攻撃 2:逃げる 9:終了):";
            if(cmdcnt){
                cin.clear();
                cin.ignore();
            }
            cmd = 0;
            cin >> cmd;
            cout << "\n";
            if(cmd == 1) break;
            if(cmd == 2) {
                cout << player.getName() << "は逃げ出した!\n";
                break;
            }
            if(cmd == 9)break;
            if((++cmdcnt)>10){cmd = 9;break;}   //無限ループ防止
        }
        if(cmd == 9){res = ABORT;   break;}
        if(cmd == 2){res = RUNAWAY; break;}

        if(NormalAttack(player,enemy)){res = WIN;  break;}
        if(NormalAttack(enemy,player)){res = LOSE; break;}


        if((++cnt)>100)break;       // 無条件ループなので、無限ループ防止
    }

    return res;
}

int main()
{
    Result res;
    int cmd,cmdcnt;
    srand(static_cast<unsigned int>(time(NULL)));


:  ← このへん、途中省略っぽいニュアンス。理解してくれい。


        // 戦闘
        for(int i=0;i<5;++i)
        {
            enemy = eList[i];
            res = Battle(player,enemy);
            if(res==WIN){         // プレイヤー勝利
                cout << "勝ち。\n";
            } else break;
        }
        if(res==WIN){
            // 戦闘勝利で終了してるってことは、大勝利の予感
            cout << "\n\n*+*+*  完 全 勝 利 !!  *+*+*\n";
            cout << "勇者 " << player.getName() << " の名を永遠に称えるがよい。\n\n";
            break;  // ゲーム終了
        }
        if(res==LOSE){
            cout << player.getName() << " は死亡した。\n\n-GAME OVER-\n";
            break;  // ゲーム終了
        }
        if(res==ABORT) break;    // 「終了」コマンド選択
    }

    cout << "\n\n終了。" << endl;
    return 0;
}



なんか完全に勇み足だったような。

ちょっと整理してみたふうな感じだけど、プログラムが長くなっただけ。
全体を支配している変数 res(結果)はこんな感じでひとつにまとまったけど、
入力部分の cmd 変数を、このres世界に引きずり込むことはできなかった。

あくまでも表示どおり、「1:戦闘 2:逃げる 9:終了」であって、この表記がぶれるのは俺は嫌だ。

あ。
直接数字を入力するタイプじゃなく、グラフィック使って、上下カーソルでコマンド選ぶタイプなら
ボタンの裏にどんな数字書いてあるかわからないし、enumResult世界の律に入れることが
できるかな。できるんだろうな。
そうしたほうが美しいよな。



ダウンロード  Entry010.zip(2009.07.30)
PR


忍者ブログ [PR]
カレンダー
12 2025/01 02
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
フリーエリア
バーコード
ブログ内検索
P R
アクセス解析
カウンター