ゲーム内の目標や条件が達成された時のゲームクリアやステージクリアの“クリア”という言葉は日本独特の表現だそうです。
我々日本人にとってはこの言葉が一番判りやすいと思いますので、
本講座では成功した時をゲームクリア、失敗してゲーム終了となる時をゲームオーバーと表現します。
| 01 | <!DOCTYPE html> |
|---|---|
| 02 | <html lang="ja"> |
| 03 | <head> |
| 04 | <meta charset="utf-8"> |
| 05 | <title>JavaScriptのテストプログラム</title> |
| 06 | </head> |
| 07 | <body style="text-align:center;"> |
| 08 | <canvas style="background-color:#cef;" id="bg" width="800" height="600"></canvas> |
| 09 | <script> |
| 10 | var canvas = document.getElementById("bg"); |
| 11 | var cnt = canvas.getContext("2d"); |
| 12 | cnt.font = "36px monospace"; |
| 13 | cnt.textAlign = "center"; |
| 14 | cnt.textBaseline = "middle"; |
| 15 | |
| 16 | //マウスとタップの判定 |
| 17 | var tapX = 0, tapY = 0, tapC = 0; |
| 18 | |
| 19 | if( 'ontouchend' in document ) { |
| 20 | canvas.addEventListener( "touchstart", touchStart ); |
| 21 | canvas.addEventListener( "touchend", touchEnd ); |
| 22 | function touchStart(event) { |
| 23 | event.preventDefault(); |
| 24 | var rect = event.target.getBoundingClientRect(); |
| 25 | tapX = Math.floor( event.touches[0].clientX-rect.left ); |
| 26 | tapY = Math.floor( event.touches[0].clientY-rect.top ); |
| 27 | tapC = 1; |
| 28 | } |
| 29 | function touchEnd(event) { |
| 30 | event.preventDefault(); |
| 31 | tapC = 0; |
| 32 | } |
| 33 | } |
| 34 | else { |
| 35 | canvas.addEventListener( "mousedown", mouseDown ); |
| 36 | canvas.addEventListener( "mouseup", mouseUp ); |
| 37 | function mouseDown(event) { |
| 38 | var rect = event.target.getBoundingClientRect(); |
| 39 | tapX = event.clientX-rect.left; |
| 40 | tapY = event.clientY-rect.top; |
| 41 | tapC = 1; |
| 42 | } |
| 43 | function mouseUp(event) { |
| 44 | tapC = 0; |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | //描画用の関数 |
| 49 | function fText( str, x, y, col ) {//文字表示 |
| 50 | cnt.fillStyle = col; |
| 51 | cnt.fillText( str, x, y ); |
| 52 | } |
| 53 | |
| 54 | function fRect( x, y, w, h, col ) {//矩形 |
| 55 | cnt.fillStyle = col; |
| 56 | cnt.fillRect( x, y, w, h ); |
| 57 | } |
| 58 | |
| 59 | //以下がメイン処理 |
| 60 | var idx = 0; |
| 61 | var tmr = 0; |
| 62 | |
| 63 | window.onload = indexProc(); |
| 64 | function indexProc() { |
| 65 | tmr ++; |
| 66 | fRect( 0, 0, 800, 600, "#000" ); |
| 67 | fText( "インデックス:"+idx, 200, 25, "#ff0" ); |
| 68 | fText( "タイマー:"+tmr, 600, 25, "#0ff" ); |
| 69 | fText( "tapX="+tapX+" tapY="+tapY+" tapC="+tapC, 400, 575, "#fff" ); |
| 70 | |
| 71 | switch( idx ) { |
| 72 | case 0: |
| 73 | fRect( 100, 100, 600, 200, "#cf8" ); |
| 74 | fText( "タイトル画面", 400, 200, "#000" ); |
| 75 | fText( "画面をタップしてスタート", 400, 400, "#fff" ); |
| 76 | if( tapC == 1 ) { idx = 1; tmr = 0; tapC = 0; } |
| 77 | break; |
| 78 | |
| 79 | case 1: |
| 80 | fText( "ゲーム画面", 400, 100, "#8f8" ); |
| 81 | fRect( 100, 200, 200, 300, "#0ff" ); |
| 82 | fText( "目標達成", 200, 350, "#000" ); |
| 83 | fRect( 500, 200, 200, 300, "#ff0" ); |
| 84 | fText( "失敗", 600, 350, "#000" ); |
| 85 | if( tapC == 1 ) { |
| 86 | if( 100 <= tapX && tapX < 300 && 200 <= tapY && tapY < 500 ) { idx = 2; tmr = 0; } |
| 87 | if( 500 <= tapX && tapX < 700 && 200 <= tapY && tapY < 500 ) { idx = 3; tmr = 0; } |
| 88 | } |
| 89 | break; |
| 90 | |
| 91 | case 2: |
| 92 | fRect( 400-tmr*3, 300-tmr, tmr*6, tmr*2, "#48f" ); |
| 93 | fText( "ゲームクリア", 400, 300, "#000" ); |
| 94 | if( tmr == 100 ) idx = 0; |
| 95 | break; |
| 96 | |
| 97 | case 3: |
| 98 | fRect( 100+tmr*3, 200+tmr, 600-tmr*6, 200-tmr*2, "#f0c" ); |
| 99 | fText( "ゲームオーバー", 400, 300, "#000" ); |
| 100 | if( tmr == 100 ) idx = 0; |
| 101 | break; |
| 102 | } |
| 103 | |
| 104 | setTimeout( indexProc, 100 ); |
| 105 | } |
| 106 | </script> |
| 107 | </body> |
| 108 | </html> |

| index | 画面 | 内容 |
|---|---|---|
| 0 | タイトル | 画面をタップしたらゲーム開始 |
| 1 | ゲーム | タップした位置に猫を移動させる ネズミに触れたら点数を増やし、一定数捕まえたらステージクリア 持ち時間を減らしていき、時間0でゲームオーバー 犬に接触したら持ち時間を多く減らす |
| 2 | ステージクリア | 一定時間文字を表示する ステージ数が10の場合はエンディングへ そうでなければステージ数を+1し再びゲーム開始 |
| 3 | エンディング | 「おめでとう!」の文字を表示し、タイトルに戻る |
| 4 | ゲームオーバー | 一定時間文字を表示したらタイトルに戻る |
本格的なフローチャートを書くには表計算ソフトが便利
エクセルや、エクセルと互換性のあるフリーの表計算ソフト(LibreOfficeのCalcなど)には、フローチャートの図形が用意されています。
プログラマーを目指される方は、一度、正式なフローチャートを書いてみてはいかがでしょう。
プログラミング用のフローチャートではそれぞれの処理や判断に簡単な数式や命令を記述しますが、
ゲーム制作用のフローチャートでは言葉で内容を記述してもよいでしょう。
参考)正式なフローチャートで使う図形(部品)

これら以外にも処理に応じていくつかの図形を使い分けます。
本講座ではフローチャートは概要説明に留めますが、詳しく学ばれたい方はネットで検索すればフローチャートの解説を行う様々なページがございます。
