StarCraft2熱闘編

いやー面白いです。
とりあえず、キャンペーンは一番簡単なモードで終了しました。
おそらくRTS初心者でもクリアできる難易度だと思います。
自軍はどんどん強化されていくので、その強化分が大きいです。
どの強化も対戦では使えないものですがーそれぐらい強力すぎるw
SC1のユニットも一部参加してます、シナリオ選択によっては登場しないユニットもありました。
すべてのシナリオをみるのは結構時間かかりそうな感じです。
あと、難易度を上げるとどれぐらいかわるのかも気になるところ・・・


ネット対戦も50戦ぐらいやりました。
ボタン1つ押すだけで対戦できるのは気楽ですね。
チャットが英語なのが問題なんですがー上級者じゃないとそんな余裕もないですから、
開幕に「glhf(Good Luck, Have Fun)」
終了時に「gg(Good Game、負けを認めたほうが先に言う)」
この2つだけでも、それなりになんとかなるもんです(^^;


対戦のマッチング(対戦相手の自動選択)がよくできているような気がします。
おおよそ同じような実力の人が相手に選ばれてきます。
最初の5試合で初回実力判定がされて、ダイヤ、プラチナ、ゴールド、シルバー、ブロンズのリーグに振り分けられます。
その後対戦を繰り返し、実力が上がると、上位リーグに移動するようです、また下位リーグに移動することもあるようです。


私は、一番下のブロンズリーグをさまよっています。
やはり対戦は面白いです、イロイロな戦術、戦略を体験できます。
それを体で覚えていくことで、自分もうまくなっていく感じです。
リプレイも保存できるので、負けた時、なにがいけなかったのか反省会が開けます。
特に同種族同士の対戦は勉強になることが多いですねぇ。
まぁ、ザーグ使っている人少ないみたいで、他の種族に比べると遭遇率が低いのですが(^^;


序盤の攻防はそれなりになってきたような気がするのですが、中盤移行がまだまだ甘いようで、油断すると一気につぶされます。
初心者相手なら、序盤のラッシュで簡単に勝ってしまうのですが、それではうまくならない(^^;
ラッシュしない練習をしていますが、攻めるタイミングがまだつかめていないので、伸び悩み中。

StarCraft2入手

海外で27日発売、通販で届いたのが30日だったから思ったより早かった。
もっともダウンロード販売もされているので、それなら発売と同時に遊べたわけですが(^^;
先行ダウンロードが可能だったので、本当に解禁と同時に遊べたんですねぇ。
パッケージ版を選んだのは、英語が苦手だからダウンロード版買うのが怖かったんですねぇw


まぁ、結果だけ言うと、大差なかった・・・
バトルネットのアカウントを作るために手続きが必要で、その手続きを終了させると、ダウンロードが可能になります。
ゲーム本体はいつでもダウンロードでき、IDだけあればOKだったと(^^;
でもって、バトルネットの手続きは英語・・・
名前とか住所とか、私にもなんとかなるレベルでよかった。


肝心のゲームですがー
もうね、画面がめちゃめちゃ綺麗になってる、これだけでも感動w
操作などは、初代や他のRTSやっていれば困らないですね。
全て英語ですが、ユニットの説明に関しては、単語からイメージをもって実際に操作することで理解できるものが多いです。
ただ、キャンペーンでの綺麗なムービーシーンは・・・なにを言っているのかわからんw
ブリーフィングもそう、なにを言っているのかわからんw
細かいストーリーはわからない状態ですが、ゲーム的にはまったく困らないし、ゲーム内で大枠のストーリーが把握できる感じ。
キャンペーンモード、初代に比べてかなり凝ってます。
StarCraftといえばネット対戦ゲームなわけですが、RPG要素、キャンペーン専用ユニットなど対戦目的以外の楽しみが増えてます。
シナリオを進めるともらえるポイントで強化していくような感じです。
これが、魅惑的な強化が多くて、いい感じ・・・まぁ、その分敵も強くなるこが予想されるんだが(^^;;;;


本命の対戦はどうなんだーってことですがー
まだ、対人戦やってないw
ユニットや建物が結構変わっていて、覚え直す必要がでています。
プレイ感は紛れも無く、StarCraftなんですが、戦略、戦術はまったく別物です。
ゲームバランスの調整がどれぐらいなのか、まだ把握できない。
COM相手に対戦もできるんですが、HARDぐらいになると、けっこう強いw
いや、特別むちゃな攻撃してくるわけじゃないから、自分がヘタなだけなんだけどw


キャンペーンも面白いし、対戦も面白いので、どう進めるか悩むw
期待を裏切らなかった出来で満足してます。
日本でも盛り上がって欲しいなぁ、そうすれば日本語対応も将来的に考えてもらえるのに(^^;
現状盛り上がらない理由の1つが英語の壁ですねぇ。
初代StarCraftが好きだった人には、かなりお薦めできます。

ボトムアップアプローチ?

個人的に気になっているので、率直な意見を募集したいです。
「な!」のほうに書いたボトムアップアプローチなんですがー


http://indori.blog32.fc2.com/blog-entry-761.html


一般的な用法として、ここに書かれている内容って、ボトムアップなんですか?


>ボトムアップって先にできることが決まっていて(細部)、そのできることを組み合わせて大きなものを作るんだよね。
>記事みると、時系列にやること並べているだけに見えるんだけど・・・
>順番依存した内容ばかりだから、やらなくちゃいけないこと(全体)が先に決まっていて、どう実現するかー
>やることを細かくしているわけで、上から下、つまりトップダウンじゃないのかなと思ったわけです。


こんな感じで思っているんだけど・・・
特に肯定も否定もされてないので、本当のとこはどうなのかがわからなかったり(^^;;;;
もっと直球的なイメージだと、出来合いの部品を寄せ集めて組み上げているようなイメージなんだけど・・・
下から上に向かって完成するってのが基本だと考えているんですが・・・どこか違うんかな?
設計の話として釘打たれてるから実装時の話ではないですよね・・・なんかい見てもトップダウンに見える(^^;;;;;;;

OpenMP変数編2

続きになりますがー
Jittaさんのとこみて、変数について、勘違いしていた部分があったので、メモ的に。


「#pragma omp parallel」の中で宣言されている変数は、プライベート扱いだったんですねぇ。
いや、当たり前といえば当たり前なのかもしれませんが、指定がないものは共有になると思い込んでいたから意外でした。
staticな変数は、どこで宣言しても共有されるみたいですねぇ。


どちらかといえば、これらのことが基本だったような(^^;
あまり、中で変数宣言しているようなサンプルを見ていなかったんですかねぇ、変数宣言の位置を注意してみたことなかったです。

OpenMP変数編

まぁー
http://codezine.jp/article/detail/5290
ここを見て、酷いサンプルだなーと思ったんだけど・・・
ange1さんの
http://d.hatena.ne.jp/ange1/20100723/1279903236
これを見て、思っていた以上に酷かったことがわかったw


#pragma for


これなんか、「ompを省略できるのかーでもVS2005じゃエラーになるなぁ」とか思ってたw
lastprivateって、本当はどんな使い方するのか?ってほうに興味が行ってたんですが・・・
lastprivateでどうやって初期値設定するのか、わからなかったし、結果を受け取ってどうするのかも思いつかなかった。
これまた、ange1さんが紹介していた仕様書でスッキリした。
そうか、ループに使ってる変数を指定すれば意味がでるんですねぇ。

int i;
char tmp[11];
#pragma omp parallel for lastprivate(i)
for (i=0;i<10;i++)
{
    tmp[i]='w';
}
tmp[i]='\0';

こんな感じですかねぇ、コンパイル環境がないので動作確認してませんが(^^;
わかってしまえば、よくあるコードを実現するだけのものだったわけですねぇ。
元記事では、変数もイロイロ説明されていたんですが・・・
わかってから見ると、簡単なものを複雑に説明されているような感じでした。


結局のところー同じ名前で同じ型の別変数をスレッド数分、生み出しているだけだったんですねぇ>private
だから、なにもしなければ初期化されていないだけと・・・
んでもって、元の変数の値を初期値として使うのが、firstprivate。
その逆で、使い終わったら、元の変数の値を書き換えるのがlastprivate。
そして、特になにも指定しなかった変数はsharedとして扱われるわけですね。
例外で#pragma omp parallel forで指定されたループ変数はprivateになるっと。

競合をなくす簡単な方法なんでしょうねぇ>private
同じ名前なのは、OpenMPが使えない環境での互換性を保てるからってことかな。
上のlastprivateサンプルを考えてみて、その辺の利点がわかったような気がする。
よくできてるよなぁ。


そうそう、競合で思い出した。
ange1さんの指摘している、sharedサンプルのバグ。
てっきり排他処理されているものだと思っていたら、実は違ったんですねぇ。
実際に、元記事のループを10から1000に変えてみたら見事にバグりましたw
ループで使っているiも共有されてしまうから、結構カオスな感じかなぁ。
lastprivateに気をとられて気が付かなかったけど、#pragma forが使われているサンプルは全滅ですな。
よくみると、結果の数値がおかしかったんですねぇ。
sharedサンプルの場合、0〜9の合計なんだから並列に計算したって答えは45にならないといけないわけで・・・
90になっているのがおかしいんですよねぇ・・・まぁ、これ偶然の結果なんですが・・・
lastprivateサンプルの場合は、プライベートなんだから、45よりも小さくなるはず・・・ですよね。
reductionのサンプルもバグが判りやすいですね、合計が450になってるから(^^;
これ、450になってるのも偶然なんですよねぇ、iが共有されているから数を増やすとさらにバグるw


結果を見れば、「並列処理特有のバグ」をほとんどのサンプルに持ち込んでいる悲しい記事だったと・・・
おかしな結果が綺麗な数字になっていたために、見逃してしまったんでしょうねぇ。

プロフィール書いてみた

ゲームのフレンド募集に良いかなと思ってプロフィールをさわってみた。
ニックネームって項目があったんだがー
ひょっとして、ここにSodaって入れておけばよかったんだろうか・・・
とりあえず、入れてみた。
どこまで変化しているのか、よくわからんw