Androidアプリゲームを制作

こんにちは!よしときです。 今日はAndroidの勉強のまとめとして二つの簡単なゲームを作りました。 まず一つ目が横スクロール型のアクションゲームです。 操作はタッチするとジャンプをするだけで、穴に落ちたりブロックに当たらないように進んでいくもので、当たり判定もステージも稚拙ですが、なんとか動作することができました blog 2015-02-02 16.07.57 使った画像は適当に拾ってきた物なのでアレですが、なにより実際に作って動いたってことが嬉しいですね! 今回の構成として シーン1:タイトル画面 シーン2:プレイ シーン3:ゲームオーバー という三つの構成で動いています。それぞれif文やelse if文でシーンをわけ、さらにその中で分岐していくってイメージで作ってました。個人的にinit変数ってのがいまいち分かりづらいです。。   ソースは長いですがこんな感じ メインアクティビティはビューを生成しているだけなので割愛します。 書いてると訳分かんなくなりそうなんですけど、コメントを参考に大きく見ると結構分かりやすい構成です。 マップの生成に配列、ランダム、確率、なんかを使っていて、こういうところに出てくるのだなぁという感想です。   また、ジャンプの処理なんかもそうですが、ただタッチするとジャンプ。だけでなくどんなときにfalseなのかってのもしっかり書かないといけないのだな。ということが分かりました。 その他に速度にあたる部分変えてみたりして遊んでみました。しかし、当たり判定だけはうまく操作できない、、難しいです。。   ひとまずこんな感じでアクションゲームを作った後は簡単なRPGを作ってみました。   RPGはマップ画面と戦闘画面の二つで、 シーン1:マップ シーン2:敵出現 シーン3:コマンド入力 シーン4:攻撃 シーン5:防御(攻撃をうける) シーン6:逃げる という6つとそれに加えてゲームオーバーとスタートに分かれます。 マップは二重配列で座標ごとに木、平地、家、城を配置してつくってあり、主人公は座標で保持しています。 敵と主人公はそれぞれパラメータがあり、攻撃力、守備力、経験値などでレベルが上がって強くなったりもします。 この辺の計算はやってみると分かるんですが、本当ゲーム作ってる人ってすごいなと。 まさに計算だし、それでいて楽しいと感じる具合を決めるのが難しい!! また出現率も今回は簡単なものにしましたが、これも凝ったら大変だろうなぁという印象です。 あ、画像載せます。これも適当な画像を拾ってきて作ったのです。使ってすいません。(一応フリーとあったので、、) blog 2015-02-04 12.18.25 blog 2015-02-04 12.19.25 blog 2015-02-04 12.19.15 blog 2015-02-04 12.19.08   コマンドは画面の左半分か右半分かをタッチすることで判断しているので、画面サイズを取得して、その半分のうちどちらをタッチしたか、という処理をしています。   これも、しっかり動いた上に、どういう風に作っていくのか。ということが分かったのでとても楽しくできました。 しかし、、長い。。これは一人で大きいゲームを作るのは無理だな。と実感しました。   これまたソースを これもメインはビューを生成しているだけなので省いてます。   恐らくこんな一ページで書くことはないのだろうなぁ、、、と思いながらもとりあえず本に従って書いてみましたがどうなんでしょうか。。     最近分かったことですが、本によって結構書き方がまちまちだったりするので、開発環境(会社)によって決まりがあったり、エンジニアによって癖があるのだな。ということです。 色々な本で学んで一番最適な方法を探していこうと思います。

id-entity.jp

3件のコメント

  1. はじめまして。
    RPGの方で使われているGraphicsというオブジェクトはなんですか?
    やってみようとするとクラスが見つからないのですが…
    アクションゲームの方で使われているCanvasと入れ換えて大丈夫なんでしょうか。

    • はじめまして。
      ブログで作ったものは本に載っている物なのでどこまで載せていいのか分からず肝心なところが載せていませんでした。
      混乱を招いて申し訳ありません。
      ブログ上で載せたファイルはViewファイルだけなのでそれとは別にGraphics.javaというファイルを作っておりそこに
      import android.graphics.Bitmap;
      import android.graphics.Canvas;
      import android.graphics.Paint;
      import android.graphics.Rect;
      import android.view.SurfaceHolder;

      public class Graphics {
      private SurfaceHolder holder;
      private Paint paint;
      private Canvas canvas;

      //グラフィックス
      public Graphics(SurfaceHolder holder){
      this.holder = holder;
      paint = new Paint();
      paint.setAntiAlias(true);
      }

      //ロック
      public void lock(){
      canvas = holder.lockCanvas();
      }

      //アンロック
      public void unlock(){
      holder.unlockCanvasAndPost(canvas);
      }

      //色の指定
      public void setColor(int color){
      paint.setColor(color);
      }

      //フォントサイズの指定
      public void setFontSize(int fontSize){
      paint.setTextSize(fontSize);
      }

      //文字幅の取得
      public int stringWidth(String string){
      return (int)paint.measureText(string);
      }

      //矩形の描画
      public void fillRect(int x, int y, int w, int h){
      paint.setStyle(Paint.Style.FILL);
      canvas.drawRect(new Rect(x, y, x + w, y + h), paint);
      }

      //ビットマップの描画
      public void drawBitmap (Bitmap bitmap, int x, int y){
      int w = bitmap.getWidth();
      int h = bitmap.getHeight();
      Rect src = new Rect(0, 0, w, h);
      Rect dst = new Rect(x, y, x + w, y + h);
      canvas.drawBitmap(bitmap, src, dst, null);
      }

      //文字列の描画
      public void drawString(String string, int x, int y){
      canvas.drawText(string, x, y, paint);
      }
      }
      という記述をしております。
      これがないと見つからないですね。
      すみません。もう一つファイルがあるのですが、多分載せてしまうと本をまるまる載せることになるので著作権を侵害しそうなので伏せます。
      ただもう一つのファイルはRPG.javaという名前でActivityをextendsしてオーバーライドしただけの基本的なものになりますので出来ると思います。

      まだまだ稚拙ですがよろしくお願いいたします。

      • お返事ありがとうございます!こちらは大分遅れてすみません。(汗)
        同じPackageだからImportがなかったのですね。
        納得しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です