JavaScript+html+Canvas でゲーム作成(基本部分)
基本的には以下をベースにあとは中身を作るだけ。
中身とは、入力とか描画とか処理とか入れれば良し。
<html>
<head>
<style type="text/css">
<!-- canvas { background: #000 ; } -->
</style>
</head>
<body>
<canvas id="myCanvas" width="512" height="512"></canvas>
<script language="JavaScript">
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
function draw() {
/* プログラム実行部分 */
/* たとえばCanvasに描画 */
ctx.beginPath();
ctx.fillStyle = "blue";
ctx.fillRect( 200, 200, 10, 10 );
ctx.closePath();
}
/* draw()関数がsetIntervalの中で16ミリ秒おきに実行 */
setInterval(draw, 16);
</script>
</body>
</html>
続き1:
上記の"function draw(){}"と下記を入れ替えると玉がいっぱい表示されます。
/* 玉の半径 */
var ballRadius = 10;
/* 玉準備 */
var pos = new Array(1000);
for( var i = 0; i < pos.length; i++ ){
pos[i] = new Array(8); /* x,y,speedx,speedy,color */
}
/* 初期座標セット */
for( var i = 0; i < pos.length; i++ ){
pos[i][0] = ( Math.random() * canvas.width ) ; /* xpos */
pos[i][1] = ( Math.random() * canvas.height ); /* ypos */
pos[i][2] = ( Math.random() * 4 ) + 2 - 3; /* speedx */
pos[i][3] = ( Math.random() * 4 ) + 2 - 3; /* speedy */
pos[i][4] = ( Math.random() * 256 ) / 16 * 16; /* RGBのR */
pos[i][5] = ( Math.random() * 256 ) / 16 * 16; /* RGBのG */
pos[i][6] = ( Math.random() * 256 ) / 16 * 16; /* RGBのB */
pos[i][7] = 0;
}
/* 描画 */
function draw(){
/* 画面クリア */
ctx.clearRect(0, 0, canvas.width, canvas.height);
/* 描画 */
for( var i = 0; i < pos.length; i++ ){
ctx.beginPath();
ctx.arc( pos[i][0], pos[i][1], ballRadius, 0, Math.PI*2 );
ctx.fillStyle = "rgb(" + (~~pos[i][4]) + ", " + (~~pos[i][5]) + ", " + (~~pos[i][6]) + ")" ;
ctx.fill();
ctx.closePath();
}
/* Canvas衝突判定 */
for( var i = 0; i < pos.length; i++ ){
/* 玉を壁のx方向で反射させる */
if( ( pos[i][0] + pos[i][2] > canvas.width-ballRadius ) || ( pos[i][0] + pos[i][2] < ballRadius ) ){
pos[i][2] = pos[i][2] * (-1);
}
/* 玉を壁のy方向で反射させる */
if( ( pos[i][1] + pos[i][3] > canvas.height-ballRadius ) || ( pos[i][1] + pos[i][3] < ballRadius ) ){
pos[i][3] = pos[i][3] * (-1);
}
/* 玉移動 */
pos[i][0] += pos[i][2];
pos[i][1] += pos[i][3];
}
}
続き2:
これをちょっと編集して以下のようにします。
/* 玉の半径 */
var ballRadius = 2;
/* 隣り合う玉の間隔 */
var ballInterval = 4;
var w_size = canvas.width / ballInterval;
var h_size = canvas.height / ballInterval;
/* 玉準備 */
var pos = new Array( w_size * h_size );
for( var i = 0; i < pos.length; i++ ){
pos[i] = new Array(8); /* x,y,speedx,speedy,color */
}
/* 初期座標セット */
for( var i = 0; i < pos.length; i++ ){
pos[i][0] = ( ( i % w_size ) * ballInterval ); /* xpos */
pos[i][1] = ( ( i / h_size ) * ballInterval ); /* ypos */
pos[i][4] = ( Math.random() * 256 ) / 16 * 16; /* RGBのR */
pos[i][5] = ( Math.random() * 256 ) / 16 * 16; /* RGBのG */
pos[i][6] = ( Math.random() * 256 ) / 16 * 16; /* RGBのB */
pos[i][2] = pos[i][3] = pos[i][7] = 0;
}
/* 描画 */
function draw(){
/* 画面クリア */
ctx.clearRect(0, 0, canvas.width, canvas.height);
/* 描画 */
for( var i = 0; i < pos.length; i++ ){
ctx.beginPath();
ctx.arc( pos[i][0], pos[i][1], ballRadius, 0, Math.PI*2 );
ctx.fillStyle = "rgb(" + (~~pos[i][4]) + ", " + (~~pos[i][5]) + ", " + (~~pos[i][6]) + ")" ;
ctx.fill();
ctx.closePath();
}
}
動かすパソコン等の性能にもよりますが、昔のドットタイプのゲームならこれで作れそうです。
この記事が気に入ったらサポートをしてみませんか?