お絵描きやプログラミングやアーマードコアについて綴っていくつもりです。プログラミングは備忘録的に使うつもりだったりする。
プロフィール

typeすつーか

Author:typeすつーか
FC2ブログへようこそ!

最新トラックバック
カウンターです
ついったー

広告とか

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:-- スポンサー広告 TB(-) CM(-)
Processing Advent Calendar 2012 10日目を担当することになりました、すつーかです。よろしくお願いします。
今回は「プロジェクトの紹介」を行いたいと思います。


事の発端は、コーディングまみれになりたいという事と、
すつーかがAndroidアプリとしてゲームをリリースしたかったという事にありました。

Androidアプリの作り方はいろいろあると思いますが、当時、王道と言いますか良く言われている開発環境がEclipse+AndroidSDKでした。

でもゲームプログラミングもままならない&Androidエミュ重い(最近は軽くなってきた?)やらAndroid絡みのエラー対処に追われ、RPG作りどころではありませんでした。


ゲームプログラミングの専門書を見てみるも、ソースコードの理解に追われまくり、これまた「コーディングまみれになりたい」といった欲求も満たされない始末。


「もう、全部自分の頭だけて考えて完成するような環境クレ・・・」






ということでProcessingでRPGのロジックを完成させるプロジェクトがスタート。

title.png





早く作りたい一心で、開発手法やら何やら気にせず作っていきました。

相方のプログラマと、ココこうしたら良いんじゃない?
だとか、随時クラス図書き換えたり、pde書き直したりして面白かったです。
一番面白かったのは、
初めは手続き型から、ある程度コードを描いたところでクラス別に作り直した所でした。




はじめに、チップを配置するスケッチを描きました


final int CHIP = 30;

void setup() {
size(480, 480);
}

void draw() {
for (int i = 0; i < 16; i++) {
for (int k = 0; k < 16; k++) {
rect(k * CHIP, i * CHIP, CHIP, CHIP);
}
}
}



次に、配列からマップ情報を取得するスケッチに改良しました


final int CHIP = 30;

int[][] map = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};


void setup() {
size(480, 480);
}

void draw() {
for (int i = 0; i < 16; i++) {
for (int k = 0; k < 16; k++) {
if(map[i][k] == 1) fill(100);//map[y][x]であることに注意
if(map[i][k] == 0) fill(200);
rect(k * CHIP, i * CHIP, CHIP, CHIP);
}
}
}


柔軟性を持たせた



  • 縦、横のマス数を指定可能にした。

  • ウィンドウサイズ: マスの個数とCHIPサイズから自動計算。

    • →でも、マス数を固定にして、あとはピクセルを自動計算 ってのも良さそう


final int CHIP = 30;
int masu_x = 16;
int masu_y = 16;

int[][] map = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};


void setup() {
size(CHIP * masu_x, CHIP * masu_y);
}

void draw() {
for (int i = 0; i < masu_y; i++) {
for (int k = 0; k < masu_x; k++) {
if(map[i][k] == 1) fill(100);//map[y][x]であることに注意
if(map[i][k] == 0) fill(200);
rect(k * CHIP, i * CHIP, CHIP, CHIP);
}
}
}


fill()メソッドをimage()に変更したバージョン.


  • しかし、これではswitch文みたくなってしまう・・・次!

    • final int CHIP = 30;
      int masu_x = 16;
      int masu_y = 16;

      int[][] map = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
      };


      PImage kusa;
      PImage wall;
      PImage hero;
      //-------------------------------------------------------------------
      void setup() {
      size(CHIP * masu_x, CHIP * masu_y);
      kusa = loadImage("kusa.bmp");
      wall = loadImage("stone3.bmp");
      //hero = loadImage("heroD.bmp");
      }

      void draw() {
      for (int i = 0; i < masu_y; i++) {
      for (int k = 0; k < masu_x; k++) {
      //switch文のようになってしまい、コードが増えてしまう。
      if(map[i][k] == 1) image(wall, k * CHIP, i * CHIP, CHIP,CHIP);//map[y][x]であることに注意
      if(map[i][k] == 0) image(kusa, k * CHIP, i * CHIP, CHIP,CHIP);
      }
      }
      }





      switch文を配列一行で済ませるように改善した



      final int CHIP = 30;
      int masu_x = 16;
      int masu_y = 16;

      int[][] map = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
      {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
      };


      String imgName[] = {"kusa", "stone3", "heroD"};//##随時ココに追加しなければならない・・・
      PImage img[] = new PImage[20];//##ここのサイズを指定しなければならない・・・
      //-------------------------------------------------------------------
      void setup() {
      size(CHIP * masu_x, CHIP * masu_y);
      for(int i = 0; i < imgName.length; i++){
      img[i] = loadImage(imgName[i] + ".bmp");
      }
      }

      void draw() {
      for (int i = 0; i < masu_y; i++) {
      for (int k = 0; k < masu_x; k++) {
      //switch文の問題点を解消。 一行で済ますことに成功.(switchの対応付けを配列の対応付けで済ませただけですね)
      image(img[map[i][k]], k * CHIP, i * CHIP, CHIP,CHIP);//map[y][x]であることに注意
      }
      }
      }


      他にも色々ソースコード公開したいのですが、自分ひとりで作ってる訳でもないので序盤のみの公開ということで。





      バージョン管理


      プログラマ2名、ドット絵師1名、BGM担当1名の計4人体制で製作中。
      最近は開発が止まってる。

      「バージョン管理には何使ってるの?」


      と言われると、

      _人人人人人人人人人人人_
      > フォルダです!!! <
       ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄


      versionfiled.png

      クラス図どうなってるの?


      と言われると、

      _人人人人人人人人人人_
      > 手書きです!!! <
       ̄^Y^Y^Y^Y^Y^Y^Y^Y^ ̄


      classByHand.jpg
      twitterで@ayato_pさんに「astash*つかえww」と言われる始末www



      相方のプログラマもサポートしてくれた



      • マップデータ作成ツール


      →CSVファイルに出力してくれる。width*heightも指定可能。塗りつぶし機能まで実装してくれた。

      tocsv.png



      ゲーム画面


      rpg1.png

      フラッドフィルも実装


      rpg2.png

      メニューウィンドウも。


      rpgMenu.png

      ファイル別にクラス分けてたらタブだらけになった


      rpgTab.png



      そんなこんなで、ある程度の簡単なゲームをリリースしていって、少しづつフレームワークとしてのクオリティを高めていこうと思っています。
      Androidに移植するのは来年になりそう・・・。
      スポンサーサイト
      2012/12/09 23:30 processing TB(0) CM(1)

コメント
承認待ちコメント
このコメントは管理者の承認待ちです
2017/06/27 14:55   [ 編集 ]















 管理者にだけ表示を許可する

トラックバック
http://stukacoding.blog.fc2.com/tb.php/13-f19bb9f4
検索フォーム
ブロとも申請フォーム
QRコード
QR
IPv4枯渇時計
linuxコマンド
ぶくろぐ
本棚です
icat
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。