【2048小游戏】——CSS/原生js爬坑之纯CSS模态对话框&游戏结束

引言:2048小游戏的结束界面,使用纯CSS制作模态对话框,一般做模态对话框都会使用BootStrap自带的模态对话框组件方便使用,但在制作要运行在移动端的小项目时,就不能使用BootStrap,因为文件太大,下载耗时,耗费流量。



一、模态对话框的组成

2个Div,一个铺满整屛,一个显示内容

  • 坑:如何让Div铺满整屛?解决:2个办法
  1. 宽  高 100%    →    position:absolute;  →   top=0;left=0;
  2. 四个方向  margin-top/left/right/bootom  都设为0
  • 坑:如何让一个Div在整个窗口居中?
  1. 错误做法:  top  /  left   50%  不能设置居中  因为top / left是左上角的定位
  2. 正确做法:  top  /  left   50%  →  margin-top:-100px;(高的一半)   margin-left:-150px;(宽的一半)
  • 坑:模态框背景div的透明度  opacity是继承父元素的
  • 解决:background:rgba(55,55,55,.5);  使用rgba() 可以避免继承
  • 关键代码   ↓
<div id="gameover">
    <p>
        GAME OVER!<br>
        SCORE:<span id="final">0</span><br>
        <a class="btn" href="javascript:start();">TRY AGAIN!</a>
    </p>
</div>
p{
    width:480px;
    margin:0 auto;
    font-size:40px;
    font-weight: bold;
    font-family:Arial;
    padding-top: 15px;
}
#gameover{
    position:absolute;
    top:0;
    left:0;
    width:100%;
    height:100%;
    background: rgba(55,55,55,0.5);
}
二、游戏结束
  • 游戏状态: 2048游戏有两个游戏状态
  1. 运行中  → game over 模态对话框不显示
  2. 游戏结束  → game over 模态对话框显示
  • 标准状态保存:给每个状态起名 (一般全大写字母)定义常量,使特殊的值有意义,易维护
  1. const RUNNING= 1,GAMEOVER=0;
  2. RUNNING 和 GAMEOVER只是一个名称,实际存储的还是1/0,所以,并不会增大存储空间
  3. 坑:判断游戏结束的时候
  4. 解决:创建关键函数   function isGameOver(){ }
  • 游戏没有结束的条件:
  1. 有0
  2. 当前元素等于右侧元素(不用和左侧元素比较,因为左侧的元素已经和当前元素比较过了;最右侧一列元素没有右侧元素,也不用比较  c < CN-1)
  3. 当前元素等于下方元素(不用和上方元素比较,因为上方的元素已经和当前元素比较过了;最下方一行元素没有下方元素,也不用比较 r < RN-1)
  • 每一次移动后,都调用一次 isGameOver()  判断是否游戏结束
  1. 坑:调用isGameOver() 要在随机生成数之后 →  随机数把空格填满了,才可以进行游戏结束判断
  • 关键代码  ↓
var status=0;//保存游戏状态   0:游戏结束  1:运行中
const RUNNING= 1,GAMEOVER=0;
function start(){
    //创建空数组保存到data中
    status=RUNNING;//将游戏状态重置为运行中
    score=0;//将得分归零
    ……
}
//判断游戏是否结束
function isGameOver(){
    for(var r=0;r<RN;r++){
        for(var c=0;c<CN;c++){
            if(data[r][c]==0)
                return false;
            if(c<CN-1&&data[r][c]==data[r][c+1])
                return false;
            if(r<RN-1&&data[r][c]==data[r+1][c])
                return false;
        }
        return true;
    }
}
//每一次移动之后,判断游戏是否结束
if(before!=after){
        randomNum();
        isGameOver();
        updataView();
 }


注:转载请注明出处

时间: 2024-08-08 01:40:34

【2048小游戏】——CSS/原生js爬坑之纯CSS模态对话框&游戏结束的相关文章

【2048小游戏】——原生js爬坑之遍历算法显示二维数组内容

引言:做2048小游戏会将横纵方向的数字内容,存储在一个二维数组中,要将这个二维数组中的内容显示在页面上,就一定要用遍历算法来实现了. 一.二维数组存储    首先考虑用二维数组存储所有行数,列数  →  var  RN=4,CN=4; 然后再定义一个变量data 来保存这个二维数组  →  var  data; 游戏的所有主要执行程序都保存在start()函数下 → 启动游戏 保存存有行数,列数的二维数组到data中    关键代码 ↓ function start(){ data=[]; /

利用css+原生js制作简易钟表

利用css+原生js制作简单的钟表.效果如下所示 实现该效果,分三大块:html.javascript.css html部分html部分比较简单,定义一个clock的div,内部有原点.时分秒针.日期以及时间,至于钟表上的刻度.数字等元素,因为量比较多,采用jvascript生成 <!doctype html> <html> <head> <meta charset="UTF-8"> <link rel='stylesheet' h

微信小程序结合原生JS实现电商模板(二)

接 <微信小程序结合原生JS实现电商模板(一)>,在首页列表加入购物车到购物和模块增删数量,动态计算商品价格实现后,本次提交主要实现了商品详情(还不完善)简单页面,从商品详情页跳转到购物车,加入购物车和立即购买的逻辑实现:购物车结算功能完善(需添加收货地址才能结算,并完善新增.编辑.杉树地址相关操作):在分类模块实现了商品的分类展示以及不同分类对应的数据流显示,以及进入详情的逻辑操作.请不要吝啬你的发财手帮我star或转发一下,谢谢了.下面附上目前的效果:(切图自己抠的,请见谅.) 附上源码地

微信小程序结合原生JS实现电商模板(一)

前几天遇到一个朋友求助,实现购物车的相关功能,一时心血来潮,想着抽空搭建一个小程序电商平台(虽然网上有很多,但还是自己撸一遍才是王道),所以在工作之余整了一个仓库,今天提交了第一次代码,已经满足了朋友的需求,后续我会完善其他平台.现在项目里面的数据是我用静态JS模拟的,以后有可能会换其他方式,欢迎志同道合的小伙伴们一起探讨围观,如果觉得对你有所帮助,请不要吝啬你的发财手帮我star或转发一下,谢谢了.下面附上目前的效果:(切图自己抠的,请见谅.)   上项目地址:https://github.c

关于小程序支付功能的爬坑

代码大部分用的http://www.wxapp-union.com/article-2516-1.html提供的. 但是,此代码在使用org.apache.httpcomponents(4.3.5)里的HttpPost实例化时出错. 解决:maven中引入的httpclient和httpcore版本一致,如 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcl

CSS vs. JS Animation: 哪个更快

CSS vs. JS Animation: 哪个更快? CSS vs. JS Animation: 哪个更快? 基于JavaScript的动画竟然已经默默地比CSS的transition动画快了?而且,Adobe和 Google竟然一直在发布可以媲美原生应用的富媒体移动站点? 这篇文章将会逐点讲解基于JavaScript的DOM动画库,比如Velocity.js和GSAP,是如何比jQuery和基于CSS的动画库高效的. jQuery 让我们先从这个事实开始:JavaScript和jQuery被

原生JS模拟百度搜索框

近期有个新入行的小伙伴一直在问一些基础知识,突然觉得人的记忆力有限,有些平常很少用到的知识点虽简单却也其实很容易模糊,或者是一个单词,或者是一个语法.所以想着应该利用一下工作之余的碎片时间,记录一些工作上的问题和一些有趣的小案例,于是开通了播客,一方面便于自己日后翻阅,一方面给刚学习的小伙伴一个参考. 今天先写一个简单的小案例:原生JS模拟百度搜索框. 需求: 1.当在输入框输入时,每输入一个文字,就会在下方展示相关内容列表 2.每一次输入框输入,清空上一次内容 3.鼠标移入列表内容时,对应的内

原生js格式化json工具

json格式化小工具,原生js编写,直接上代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>原生js格式化json的方法</title> 6 <script> 7 //格式化代码函数,已经用原生方式写好了不需要改动,直接引用就好 8 var formatJson =

JQuery 加载 CSS、JS 文件的方法有哪些?

在进行web前端开发(http://www.maiziedu.com/course/web-px/)时,我们可能会需要使用JQuery加载一个外部的css文件或者js文件,加载外部文件的方法有多种,下面具体看看各种加载方法 JS 方式加载 CSS.JS 文件: //加载 css 文件function includeCss(filename) { var head = document.getElementsByTagName('head')[0]; var link = document.cre