Xamarin.Forms 「縄神様」(モグラ叩き風味ゲーム) 機種依存コードなし(今のことろ)
リポジトリできました
Android | iOS | Windows Phone |
![]() |
![]() |
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を作成しています。
各プラットフォームのプロジェクトには配置していません。
//画像のソース(全ホール用を、ここで確保して共有する) 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; });
つづく・・