【HTML5游戏】碰撞球游戏

1.对h5自己的理解

​ html用于将内容表现出来,css用于格式,javascript用于动态表示加各种特性

2.代码

​ html代码,先用一个div弄一个计分板,style里画了两个方块,一个球,一个背景的格式,然后放在一个新的div里面.

​ 声明是HTML5,规定是utf-8编码,header页眉,footer页脚,

$是jQuery的快捷方式,调用 $(something)时就是调用jQuery()

背景应该设置为相对位置以网页左上角为参照,将里面的物体设置为绝对位置

<!DOCTYPE html>
<html lang = "en">
<head>
	<meta charset = "utf-8">
	<title>Crash Ball</title>
</head> 
<body>
	<style>
		#playground{  
			background: #eaf7ea;
			width: 400px;
			height: 200px;
			position: relative;
			overflow: hidden;
		}
		#ball{
			background: #fbb2fb;
			position: absolute;
			width: 20px;
			height: 20px;
			left: 150px;
			top: 100px;
			border-radius: 10px;
		}
		.paddle{
			background: #bbf;
			left: 50px;
			top: 70px;
			position: absolute;
			width: 30px;
			height: 70px;
		}
		#paddleB{
			left: 320px;
		}
	</style>
	<header>
		<span style="color:blue;font-weight:bold"><h1>Crash</h1></span>
	</header>
	<div id = "scoreboard">
		<div class = "score">Player A : <span id = "scoreA">0</span></div>
		<div class = "score">Player B : <span id = "scoreB">0</span></div>
	</div>
	<div id = "game">
		<div id = "playground">
			<div id = "paddleA" class = "paddle"></div>
			<div id = "paddleB" class = "paddle"></div>
			<div id = "ball"></div>
		</div>
	</div>
	<footer>
		This is an example of creating a Ping Pong Game
	<footer>
	<script src = "js/jquery-1.4.4.min.js"></script>
	<script src = "js/html5games.pingpong.js"></script>
	<script>
	$(function(){
		alert("Welcome to the Ping Pong battle.");
	});
	</script>
</body>
</html>

javascript代码

var KEY = {  //定义键盘操作
    UP: 38,
    DOWN: 40,
    W: 87,
    S: 83
}


var pingpong = {   //定义玩家分数
    scoreA : 0,
    scoreB : 0
};
pingpong.pressedKeys = [];

//乒乓球
pingpong.ball = {
    speed: 5,
    x: 150,
    y: 100,
    directionX: 1,
    directionY: 1
}

$(function(){
    pingpong.timer = setInterval(gameloop, 30); //创建定时器

    $(document).keydown(function(e){
        pingpong.pressedKeys[e.which] = true;
    });

    $(document).keyup(function(e){
        pingpong.pressedKeys[e.which] = false;
    });
});

function gameloop(){
    moveBall();
    movePaddles();
}

function movePaddles(){
    if(pingpong.pressedKeys[KEY.UP]){
        var top = parseInt($("#paddleB").css("top"));
        $("#paddleB").css("top", top-5);
    }
    if(pingpong.pressedKeys[KEY.DOWN]){
        var top = parseInt($("#paddleB").css("top"));
        $("#paddleB").css("top", top+5);
    }
    if(pingpong.pressedKeys[KEY.W]){
        var top = parseInt($("#paddleA").css("top"));
        $("#paddleA").css("top", top-5);
    }
    if(pingpong.pressedKeys[KEY.S]){
        var top = parseInt($("#paddleA").css("top"));
        $("#paddleA").css("top", top+5);
    }
}

function moveBall(){
    var playgroundHeight = parseInt($("#playground").height());
    var playgroundWidth  = parseInt($("#playground").width());
    var ball = pingpong.ball;

    //检测球台边缘和底边
    if(ball.y + ball.speed*ball.directionY > playgroundHeight)
    {
        ball.directionY = -1;
    }
 
    //检测顶边
    if(ball.y + ball.speed*ball.directionY < 0)
    {
        ball.directionY = 1;
    }

    //检测右边
    if(ball.x + ball.speed*ball.directionX > playgroundWidth)
    {
        ball.directionX = -1;
    }

    //检测左边
    if(ball.x + ball.speed*ball.directionX < 0)
    {
        ball.directionX = 1;
    }

    ball.x += ball.speed * ball.directionX;
    ball.y += ball.speed * ball.directionY;

    //和球拍的碰撞测试
    //检测左边球拍 
    var paddleAX = parseInt($("#paddleA").css("left")) + parseInt($("#paddleA").css("width"));
    var paddleAYBottom = parseInt($("#paddleA").css("top")) + parseInt($("#paddleA").css("height"));
    var paddleAYTop = parseInt($("#paddleA").css("top"));
    if(ball.x + ball.speed*ball.directionX < paddleAX)
    {
        if(ball.y + ball.speed*ball.directionY <= paddleAYBottom &&
            ball.y + ball.speed*ball.directionY >= paddleAYTop)
            {
                ball.directionX = 1;
            }
    }

    //检测右边球拍
    var paddleBX = parseInt($("#paddleB").css("left"))
    var paddleBYBottom = parseInt($("#paddleB").css("top")) + parseInt($("#paddleB").css("height"));
    var paddleBYTop = parseInt($("#paddleB").css("top"));
    if(ball.x + ball.speed*ball.directionX >= paddleBX)
    {
        if(ball.y + ball.speed*ball.directionY <= paddleBYBottom &&
            ball.y + ball.speed*ball.directionY >= paddleBYTop)
            {
                ball.directionX = -1;
            }
    }

    //检测和球台边缘
    //检测右边
    if(ball.x + ball.speed*ball.directionX > playgroundWidth)
    {
        //玩家B丢分,重置乒乓球
        ball.x = 250;
        ball.y = 100;
        $("#ball").css({
            "left": ball.x,
            "top": ball.y
        });
        ball.directionX = -1;
        pingpong.scoreA++;
        $("#scoreA").html(pingpong.scoreA);
    }
    //检测左边
    if(ball.x + ball.speed*ball.directionX < 0)
    {
        //玩家A丢分,重置乒乓球
        ball.x = 150;
        ball.y = 100;
        $("#ball").css({
            "left": ball.x,
            "top": ball.y
        });
        ball.directionX = 1;
        pingpong.scoreB++;
        $("#scoreB").html(pingpong.scoreB);
    }


    $("#ball").css({
        "left" : ball.x,
        "top" : ball.y
    });
}

​ parseInt(string)可以将字符串转为int类型, 否则100px+5不是一个整数,其实写游戏和其他语言写一样,创建一个乒乓对象,里面定义了socreA和socreB两个属性,ball属性这里面又定义了其他属性,还有一个按键属性用来记录哪些按键被按下和松开,设置一个定时器每30毫秒调用一次,所以1秒等于1000毫秒,1000/30等于33.3,所以1秒钟游戏重绘33次

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白月光soul

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值