成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

純CSS實現密室逃脫游戲

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

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

接下來,筆者要用純CSS實現一款類似的密室逃脫類游戲。

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

攻略

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

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

開關

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

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

首先,讓我們來看一看一個簡單的開關例子   

  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元素包裹了對應的圖片,并關聯好了對應的開關。當用戶點擊地球儀globe時,globe-trigger開關就會被觸發,這就是label的關聯性

觸發開關后,開關旁邊對應的元素狀態就發生了變化:globe變得無法被點擊;hammer元素出現,這就是兄弟選擇符的作用

同理,點擊錘子hammer時,與其關聯的hammer-trigger開關被觸發,與此同時旁邊的hammer就會消失,代表被用戶“撿起”這一動作

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

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

場景切換

假設我們游戲地圖分為4塊,且可以用導航箭頭來切換。

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

   

  1. <div class="camera">  
  2.      <!-- 導航 --> 
  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.        <!-- 開關 -->  
  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> 

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

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

然后,設定導航,根據所選的導航來確定長圖的平移距離   

  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,用戶向右走,導航2被觸發,長圖將上平移一個單位,如下圖所示

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

完成項目

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

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

 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

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

應用開發css動畫

2017-04-27 14:05:59

CSS動畫前端

2025-02-13 10:00:00

2021-01-25 06:37:06

Css前端CSS 特效

2015-04-24 10:05:15

HTML+CSS阿童木頭像

2024-05-09 00:00:00

CSS標簽JavaScript

2024-07-31 20:38:18

2023-04-17 09:08:27

CSS計時器

2010-09-06 15:46:08

CSSDIV

2022-03-28 08:44:15

css3水波動畫

2022-04-08 10:49:33

HarmonyOS鴻蒙操作系統

2021-08-23 06:25:57

CSS 技巧animation

2021-02-09 07:26:38

前端css技術熱點
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美日韩一区二区 | 狠狠av| 欧美日韩一区二区在线播放 | 国产一级片 | 操视频网站| 国产精品成人久久久久 | 欧美一区二区三区在线观看视频 | 国产福利91精品 | 久久久999成人 | 亚洲成人免费观看 | 国产精品不卡 | 久久国产一区二区 | 久久久久久久久精 | 一区二区成人 | 男人天堂网av | 亚洲国产精品一区二区久久 | 国产一区二区在线免费观看 | 欧美激情综合五月色丁香小说 | 精品欧美在线观看 | 亚洲精品高清视频在线观看 | 日韩在线| 天天久久 | 精品久久久久久国产 | 国产精品99久久久久久久久久久久 | 亚洲精品久久久一区二区三区 | 久久久久久免费观看 | 99精品久久 | 偷拍亚洲色图 | 国产精品日韩一区二区 | 国精产品一区一区三区免费完 | 91精品国产综合久久久久 | 国产精品国产a | 日韩av最新网址 | 亚洲国产精品一区二区第一页 | 欧美精品网站 | 色综合av| 欧美在线一区视频 | 国产精品视频久久 | 激情久久久久 | 精品成人免费视频 | 亚洲一区二区三区视频 |