なんとなくだらだらと。方向性はまだ決まってない。
当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。
本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html
DX Library Copyright (C) 2001-2008 Takumi Yamada.
× [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 |
カレンダー
カテゴリー
フリーエリア
最新記事
(01/29)
(01/28)
(01/26)
(12/28)
(12/27)
(12/25)
(12/20)
(09/09)
(09/09)
(09/09)
(09/08)
(09/08)
(09/08)
(09/06)
(09/05)
(08/27)
(08/27)
(08/27)
(08/25)
(08/23)
ブログ内検索
P R
アクセス解析
カウンター
|