博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
好程序员分享js实现简单的板球游
阅读量:4326 次
发布时间:2019-06-06

本文共 4287 字,大约阅读时间需要 14 分钟。

好程序员分享js实现简单的板球游戏大家好,本次我们来使用js来实现一个简单的板球游戏。截图如下:

首先,设计页面代码,页面代码很简单,因为整个几乎是使用js编写的,页面几乎没有代码,如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title></title>

<style type="text/css">

body{

margin: 0px;

}

</style>

<script src="js/common.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

 

</body>

</html>

 

接下来就是主要的js代码common.js,如下:

// 画布的宽高

var canvasWidth;

var canvasHeight;

// 方块的背景图片

var bg;

//

var ball;

//

var board;

// 背景方块的宽度

var breakWidth;

 

// 球的坐标和速度

var ballX = 100;

var ballY;

var xVal = 5;

var yVal = -5;

 

// 板的坐标

var boardX = 0;

var boardY;

 

// 方块数组

var breakers = [];

 

// 板的原始长度

var boardWidth = 242;

// 计时变量

var time = 0;

// 记录是否改变状态

var breakerChanged = false;

 

var col = 10;

 

window.onload = function(){

// 创建并设置canvas

var canvas = document.createElement("canvas");

canvas.width = window.innerWidth;

canvas.height = window.innerHeight;

canvasWidth = canvas.width;

canvasHeight = canvas.height;

breakWidth = (canvasWidth-10) / col;

 

// 将画布添加到body

document.body.appendChild(canvas);

var context = canvas.getContext("2d");

 

// 球的初始Y

ballY = canvasHeight - 80;

// 板的初始Y

boardY = canvasHeight - 20;

 

// 加载所有的图片

loadAllImage();

 

// 定义键盘响应事件

document.onkeydown = boardMove;

 

// 开始启动程序

setInterval(run, 20);

 

function run(){

// 清空画布

context.clearRect(0,0,canvasWidth, canvasHeight);

// 绘制背景、小球、板

context.drawImage(bg, 0, -50, canvasWidth, canvasHeight + 50);

context.drawImage(ball, ballX, ballY);

context.drawImage(board, boardX, boardY, board.width, board.height);

 

// 如果处于变长的过程中

if(breakerChanged){

// 继续计时

time++;

// 当时间达到5秒钟

if(time >= 250){

// 还原

breakerChanged = false;

time = 0;

board.width = boardWidth;

}

}

 

// 绘制方块

updateBreakers();

 

// 更新小球的位置

updateBall();

 

// 球与方块的碰撞

ballHitBreakers();

 

// 球与板的碰撞

ballHitBoard();

}

 

function boardMove(){

// 向左移动

if(event.keyCode == 37){

boardX -= 30;

if(boardX <= 0){

boardX = 0;

}

}

// 向右移动

else if(event.keyCode == 39){

boardX += 30;

if(boardX >= canvasWidth - board.width){

boardX = canvasWidth - board.width;

}

}

}

 

// 简单判断球和板的碰撞

function ballHitBoard(){

if(hit(boardX, boardY - 60, board.width, board.height, ballX, ballY)){

yVal = -yVal;

}

}

 

// 简单判断球和方块的碰撞

function ballHitBreakers(){

// 从后面开始循环

for (var i = breakers.length - 1; i >= 0; i--) {

var breaker = breakers[i];// 3个属性,item, x, y

// 如果碰撞

if(hit(breaker.x, breaker.y, breakWidth, 30, ballX, ballY)){

// 变长的状态

if(breaker.state == 1){

// 判断是否已经处于变长状态

if(breakerChanged){

// 如果已经变长,应该刷新时间

board.width = boardWidth * 1.5;

time = 0;

}else{

// 如果开始变长,就改变状态

board.width = boardWidth * 1.5;

breakerChanged = true;

}

}else if(breaker.state == 2){

// 判断是否已经处于变长状态

if(breakerChanged){

// 如果已经变长,应该刷新时间

board.width = boardWidth * 0.5;

time = 0;

}else{

// 如果开始变长,就改变状态

board.width = boardWidth * 0.5;

breakerChanged = true;

}

}

 

// 方块消失(数组删除一个元素)

breakers.splice(i, 1);

// 球返回

yVal = -yVal;

}

}

}

 

// 简单碰撞函数

function hit(bx, by, bw, bh, x, y){

if(x >= bx && x <= bx + bw && y >= by && y <= by + bh){

return true;

}else{

return false;

}

}

 

// 球的运动

function updateBall(){

ballX += xVal;

ballY += yVal;

 

// 靠近左边的边距

if(ballX <= 0){

xVal = -xVal;

}

 

// 靠近顶部的边距

if(ballY <= 30){

yVal = -yVal;

}

 

// 测试代码,让球永远不掉落

// if(ballY >= canvasHeight - 80){

// yVal = -yVal;

// }

 

// 靠近右边的边距

if(ballX >= canvasWidth - 60){

xVal = -xVal;

}

}

 

// 加载所有的方块

function createBreakers(){

// 循环行

for (var i = 0; i < col; i++) {

// 循环列

for (var j = 0; j < col; j++) {

// 得到一个4~9的随机数

var num = Math.floor(Math.random() * 6) + 4;

// 创建一个图片

var item = loadImage("img/ball/" + num + ".png");

var x = breakWidth * j + j * 2;

var y = 30 * i + 30;

 

// 键值对(key-value)

// {"item":item, "x":x, "y":y}

 

// 如果是绿色的方块,让板变长

if(num == 9){

breakers.push({"item":item, "x":x, "y":y, "state":1});

}

else if(num == 4){

breakers.push({"item":item, "x":x, "y":y, "state":2});

}

else{

breakers.push({"item":item, "x":x, "y":y, "state":0});

}

 

 

}

}

 

}

 

// 绘制所有的方块

function updateBreakers(){

for (var i = 0; i < breakers.length; i++) {

context.drawImage(breakers[i].item, breakers[i].x, breakers[i].y, breakWidth, 30);

}

}

 

function loadAllImage(){

bg = loadImage("img/ball/bg.png");

ball = loadImage("img/ball/ball.png");

board = loadImage("img/ball/board.png");

// 创建方块

createBreakers();

}

 

// 加载单张图片

function loadImage(url){

var img = new Image();

img.src = url;

return img;

}

};

 

转载于:https://www.cnblogs.com/gcghcxy/p/10984621.html

你可能感兴趣的文章
4.1 分解条件式
查看>>
Equivalent Strings
查看>>
flume handler
查看>>
收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
查看>>
H5 表单标签
查看>>
su 与 su - 区别
查看>>
C语言编程-9_4 字符统计
查看>>
在webconfig中写好连接后,在程序中如何调用?
查看>>
限制用户不能删除SharePoint列表中的条目(项目)
查看>>
【Linux网络编程】使用GDB调试程序
查看>>
feign调用spring clound eureka 注册中心服务
查看>>
ZT:Linux上安装JDK,最准确
查看>>
LimeJS指南3
查看>>
关于C++ const成员的一些细节
查看>>
《代码大全》学习摘要(五)软件构建中的设计(下)
查看>>
C#检测驱动是否安装的问题
查看>>
web-4. 装饰页面的图像
查看>>
微信测试账户
查看>>
Android ListView上拉获取下一页
查看>>
算法练习题
查看>>