国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

純CSS實(shí)現(xiàn)密室逃脫游戲

開發(fā) 前端
“密室逃脫”這個詞想必大家并不陌生,在以前的flash時代,這是一類很經(jīng)典的益智游戲之一。

 “密室逃脫”這個詞想必大家并不陌生,在以前的flash時代,這是一類很經(jīng)典的益智游戲之一。玩家常常會被困在一間密室中,而過關(guān)的目的就是想法設(shè)法逃出這件密室。以下是筆者玩的最早的一個密室逃脫游戲——深紅房間,它也可以說是密室逃脫類游戲的先祖。

接下來,筆者要用純CSS實(shí)現(xiàn)一款類似的密室逃脫類游戲。

是的,你沒聽錯,純CSS,也就意味著完全沒有JS的參與。有人就納悶了:WTF?CSS,一個網(wǎng)頁布局的語言,居然還能寫游戲?可惜的是,CSS還真能寫游戲。接下來隨筆者一起進(jìn)入這個不思議的國度吧。

攻略

每次筆者玩密室逃脫游戲卡關(guān)時,總會去搜搜攻略,看完后就能把游戲玩通。因此當(dāng)我們做密室逃脫類游戲時,首先要考慮的事情就是攻略。以下是筆者為本文密室逃脫游戲所制定的攻略

  •  左轉(zhuǎn),轉(zhuǎn)動地球儀
  •  右轉(zhuǎn),發(fā)現(xiàn)一根錘子,點(diǎn)擊撿起,記住墻上的數(shù)字
  •  左轉(zhuǎn),點(diǎn)擊柜子,用錘子砸開它,獲得一個圓盤
  •  點(diǎn)擊墻上的壁畫,壁畫移開,看到一圓盤印,嵌入圓盤,獲得一個usb
  •  右轉(zhuǎn)2次,將usb插入電腦,電腦開啟,輸入墻上的密碼,獲得鑰匙
  •  右轉(zhuǎn),用鑰匙打開大門,游戲結(jié)束

開關(guān)

制定完攻略后,就要開始確定該游戲的核心所在——開關(guān)。說到開關(guān),大家覺得HTML里的哪個元素最適合用來做開關(guān)?答案是單復(fù)選框。

說起單復(fù)選框,就不得不提這2個CP——label和兄弟選擇符。label負(fù)責(zé)將該元素與其對應(yīng)的復(fù)選框用for來關(guān)聯(lián)起來,而兄弟選擇符則負(fù)責(zé)與:checked偽類配合好,當(dāng)某元素被勾選時,其相鄰的元素就會受到它的影響。

首先,讓我們來看一看一個簡單的開關(guān)例子   

  1. <input type="radio" id="globe" class="globe-trigger" />  
  2.    <input type="radio" id="hammer" class="hammer-trigger" />  
  3.    <label for="globe" class="globe">  
  4.      <img src="https://i.loli.net/2020/10/25/YBnOQ2jVtSTmFkE.png" alt class="w-8" />  
  5.    </label> 
  6.    <label for="hammer" class="hammer">  
  7.      <img src="https://i.loli.net/2020/10/25/KhVp4EaMoYrjlIC.png" alt class="w-6" />  
  8.    </label>   
  1. .hammer {  
  2.       display: none;  
  3.     }  
  4.     .globe-trigger:checked { 
  5.       & ~ {  
  6.         .globe {  
  7.           pointer-events: none;  
  8.         }  
  9.         .hammer {  
  10.           display: inline-block;  
  11.         }  
  12.       }  
  13.     }  
  14.     .hammer-trigger:checked {  
  15.       & ~ {  
  16.         .hammer {  
  17.           transform: scale(0);  
  18.           opacity: 0;  
  19.         }  
  20.       }  
  21.     } 

可以看到我們用label元素包裹了對應(yīng)的圖片,并關(guān)聯(lián)好了對應(yīng)的開關(guān)。當(dāng)用戶點(diǎn)擊地球儀globe時,globe-trigger開關(guān)就會被觸發(fā),這就是label的關(guān)聯(lián)性

觸發(fā)開關(guān)后,開關(guān)旁邊對應(yīng)的元素狀態(tài)就發(fā)生了變化:globe變得無法被點(diǎn)擊;hammer元素出現(xiàn),這就是兄弟選擇符的作用

同理,點(diǎn)擊錘子hammer時,與其關(guān)聯(lián)的hammer-trigger開關(guān)被觸發(fā),與此同時旁邊的hammer就會消失,代表被用戶“撿起”這一動作

理解開關(guān)的原理后,我們就可以把開關(guān)給隱藏起來啦 

  1. input[type="checkbox"],  
  2.   input[type="radio"] {  
  3.     display: none;  
  4.   } 

場景切換

假設(shè)我們游戲地圖分為4塊,且可以用導(dǎo)航箭頭來切換。

游戲的地圖其實(shí)是一張長圖,如下圖所示

   

  1. <div class="camera">  
  2.      <!-- 導(dǎo)航 --> 
  3.       <input type="radio" id="nav-1" name="nav" class="nav-trigger-1" />  
  4.      <input type="radio" id="nav-2" name="nav" class="nav-trigger-2" />  
  5.      <input type="radio" id="nav-3" name="nav" class="nav-trigger-3" />  
  6.      <input type="radio" id="nav-4" name="nav" class="nav-trigger-4" />  
  7.      <!-- 長圖 -->  
  8.      <form class="stage">  
  9.        <!-- 開關(guān) -->  
  10.        <input type="checkbox" id="globe" class="globe-trigger" />...  
  11.        <!-- 場景 -->  
  12.        <div class="scene scene-1">  
  13.          <label for="...">...</label>  
  14.          <nav class="navs">  
  15.            <label for="nav-4" class="nav-left"></label>  
  16.            <label for="nav-2" class="nav-right"></label> 
  17.           </nav>  
  18.        </div>  
  19.      </form>  
  20.    </div> 

首先,設(shè)定游戲的固定視角,將多余的部分裁掉   

  1. .camera {  
  2.      --stage-width: 18rem;  
  3.      --scene-id: 0;  
  4.      position: relative;  
  5.      width: var(--stage-width);  
  6.      height: var(--stage-width); 
  7.       overflow: hidden;  
  8.    } 

然后,設(shè)定導(dǎo)航,根據(jù)所選的導(dǎo)航來確定長圖的平移距離   

  1. @for $i from 1 through 4 {  
  2.      .nav-trigger-#{$i}:checked {  
  3.        & ~ .stage {  
  4.          --scene-id: #{$i - 1};  
  5.        }  
  6.      }  
  7.    }  
  8.    .stage {  
  9.      transform: translateY(calc(var(--stage-width) * var(--scene-id) * -1));  
  10.    }  
  11.    .scene {  
  12.      position: relative;  
  13.      width: var(--stage-width);  
  14.      height: var(--stage-width);  
  15.    } 

比如在場景1,用戶向右走,導(dǎo)航2被觸發(fā),長圖將上平移一個單位,如下圖所示

這樣就完成了場景切換這一效果

完成項(xiàng)目

此刻,我們已經(jīng)具備完成密室逃脫游戲所必須的知識了。根據(jù)上面的攻略,一步步定制好所有開關(guān),擺放好所有物件,且能確保場景能自由切換,這樣一個純CSS密室逃脫游戲就成功誕生啦

在線游玩地址:https://codepen.io/alphardex/full/GRqWRyB

 

 

責(zé)任編輯:龐桂玉 來源: 前端大全
相關(guān)推薦

2022-08-04 06:57:54

CSS拼圖游戲

2024-08-29 08:13:58

2021-10-19 22:23:47

CSSBeautiful按鈕

2022-02-21 07:02:16

CSSbeautiful按鈕

2013-04-08 14:07:28

CSS

2022-08-10 16:08:38

鴻蒙CSS

2021-01-19 12:16:10

CSS前端UI

2022-08-29 17:39:53

應(yīng)用開發(fā)css動畫

2017-04-27 14:05:59

CSS動畫前端

2025-02-13 10:00:00

2024-05-09 00:00:00

CSS標(biāo)簽JavaScript

2021-01-25 06:37:06

Css前端CSS 特效

2015-04-24 10:05:15

HTML+CSS阿童木頭像

2023-04-17 09:08:27

CSS計(jì)時器

2024-07-31 20:38:18

2010-09-06 15:46:08

CSSDIV

2022-03-28 08:44:15

css3水波動畫

2021-02-09 07:26:38

前端css技術(shù)熱點(diǎn)

2021-08-23 06:25:57

CSS 技巧animation

2023-10-08 20:32:59

CSS定義Loading
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产一级视频| 在线视频欧美性高潮| 欧美综合在线视频| 欧美在线视频在线播放完整版免费观看| 91久久国产精品| 国产三区四区在线观看| av午夜一区麻豆| 精品一区二区三区四区| 精品视频自拍| 欧美性xxxx| 午夜小视频在线| 日韩精品在线免费观看| 少妇精品在线| 成人午夜在线观看| 精品一区二区日韩| 性生交免费视频| 一本一本久久a久久精品综合麻豆| 亚洲七七久久综合桃花剧情介绍| 影音先锋日韩有码| 亚洲激情77| 婷婷久久五月天| 国产精品萝li| 呦呦在线视频| 4388成人网| 麻豆成人久久精品二区三区红 | 国产精品99久久久久久久久| 亚州av乱码久久精品蜜桃| 亚洲欧美日韩精品在线| 国产色综合一区| 一区二区三区视频在线观看视频| 一色桃子一区二区| 色爱综合网欧美| 日韩美女爱爱视频| 精品女厕一区二区三区| 粉嫩av一区二区三区四区五区 | 亚洲欧美日韩综合网| 黑人巨大精品欧美一区二区三区| 污污片在线免费视频| 欧美精品手机在线| 在线日韩电影| 四季av一区二区| 精品不卡在线视频| 成人黄色av| 国产精品无码一区二区在线| 欧美私模裸体表演在线观看| 日本在线高清视频一区| 91亚洲精华国产精华精华液| 7777奇米亚洲综合久久| 精品影片在线观看的网站| 亚洲二区在线播放视频| 91超碰免费在线| 欧美午夜影院一区| 成人黄视频在线观看| 激情亚洲一区二区三区四区| 九色porny自拍| 欧美日韩一二三四五区| 四虎影视精品| 日韩 欧美 视频| 国产精品美女久久久久久久久久久| 97久久超碰国产精品| 最新在线地址| 色777狠狠综合秋免鲁丝| 亚洲国产第一| 午夜电影福利| 国模视频一区二区| 成人精品国产免费网站| 草莓福利社区在线| 亚洲最大的成人网| 亚洲欧美日韩国产一区二区三区| 亚洲天堂1区| 伊人久久大香线蕉午夜av| 欧美日韩一区二区在线观看| 欧美色女视频| 成人黄18免费网站| 日韩中文字幕网址| 韩国精品一区二区| caoporm免费视频在线| 亚洲精品美女久久久久| 欧美精品 国产精品| 999视频精品| jizz国产精品| 在线视频一区观看| 日韩三级视频在线观看| 欧美亚洲激情在线| 在线观看免费视频综合| 亚洲青青青在线视频| 在线看片福利| 日韩精品欧美专区| 在线播放/欧美激情| 91精品婷婷色在线观看| 久久亚洲综合色| 国产精品区免费视频| av小片在线| 无码人妻精品一区二区蜜桃网站| 久久久www成人免费精品张筱雨 | 三级短视频在线| 欧美另类暴力丝袜| 久久久久久久电影| 成人在线视频www| 欧美伊人久久久久久午夜久久久久| 在线观看欧美理论a影院| av毛片免费看| 国产欧美日韩综合精品| 亚洲狼人综合干| 亚洲毛片一区二区| 国产精品中文字幕欧美| a黄色片在线观看| 国产精品aaaa| 国内精品久久久久影院一蜜桃| 高清孕妇孕交╳╳交| 91成人精品网站| 国产成人精品网址| 国产在线1区| 国产aⅴ精品一区二区三区黄| 亚洲va久久久噜噜噜久久狠狠| 国产清纯白嫩初高生在线观看91| 91国内精品| 天天干狠狠干| 成人动漫视频在线观看免费| 欧美一级搡bbbb搡bbbb| 国产在线精品一区二区| 国产精品美女久久久久人| 99热免费在线| 91香蕉亚洲精品| 欧美成人午夜电影| 99久久精品国产网站| 亚洲传媒在线| 日韩av资源| 国产卡一卡二在线| 97在线看免费观看视频在线观看| 色综合中文综合网| 经典三级在线一区| jizz性欧美2| 经典三级在线| 狠狠精品干练久久久无码中文字幕 | 欧洲av一区二区| 亚洲另类第一页| 国产v亚洲v天堂无码| 国产视频精品在线| 国产精品国产三级国产普通话三级| 欧美一二三区| 欧美a级在线观看| 久热免费在线观看| 97免费高清电视剧观看| 亚洲欧美国产视频| 亚洲综合色视频| 日本不卡免费在线视频| 亚洲日本va| 免费的黄网站在线观看| 可以在线看的黄色网址| 成人午夜电影小说| 欧美另类69xxxxx| 国内精彩免费自拍视频在线观看网址 | 亚洲一区二区三区免费看| 欧美伦理91i| 欧美日韩精品免费观看视频| 91女人视频在线观看| 在线国产一区二区| 亚洲人成网站在线在线观看| 最新在线观看av| 午夜啪啪福利视频| 91亚洲精品久久久| 久久精品国产久精国产思思| 欧美三级中文字幕| 欧美激情一区三区| 蜜臀精品一区二区三区在线观看 | 一本一生久久a久久精品综合蜜| 69久久夜色精品国产69| 亚洲成人久久久久| 五月天亚洲精品| 91麻豆国产福利精品| 噜噜噜91成人网| 久久国产影院| 51精品国产| 国模一区二区| 污污影院在线观看| 欧美色视频免费| 成人伦理视频网站| 国内精品视频一区二区三区| 美女主播视频一区| 国产精品嫩草影院一区二区 | 国产aⅴ精品一区二区三区久久| 亚洲伊人av| 国产激情在线观看| 在线观影网站| 久久久久久蜜桃一区二区| 欧美精品一区二区性色a+v| 国产成人一区二区三区免费看| 国产69精品久久久久9999| 亚洲欧洲日产国产网站| 制服丝袜亚洲精品中文字幕| 亚洲亚洲精品在线观看| 国产欧美一二三区| 99久久精品国产毛片| 国产在线精品免费| 蜜桃视频在线观看一区| 99亚洲伊人久久精品影院红桃| 91成人影院| 亚洲精品成人影院| 久久久国产精品|