Archive for the ‘Block Breaker’ Category

6月
24

前回のflashcast:フリーで働くITエンジニア集団のブログ: javascriptからモゲラのAPIを呼ぶサンプルを作ってみたの続きです。

公開に向けてゲームを作りこんでいきたいと思います。

まずは、なぜかjQueryのバージョンが古かったので、新しくしました。
(純粋に間違えていました・・・。)
jquery-1.3.1 → jquery-1.3.2

次に、ブロックの数字を文字ではなく、画像にすることにします。
ついでに、読み込み速度を上げるために画像をまとめます。

ブロックの画像を1枚の画像にまとめることで、クライアントとサーバのやり取りを抑えることができます。
結果、読み込みスピードが上がります。

また、最初にまとめて画像を読み込むため、ページ描画後の読み込みによる、ちらつきなどが起こらなくなります。

CSSの定義は、こんな感じになります。

.color1.pattern1 {
 background-image:url(blocks.png);
 background-position:192px 288px;
}
.color1.pattern2 {
 background-image:url(blocks.png);
 background-position:192px 240px;
}

※background-positionで、画像の表示範囲を指定します。

同様に、POWERを表す「※」も画像にしました。

あと、折角なのでハイスコアをcookieに保存するようにしました。

Plugins | jQuery PluginsにあるjQuery cookieを使います。

こんな感じで、簡単にクッキーの読み書きができます。

player.hi = $.cookie(COOKIE_NAME);
if (player.hi === null) {
 player.hi = 0;
}

if(player.hi < player.sc){
 player.hi = player.sc;
 $.cookie(COOKIE_NAME, player.hi, {expires:30, path:"/"});
}

最後に、画面下におねだりボタン(?)を付けて完成です!

完成した内容は
jQuery Block Braker | モゲラ
になります。
※モゲラのサイトにログイン後に、クリックしてください。
※または、「パズル」カテゴリより探してみてください。

みなさんも遊んでみてください!

5月
08

せっかく、flashcast:フリーで働くITエンジニア集団のブログ: jQueryを使って、htmlとcssを分離するようにjavascriptも分離してみる(javascript編)でゲームを作ってみたので、ほかのサイトにも登録してみることにしました。

登録するサイトは、こちらです。
ゲーム・無料ゲーム | モゲラ

ブラウザで動くタイプのゲームを無料で登録でき、APIを使って「モリタポ」というポイントで課金したりすることができます。

ゲーム自体は、無料で公開してもいいのですが、せっかくなのでAPIを使って課金してみることにしました。

ただ、ここで問題が・・・

モゲラのAPIはモゲラのサーバーにありますが、ゲームのほうは自分のサーバに置かなくてはいけません。
そうすると、別ドメインのため、flashの場合、crossdomain.xmlをサーバにおくことで、アクセスできますが、javascriptの場合はアクセスができません。

これを回避する方法は色々あるのですが、flashとjavascriptを連携するのはflashcast:フリーで働くITエンジニア集団のブログ: flash+javascriptで、クリップボードにコピーするでやったので、今回は、phpを使ってみることにします。
別ドメインにアクセス可能なphpを使ってモゲラのAPIを呼び出し、その結果をjavascriptで取得することにします。

ついでに、javascriptからphpを呼ぶ部分も関数として作成し、ライブラリのような感じにすることにします。
jQueryのajax関数を使ってphpを呼び出して、モゲラAPIの結果を取得します。

と、いうわけで、特に解説するようなテクニックもなく完成!

せっかくなので、サンプルページを作成してみました。(2009/05/07に公開しました。)
このライブラリを使えば、flashを使わなくても、課金できるのでぜひ使ってみてください!

javascriptからモゲラのAPIを呼ぶサンプル | モゲラ
※モゲラのサイトにログイン後に、クリックしてください。
※または、「その他」カテゴリより探してみてください。

実際に使う際には、

var info = tonosamart.getMogeraInfo(SVID);

というような感じで、呼び出します。
※SVIDには、モゲラの設定画面で登録するサービスIDを設定します。

そうすると、infoにAPIの結果が入るので

if(info.status === 'OK'){
if(info.credit >= 1){
if(isPlay){
 play = tonosamart.getMogeraPlay(SVID);
 setPlay(TARGET, play);

 if(play.status === 'OK'){
  setMessage(TARGET, MESSAGE_OK_PLAY_GAME);
 }else{
  setMessage(TARGET, MESSAGE_NG);
 }
}else{
 setMessage(TARGET, MESSAGE_OK_PUSH_START);
}
} else {
setMessage(TARGET, MESSAGE_OK_INSERT_COIN);
}
}else{
setMessage(TARGET, MESSAGE_NG);
}

といった感じで、簡単に使うことができます。

サンプルページにも書いてありますが、今回はajaxといいつつも非同期ではないので、読み込み中はブラウザが止まります。
ゲーム用の課金APIということで、あえてこういう仕様にしてみました。

これで、モゲラにゲームを公開する準備は整いました。
あとは、この前作ったゲームを、モゲラ用にカスタマイズしてみたいと思います!

5月
08

前回のflashcast:フリーで働くITエンジニア集団のブログ: jQueryを使って、htmlとcssを分離するようにjavascriptも分離してみる(Design完成編)の続きです。

javascriptを完成させましょう。

ていうかまあ、作っちゃってあるので、簡単にポイントを解説していきます。

まずは、定数と、変数の定義です。

jQuery(function($){
 var MAX_BLOCK = 64;
 var MAX_COL = 4;
 var MAX_PAT = 6;
 var FADE_TIME = 1500;

 var bonus = [
  0,
  100,
  500,
  5000,
  10000,
  50000,
  100000,
  500000,
  1000000,
  1500000,
  2500000,
  5000000,
  9999999
 ];

 var player = {
  hi:0,
  sc:0,
  hit:0,
  point:0,
  bonus:0,
  total:0,
  pow:0
 };

この辺は、みたまんまですね。

次に、メインルーチン

 init();
 start();

init()で初期化した後、start()でゲームを開始します。
ゲームオーバーになった後は、RESTARTボタンを押すことで、再度start()が呼ばれて、ゲームが始まる仕組みです。

今回は、単純なゲームなので、画面全体の流れなどは管理していません。
その分、ソースが短くなっている代わりに理解が難しいかもしれませんが、順番に見ていきましょう。

init()では、最初にだけ必要な設定をします。
個々のタイトルを設定し、RESTARTボタンにstart関数をひもづけます。
また、ハイスコアを初期化します。

 function init(){
  $("#hi_score_title").text("HI-SCORE");
  $("#score_title").text("SCORE");
  $("#hit_title").text("HIT");
  $("#point_title").text("POINT");
  $("#bonus_title").text("BONUS");
  $("#total_title").text("TOTAL");
  $("#pow_title").text("POWER:");

  $("#restart").click(start);
  player.hi = 0;
 }

start()では、開始処理を行います。
RESTARTボタンを非表示にして、メッセージエリア(GAME OVERの文字)を消します。
また、ブロックをいったん全部削除して、追加し直します。

その後、slideDownを使って、ブロックを表示するエリアをアニメーションで表示します。
アニメーションが終わったら、点数などを初期化し、各ブロックのクリックイベントに、removeBlockを設定します。

 function start(){
  $("#restart").hide();
  $("#message").text("");

  $("#view").hide();

  $("#view .block").remove();
  while($("#view .click").length < MAX_BLOCK){
   addBlock();
  }

  $("#view").slideDown(
   FADE_TIME,
   function(){
    player.sc = 0;
    player.pow = 10;
    player.hit = 0;
    player.bonus = 0;
    putScore();

    $("#view .click").live("click", removeBlock);

   }
  );
 }

点数表示関数です。powerについては、※を連続で表示しています。

 function putScore(){
  var p = '';
  for(var i=0;i < player.pow; ++i){
   p = p + '※';
  }

  $("#hi_score").text(player.hi);
  $("#score").text(player.sc);
  $("#hit").text(player.hit);
  $("#point").text(player.point);
  $("#bonus").text(player.bonus);
  $("#total").text("+" + player.total);
  $("#pow").text(p);
 }

ブロック追加関数です。
色、種類を乱数で求めて、それをclassとしてブロックを作成しています。

 function addBlock(){
  var col = Math.floor(Math.random() * MAX_COL) + 1;
  var pat = Math.floor(Math.random() * MAX_PAT) + 1;

  var el = $(document.createElement("div")).addClass("block click color" + col + " pattern" + pat).text(pat);
  $("#view").append(el);
  $.data(el.get(0), "tono_param", {col:col, pat:pat});
  $(el).hide().fadeIn(
   FADE_TIME,
   function(){
    if($(this).attr("style")){
     $(this).removeAttr("style");
    }
   }
  );
 }

個々のブロックがクリックされたときに呼ばれる関数です。
点数を計算し、同じ色または同じ種類のブロックを削除します。
また、powerがなくなったら、ゲームオーバーの処理を行います。

 function removeBlock(){
  var param = $.data($(this).get(0), "tono_param");

  player.hit = $("#view .click.color" + param.col + ", #view .click.pattern" + param.pat).length;
  if (player.hit !== 0) {
   player.bonus = bonus[Math.floor(player.hit / 5)];
   player.point = player.hit * 100;
   player.total = player.point + player.bonus;
  } else {
   player.bonus = 0;
   player.point = 0;
   player.total = 0;
  }

  player.sc = player.sc + player.total;
  if(player.hi < player.sc){
   player.hi = player.sc;
  }

  player.pow = player.pow - 1;
  if(player.pow === 0){
   $("#view .click").die("click", removeBlock);
   $("#message").text("GAME OVER");
   $("#restart").show();
  }

  putScore();

  $("#view .click.color" + param.col + ", #view .click.pattern" + param.pat).removeClass("click").fadeOut(
   FADE_TIME,
   function(){
    $(this).remove();
    if($("#view .click").length < MAX_BLOCK){
     addBlock();
    }
   }
  );
 }

});

プログラムの解説は、こんな感じです。

実際に作成したものに、cssの枠組みを組み合わせたのは
jQuery Block Braker Sample
になります。
※block.htmlを選択してください。

このままでも、一応動作が試せると思います。

同様に、cssの途中版と組み合わせたのが
jQuery Block Braker Sample
になります。
※block.htmlを選択してください。

最後に、cssの完成版と組み合わせた完成版が
jQuery Block Braker Sample
になります。
※block.htmlを選択してください。

今回、html+cssのほうを先に作り、javascriptを後に作りましたが、実際の開発では、先に進行しているほうがどんどん最新バージョンを相手に渡す感じになります。
その場合の、組み合わせを
jQuery Block Braker Sample
においてみました。

どの組み合わせでも、ちゃんとページとして成立しているのが分かると思います。

実際、ここまでうまくいくかは微妙ですが(HTMLの修正があると、前バージョンでの組み合わせは難しい)、デザインとjavascriptを分離することによって、並行に開発できるのが理解していただけたでしょうか?

このあとは、無駄な部分を削ったり、微調整をした後に、最終版でテストをして、納品という形になります。

今回の最終版は、
jQuery Block Braker Sample
になります。

よかったら、遊んでみてください!

5月
07

前回のflashcast:フリーで働くITエンジニア集団のブログ: jQueryを使って、htmlとcssを分離するようにjavascriptも分離してみる(デザインのbeta版を作成編)の続きです。
今回は、htmlとcssを完成させましょう。

とりあえず、おおまかなデザインはできたので、
それに合わせて画像を作っていきます。

個々のエリアごとに画像を作ってもいいのですが
面倒なので、1枚の画像でやっちゃうことにします。

完成画像が、こちらになります。

せっかくなので、タイトルロゴも作ってみました。

ブロックについても、味気なかったので画像にすることにします。

それにそって、CSSも変えていきます。

#page_area {
 width:640px;
 height:480px;
 margin:0px auto;
 background-image:url(layout.png);
}
.color1 {
 background-image:url(block_1.png);
}
.color2 {
 background-image:url(block_2.png);
}
.color3 {
 background-image:url(block_3.png);
}
.color4 {
 background-image:url(block_4.png);
}

こんな感じでしょうか。

ロゴを入れたら、スコアの表示位置などもずれたので設定していきます。
また、ブロックを消した時の情報(HIT、POINT、BONUS、TOTAL)は、小さく囲んだエリアに表示することにしました。

実際に作成したものは
jQuery Block Braker Sample
になります。
※block.htmlを選択してください。

これで、デザインは完成です!

5月
06

前回のflashcast:フリーで働くITエンジニア集団のブログ: jQueryを使って、htmlとcssを分離するようにjavascriptも分離してみる(枠組み(prototype)作成編)の続きです。
今回は、htmlとcssを作ります。

とりあえず、おおまかなデザインでベータ版をつくってみましょう。

まずは、ページ全体を中央寄せにします。

body {
 background-color:#ffffff;
 color:#333333;
}
#page_area {
 width:640px;
 height:480px;
 margin:0px auto;
}
#page {
 position:relative;
 margin:0px;
}

実際の業務では、このあたりのページ全体の見え方については、
統一した仕様があると思うので、それに従う形になるとおもいます。

次に、各エリアを順番に配置していきます。
デザインは、オーソドックスな形で、左側にブロックを表示するエリア、右側にスコアなどの情報を配置することにします。
ただし、POWERだけは、一番下にゲージっぽく配置することにします。

まずは、左側にブロックを表示するエリアですが、最初にブロックの大きさを決めます。
これは、48px×48pxでいいでしょう。

そうすると、ブロックを表示するエリアの大きさは
384pxになります。

それを踏まえると下記のようになります。

#view_area {
 position:absolute;
 top:10px;
 left:10px;
 width:384px;
 height:384px;
 padding:14px 0px 0px 15px;
}
#view {
 width:384px;
 height:384px;
}

次に、ブロック単体の設定です。

.block {
 float:left;
 width:48px;
 height:48px;
 font-size:17px;
 line-height:49px;
 text-align:center;
 font-weight:bold;
 color:#200404;
}
.color1 {
 background-color:#ccffff;
}
.color2 {
 background-color:#ffccff;
}
.color3 {
 background-color:#ffffcc;
}
.color4 {
 background-color:#ccffcc;
}

大きさや、文字のスタイルなどは.blockで定義します。
色は別に.colorで定義します。

あとは、スコアなどを配置していきます。

.score {
 text-align:right;
}
#hi_score_area {
 position:absolute;
 top:65px;
 left:454px;
 width:156px;
}
#hi_score_area div {
 height:18px;
 line-height:18px;
}
(以下省略)

最後に、restartのボタンを消して完成です。

#restart {
 display:none;
}

実際に作成したものは
jQuery Block Braker Sample
になります。
※block.htmlを選択してください。

結構、それらしい見た目になってきました。

  • Search:
  • flashcastとは?

    東京を中心に、現在フリーランスとして活動しているITエンジニア、および、かつてフリーランスとして活動していた起業家達が立ち上げたコミュニティーです。

    みんなで集まって面白いことをやろう!形に残そう!ということで、ブログをはじめました。

    技術情報や、フリーエンジニアに役立つ情報などを、ご紹介できたらと思っています。

    お問い合わせ:
    info@flashcast.jp
  • カレンダー

    2010年7月
    日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
    « 6月    
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
  • メンバー紹介

    もじゃもじゃ
    flashcastのリーダー

    3年ほどフリーのITエンジニアとして活動。現在は、社員2名の株式会社を経営しています。

    一攫千金を夢見る野心家です。

    ライブキャスト

    yasu
    ダイバー

    自宅サーバーでホームページを作り始めました。

    少しずつ記事を増やしていきますので足を運んでください。

    よろしくお願いします。

    sa-sa-ki.jp

    のら
    たびびと

    ねこ好きに悪人はいなーいっ!!

    バイクや車も好きです。

    めぐ
    デザイナーのたまご

    音楽とデザインとお酒をこよなく愛する永遠のダイエッター。

    現在ペンタブレットでイラストを勉強中。

    Hiro
    コンサル

    PMやSEの案件を業務委託で請けることが多いですが、小規模案件も受託でやっています。

    得意な分野はマイクロソフト製品や関連技術によるシステム構築です。

    KEI
    取締役の風格

    最年少なのに、メンバーで1番の貫禄の持ち主!?

    C#や.netなどサーバ側の開発が得意。

    ろっきー
    美食家★パパ

    自分にとっての息抜きは、ドライブして温泉に入って、美味しいご飯を食べる事。

    ココロとカラダのリフレッシュを大切にし、日々の仕事に励む一児の父親です。

    郵便番号検索

    my-hobby

    とのさま
    げーむのおうさま

    大人なのに好きなことしかやらない駄目人間。

    Web系が得意、アクセスは苦手><

    tonosamart.com

    セクレタリアト
    ギャンブラー

    フリーランス時代は仲間の現場を探すことが多く、それをきっかけに会社を設立。

    現在はSI業に特化せず、他の業種にも興味を持ち始めています。

    メドレー株式会社

  • 広告