忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[42] [41] [40] [39] [38] [37] [36] [35] [34] [33] [32]
×

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

開発なんかで最初期から付き合ってると、まわりくどいことになってても
割と「そういうもの」で済ましてしまいがち。

そろそろ開発も大詰め。
ユーザー視点で、初めてこれを触った人の気持ちになって遊んでみる。
ちょっとでも気になるところがあれば直していかないと。


どうでもいいけど、eモバイルのデータ通信が調子悪い。
天気が悪いといつもつながりにくいんだけど、今日は数分繋がって30分待ちとか
使い物にならない状態が続いている。

待ち時間がわかってたら他のことできるんだけど、いつ繋がるかわからない状態で
生殺しが続くとイライラしてくる。



ダウンロード  Entry029.zip (2009.08.05)

したらば掲示板 コンソールRPGを作る
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42268/1249315551/-100




1.無敵モードを導入してみる

無敵とは言っても、ダメージ受けるしちゃんと死ぬ。
だけど、死んでもデータは消えずにセーブ箇所まで戻ることができる。


main.cpp


void InitPlayer(Player &player)
{
    ifstream ist("savedata.dat");
    if(ist) {
        string name;
        int HP, Atp, Dfp, Agi, Money;

        ist >> name >> HP >> Atp >> Dfp >> Agi >> Money;
        ist.close();

        player.Init(name,HP,Atp,Dfp,Agi,Money);

        cout << "\n\n前回のセーブデータがあります。\nロードしますか?(Y/N):";
        char c;
        cin >> c;
        if(c == 'y' || c == 'Y') return;
    }

    string name;
    cout << "あなたの名前を入れてください:";
    cin >> name;

    if(name[0]=='#')cout<<"ムテキ!\n";

    player.Init(name, 30, 8, 5, 6, 0);
}


Result Patrol(Player &player, Unit (&eList)[MonsterMaxNum], int EnemyNum)
{
    Result res;
    Unit enemy;

    cout << player.getName() << "は、街を出て荒野に向かった。\n";

    for(int i=0; i<EnemyNum; ++i)
    {
        Sleep(800);
        enemy = eList[i];
        cout << "\n" << enemy.getName() << "が あらわれた!\n";
        res = Battle(player,enemy);
        if(res==WIN){         // プレイヤー勝利
            cout << "勝ち。\n";
            player.AddMoney(enemy.GetMoney());
        } else break;
    }
    if(res==WIN){
        // 戦闘勝利で終了してるってことは、大勝利の予感
        cout << "\n\n*+*+*  完 全 勝 利 !!  *+*+*\n";
        cout << "勇者 " << player.getName() << " の名を永遠に称えるがよい。\n\n";
        res = ABORT;
    }
    if(res==LOSE){
        cout << player.getName() << " は死亡した。\n\n-GAME OVER-\n";
        if(player.getName()[0]!='#') DeleteFile("savedata.dat");
        else cout << "フッカツ!\n\n";

        res = LOSE;
    }
    return res;
}




Init側の修正は正直不要。
Patrol側で、死亡時にちょいと判定、名前の先頭が「#」だったらセーブデータを消さない。

変更箇所少なくても、ソースリスト大きめに貼るとすごく見やすい気がする。
その道の人なら、関数ごと見せたほうが全体の流れの変化が見えるからね。



2.いちいちゲーム終了しない
ゲームオーバーの度に閉じる。もうちょっと遊びたい人が毎回起動するのは面倒だろう。
ゲームの流れ自体が変わるので、けっこう大がかりな対応になる。

main.cpp


int main()
{
    Player player;
    Unit   eList[MonsterMaxNum];
    int EnemyNum,res;

    srand(static_cast<unsigned int>(time(NULL)));
   
    EnemyNum = InitEnemyList(eList);
    if(EnemyNum==0) return 0;

    while(1){
        res = NONE;
        InitPlayer(player);

        while(1){
            res=TownEvent(player);                       // 街
            if(res==ABORT) break;

            res = Patrol(player,eList,EnemyNum);        // 戦闘
            if(res==ABORT || res==LOSE) break;

        }
        if(res==ABORT)break;
    }


    cout << "\n\n終了。" << endl;
    Sleep(1500);

    return 0;
}



せっかく奇麗だったメイン部分が、またちょっと間延びした。
ゲームオーバー ~ プレイヤー初期化・ロードを繰り返すんだから、そのために
PlayerInit()をループの中に入れないといけない。

そのためだけに多重ループになってしまうぐらいなら、gotoラベルジャンプを
使いたくなる。今回はそのほうがすっきり収まる気がする。

とか言っても、こうやって桁下げしておけば、InitPlayer()がループの中にあって、
何度も呼ばれるんだなと明示できてるようにも見える。



3.ヒストグラムいらない
いつかバランス調整のために使うかと思ってたけど、結局はプレイ回数重ねて
感覚でやっつけてしまったので、ただの盲腸になってしまった。

main.cpp


#include <iostream>
#include <string>
#include <sstream>
#include <stdlib.h>     // 乱数取得に必要
#include <time.h>       // rand()の初期化に必要
#include <windows.h>    // 表示のウェイトのためだけに。
#include <list>
#include <fstream>

using namespace std;

#include "Unit.h"
#include "Player.h"
#include "OrderList.h"
//#include "Histgram.h"

const int MonsterMaxNum = 99;

enum Result
{
    NONE = 0,


もうちょっと出来ることあるけど、とりあえずは形になったかな。



ダウンロード  Entry029.zip (2009.08.05)

したらば掲示板 コンソールRPGを作る
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42268/1249315551/-100


PR


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