基于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

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

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)