别踩白块简单实现

  • 刚开始学习javascript,想找个小项目练练手,所以就写了一个简单的别踩白块网页版小游戏,不是很复杂,但是刚开始的时候还是觉得无从下手,写这篇文章以防我自己以后忘了
  • 到底还如何做呢?
    1、 四行div,每行div有四小div并排,每四个必有一个黑块
    2、使用定时器控制div向下移动
    3、添加onclick事件判断黑块是否被点击
    4、设置死亡条件和分数
    html代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>别踩白块</title>
    <link rel="stylesheet" type="text/css" href="whiteblock.css">
</head>
<body>
<h2 id="sco1">score</h2>
<h2 id="sco">0</h2>
<div id="main"><div id="con"></div></div>/*main为游戏区,con为白块黑块区,白块黑块的div在js代码中生成*/
<button id="bt">开始游戏</button>
</body>
<script src="whiteblock.js"></script>
</html>

css布局

*{
    margin: 0px;
    padding: 0px;
}
h2{
    text-align: center;
}
#sco1{
    margin-top: 100px;
}
#main{
    width: 400px;
    height: 400px;
    margin-left: auto;
    margin-top: 50px;
    margin-right: auto;
    position: relative;
    border: 1px solid gray;
    overflow: hidden;
}
#con{
    width: 100%;
    /*border: 1px solid #87f71e;*/
    height: 400px;
    position: relative;
    top: -100px;/*为了让白块从第二层开始,从最后一层还玩不玩了*/
}
.rows{
    width: 100%;
    height: 100px;

}
.cell{
    width: 100px;
    height: 100px;
    float: left;
    background-color: white;
    /*border: 1px solid #fb0d1b;*/
}
.black{
    width: 100px;
    height: 100px;
    background-color: black;
    /*border: 1px solid #fbfa07;*/
    float: left;
}
#bt{
    /*position: absolute;*/
    /*left:400px;*/
    /*top:300px;*/
    /*z-index: 1;*/
    margin-left: 730px;
    margin-top: 20px;
    height: 30px;
    width: 60px;
}

javascript代码


    var speed=2;
    var clock=null;
    function createRows() {//创建一行白块(当然其中有个黑块)
    var content=$("con");
    var row=createDiv("rows");
    
    var cells=getCell();//得到黑块和白块的class值
    for(var i=0;i<4;i++)
    {
        row.appendChild(createDiv(cells[i]));
    }
    if(content.firstChild==null)
    {
        content.appendChild(row);
    }
    else
    {
        content.insertBefore(row,content.firstChild);
    }
}
function getCell() {//返回一行的块的class
    var cCell=["cell","cell","cell","cell",];
    var cellIndex=Math.floor(Math.random()*4);随机生成黑块位置
    cCell[cellIndex]="black";
    return cCell;
}
function createDiv(className) {//创建一个白块
    var cdiv=document.createElement("div");
    cdiv.className=className;
    return cdiv;
}
function $(Element) {//为了方便,把通过id查找元素的方法拿了出来
    return  document.getElementById(Element);
}
function cclick(ev) {//点击函数
    // console.log(ev.target.className);
    if(ev.target.className.indexOf("black")!==-1)//点到黑块
    {
        ev.target.className="cell";
        ev.target.parentNode.pass=1;
        cscore();
    }
    else {//点到白块
        die();
    }
}
function delet() {//删除一行
    var content=$("con");
    if(content.childNodes.length==6)
    {
        content.removeChild(content.lastChild);
    }
}
function move() {//下移
    var content = $("con");
    var top = parseInt(window.getComputedStyle(content, null)["top"]);

    if (top + speed > 0) {
        top = 0;
    }
    else {
        top += speed;
    }
    // console.log(top);
    content.style.top = top + "px";
    //
    console.log(content.childNodes.length)
    if (top == 0) {
        createRows();
        content.style.top = '-100px';
        delet();
    }

    else if(top==(-100+speed))
    {
        var roww=content.childNodes;
        console.log(roww[roww.length-1].pass);
        if(roww.length==5&&roww[roww.length-1].pass!==1)
        {
            die();
        }
    }
}
function  die() {
    clearInterval(clock);
    alert("游戏结束,得分:"+parseInt($("sco").innerHTML));

}
function cscore() {
    var score=$("sco");
    var newscore=parseInt(score.innerHTML)+1;
    score.innerHTML=newscore;
    if(newscore%10==0)
    {
        speedadd();
    }

}
function speedadd() {
    speed+=2;
}
function init() {

    for(var i=0;i<4;i++)
    {
        createRows();
    }
    $("main").onclick=function (ev) {
        cclick(ev);
    };
    clock=window.setInterval("move()",30);

}
init();
$("bt").onclick=function(ev)
{
    location.replace(location);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值