偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

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

攻略

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

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

開(kāi)關(guān)

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

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

首先,讓我們來(lái)看一看一個(gè)簡(jiǎn)單的開(kāi)關(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元素包裹了對(duì)應(yīng)的圖片,并關(guān)聯(lián)好了對(duì)應(yīng)的開(kāi)關(guān)。當(dāng)用戶點(diǎn)擊地球儀globe時(shí),globe-trigger開(kāi)關(guān)就會(huì)被觸發(fā),這就是label的關(guān)聯(lián)性

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

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

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

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

場(chǎng)景切換

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

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

   

  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.      <!-- 長(zhǎng)圖 -->  
  8.      <form class="stage">  
  9.        <!-- 開(kāi)關(guān) -->  
  10.        <input type="checkbox" id="globe" class="globe-trigger" />...  
  11.        <!-- 場(chǎng)景 -->  
  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)航來(lái)確定長(zhǎng)圖的平移距離   

  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.    } 

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

這樣就完成了場(chǎng)景切換這一效果

完成項(xiàng)目

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

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

 

 

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

2022-08-04 06:57:54

CSS拼圖游戲

2021-10-19 22:23:47

CSSBeautiful按鈕

2024-08-29 08:13:58

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)用開(kāi)發(fā)css動(dòng)畫(huà)

2025-02-13 10:00:00

2017-04-27 14:05:59

CSS動(dòng)畫(huà)前端

2021-01-25 06:37:06

Css前端CSS 特效

2015-04-24 10:05:15

HTML+CSS阿童木頭像

2024-05-09 00:00:00

CSS標(biāo)簽JavaScript

2023-04-17 09:08:27

CSS計(jì)時(shí)器

2024-07-31 20:38:18

2010-09-06 15:46:08

CSSDIV

2022-03-28 08:44:15

css3水波動(dòng)畫(huà)

2022-04-08 10:49:33

HarmonyOS鴻蒙操作系統(tǒng)

2021-02-09 07:26:38

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

2023-07-03 08:51:41

選擇器detailssummary
點(diǎn)贊
收藏

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