用状态机先来判断出牌的类型
将用户和对方出的牌的面值分别存到数组ownValue和oppValue里面,每次读取数组中的一个数,通过每次读取判断出牌的类型。
var ONE="ONE",
TWO="TWO",
TWO_2="TWO_2",
THREE="THREE",
THREE_2="THREE_2",
FOUR="FOUR",
FOUR_2="FOUR_2",
FIVE="FIVE",
SIX="SIX",//飞机
BIGGEST="BIGGEST",//大小王炸弹
ERROR="ERROR";
function typeMachine(type,n,m){
switch(type){
case ONE:
if(n==m){
type=TWO;
} else if(n==m-1){
type=TWO_2;
} else if(n==m+1){
type=BIGGEST;
}
else{
type=ERROR;
}
break;
case TWO:
if(n==m){
type=THREE;
} else if(n==m-1){
type=THREE_2;
} else{
type=ERROR;
}
break;
case TWO_2:
if(n==m-1){
type=TWO_2;
} else{
type=ERROR;
}
break;
case THREE:
if(n==m){
type=FOUR;
} else if(n==m-1){
type=FOUR_2;
} else {
type=ERROR;
}
break;
case THREE_2:
if(n==m){
type=TWO;
} else if(n==m-1){
type=THREE_2;
} else{
type=ERROR;
}
break;
case FOUR:
type=ERROR;
break;
case FOUR_2:
if(n=m){
type=FIVE;
} else {
type=ERROR;
}
break;
case FIVE:
if(n==m){
type=SIX;
} else {
type=ERROR;
}
break;
case SIX:
type=ERROR;
break;
default:
break;
}
return type;
}
获取面值
function getValue(ownPoker,oppPoker){
for(var i=0;i<ownPoker.length;i++){
ownValue[i]=ownPoker[i]%100;
}
for(var i=0;i<pokerArray.oppPoker.length;i++) {
oppValue[i] = oppPoker[i] % 100;
}
}
获取对方和用户出的牌的类型
function getType(array) {
var type=ONE;
var fir,next;
for(var i=0;i<array.length-1;i++){
fir=array[i];
next=array[i+1];
type=typeMachine(type,fir,next);
}
return type;
}
比较出的牌
function compare(ownPoker,oppPoker) {
var ownType,oppType;
getValue(ownPoker,oppPoker);
ownType=getType(ownValue);
oppType=getType(oppValue);
console.log(oppType);
if(ownType!=ERROR&&oppType!=ERROR){
//判断双方出的牌的类型和长度是否相同,相同的话就能出牌
if(ownType==oppType && ownValue.length==oppValue.length) {
if (ownValue[0] > oppValue[0]) {
return true;
}
//判断是不是4张牌相同的炸弹情况
} else if(ownType==FOUR && oppType!==FOUR){
return true;
//判断是不是王炸
} else if(ownType==BIGGEST){
return true
} else{
alertMessage="您的牌小于上家!";
return false;
}
//如果出牌类型为ERROR,则弹出”您的牌不符合出牌规则,请重新选择!"
} else{
alertMessage="您的牌不符合出牌规则,请重新选择!"
return false;
}
ownValue.splice(0,ownValue.length);
oppValue.splice(0,oppValue.length);
}
js中全局变量的使用
局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量,在不同的js文件中也可以调用全局变量。当全局变量跟局部变量重名时,局部变量会覆盖掉全局变量
e.target与事件委托简例
target定义:
target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。
event.target
event.target.nodeName //获取事件触发元素标签name(li,p…)
event.target.id //获取事件触发元素id
event.target.className //获取事件触发元素classname
event.target.innerHTML //获取事件触发元素的内容(li)
等。。。
jquery:this 与 e.target区别
- this代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。
- js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素;
- this和event.target都是dom对象,如果要使用jquey中的方法可以将他们转换为jquery对象:$(this)和$(event.target);