整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「推荐」分享一个用HTML写的俄罗斯方块

大家分享一个html写的俄罗斯方块:

源代码如下:

<!DOCTYPE html>

<html>

<head>

<title></title>

<style type="text/css">

.c {

margin: 1px;

width: 19px;

height: 19px;

background: red;

position: absolute;

}

.d {

margin: 1px;

width: 19px;

height: 19px;

background: gray;

position: absolute;

}

.f {

top: 0px;

left: 0px;

background: black;

position: absolute;

}

</style>

</head>

<body>

</body>

</html>

<script type="text/javascript">

var over = false,

shapes = ("0,1,1,1,2,1,3,1;1,0,1,1,1,2,2,2;2,0,2,1,2,2,1,2;0,1,1,1,1,2,2,2;1,2,2,2,2,1,3,1;1,1,2,1,1,2,2,2;0,2,1,2,1,1,2,2").split(";");

//shapes 中的每一个元素的各个数字意2两个一组,分别指该层移动的X,Y轴

function create(tag, css) {

var elm = document.createElement(tag); //创建一个tag标签

elm.className = css; //添加一个css样式

document.body.appendChild(elm); //把该标签添加到body标签中

return elm;

} //返回该标签

function Field(w, h) { //Field整个游戏界面的对象,没跳动一次,就是一次刷新

this.width = w ? w : 10;

this.height = h ? h : 20;

this.show = function() { //创建一个底层,游戏界面

var f = create("div", "f")

f.style.width = this.width * 20 + 'px';

f.style.height = this.height * 20 + 'px';

}

this.check = function(shape, x, y, d) { //判断是否到了边缘

var r1 = 0,

r2 = 'GO'; //每一次所生成的4个层绝对不会存在超出左边的同时又超出右边,故r1只有一个

for(var i = 0; i < 8; i += 2) {

//循环横坐标,查看是够超过边距

if(parseInt(shape) + x < 0 && parseInt(shape) + x < r1) {

//若向左边移动会超出边界

r1 = parseInt(shape) + x;

} else if(parseInt(shape) + x >= this.width && parseInt(shape) + x > r1) {

//若向右移动会超出边界

r1 = parseInt(shape) + x;

}

if(parseInt(shape[i + 1]) + y >= this.height || this[parseInt(shape) + x + (parseInt(shape[i + 1]) + y) * this.width]) {

r2 = "NO";

}

}

if(d == "move" && r2 == "GO") { //当此次操作是左右移动的话,就返回移动后的横坐标,只要没有超出边界,r1就肯定不为0

return r1;

} else if(d == "upchange" && r2 == "GO") { //当此次操作是变换形状时

return r1 > 0 ? r1 - this.width + 1 : r1; //其实每次移动的都是该层的很坐标,以左边为准移动的

} else {

return r2;

}

}

this.findFull = function() { //判断该行是否已经满了

for(var h = 0; h < this.height; h++) { //循环底层的纵坐标

var s = 0;

for(var w = 0; w < this.width; w++) { //循环行坐标

s += this[w + h * this.width] ? 1 : 0 //确定每个坐标点上时候有元素,以便于确定改行是否满了

}

if(s == this.width) { //若改行满了,则调用removeLine方法,一处该行的每一个元素

this.removeLine(h);

}

}

}

//清除已经填满的行

this.removeLine = function(line) {

for(var w = 0; w < this.width; w++) { //因为每个元素都是根据对象的横纵坐标在存储,所以需要重新循环横坐标,以便于取出每一个元素

document.body.removeChild(this[w + line * this.width]); //每个元素都是在body上存在着

}

//移除该行之后需要让其上的每行都向下移动一行

for(var l = line; l > 0; l--) {

for(var i = 0; i < this.width; i++) {

this[i + l * this.width] = this[i + (l - 1) * this.width]; //把上一行的元素付给下一行的元素()

if(this[i + l * this.width]) {

this[i + l * this.width].style.top = l * 20 + 'px'; //移动

}

}

}

}

this.fixShape = function(shape, x, y) { //生成落地的方块

var d = new Tetris("d", shape, x, y);

d.show();

for(var i = 0; i < 8; i += 2) { //记录每个变灰色的div层,只有成功到底底层的时候才记录

//parseInt(shape) + x 记录的为该层的横坐标

//parseInt(shape[i + 1]) + y 记录的为纵坐标

//这样是为了this[…]是唯一。

this[parseInt(shape) + x + (parseInt(shape[i + 1]) + y) * this.width] = d.divs[i / 2];

}

}

}

function Tetris(c, t, x, y) {

var c = c ? c : "c"; //若C存在,则为C,不存在,则赋值

this.field = null;

this.divs = [create("div", c), create("div", c), create("div", c), create("div", c)]; //调用create方法创建元素

var ttt = t;

this.reset = function() { //创建一个方块

this.x = typeof x != 'undefined' ? x : 3;

this.y = typeof y != 'undefined' ? y : 0;

this.shape = t ? t : (shapes[Math.floor(Math.random() * (shapes.length - 0.00001))].split(","));

this.show();

//当刚生的方块就不能再向下移动的时候,游戏结束

if(this.field && this.field.check(this.shape, this.x, this.y, "down") == "NO") {

over = true;

this.field.fixShape(this.shape, this.x, this.y);

alert('game over');

}

}

this.show = function() { //根据生成的方案,初始化方块。

for(var i = 0; i < this.divs.length; i++) {

this.divs.style.left = (this.shape[i * 2] * 1 + this.x) * 20 + 'px';

this.divs.style.top = (this.shape[i * 2 + 1] * 1 + this.y) * 20 + 'px';

}

}

this.vMove = function() { //该方法使方块向下移动

if(this.field.check(this.shape, this.x, this.y + 1, "down") == "GO") { //若还能向下移动就执行

this.y++;

this.show();

} else {

this.field.fixShape(this.shape, this.x, this.y); //不能向下移动了,就生成固定的块。

this.field.findFull();

this.reset();

};

}

this.hMove = function(moveNo) { //该方法使方块左右移动

var r = this.field.check(this.shape, parseInt(this.x) + moveNo, this.y, 'move');

if(r != 'GO' && r == 0) {

this.x += moveNo;

this.show();

}

}

this.rotate = function() { //当按动上键时,改变方块的排列方向

var s = this.shape;

var newShape = [3 - s[1], s[0], 3 - s[3], s[2], 3 - s[5], s[4], 3 - s[7], s[6]]; //先把坐标循环180度,然后纵横坐标互换。

var r = this.field.check(newShape, this.x, this.y, 'upchange'); //调用check方法,确定时候可以改变

if(r == "NO") { return; };

if(r == 0) { //若为0 ,则说明改变后的块并没有超出范围,继续执行

this.shape = newShape;

this.show();

} else if(this.field.check(newShape, this.x - r, this.y, 'move') == 0) { //超出后,根据返回值,让其向相应的方向移动。以保证并不会超出范围

this.x -= r;

this.shape = newShape;

this.show();

}

}

this.reset();

}

var f = new Field();

f.show();

var t = new Tetris();

t.field = f;

t.reset();

window.setInterval("if(!over)t.vMove();", 500); //调用向下移动的方法

document.onkeydown = function(e) { //当按上下左右键时,触发

if(over) return;

var e = window.event ? window.event : e;

switch(e.keyCode) {

case 38: //up 当按下上键时

t.rotate();

break;

case 40: //down

t.vMove();

break;

case 37: //left

t.hMove(-1);

break;

case 39: //right

t.hMove(1);

break;

}

}

</script>

路过的朋友给个关注哦,需要打包源码的私信小编。

互联网高速发展的今天,我们通过浏览器可以看到各种各样的网站,包含了各式不同的领域还有内容,通过点击网站上的标签和栏目我们就能够很方便地看到网站上显示的各种数据,而这些都是建立在HTML这种标记语言的基础上做到的。

HTML的英文全称为Hyper Text Markup Language,中文称作超文本标记语言,是一种专门用来建立网站的标识语言。其中包括了许多标签将分散的网络数据连接到一起,聚合同一之后形成了我们现在所看到的网页。

看到这里是不是有许多朋友想要知道这个HTML语言该怎么去学习呢?是需要找老师统一学,还是去图书馆找专业书籍自己学好呢?不用担心,因为今天要给大家推荐的就是一个专门为大家提供各种编程语言教程的学习网站。

这个网站名叫 runoob,直接在浏览器上搜索即可找到。


图片来自RUNOOB网页截图

在首页可以看到该栏目的第二个就是关于HTML的学习教程,点击左边的方框可以调整你的课程进度,在第一章节的教程中很清晰地讲解了什么是HTML,以及告诉了你一些关于网站建立的小知识。

下方的提示框会给你提供一些对HTML零基础新手的科普,关于这种标记语言应该如何进行保存,如何查看文件后辍名,如何打开代码文件等等,还会提供一些专用工具供你学习使用。同时网站会给你简单介绍一些网页编程语言的区别,还有各种用途上的区分,非常地详细。


图片来自RUNOOB网页截图

在第三章节的编辑器一栏里,会提供给你一些HTML的专用编辑器,例如VS Code,还有sublime text 等实用工具,在后面会教你如何将这些HTML必备编辑器下载并安装,然后在浏览器上面运行。

通过插件还有语言编程的格式我们就能够学会如何制作第一步的标题了,刚开始的一步比较简单,相信大家很快就能学会如何在网页上显示自己打入的文字了。之后进一步的学习就是关于如何调整文字段落,还有各种标识的使用。


图片来自RUNOOB网页截图

在如何进行文字排版编辑的方面,教程中也讲述得很详细,包括一些用户们常犯的错误,还有一些网页的实例,甚至是这个教学网站上的排版示范都会进行一一讲解。

更深入的章节会对如何进行图像排列,传输等方面进行细讲,教程中把大部分网站会使用到的技巧还有排版方式都分成了许多个小片段,方便大家能够对每个方面针对性地学习。这些内容并不多,几乎每一个片段都是用很直白的语言进行讲解,方便所有人都能够看懂,并且在下方都会有更详细的术语解析,还有一些比较难懂的点会举例解释。


图片来自RUNOOB网页截图

经过十几章节的教学之后,基本上能够掌握HTML语言的基本用法,还有一些简单的操作了,这个时候如果想要进阶学习的话还可以在网站上查找其他的进阶语言用法,例如CSS, JavaScript等等复杂一些的语言,相应的你也会学到更多如何运营网页的方法。

当然如果想要自己建立一个网站的话,还需要更多资源还有设备,例如高速的网络连接保持网页的稳定性,以及稳定的服务器,用来保证自己的网页24小时都能保持流畅可用。不过这些都是在学会了如何建立网页之后才考虑的事了。



现在网上也有许多编程教学,在网上自学一门知识一门语言变得非常方便,但是仅仅是拥有资源还是不够的。学习如何建立自己的网站还需要大量的努力以及知识的积累,通过不断的练习还有实践才能自如地使用,只有基础扎实,建立出来的网站才能够长久。但还需要大家能够行动起来,只有去学习去实践才能够真正学会东西,希望这个教学网站推荐能够帮到更多人!

为一名前端工程师,经常在写完 HTML 以后,才觉得真正的噩梦要开始了,啊,写 CSS 的时候,面对满屏乱飞的组件,真想手动给他们挪到该在位置上……

都说 CSS 很难掌握,最愁给页面编写样式,其实都是因为还没有形成一个对象 CSS 宏观的了解,只要有了正确的学习方法、设计思维,再通过不断的积累,就能轻松地掌握它。接下来我会把掌握 CSS 的 5 技巧整理一下,让你在以后编写 CSS 的时候不用再发愁。

样式调整


CSS 最基本的功能就是调整 HTML 的样式,可以设置元素的宽高、字体的颜色、大小和间距、背景颜色或图片等。这些跟传统的富文本编辑器不一样比如 word 是一样的效果。有些属性可以一次性设置多个项目,比如background可以同时设置:

  • background-color
  • background-image
  • background-origin
  • background-position
  • ...等等

action

业余时间经常到像 mdn 之类的文档网站上去查它们的用法,能长不少见识。

布局调整


CSS 的一大难题就在于对页面进行整体布局,这个时候就需要把思维放到一个整体上来,对布局进行规划,然后合理利用 css 的 flex 和 grid 来实现。

多数情况下的页面并不是规规矩矩的布局,经常会有层叠、覆盖、偏移等奇特的布局方式,所以 CSS 有脱离文档流这个概念,使用 absolute 绝对定位、fixed 固定定位、又或者是使用 float 属性都会导致元素脱离正常的文档流,正常的文档流是说元素都是从上到下,从左到右依次排列的(块级元素因为占据一整行,所以都是从上到下)。而元素脱离文档流之后,这个元素就相当于被拿走,后边的元素会占用这个元素的空间,以此类推。而这个单独被拿走的元素则可以通过像 left,top 之类的属性,根据一定的规则来自由移动,如果有重叠,则可以通过 z-index 来控制谁在上谁在下。需要注意的是,使用 tansform 属性调整元素的位置不会导致它们脱离文档流,它们所占的空间会停留在原位。


响应式布局

响应式布局用 CSS 实现比较简单,通过 @media 查询屏幕宽度,根据页面的显示效果,把相应的样式覆盖,来让页面显示正常。

action

要训练自己对布局的规划,可以看一下其他的网站,从简单规整的开始,逐步分析它们的布局,例如导航、头部区域、内容分区和底部信息,自己用简单的 HTML 元素方块把它规划出来,忽略组件细节,慢慢的再去看一些不规则布局的网站,再用自己的方法把它实现出来,慢慢的就会形成一种思路,看到设计稿就能知道该怎么大体规划网站的布局了。

学习 CSS 建议看的就是 MDN[1] 和 W3Schools[2],随时查阅属性的含义,如果想看具体的特效或者图形怎么实现,可以谷歌搜索或者每天浏览一下 codepen 找找灵感。最重要的是一定要动手去写,等积累的多了之后,就会形成套路。


需要私我 “资料” 获取!!