使用js原型实现石头剪刀布猜拳
来源:互联网 发布:英雄联盟mac下载安装 编辑:程序博客网 时间:2024/06/05 09:18
以上是所需图片
以下是html部分:
<!DOCTYPE html><html lang=en><head> <meta charset=UTF-8> <title>猜拳游戏(石头剪刀布)</title> <link rel="stylesheet" href="css/base.css"> <link rel="stylesheet" href="css/game.css"></head><body><main> <div class="games"> <h2>猜拳游戏</h2> <div class="left clearfix"> <p class="playname">玩家</p> <div class="imgwrap"> <img src="images/readyl.png" class="player"> </div> </div> <div class="right clearfix"> <p class="playname">电脑</p> <div class="imgwrap"> <img src="images/readyr.png" class="player"> </div> </div> <div class="purpleclear"></div> <div class="btnwrap"><button id="begin" class="">开始游戏</button></div> <div class="person"> <ul> <li class="choose" point="0"><img src="images/0.png" alt=""/></li> <li class="choose" point="1"><img src="images/1.png" alt=""/></li> <li class="choose" point="2"><img src="images/2.png" alt=""/></li> </ul> </div> <div id="box" class="box">请出拳</div> <p class="result"></p> </div></main><script type="text/javascript" src="js/game.js"></script></body></html>
css部分:
.games { position: relative; width: 600px; margin: 0 auto;}.games .left,.games .right { float: left; text-align: center; width: 50%;}.games .left .imgwrap,.games .right .imgwrap { width: 75%; height: 337px; position: relative; border-radius: 50%; overflow: hidden; border: 2px solid #dda0dd; margin: 0 auto;}.games .left .imgwrap img,.games .right .imgwrap img { position: absolute; display: block; left: 0; right: 0; top: 0; bottom: 0; margin: auto;}.games h2 { text-align: center;}.games .btnwrap { text-align: center;}.games .btnwrap button { position: absolute; width: 20px; height: 180px; color: #fff; background: #dda0dd; top: 0; bottom: 0; right: -123px; margin: auto; font-size: 18px;}.games .btnwrap button.disabled { background: #ccc; cursor: default;}.games .person { display: none;}.games .person ul { overflow: hidden;}.games .person ul li { float: left; width: 180px; text-align: center; position: relative; margin: 0 10px; border: 2px solid purple; height: 200px;}.games .person ul li img { position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto;}.games .box { text-align: center; font-size: 26px;}.add { color: red;}.addtwo { background: green;}.addthree { text-align: center; font-size: 20px; font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold;}
js部分:
/** * Created by Administrator on 2016/9/17. *//** 需求:* 1、默认情况下,用户和电脑不停地出拳* 2、当玩家选择后,用户和电脑停止出拳了,电脑随机选择一个券,与玩家的拳比较,分出胜负* 分析: * 对象: 玩家 电脑(玩家和电脑都是player) 系统 * 构造器: 玩家构造器 * 玩家功能:出拳 * 电脑功能: 出拳 * 系统: 判断谁获胜* *///玩家构造器function Player(name){ //玩家的公有属性 this.name=name; this.point=-1;// 0:石头;1:剪刀;2:布}Player.prototype={ takeBox: function(){//出拳方法,属于抽象的,不用实现的方法 }};function Person(name){//普通玩家 Player.call(this,name);//调用父级构造器}Person.prototype=new Player();Person.prototype.takeBox=function(point){//普通玩家计算点数 //自己选择一个出拳 console.log("普通玩家的点数:"+point); this.point=point; return this.point;};function Machine(name){ Player.call(this,name);//调用父级构造器}Machine.prototype=new Player();Machine.prototype.takeBox=function(){ //电脑玩家的计算点数 //随机出拳 console.log("电脑计算点数:"+((Math.random()*100<<2)%3)); this.point=((Math.random()*100<<2)%3);//得到0到2之间的数 return this.point;};function BoxSystem(player,gameplayer){//猜拳系统构造器,player:普通玩家;gameplayer电脑 this.normalplayer=player; this.gameplayer=gameplayer; this.init();}BoxSystem.prototype={ //起名字 init: function(){ var playername=window.prompt("请输入您的名字:"); this.normalplayer.name=playername; var names=document.getElementsByClassName("playname"); names[0].innerText=this.normalplayer.name; names[1].innerText=this.gameplayer.name; }, //动态更换图片 startAnimate: function(){ var players=document.getElementsByClassName("player"); var _index=0; this.intervalIndex=window.setInterval(function(){ //每500ms将目标元素img的src替换 players[0].src="images/"+(_index++)%3+".png"; players[1].src="images/"+(_index++)%3+".png"; },500); }, //开始游戏 play: function(targetObj){ //“开始游戏”按钮添加disabled的class this.toggleShow(document.getElementsByClassName("person")[0]); this.toggleBtn(targetObj,"disabled"); //开始图片动画 this.startAnimate(); //改变文字 this.showText(document.getElementById("box"),"请出拳······"); }, //切换开始按钮的状态 toggleBtn: function(btnObj,className){ if(btnObj.className.indexOf(className)==-1){ btnObj.addClassName("disabled"); btnObj.disabled=true;//禁用按钮 }else { btnObj.removeClassName("disabled"); console.log("恢复按钮啊"); btnObj.disabled=false;//恢复按钮 } }, //显示结果或文本 showText: function(targetObj,message){ targetObj.innerText=message; }, //显示或隐藏元素 toggleShow: function(targetObj){ if(!targetObj.style.display||targetObj.style.display=="none"){ targetObj.style.display="block"; } else { targetObj.style.display="none"; } }, //裁决胜负 judge: function(point){ clearInterval(this.intervalIndex); this.toggleBtn(document.getElementById("begin"),"disabled"); this.toggleShow(document.getElementsByClassName("person")[0]); var p1Point=this.normalplayer.takeBox(point); var p2Point=this.gameplayer.takeBox(); var players=document.getElementsByClassName("player"); //每500ms将目标元素img的src替换 players[0].src="images/"+p1Point+".png"; players[1].src="images/"+p2Point+".png"; var differ=this.verdict(p1Point,p2Point); switch(differ){ case 1: this.showText(document.getElementById("box"),this.normalplayer.name+"赢"); break; case -1: this.showText(document.getElementById("box"),this.gameplayer.name+"赢"); break; default: this.showText(document.getElementById("box"),"平局!!!"); } }, //计算输赢的函数 verdict: function(p1Point,p2Point){ var differ=p1Point-p2Point; console.log("differ:"+differ); if(differ==0){ return 0; }else if(differ==-1||differ==2){ //玩家赢了 return 1; }else { return -1; //电脑赢了 } }};//为元素添加类(如有多要添加的类用空格隔开)Element.prototype.addClassName=function(classs){ var oldClassName=this.className; var classAry=classs.split(" "), classAryLength=classAry.length, isSignleString=classAryLength>1?false: true; //如果要添加的class只有一个 if(isSignleString){ //如果原来的className里面已经存在了要添加的className则不添加。 if(oldClassName.indexOf(classAry[0])==-1){ this.className=oldClassName?oldClassName+" "+classAry[0]:classAry[0]; } } else {//如果添加的class有多个 var classNameStr=oldClassName?oldClassName+" ":""; for(var i=0;i<classAryLength;i++) { if (oldClassName.indexOf(classAry[i])==-1) { if (i == classAryLength - 1) { classNameStr += classAry[i]; } else { classNameStr += classAry[i] + " "; } } } this.className=classNameStr; }};//移除classElement.prototype.removeClassName=function(classs){ var oldClassName=this.className; //如果当前元素的className为空,则return; if(!this.className){ return; } var classAry=classs.split(" "), classAryLength=classAry.length; for(var i=0;i<classAryLength;i++){ var curStrLength=classAry[i].length; /* * 完整匹配一个字符串 * regClass: 匹配"ab"或" ab"或" ab "或"ab "但不匹配:"abc"和"cab" * \b匹配字符的边界 * */ var regClass=new RegExp('(\\s*)\\b'+classAry[i]+'\\b\\s*',"g"); console.log(oldClassName.match(regClass));//全局匹配一个 if(!regClass.test(oldClassName)){//不存在就continue continue; }else { oldClassName=oldClassName.replace(regClass," "); } } this.className = oldClassName;};window.onload=function(){ var p1=new Person(); var p2=new Machine("电脑"); var sys=new BoxSystem(p1,p2); var play=document.getElementById("begin"); play.addEventListener("click",function(){sys.play(play)},false); var chooses=document.getElementsByClassName("choose"); var chooseLength=chooses.length; for(var i=0;i<chooseLength;i++){ (function(j){ chooses[j].addEventListener("click",function(){ //给三张图片绑定点击事件 sys.judge(j); },false); })(i) }};
0 0
- 使用js原型实现石头剪刀布猜拳
- 猜拳(石头剪刀布)
- 石头、剪刀、布猜拳游戏
- 猜拳游戏(剪刀 石头 布)
- 模拟剪刀石头布猜拳游戏
- 石头剪刀布c++实现
- 简单模拟剪刀石头布js
- 用Python实现的"石头,剪刀,布"
- Unity-->实现剪刀石头布的游戏
- JSP实现石头剪刀布游戏
- java实现剪刀石头布功能
- Python实现石头-剪刀-布小游戏
- 石头-剪刀-布
- 石头剪刀布
- 剪刀石头布
- 剪刀、石头、布游戏
- 剪刀 石头 布
- 石头剪刀布
- 第三周-项目四-顺序表应用
- vs2012快捷键
- 出现No enclosing instance of type Exp is accessible. Must qualify the allocation with an enclosing ins
- Android4.4深入浅出之SurfaceFlinger总体结构
- 第四周项目3—2.单链表的应用(单链表的递增)
- 使用js原型实现石头剪刀布猜拳
- 第四周项目3(1)-结点逆置
- JQuery开发之Galleriffic图片插件介绍
- 第四周项目一用星号拼字母
- Spring单例与线程安全小结
- PHP 源码加密 (zendGuard和ionCube)
- apache主机重写规则与nginx主机重写规则转换
- 大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
- 自定义浏览器协议,实现web程序调用本地程序