JS写的一个方块移动游戏


<script>
//用于判定是否是开始初始化方块
var mark = false;
var starttime, endtime, finaltime = 0; //记录游戏时间
var array = new Array(); //用一个数组装所有绿色方块对象
var timerarr = new Array(); //记录每个绿色方块 和 对应的计时器id

function move(e){
var xy = document.getElementById("xy");
var self = document.getElementById("self");
x = e.clientX;
y = e.clientY;
xy.value = "当前坐标:"+x +","+y;
if(x>=454 && x<=530 &&y>=285 && y<=355 && mark==false){
mark = true;
initothers(20);
}
target(e,x,y);
}

//线宽4px 格边长36px target函数定位白色方块的位置
function target(e,x,y){

var self = document.getElementById("self");
if(x>=12 && x<=855 && y>=40 &&y<=525 && mark ==true){
self.style.left = x +'px';
self.style.top = y +'px';
}
}
//初始化白方块位置
function init(){
var today = new Date();
starttime = today.getTime();
document.getElementById("self").style.left = 454+'px';
document.getElementById("self").style.top = 282+'px';
}
//用一个对象存储绿色方块信息
function piece(){
piece.prototype.id = -1; //方块编号 从0开始
piece.prototype.dire = 0; //移动方向 1上 2下 3左 4右
piece.prototype.top = 0;
piece.prototype.left = 0;
}

//初始化num个绿色移动方块
function initothers(num){
for(var i=0;i<num;i++){
document.getElementById("pan").innerHTML += "<div id='"+i+"'; style='height:36px;width:36px;background-color:#00FF00;z-index:100; position:absolute;left:-50px'></div>";
//num1表示从横坐标出现还是纵坐标<1表示横 >1表示纵 num2 >1表示沿着坐标轴运动 <1表示逆着坐标走
var num1 = Math.random()*2;
var num2 = Math.random()*2;
var top1 = 43; //top1表示从上向下移动
var top2 = 563; //top2表示从下向上移动
var left1 = 14; //left1表示左-->右
var left2 = 894; //右-->左
var p = new piece();
p.id = i;

if(num1<1){
if(num2>1){ //从上往下移动
p.dire = 2;
p.top = top1;
p.left = (Math.ceil(Math.random()*23)*40-26);
document.getElementById(i).style.left = p.left+'px';
document.getElementById(i).style.top = top1+'px';

}else{ //从下往上移动
p.dire = 1;
p.top = top2;
p.left = (Math.ceil(Math.random()*23)*40-26);
document.getElementById(i).style.left = p.left+'px';
document.getElementById(i).style.top = top2+'px';

}
}else{
//从左向右移动
if(num2>1){
p.dire = 4;
p.top = (Math.ceil(Math.random()*14)*40+3);
p.left = left1;
document.getElementById(i).style.left = left1+'px';
document.getElementById(i).style.top = p.top+'px';
}else{ //右向左
p.dire = 3;
p.top = (Math.ceil(Math.random()*14)*40+3);
p.left = left2;
document.getElementById(i).style.left = left2+'px';
document.getElementById(i).style.top = p.top+'px';
}
}
array.push(p);
}

//初始化完成 触发移动
var n;
for(n in array){
go(n,array[n].id,array[n].dire);
}
}

//重新定位一个绿色方块location
function location(timerid,i,n,p){

clearInterval(timerarr[timerid]);
//alert(timerarr[timerid]);
var num1 = Math.random()*2;
var num2 = Math.random()*2;
var top1 = 43;
var top2 = 563;
var left1 = 14;
var left2 = 894;

if(num1<1){
if(num2>1){
p.dire = 2;
p.top = top1;
p.left = (Math.ceil(Math.random()*23)*40-26);
document.getElementById(i).style.left = p.left+'px';
document.getElementById(i).style.top = top1+'px';
}else{
p.dire = 1;
p.top = top2;
p.left = (Math.ceil(Math.random()*23)*40-26);
document.getElementById(i).style.left = p.left+'px';
document.getElementById(i).style.top = top2+'px';
}
}else{
if(num2>1){
p.dire = 4;
p.top = (Math.ceil(Math.random()*14)*40+3);
p.left = left1;
document.getElementById(i).style.left = left1+'px';
document.getElementById(i).style.top = p.top+'px';
}else{
p.dire = 3;
p.top = (Math.ceil(Math.random()*14)*40+3);
p.left = left2;
document.getElementById(i).style.left = left2+'px';
document.getElementById(i).style.top = p.top+'px';
}
}
go(n,p.id,p.dire);
}

//绿色方块按规律直线移动
function go(n,i,dire){
//当一个绿色方块出界 重新初始化一个进入界面
var speed = Math.ceil(Math.random()*3)*10+10; //速度随机

if(dire==2){
timerarr[i] = setInterval("array["+n+"].top>=565 ? location("+i+","+i+","+n+",array["+n+"]): array["+n+"].top+=8;document.getElementById("+i+").style.top = array["+n+"].top+'px'; check(array["+i+"])",speed);
}
if(dire==1){
timerarr[i] = setInterval("array["+n+"].top<=41 ? location("+i+","+i+","+n+",array["+n+"]): array["+n+"].top-=8;document.getElementById("+i+").style.top = array["+n+"].top+'px';check(array["+i+"])",speed);
}
if(dire==4){
timerarr[i] = setInterval("array["+n+"].left>=896 ? location("+i+","+i+","+n+",array["+n+"]): array["+n+"].left+=8;document.getElementById("+i+").style.left = array["+n+"].left+'px';check(array["+i+"])",speed);
}
if(dire==3){
timerarr[i] = setInterval("array["+n+"].left<12 ? location("+i+","+i+","+n+",array["+n+"]): array["+n+"].left-=8;document.getElementById("+i+").style.left = array["+n+"].left+'px';check(array["+i+"])",speed);
}
}

//检查是否与白色方块相撞 传入绿色方块的对象进行判断
function check(t){
if(t.left<=x+75 && t.left>=x-36 && t.top<=y+75 && t.top>=y-36){
var today = new Date();
endtime = today.getTime();
finaltime = (endtime - starttime - 0) / 1000;
window.alert('游戏结束!你坚持了 ' + finaltime + ' 秒…');
//alert('鼠标坐标'+x+','+y+' 方块坐标'+t.left+','+t.top);
//重新载入页面
document.location.reload();
}
}
</script>




<body onload="init();">
<input id ="xy" disabled=true/>
<!--<button id="self" style="position:relative;">ssss</button> -->
<div id="pan" style=" height: 565; width: 925; background-image:url(http://dl.iteye.com/upload/picture/pic/97696/26d1caeb-c0ca-38e2-87ce-56e862235a79.jpg);background-repeat:no-repeat;" onmousemove="move(event)">
<div id="self" style="height:76px;width:76px; background-color: white; position:absolute;border-width:1px; border-style:solid;border-color: red;"></div>
</div>

</body>
### 回答1: 好的,下面是用 JavaScript 俄罗斯方块游戏的基本思路: 1. 首先,我们需要建立游戏的框架,这可以通过 HTML5 的 canvas 元素来实现。在 canvas 中,我们可以使用 JavaScript 绘制各种图形,并通过操作 canvas 上的像素来实现游戏的画面更新。 2. 接着,我们需要定义俄罗斯方块的各种形状,并设计出用于操控方块的各种动作(例如向左、向右、旋转等)。这可以通过 JavaScript 的数组和对象来实现。 3. 接下来,我们需要实现游戏的主循环,在每一帧中,我们需要更新方块的位置,并检测是否有方块落地或撞到其他方块。这可以通过 JavaScript 的 setInterval 函数来实现。 4. 最后,我们需要为游戏增加一些交互性,这可以通过监听用户的键盘输入来实现。例如,我们可以通过监听键盘的左右箭头键来控制方块向左或向右移动,通过监听上箭头键来控制方块旋转等。 这就是用 JavaScript 俄罗斯方块游戏的基本思路。希望这些信息对你有所帮助。 ### 回答2: 要用JavaScript一个俄罗斯方块游戏,首先需要定义游戏的基本规则和逻辑。 1. 游戏区域:使用HTML5的canvas元素创建一个固定大小的游戏区域,可以使用CSS样式设置样式和边框。 2. 游戏方块:使用数组来表示方块的形状和位置。可以定义一个方块对象,包含方块的坐标和颜色信息。 3. 方块移动:使用键盘事件监听用户的输入,可以响应上、下、左、右箭头键的按下事件。根据键盘事件来更新方块对象的坐标。 4. 旋转方块:定义一个旋转函数,根据方块的形状和当前状态,计算出旋转后的新形状。 5. 碰撞检测:在每次方块移动或旋转后,需要检测方块是否与已存在的方块或边界发生碰撞。可以使用辅助函数来判断是否发生碰撞。 6. 生成新方块:当一个方块落到底部或与其他方块碰撞后,需要生成一个新的方块,并将当前方块加入已存在方块的数组中。 7. 消除方块:当一行方块被填满后,需要将该行方块消除,并将上面的方块下落。可以使用HTML5的canvas的API来绘制方块,当消除方块时重绘游戏区域。 8. 游戏结束判断:当新生成的方块与已存在的方块发生碰撞时,游戏结束。可以在canvas上绘制“Game Over”文本来提示玩家。 以上是一个简单的俄罗斯方块游戏的设计思路,你可以根据实际需求和个人喜好进行功能扩展和界面美化。希望这些信息对你有帮助! ### 回答3: 要用JavaScript一个俄罗斯方块游戏,我们可以按照以下步骤实现: 1. 创建文件和HTML结构:创建一个HTML文件(如index.html)和一个JavaScript文件(如script.js)。在HTML文件中添加一个容器元素来承载游戏画面。 2. 设计游戏画面和规则:使用JavaScript创建游戏画布,并定义游戏规则。例如,游戏画布可以是10行20列的网格,俄罗斯方块由不同形状的方块组成,玩家需要旋转和移动方块以使其在底部形成完整的行。 3. 定义方块:用JavaScript创建一个方块对象,包含方块的形状、颜色和位置等属性。可以使用二维数组表示方块的形状,0表示方块的空位置,1表示方块的实际位置。 4. 控制方块的移动:使用JavaScript代码,通过监听玩家的键盘事件来控制方块的移动。例如,按左键将方块向左移动一列,按右键将方块向右移动一列,按下键加快方块的下落速度等。 5. 碰撞检测:编碰撞检测函数,用于检测方块是否与其他方块或游戏边界发生碰撞。如果方块碰到其他方块或到达底部行,则将其固定在游戏画布上,并生成下一个方块。 6. 消除行:在每次方块固定后,检测是否有完整的行。如果有完整的行,则将其消除,并将上方的方块下移一行。这需要更新游戏画布和计分。 7. 游戏结束:当方块无法继续下落时,游戏结束。可以在游戏结束时弹出提示框显示游戏得分,并重置游戏。 8. 添加音效和动画效果(可选):使用JavaScript的音频和动画API,为游戏添加音效和动画效果,增加游戏的视觉和听觉体验。 以上是一个简单的实现俄罗斯方块游戏的步骤。当然,根据个人的创意和实现方式,代码可能会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值