ワ-クスルーした結果のリスト
おおよそ修正しました。
---------------------------
function sgn(a) {
if(a > 0) return(1); else return(-1);
}
WIDTH = 640;
HEIGHT = 480;
// white, red, yellow, green, blue
var colortable = ["red","yellow","green"];
var username = ["ipad","iphone","android"]; //端末の名前
var br = 10; // ボールの半径
var paddlew = 96; // パドルの幅
var paddleh = 16; // パドルの高さ
var blockw = 48; // ブロックの幅
var blockh = 24; // ブロックの高さ
var blocks = [];
var blocksu = 50;
var endflag = 0; // 処理の終わりを判定する
var gameover = 0;
var gameover1 = 0;
// ブロックスに配列要素にプロパティを付与する。
function block(x1, y1, width, height, color1) {
this.id = 1;
this.x = x1;
this.y = x2;
this.color = color1;
this.centerx = this.x + width / 2;
this.centery = this.y + wheight / 2;
}
// パドルの構造体
function paddlez() {
this.centerx = 0;
this.centery = 0;
this.x = this.centerx - paddlew / 2;
this.y = this.centery - paddleh / 2;
}
// 初期処理
function init(){
canvas = document.getElementById('world');
canvas.width = WIDTH;
canvas.height = HEIGHT;
ctx = canvas.getContext('2d');
ctx.font = "64px 'MS Pゴシック'";
user = window.navigator.userAgent.toLowerCase();
// パドルを定義する。
paddle = new paddlez();
// マウスの処理
for(i=0; i<username.length; i++){
if(user.indexOf(username[i]) > 0)break;
}
if(i < username.length){
document.addEventListener("touchmove", touchmove);
}else{
document.addEventListener("mousemove", mousemove);
}
// ブロックスを定義する。
blocks = new Array(blocksu);
for(i=0; i<blocksu; i++){
x1 = (i % 10) * (blockw + 4) + 64;
y1 = Math.floor(i / 10) * (blockh + 4) + 64;
color1 = Math.floor(blocks[i].y / 28) % 3;
blocks[i] = new block(x1, y1, bolokw, blockh, color1);
}
}
// for(i=0; i<blocksu; i++){
// blocks[i].id = 1;
// blocks[i].x = (i % 10) * (blockw + 4) + 64;
// blocks[i].y = Math.floor(i / 10) * (blockh + 4) + 64;
// blocks[i].color = Math.floor(blocks[i].y / 28) % 3;
// }
}
//スマホ/タブレットのタッチイベントで起動する関数
function touchmove(e){
if (e.targetTouches.length == 1){
touch = e.targetTouches[0];
touchpice(touch.pageX ,touch.pageY);
}
}
//pcのマウスクリックイベントで起動する関数
function mousemove(e){
touchpice(e.clientX ,e.clientY);
}
//引数で指定した位置にある駒の移動処理(※変更前です)
function touchpice(tx,ty){
element = document.getElementById("idselect");
if(element.value != turn) return; //相手の番の場合は無効
if(isinside(tx,ty,0,0,WIDTH,HEIGHT)==false)return; //将棋盤バッファ外なら処理を終了
paddle.centerx = tx;
paddle.centery = ty;
}
//座標が範囲内に存在するか判定する
function isinside(x,y,ax,ay,w,h){
if((x<ax)||(x>=(ax+w))||(y<ay)||(y>=(ay+h)))return(false);
return(true);
}
function main() {
minit();
//クロックの処理
mmain();
gameover += 1;
if(gameover > 20) return;
setTimeout("main()",5000);
}
// メインのイニシャル処理
function minit(){
while(endflag == 0) {
ballx = WIDTH / 2; // ボールのx座標
bally = HEIGHT - 170; // ボールのy座標
bx1 = 2; // ボールの速度(x成分)
by1 = -2.5; // ボールの速度(y成分)
x = WIDTH / 2; // パドルの位置(x座標)
y = HEIGHT - 64; // パドルの位置(y座標)
// パドルは左端がpaddleのx、y
paddle.centerx = x;
paddle.centery = y;
for(i=0; i<blocksu; i++){
blocks[i].id = 1;
// blocks[i].x = (i % 10) * (blockw + 4) + 64;
// blocks[i].y = Math.floor(i / 10) * (blockh + 4) + 64;
// blocks[i].color = Math.floor(blocks[i].y / 28) % 3;
}
gameover1 = 0;
}
// メインのメイン処理
function mmain(){
//キーコード取得しパドルの位置を移動させる。← →
x = paddle.centerx;
k = event.keyCode;
if(k==100) x -= 8; if(k==102) x += 8;
//パドルがゲーム画面内ならパドルの位置を変更する
if( (x >= (paddlew / 2)) && (x <= (WIDTH - (paddlew / 2))){
paddle.centerx = x;
}
//ボールの速度と位置の変更
x = ballx + bx1;
y = bally + by1;
//ボールが左右の壁に当たるとxの速度を反転する
if( (x < br) || (x > (WIDTH - br ) bx1 = -bx1;
//ボールが天井にあたるとyの速度を反転する
if( y < br ) by1 = -by1;
//ボールが底にあたるとゲームオーバー
if( y > HEIGHT ) gameover1 += 1;
//パドルとボールとの距離の差を計算する
dx = paddle.centerx - x;
dy = paddle.centery - y;
//ゼロ割を回避するための処理
if(dy == 0) dy = 1;
//パドルとボールが当たっているかの判断
if((Math.abs(dx) < (paddlew / 2 + br)) && (Math.abs(dy) < (paddleh / 2 + br)
{
//角度により反射を判定
if(Math.abs(dx / dy) > (paddlew / paddleh)){
bx1 = -bx1;
ballx = paddle.centerx - sgn(dx) * (paddlew / 2 + br);
} else {
bx1 = -dx / 10;
by1 = -by1;
bally = paddle.centery - sgn(dy) * (paddleh / 2 + br);
}
}
//ブロックとボールが当たった時の処理
for(i=0; i < blocksu; i++){
dx = blocks[i].centerx - x;
dy = blocks[i].centery - y;
//ゼロ割を回避するための処理
if(dy == 0) dy = 1;
//ブロックとボールが当たっているかの判断
if((Math.abs(dx) < (blockw / 2 + br)) && (Math.abs(dy) < (blockh / 2 + br)
{
//角度により反射を判定
if(Math.abs(dx / dy) > (blockw / blockh)){
bx1 = -bx1;
ballx = blocks[i].centerx - sgn(dx) * (blockw / 2 + br);
} else {
by1 = -by1;
bally = blocks[i].centery - sgn(dy) * (blockh / 2 + br);
}
blocks[i].id = 0;
break;
}
}
ballx += bx1;
bally += by1;
//(描画処理)
blockdraw();
paddledraw();
balldraw();
if(gameover1 > 0){
gemeoverdraw();
return;
// if(gameover1 > 200) break;
}
//クロックの処理
setTimeout("mmain()",100);
}
//描画ファンクションのコーディング
//つづく
// ブロックの描画
function blockdraw() {
for (i=0; i < blocksu; i++){
if(blocks[i].id == 1) {
wkcolor = blocks[i].color;
wkx = blocks[i].x;
wky = blocks[i].y;
ctx.fillStyle = colortable[wkcolor];
ctx.fillRect(wkx, wky, blockw, blockh);
}
}
}
// パドルの描画
function paddledraw() {
ctx.fillRect(paddle.x, paddle.y, paddlew, paddleh);
}
// ボールの描画
function balldraw() {
wkx = Math.floor(ballx);
wky = Math.floor(bally);
ctx.beginPath();
ctx.fillStyle = "white";
ctx.arc(wkx,wky,br,0*Math.PI,2*Math.PI);
ctx.fill();
}
// ゲームオーバーの表示
function gameoverdraw(){
ctx.font = "64px 'MS Pゴシック'";
ctx.fillStyle = "white";
ctx.fillText("GAME OVER",180,300);
}
以上