js消除小游戏(极简版)`

js小游戏极简版

  (1) 基础布局

  

<div class = "box">
	<p></p>
	<div class="div"></div>
</div>

      (2)简单的基础样式

* {
				margin: 0;
				padding: 0;
			}

			div.box {
				width: 1000px;
				height: 700px;
				border: 1px solid #008B8B;
				box-sizing: border-box;
			}

			p {
				border-radius: 50%;
				height: 20px;
				width: 20px;
				background-color: darkkhaki;
				position: absolute;
				top: 660px;
				left: 490px;
				z-index: 2;
			}

			span {
				position: absolute;
				width: 100px;
				height: 20px;
				background-color: sandybrown;
				box-sizing: border-box;
				border: 1px solid bisque;
			}              //js添加的小方块样式

			.div {
				width: 100px;
				height: 20px;
				background-color: #ccc;
				position: absolute;
				top: 680px;
				left: 450px;
			}

    (3)js部分

         一, 添加五排(没排十个小方块)

for (var j = 0; j < 5; j++) {
				for (var i = 0; i < (1000 / 100); i++) {
					var span = document.createElement("span")
					span.style.left = a + "px";
					a += 100;
					span.style.top = b + "px";
					document.body.appendChild(span)
				}
				b += 20;
				a = 0;
			}

  

    (4)获取选择器

      

var aspan = document.querySelectorAll("span")
var odiv = document.querySelector(".div");
var op = document.querySelector("p");

    (5)小游戏中方向键的绑定效果

document.onkeydown = function(eve) {
			var e = eve || window.event;
			var code = e.keyCode || e.which;
			var taeget = e.target || e.srcElement;
			//上下左右控制移动,并设置移动的div的边界;
			onoff++;//开关
			fn(onoff);//下面会用              //上下左右的绑定,即边界限定(不允许超过边界)
			switch (code) {
				case 37:
					if (odiv.offsetLeft - 20 <= 0) {
						odiv.style.left = "0px";
					} else {
						odiv.style.left = odiv.offsetLeft - 20 + "px";
					}
					break;
				case 38:
					if (odiv.offsetTop <= 400) {
						odiv.style.top = "400px";
					} else {
						odiv.style.top = odiv.offsetTop - 20 + "px";
					}
					break;
				case 39:
					if (odiv.offsetLeft + 100 >= 1000) {   //100是方块的width,
						odiv.style.left = 1000 - 100 + "px";
					} else {
						odiv.style.left = odiv.offsetLeft + 20 + "px";  //20是元素的高度
					}
					break;
				case 40:
					if (odiv.offsetTop + 20 >= 700) {
						odiv.style.top = 700 - 20 + "px";
					} else {
						odiv.style.top = odiv.offsetTop + 20 + "px";
					}
					break;
			}

     (6)

function fn(n) {
			if (n == 1) {      //操作5的按键事件触发 , 但是按键事件只能触发一次,所以需要借助开关计时,onoff == 1 时才可以用
				var t;
				var lSpeed = random(4, 5)*Math.pow(-1,random(1, 2));//设置个水平方向的速度(正负表示向左向右)  随机数  封装在最后
				var tSpeed = -random(4, 5);                         //设置个数值方向的速度(初始速度向上,所以开始时为负值)
				clearInterval(t);
				t = setInterval(function() {
					// 设置小球的边界
					// if(op.offsetLeft + lSpeed>=980){
					if (op.offsetLeft+lSpeed >= 980) {
						// op.style.left = 980 + "px";
						lSpeed = lSpeed * (-1);              //设置小球的速度方向  触碰到边界就反向
					} else if (op.offsetLeft+lSpeed <= 0) {
						lSpeed = lSpeed * (-1);
					} else {
						op.style.left = op.offsetLeft + lSpeed + "px";
					}
					if (op.offsetTop+tSpeed <= 0) {
						tSpeed =tSpeed*(-1);
					} else {
						op.style.top = op.offsetTop + tSpeed + "px";
					}

					if((op.offsetTop>=odiv.offsetTop-20)&&(op.offsetTop<=odiv.offsetTop)&&
					(op.offsetLeft>=odiv.offsetLeft-10)&&(op.offsetLeft<=odiv.offsetLeft+90)     //未做精简的部分,比较乱 头脑清晰者课观之,思路奇葩不予讲解
					){
						// console.log(1)
						//bug 开始按上键;
						tSpeed =tSpeed*(-1);
					}

					if(op.offsetTop>=690){                       // 判断小球出局,游戏结束,所有数据重置
						alert("结束");
						clearInterval(t);
						op.style.left = "490px";
						op.style.top = "660px";
						odiv.style.top = "680px";
						odiv.style.left = "450px";
						for(var i=0;i<aspan.length;i++){           //小方块的样式重新显示出来
							aspan[i].style.display = "block";
						}
						onoff = 0;                             // 开关也重开;
					}

					var l = aspan.length;
					for(var i=0;i<aspan.length;i++){
						if((op.offsetTop <= aspan[i].offsetTop+20)&&(op.offsetTop >= aspan[i].offsetTop)                            &&(op.offsetLeft-10 >= aspan[i].offsetLeft)&&(op.offsetLeft+10 <= aspan[i].offsetLeft+100) )//未做精简的部分,比较乱 头脑清晰者课观之,思路奇葩不予讲解
                                  {
							aspan[i].style.display = "none";     //小球和方块相接触 小方块的display:none;
							l--;
							console.log(l)              //测试专用
							if(l == 0){
								alert("游戏结束")         //方块全部消失时,弹出游戏结束;
							}
							}
					}

				}, 30)                }              }

       最后差点忘记

function random(m, n) {
			return Math.round(Math.random() * (m - n) + n)
		}

  完整效果图如下:

:

    (7)测试:

      bug1:开始按键盘不能按上键,  原因:小球与灰色方块接触返回机制设置(方块的中间的水平线为小球反弹分割线,反复触碰),所以很快速度翻转

      bug2:灰色方块去碰弹回来的小球时,如果是侧边接触,会发生bug1,同上

      bug3:有些方块看似碰到 缺不消失,  原因,触碰小时规则的书写也许有点不当之处

原文地址:https://www.cnblogs.com/xy88/p/12001808.html

时间: 2024-08-23 17:23:16

js消除小游戏(极简版)`的相关文章

Pascal小游戏 俄罗斯方块怀旧版

俄罗斯方块怀旧版(注释版) {$APPTYPE GUI}{$MODE DELPHI}program WinPiece; usesWindows; constAppName = 'WinPiece';pm = 25; vardc : hdc;AMessage : Msg;hWindow: HWnd;hPen ,hBrush : longword;intNextPiece, intCurPiece,intTempPiece : longint;BigMap : array [0..11,-4..20

原创记忆小游戏-HTML网页版

自己设计的一款记忆里的小游戏,开发平台Dreamweaver,只用HTML和JS就可实现(插件用到了JQ),很简单供初学者参考,源码素材都分享给大家: 游戏的设计规则很简单:开始的时候16宫格全部隐藏,点击开始格子里面会显示随机生成的三种颜色的钻石,5秒钟的记忆时间,五秒后隐藏钻石,同时上面显示需要找的钻石颜色,用户凭记忆选出所有的该颜色的钻石. 实现的方法也很简单,主要是几个重要状态和一个二维数组的处理以及一些字符串变量的处理,最后是根据所用时间和正确率成绩结算的一个小算法. 源码工程文件下载

JS写小游戏(一):游戏框架

前言 前一阵发现一个不错的网站,都是一些用html5+css+js写的小游戏,于是打算学习一番,写下这个系列博客主要是为了加深理解,当然也有一些个人感悟,如果英文好可以直接Click Here. 概述 一般,小游戏都要关注两个问题:刷新和交互.因为游戏一般是动态的,所以需要不断刷新.JavaScript是单线程,如果用C语言写过贪吃蛇之类的小游戏,应该知道,单线程一般是挂起一个时间来达到动态效果.比如C语言的Sleep(),JS的setInterval()等.但是js还有一种更高性能的方法req

2048小游戏(变态版哦)

近日,由于博主同学暑假有个作业是写个2048小游戏,我一听挺好玩的..然后就开始了.. 首先,2048在移动过程中的规则其实也没有特别难,但是感觉也不是一句话就能说完的.(不过玩的多--感觉总是有的) 废话不多说,其实博主同学提供了pdf描述了2048的算法. 各位筒子入坑前请先过几眼这个规则,以及其算法(当然我觉得算法第二点有点问题,后述) 那么在游戏的编写前,可以先对细枝末节做一些准备. 1.出现数字2/4的概率 int getRand() { int i = rand() % 10; if

白话kali linux上可以安装什么小游戏(好奇版)

技术博客的可读性非常重要,这也是技术博客写作的重要原则. 电脑系统是kali linux2018.1版本的,64bit 游戏是极客精神的产物,这句话没毛病. 因为之前在windows电脑上一直都是很方便的下载游戏,玩,像红色警戒2,血战上海滩,植物大战僵尸之类的单机游戏,当时也是给我带来了巨大的快乐,时至今日,如何在kali上安装一些非常小的游戏,对于我来说,是非常激发好奇心的一件事,这里也有几个常见的,甚至非常古老的游戏. 这里会有图片一一见证. 开始之前先apt-get update 1.俄

JS的小游戏&quot;贪吃蛇&quot;

贪吃蛇儿时的回忆,今天刚好学习到这了,就刚好做了一个,也是学习了吧,需要掌握的知识: 1,JS函数的熟练掌握, 2,JS数组的应用, 3,JS小部分AJAX的学习 4,JS中的splice.shift等一些函数的应用, 基本上就这些吧,下面提重点部分: 前端的页面,这里可自行布局,我这边提供一个我自己的布局: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org

【极简版】SpringBoot+SpringData JPA 管理系统

前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBoot+SpringData JPA的环境,测试接口的时候也成功获取得到数据了. 带你搭一个SpringBoot+SpringData JPA的Demo 我的目的是做一个十分简易的管理系统,这就得有页面,下面我继续来讲讲我是怎么快速搭一个管理系统的. ps:由于是简易版,我的目的是能够快速搭建,而不在

cookie——登录注册极简版

本实例旨在最直观地说明如何利用cookie完成登录注册功能,忽略正则验证. index.html <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scal

js打字小游戏

<html> <head> <meta charset="utf-8"> <style> #conatiner{ width:400px; height:500px; border:1px solid #eee; position: relative; } </style> </head> <body> <span>typing</span> <div> <sp