基于JS的别踩白块游戏

2023-10-11 03:30
文章标签 js 游戏 白块

本文主要是介绍基于JS的别踩白块游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

想做一个小项目,但是知识有限,那么来做一个基于html,css以及js的小游戏。该小游戏的所以小方块都是基于盒子来实现的,打开时的界面比较简单,用了定位,隐藏了盒子,点击”开始游戏“,”白格“将开始向下移动,此后再每一行上开始出现一个“黑格”,这个黑格是随机的,对应列上按下对应的键即可消除黑格。
界面如下:
在这里插入图片描述

运行时界面如下:
在这里插入图片描述
代码:
html:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>别踩白块</title><link rel="stylesheet" href="./index.css"><script src="./index.js"></script>
</head><body><h2>score</h2><h2 id="score">0</h2><div id="main"><div id="con"></div></div><div class="btn"><button class="start" onclick="start()">开始游戏</button></div>
</body></html>

css:

#main {width: 408px;height: 408px;background: white;border: 2px solid gray;margin: 0 auto;overflow: hidden;
}h2 {text-align: center;
}#con {width: 100%;height: 400px;position: relative;
/*隐藏所有格子*/top: -408px; border-collapse:collapse;
}
/* 行 */
.row{height: 100px;width: 100%;
}
/* 一个块 */
.cell{height: 100px;width: 100px;float: left;border: 1px solid;
}.black {background: black;
}.btn {width: 100%;text-align: center;
}.start {margin: 20px auto;width: 150px;height: 50px;border-radius: 10px;background: yellowgreen;line-height: 50px;color: #fff;
}

js:

function $(id) {return document.getElementById(id);
}function creatediv(className) {var div = document.createElement('div');div.className = className;return div;
}
var speed = 6;
var clock = null;
var flag = false
// 点击开始游戏按钮
function start() {if(!flag) {init()}else {alert('游戏已经开始,无需再次点击');}
}
// 初始化init
function init() {flag = true;for(var i = 0; i < 4; i++) {createrow();}// 添加onclick事件$('main').onclick = function (ev) {ev = ev || event;judge(ev);}clock = window.setInterval('move()', 30);
}
// 创造一个<div class="row">并且有四个子节点<div class="cell">
function createrow() {var con = $('con');var row = creatediv('row');var arr = creatcell();con.appendChild(row);for(var i = 0; i< 4; i++) {row.appendChild(creatediv(arr[i]));}if(con.firstChild == null) {con.appendChild(row);}else {con.insertBefore(row, con.firstChild)}
}
function creatcell() {var temp = ['cell', 'cell', 'cell', 'cell'];var i = Math.floor(Math.random() * 4);temp[i] = 'cell black';return temp;
}
function judge(ev) {if (ev.target.className.indexOf('black') == -1 && ev.target.className.indexOf('cell') !== -1) {ev.target.parentNode.pass1 = 1; //定义属性pass,表示此行row的白块已经被点击}if (ev.target.className.indexOf('black') !== -1) {//点击目标元素 类名中包含 black 说明是黑块ev.target.className = 'cell';ev.target.parentNode.pass = 1; //定义属性pass,表明此行row的黑块已经被点击score();}
}
// 让黑块动起来
function move() {var con = $('con');var top = parseInt(window.getComputedStyle(con,null)['top']);if(speed + top > 0) {top = 0;} else {top += speed;}con.style.top = top + 'px';over();if(top == 0) {createrow();con.style.top = '-102px';delrow();}
}
function over() {var rows = con.children;if ((rows.length == 5) && (rows[rows.length - 1].pass !== 1)) {fail();}for(let i = 0; i < rows.length; i++) {if(rows[i].pass1 == 1) {fail();}}
}function fail() {clearInterval(clock);flag = false;confirm('你最终的得分是' + parseInt($('score').innerHTML));var con = $('con');con.innerHTML = '';$('score').innerHTML = 0;con.style.top = '-408px';
}//删除某行
function delrow () {var con = $('con');if (con.childNodes.length == 6) {con.removeChild(con.lastChild);}
}
// 记分
function score () {var newscore = parseInt($('score').innerHTML) + 1;//分数加一$('score').innerHTML = newscore;//修改分数if (newscore % 10 == 0) {//当分数是10 的倍数时使用加速函数,越来越快speedup();}
}
// 加速函数
function speedup () {speed += 2;if (speed == 20) {alert('你超神了');}
}

遇到一个很神奇的问题,就是在over()这个函数里面的第一句 var rows = con.children; 之前写的是 var rows = con.childNode;那就会存在一个问题是在第一次开始游戏时会直接弹出游戏结束。关于children与childNode的区别,请见下一篇博客。

这篇关于基于JS的别踩白块游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185199

相关文章

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>