こちらに新サイトにオープンしてます。今後はそちらを更新する予定です。
ボクのBlogっぽい雑記Wikiです。‥‥‥まぁそんな感じ
Cycles_of_Lifeの日記 | 雑多なことを書きまくっている日記です。 ネタが多岐にわたりすぎてとらえどころがないのが特徴です。 ・目次 ・カテゴリー別 |
音楽 | 一番の趣味は音楽…だったと思う(^_^;) 自作曲とかヘッドフォン話とかオーディオの話とかそんな感じ |
イラスト | ほぼpixivでやってるんでこっちには描くことないんですが(^^;; |
ゲーム | 非電源ゲームからPCゲームまで幅広くゲームは好きなんだなぁ |
フライフィッシング | 音楽ができなくなって、暇つぶし的に始めたのに、今ではドハマリというw |
旅 | なんつーか、結構フラフラ一人旅に出てます。 主に国内を無計画に旅してます |
免許取り直し | やらかして運転免許を無くしたボクの、免許取り直しの顛末 密かな人気コンテンツなので残しました(^^;; |
自己紹介 | ……はい、今はYamamaya、通称まやさんと名乗っている僕の自己紹介です |
EQ話。
とうとう最新拡張OoWが入りました。
まぁ、New ZoneとかLv Capが70になったとかありますが、ボク的に注目はEpic 1.5とTask。
Epic 1.5はRaid無しでも行けるようなので、ボクのようなカジュアルゲーマーでもとれるかなぁと。Epic 2 ? そんなもんは最初からあきらめてます(ぉぃぉぃ
あとはTask。簡単に言えば、LDoNの一人版みたいなもの‥‥‥と聞きましたので、早速やってみました。
まず、出身地の猫Cityに行ってみます。そこで見つけたTask Masterに話をしてみると、「この仕事はあんたの時間を無駄にすることになりそうだ、仕事を求めるならばDLかOTに行け」的な事を言われます。
んで、言われた通りDLに行って‥‥‥おーい、Task Masterどこにいますか?
猫Cityで聞いた名前をTrackして‥‥‥ぐはぁ、なんかKCの隣なんですけど(^^;;;; つーか、あなた、目立たないところにいすぎ。
「Task Maser隠れすぎ!」ってチャットで話したら、「なんかFindのパスがおかしいしねぇ」と。‥‥‥ってか、Findきくんかい(>_<)
さて、気を取り直してHail。ふむふむ、なにやら3つのTaskがあるらしい。
「What tasks?」
NPC黙ったまま。
‥‥‥
‥‥‥
‥‥‥
続きは?
‥‥‥
‥‥‥
‥‥‥
あ゛ー、Task Windowとかって新しいUIじゃん。UIファイル変えてねぇ(>_<)
ログアウトしてUIファイルを直しました。少しだけいじっていたので、デフォルトのUIは辛いんです。diffして何が違うかなぁとか見ながらUIファイル修正。
再ログインしてTask Windowが表示されることを確認したら、なんか今日は力つきって感じだったので、PoK戻ってすぐに落ちました。
なんか、BoTとか修正が入ってTrainが頻発しているとか言う話も耳に入ってきましたね。
色々何が変わったか楽しみだけど、とりあえずまた明日って事で。
あー、ボクに「C++の定石教えてー」って言っていた方もここを見ているようなので、
さっきのハードウェア構成によって機能をわける話をちょっとはちゃんと書きます。
でも、ちょっとだけね。
本気で勉強したくなったら、有名なGoFの本「オブジェクト指向における再利用のための デザインパターン」でも読んでください。
「ハードウェアでわける」なんて話にすると複雑なので、とりあえず入力によって機能を換えるって話にします。ハードウェアでわける場合も、ハードウェアの状態を取得する関数か何かでパラメータを貰ってきてそれで機能をわけるってことなんで、やっていることは変わりません。
作るのは単純に入力した数字によって出力の文字列が変わるって物です。そんなもん機能をわけたうちに入らんやんと思うかもしれませんが、まぁ、説明って事で。
まず、インターフェイスだけを備えた抽象クラスを作ります。
class CHogeProduct { public: virtual int hogeOut()=0;//実装は書かない純粋仮想関数 };
次にこのクラスを継承して実際の機能を実装したクラスを作ります。
class CHoge1 : public CHogeProduct { public: int hogeOut()//オーバーライドして実装を書く { cout << "HOGE1" << endl; return 0; } }; class CHoge2 : public CHogeProduct { public: int hogeOut()//オーバーライドして実装を書く { cout << "HOGE2" << endl; return 0; } };
で、次がみそ。クラスを作り出すクラスを作ります。
class CHogeCreater { public: virtual CHogeProduct* create(int id) { if(id == 1) return new CHoge1; if(id == 2) return new CHoge2; return 0; } };
このクラスのcreateというメソッドがいわゆるFactory Methodというやつで、クラスを作り出す役割を担っています。
んで、実際に使うときにはこんな感じになります。
int main() { CHogeCreater inCreater; int nInput; cout << "1か2を入力してください :" ; cin >> nInput; CHogeProduct* inHoge1 = inCreater.create(nInput); //ProductクラスのインスタンスinHoge1はCHoge1なのかCHoge2なのかはnInputによって決まる。 if(inHoge1 == 0) { cout << "1か2を入れろって言ったやん(>_<)" << endl; delete inHoge1; return 0; } (*inHoge1).hogeOut(); delete inHoge1; return 0; }
1か2を入力すると、それぞれ"HOGE1"か"HOGE2"が出力されるはずです。既に書きましたが、みそは
CHogeProduct* inHoge1 = inCreater.create(nInput);
の部分で、nInputの値によってインスタンスinHoge1がどのクラスになるかが決まるわけです。
で、「ハードウェア構成によって機能をかえる」話に戻すと、このようなFactory Methodを使うとハードウェア構成によってインスタンスがどういう機能なのかを変えることが容易になるわけです。
こんな解説でわかるかなぁ(^^;;;;;
一応ソースをアップしておきますね‥‥‥
HogeHogeFactory.cpp
プログラミング話。
ハードウェア構成によって、機能をわけようと思ったら、
まぁ、C++な作り方だったら、まずはその機能のインターフェイスだけ仮想関数で並べた抽象クラスを作っておいて、
抽象クラスを継承して機能わけをしたクラスをアップキャストってのが定石よって、いうじゃな〜い。
‥‥‥が、あれ、なんかコンパイラが通らないなぁ。
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロードの解決があいまいです。
‥‥‥よー意味がわからないんですが(>_<)
うーん、どうしたんだろ
うーん、どうしたんだろ
うーん、どうしたんだろ
しばらく悩んだ揚げ句
CHogeBase inHoge = new CHoge();
‥‥‥って、あなた「*」抜けてますから。残念!!!!
ボケも程々にせんとなぁ。
でも、あれなんですわ、STL好きのボクとしては、フツーはauto_ptr使っているわけ。
auto_ptr<CHogeBase> inHoge(new CHoge());
で、アップキャストの文に「*」ははいらないんす。だから、忘れていたんですかね(他人事風味に言わんでも(^^;;;)
まぁ、そういうボケだからauto_ptr使うわけですが(汗
下の記事からネコつながりじゃないけど
(株)グリーンハウス、 ネコ型の15型液晶ディスプレイ「i-Mii」シリーズ新発売!
http://www.green-house.co.jp/news/2004/r0914a.html
ぬぉっ、確かにネコ型だよ。
これってば、猫バードをプレイするのにばっちりって事?
しかし、残念ながらゲームに使うにはちょっと性能がなぁ。
デザインは良いだけにちょっと残念。
某所に反応してみる
野良ってどこのギルドにも所属してない人?このご時勢にEciには
まだそんな奴らいるの?
ここにいます。(井上トロ風)
Microsoft Visual V++(以下MSVC++)はforループの変数のスコープが変なんです。
下記のようにforの中で変数宣言をした場合、
for(int i = 0; i < 10; i++) } //なんか処理 }
int iのスコープはforループ内だけって言うのが標準C++のルールなんですが、MSVC++はなぜか拡張機能という名目の元、スコープが一つ外にでます。
これって困るんだよねぇ、boostとか使うとおかしくなるし。
そこで、ちょっと調べたらありました、こんな方法です。
#define for if(0);else for
なるほどねぇ、これでダメなMSVC++も言うことを聞くわけか。
そんなのにこだわるのボクぐらいでしょうかね。
つーか、STLのiteratorをぐるぐるするのに、
for(vector<int>::iterator i = aHoge.begin(); i != aHoge.end(); i++)
と出来ずに、
vector<int>::iterator i; ・・・・・ ・・・・・ for(i = aHoge.begin(); i != aHoge.end(); i++)
ってなるのは地獄です。
何が地獄ってiは何のiteratorだったか忘れそうだからです(ぉぃぉぃ
vector<int>::iterator i; map<string, string>::iterator j; set<int>::iterator k; ・・・・・ ・・・・・ ・・・・・ ・・・・・ for(i = aHoge.begin(); i != aHoge.end(); i++) { //なんか処理 } ・・・・・ ・・・・・ for(j = aHogehoge.begin(); j != aHogehoge.end(); j++) { //なんか処理 } ・・・・・ ・・・・・ for(k = aHogege.begin(); k != aHogege.end(); k++) { //なんか処理 } ・・・・・
なんてコードは嫌だなぁと。
‥‥‥みなさん、そうはおもいませんか?(^^;;;;
あー、注意すべきは
#define for if(0);else for
を宣言すると上手く動かないMSのライブラリがあるらしいって事。だから自分のファイルだけにしなきゃね。
つーか、MSももうライブラリのメンテが出来てないってことっすか?(ぉぃぉぃ
とりあえず、どなたかしりませんが、ボクの職場近辺で昼休みにこのページ見に来るのは止めてください。
ちょっとびびります(^^;;;
ちょっと昼間にEQにログインしてLFGしたら、
見知らぬ外人さんからBB?(Butcher Block Mountain)のLDoN?(Lost Dungeon on Norrath : 1 Partyで出来る1ミッション形式のダンジョン)やろうとtellが。
BBにいってみると、PAL(Paladin)、RNG(Ranger)、NEC(Necromancer)、WIZ?(Wizard)、CLR(Cleric)、そしてBRD(Bard)のボクと、比較的バランスのとれた即席パーティが出来ました。
(少なくとも一人はたぶん日本人だね。日本のギルドのタグがついてましたし)
ダンジョンの中であるアイテムを22個集めるというミッションになり、ミッションの前にBuff up(強化魔法で能力アップ)。
リーダー「Puller is Bard, Pal is MT(MainTank). OK?」 ボク「Sure, Why not?」
ちょっと、やる気を見せときます。Puller?ってのはMob(直訳は群衆ですが、ゲーム中は敵とかMonsterのこと)を引っ張ってくる係。MobのLink?を切る事が出来るBardがこれをやる場合が多いんですが‥‥‥ただ、あれなんですわ、ここのLDoN?ってあんまやってないんですわ(>_<)
そんなこんなで、ミッションスタート。
序盤は単体のMobなんで、Slow song(Mobの攻撃スピードを遅くする歌)一発打ち込むだけで1 pull出来てます。
しかし‥‥‥道がわからん。マップは持っているのですが、何しろどこにMobがいるのかがわからん。
と、何やらいっぱいいる部屋に。
こういうときはLull? songで‥‥‥ってLull? songをMobがResist?(涙)、resist?されても怒らない時もありますが、今回は怒ってその辺の敵を巻き込んでInc(>_<)
やらかしましたLink?総Pull。全部で4 incです。
4 incなら‥‥‥Bardの見せ場、Mez song!!!
Mez? songで出来るのは18秒間敵を眠らせること。これで3 mobs keepして、single targetを他のみんなでタコ殴り。
これがMezerの役目っす。いや、Enchanter?が本職なんですが。
結構死にそうになったけど(いや、ボクだけ?)、なんとかさばいたあと、誰かが言いました。
「Great Mez chanter!」
‥‥‥いや、ボクenchanterじゃないし。つーか、Mez? song使わなきゃならなくなった原因ボクだし(^^;;;;
その後は、3以上Incすることは無かったですが、1 pull出来るところで、2pullになってしまったりと、何かと経験不足を痛感しました。
それでもuberな方もいたので軽々とミッションクリアしました。
ミッション的には軽々クリアでしたが、もっとうまいPuller?になりたいなあ。
解散前にボクが、
「I hope I am a good puller....」
って言ったら、
「yea, was good :)」 「i think so」 「you were fine」 「nice pulling :)」
と、慰められてしまいました。
むぅ、もっと強く上手くなりたいなぁ‥‥‥
ってーか、いい加減、もーちょい殴られても大丈夫なぐらい堅い装備が欲くなってきた。
Puller?ってば第一目標になるから、MT?がHate?を取る(憎まれてMobの攻撃目標になる)前に死にそうになるのはやばいし。
そういやずっと髪の毛を切っていなかったんすよ。
いい加減鬱陶しくなってきたので、終末は床屋に行こう‥‥‥と、思いながら仕事をしていたところに近づく白い影。
「‥‥‥えーと、あんまり仕事に関係ないことなんですけど‥‥‥」
Kさんが、なにやら申し訳無さそうな、それでいて笑いだしそうな顔で話しかけてきました。
Kさん「怒らないで聞いていただけますか?」
(「怒らないで」と前置きするって事は怒るようなことを言うわけか‥‥‥(TT)
ボク「なんすか?」
Kさん「えーとですね。○○さんの事を社内報に載せようって話があるんですが‥‥‥」
ボク「はぁ?」
話が全く見えません。
ボク「‥‥‥何の話ですか?」
Kさん「‥‥‥えーと、社内報に、○○に似ている人ってコーナーあるじゃないですか」
‥‥‥
Kさん「で、○○さんが推薦されたんで‥‥‥」
ぼく「‥‥‥誰に似ているって?」
Kさんは言いにくそうに上目遣いで僕を見ながら言いました。
Kさん「ドランクドラゴンのひと」
ボク「はぁ? ‥‥‥はぁ(テンション落ち)」
‥‥‥確かに言われたことあるよ。特に髪が鬱陶しいぐらい伸びたときに‥‥‥今か(>_<)
Kさん「‥‥‥あのー、もう合い方の人はいるんですが‥‥‥」
そこまで決まっているのかい(>_<)
ぼく「んーと、明日床屋に行って髪の毛短くしようとか思っていたんですけど」
Kさん「だめ、切らないで」
ボクに人権は無いようです。
渋々OKしましたけど、来週写真撮るってことで、かなり憂鬱なんですけど(TT)
仕事のソースコードが個人管理になっているのはまずいんじゃないかと課長に進言したら、あっさりソースコード管理話をやる人がボクになりそう(>_<)
つーか、仕事としてソフト組み始めて1月たたない人に、指摘されることじゃないと思うんですが(^^;;;
まぁ、その間もボク個人はCVSでソースコードのバージョン管理をしていたし、NPかな。
つーか、コーディング規則も作らんとあかんような気がしてきた。
なんつーか、ハンガリー式とかメンバ変数にはm_つけろとか、変数名関数名は省略するなとか、そういうところから?
ちょっと気が重い。
インデントルールとかどうしよう。
ボクはEmacsデフォルトなインデントなんだよなぁ。
つーか、Emacs(Meadowだけど)使っているのってボクぐらい?
VC++のエディタを標準にとか言う話になったら泣くなぁ。
補完機能とかTAGジャンプとか無いエディタは耐えられん。「A」の左隣のキーはCtrlだしさ(謎