読者です 読者をやめる 読者になる 読者になる

SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.Forms 「縄神様」(モグラ叩き風味ゲーム) 機種依存コードなし(今のことろ)

【 Xamarin 記事一覧 】


リポジトリできました

Android iOS Windows Phone
f:id:furuya02:20141119032334p:plain:w150 f:id:furuya02:20141119032332p:plain:w150 now working

「縄神様」とは、モグラ叩き風のゲームアプリです。
ゲームなんてまともに書いたことないので恥ずかしい限りなのですが、これもXamarin学習の一環として・・・(強者の方々の突込みに期待して)

まだまだ、まともに動作していませんが、とりあえず、リポジトリ作成しました。


furuya02/Xamarin.Forms.Nawagamisama · GitHub

Xamarin.Formsの学習が目的ですので、可能な限り、機種依存のコードを書かないことを目標にしています。
現時点では、PCL以外はいじっていません。

一応、手元のAndroid(実機)では、遊べているのですが、エミュレータでは、ちょっときつい感じです。


ゲームのルール

現時点でのルールです。

(1) スタートボタンを押すと開始し、30秒間一本勝負です
(2) ランダムに出現する「縄神様」をタッチします
(3) タッチに成功すると10点~20点が加算されます
(4) 時々、WebMatrixマンに変装した「縄神様」も登場し、これをタッチできると100点が加算されます
(5) せっかく「縄神様」が出現して下さっているのに、タッチしなかったらー50点です(ノンビリしていると、スコアはたちまちマイナスになります)

画像配置

画像は、PCLにリソースとして配置しFromResourceでImageSourceを作成しています。
各プラットフォームのプロジェクトには配置していません。

f:id:furuya02:20141119034512p:plain

    //画像のソース(全ホール用を、ここで確保して共有する)
    var imageSources = new List<ImageSource>();
    for (var i = 0; i < ImageMax; i++){
         imageSources.Add(ImageSource.FromResource(string.Format("nawagamisama.Images.image{0}.jpg", i)));
    }

タイマ処理

タイマ処理は、機種依存コードかなと考えていたのですが、Xamarin.Forms.DeviceにStartTimerというのがありました。
現在は、500ミリ秒間隔で全オブジェクトをアニメーションし、スコアの表示をしています。

//タイマ処理
    Device.StartTimer(new TimeSpan(10000 * 500), () =>{
        if (_play){
            var span = _time - DateTime.Now;
            var score = 0;
            foreach (var hole in _holes) {
                Task.Run(() => Device.BeginInvokeOnMainThread(() => hole.Animation()));
                score += hole.Score;
            }
            if (span.Ticks < 0) {
                 //GAME OVER
                 _play = false;
                 _button.Text = string.Format("GACE OVER  SCORE:{0}  [restart]", score);
                 return true;
            }
            _button.Text = string.Format("{0:D2}:{1:D2} SCORE:{2}", span.Minutes,span.Seconds,score);
       }
       return true;
   });

つづく・・


【 Xamarin 記事一覧 】