ゲーム内の目標や条件が達成された時のゲームクリアやステージクリアの“クリア”という言葉は日本独特の表現だそうです。
我々日本人にとってはこの言葉が一番判りやすいと思いますので、
本講座では成功した時をゲームクリア、失敗してゲーム終了となる時をゲームオーバーと表現します。
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など)には、フローチャートの図形が用意されています。
プログラマーを目指される方は、一度、正式なフローチャートを書いてみてはいかがでしょう。
プログラミング用のフローチャートではそれぞれの処理や判断に簡単な数式や命令を記述しますが、
ゲーム制作用のフローチャートでは言葉で内容を記述してもよいでしょう。
参考)正式なフローチャートで使う図形(部品)
これら以外にも処理に応じていくつかの図形を使い分けます。
本講座ではフローチャートは概要説明に留めますが、詳しく学ばれたい方はネットで検索すればフローチャートの解説を行う様々なページがございます。