




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一步步教你使用JavaScript打造一个扫雷游戏目录前言一、思路分析二、静态页面搭建2.1结构层2.2样式层三、js页面交互3.1获取元素及变量初始化3.210个雷的初始化设置3.3游戏开始事件封装3.4核心事件函数封装3.5游戏开始四、总结
前言
扫雷大家都玩过,今天我们就是用JavaScript来打造扫雷游戏。废话不多说,直接看下效果;
上图是失败后的结果。
一、思路分析
我们新建一个首页,在首页放置一个点击开始游戏的按钮,动态生成100个小格,即100div;然后通过点击div进行扫雷操作,然后扫雷成功或者失败显示对应的结果;
二、静态页面搭建
2.1结构层
body
div
divid="btn"/div!--开始游戏按钮--
divid="box"/div!--存放小雷的div--
divid="flagBox"!--游戏结束才显示的当前雷数的div--
当前剩余雷数:
spanid="score"10/span
/div
divid="alertBox"!--Gameover弹出的框(窗口)--
divid="alertImg"
divid="close"/div
/div
/div
/div
/body
2.2样式层
清楚默认边距
*{
margin:0;
padding:0;
页面最大div
.wrapper{
width:100%;
height:1000px;
position:fixed;
top:0;
left:0;
background-image:url('img/bg.jpg');
background-size:100%100%;
效果如下:
开始游戏按钮
.btn{
height:140px;
width:170px;
position:absolute;
left:50px;
background-image:url('img/startGame.png');
background-size:100%100%;
cursor:pointer;
储存雷的大div
.box{
height:500px;
width:500px;
transform:perspective(800px)rotateX(45deg);
margin:20pxauto;
border-top:1pxsolid#B25F27;
border-left:1pxsolid#B25F27;
box-shadow:5px5px5pxrgba(0,0,0,0.3);
display:none;/*先设置为none,开始游戏后显示block*/
每一个方块的小div(一共100个)
.block{
width:49px;
height:49px;
border-right:1pxsolid#B25F27;
border-bottom:1pxsolid#B25F27;
box-shadow:004px#333inset;
background-image:url('img/cao.jpg');
float:left;
当前所剩雷数
.flagBox{
position:absolute;
top:50px;
left:50%;
width:200px;
height:50px;
margin-left:-100px;
color:#333;
font-size:20px;
font-weight:bolder;
display:none;/*先设置为none,开始游戏后显示block*/
GameOver
.alertBox{
display:none;/*先设置为none,开始结束显示block*/
position:absolute;
width:100%;
height:100%;
left:0;
top:0;
background-color:rgba(0,0,0,0.2);
}
游戏结束弹出窗口右上角的X
.close{
position:absolute;
right:0;
top:0;
height:40px;
width:40px;
background-image:url('img/closeBtn.png');
background-size:100%100%;
cursor:pointer;
}
三、js页面交互
3.1获取元素及变量初始化
varstartBtn=document.getElementById('btn');
varbox=document.getElementById('box');
varflagBox=document.getElementById('flagBox');
varalertBox=document.getElementById('alertBox');
varalertImg=document.getElementById('alertImg');
varcloseBtn=document.getElementById('close');
varscore=document.getElementById('score');
//先声明变量,但是不初始化
varminesNum;
varmineOver;
varblock;
varmineMap=[];
varstartGameBool=true;
3.210个雷的初始化设置
functioninit(){
minesNum=10;
mineOver=10;
score.innerHTML=mineOver;
for(vari=0;ii++){//双层循环10*10个div
for(varj=0;jj++){
varcon=document.createElement('div');
con.classList.add('block');//给创建出来的div添加类名block
con.setAttribute('id',i+'-'+j);
box.appendChild(con);
mineMap.push({mine:0});
block=document.getElementsByClassName('block');
while(minesNum){//创建一个10次的循环,即设置10个雷
varmineIndex=Math.floor(Math.random()*100);
if(mineMap[mineIndex].mine===0){
mineMap[mineIndex].mine=1;
block[mineIndex].classList.add('isLei');//10个雷有小div的block类属性,还有自己的属性,isLei
minesNum--;
3.3游戏开始事件封装
functionbindEvent(){
startBtn.onclick=function(){//开始按钮点击事件
if(startGameBool){
box.style.display='block';
flagBox.style.display='block';
init();
startGameBool=false;
box.oncontextmenu=function(){
returnfalse;
box.onmousedown=function(e){//小div鼠标按下事件封装
varevent=e.target;
if(e.which==1){//Netscape/Firefox/Opera中不支持window.event.keyCode,需要用event.which代替
leftClick(event);
}elseif(e.which==3){
rightClick(event);
closeBtn.onclick=function(){//游戏结束,弹出gameover窗口的关闭按钮事件封装
alertBox.style.display='none';
flagBox.style.display='none';
box.style.display='none';
box.innerHTML='';
startGameBool=true;
3.4核心事件函数封装
leftClick没有雷--显示数字(代表以当前小格为中心周围8个格的雷数)扩散(当前周围八个格没有雷)有雷--gameOver
functionleftClick(dom){
if(dom.classList.contains('flag')){
return;
varisLei=document.getElementsByClassName('isLei');//获得前面的10个雷的div
if(domdom.classList.contains('isLei')){//判断是不是雷块
for(vari=0;iisLei.length;i++){
isLei[i].classList.add('show');//显示地雷背景图
setTimeout(function(){
alertBox.style.display='block';
alertImg.style.backgroundImage='url("img/over.jpg")';//上面显示雷,标志游戏结束
},800)
}else{//否则继续扫雷
varn=0;
varposArr=domdom.getAttribute('id').split('-');
varposX=posArr+posArr[0];
varposY=posArr+posArr[1];
domdom.classList.add('num');
for(vari=posX-1;i=posX+1;i++){
for(varj=posY-1;j=posY+1;j++){
vararoundBox=document.getElementById(i+'-'+j);
if(aroundBoxaroundBox.classList.contains('isLei')){
n++;
dom(dom.innerHTML=n);
if(n==0){
for(vari=posX-1;i=posX+1;i++){
for(varj=posY-1;j=posY+1;j++){
varnearBox=document.getElementById(i+'-'+j);
if(nearBoxnearBox.length!=0){
if(!nearBox.classList.contains('check')){
nearBox.classList.add('check');
leftClick(nearBox);
rightClick没有标记并且没有数字--进行标记;
有标记--取消标记--标记是否正确,10个都正确标记,提示成功;
如果已经出现,则点击无效果;
functionrightClick(dom){
if(dom.cla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务行业交易记录及业务成果证明书(6篇)
- 管理学理论与时事结合试题及答案
- 行政管理本科有效沟通技巧试题及答案
- 行政管理学名词解释集合及试题及答案
- 2025年小学转让协议合同
- 2025年店铺房屋租赁合同范本标准版
- 2025设备采购借款合同模板
- 中国纺织品产业国际竞争力分析与出口策略探讨
- 2025年公文写作与处理考试总结与试题及答案解析
- 行政管理者的能力素养分析试题及答案
- 远红外线治疗仪
- 水利工程项目预算管理方案
- 联东U谷厂房销售合同
- 师德师风-做“四有”好老师
- 衣食住行见证改革开放时代变迁-(修订)
- 弱电智能化施工方案
- 人教版PEP小学英语五年级上册第二单元Myweek课件
- 钢筋模板混凝土质量培训课件
- 《给水排水管道工程施工及验收规范》-20210801081158
- 影视鉴赏智慧树知到答案2024年南华大学
- 《Photoshop CC图形图像处理实例教程》全套教学课件
评论
0/150
提交评论