翻开的2张牌如果配对就会消除,否则2张牌都会返回背面。 
需求分析 
怎么绘制正的牌面和背的牌面及配对成功后怎么消除牌面 
怎么生成牌组并且确定每张牌的位置和对应的图片 
怎么洗牌 
怎么记录牌组的配对信息 
怎么确定点击事件是第一次点击还是第二次点击 
作弊事件的处理:两次点击同一张牌 点击已经消除的牌面 点击牌面之外的区域 
牌翻开之后需要给一定时间让玩家看清楚,怎么实现暂停 
鼠标点击事件的响应及获得鼠标点击位置的坐标从而确定点击的是哪一张牌 
MYCode: 
复制代码代码如下: 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta charset="utf-8" /> 
<title>test </title> 
<script type="text/javascript"> 
var ctx; 
var canvas; 
var card; 
var first_pick = true; //第一次点击的标志 
var first_card = -1; 
var second_card; 
var back_color = "rgb(255,0,0)"; //卡片背面颜色 
var table_color = "#FFF"; 
var deck = []; //note 
var first_x = 10; 
var first_y = 50; 
var margin = 30; 
var card_width = 50; 
var card_height = 50; 
var pairs = [ 
["1_a.jpg", "1_b.jpg"], 
["2_a.jpg", "2_b.jpg"], 
["3_a.jpg", "3_b.jpg"], 
["4_a.jpg", "4_b.jpg"], 
["5_a.jpg", "5_b.jpg"] 
]; 
function draw_back()//绘制卡片背面 
{ 
ctx.fillStyle = back_color; 
ctx.fillRect(this.sx, this.sy, this.swidth, this.sheight); 
} 
function Card(sx, sy, swidth, sheight, img, info)//构造函数 
{ 
this.sx = sx; 
this.sy = sy; 
this.swidth = swidth; 
this.sheight = sheight; 
this.info = info; 
this.img = img; 
this.draw = draw_back; 
} 
function make_deck()//生成卡组并绘制 
{ 
var i; 
var a_card; 
var b_card; 
var a_pic; 
var b_pic; 
var cx = first_x; 
var cy = first_y; 
for (i = 0; i < pairs.length; i++) 
{ 
a_pic = new Image(); 
a_pic.src = pairs[i][0]; 
a_card = new Card(cx, cy, card_width, card_height, a_pic, i); 
deck.push(a_card); 
b_pic = new Image(); 
b_pic.src = pairs[i][1]; 
b_card = new Card(cx, cy + card_height + margin, card_width, card_height, b_pic, i); 
deck.push(b_card); 
cx = cx + card_width + margin; //note 
a_card.draw(); 
b_card.draw(); 
} 
} 
function shuffle()//洗牌 
{ 
var i; 
var j; 
var temp_info; 
var temp_img; 
var deck_length = deck.length; 
var k; 
for (k = 0; k < 3 * deck_length; k++) 
{ 
i = Math.floor(Math.random() * deck_length); 
j = Math.floor(Math.random() * deck_length); 
temp_info = deck[i].info; 
temp_img = deck[i].img; 
deck[i].info = deck[j].info; 
deck[i].img = deck[j].img; 
deck[j].info = temp_info; 
deck[j].img = temp_img; 
} 
} 
function choose(ev) 
{ 
//var out; 
var mx; 
var my; 
//var pick1; 
//var pick2; 
var i; 
//note 
if (ev.layerX || ev.layerX == 0) { // Firefox 
mx = ev.layerX; 
my = ev.layerY; 
} else if (ev.offsetX || ev.offsetX == 0) { // Opera 
mx = ev.offsetX; 
my = ev.offsetY; 
} 
for (i = 0; i < deck.length; i++) 
{ 
card = deck[i]; 
if (card.sx >= 0)//牌未被消除 
{ 
//判断点击的是哪一张牌 
if (mx > card.sx && mx < card.sx + card.swidth && my > card.sy && my < card.sy + card.sheight) 
{ 
if (i != first_card)//如果两次点击同一张牌不做处理 
break; 
} 
} 
} 
if (i < deck.length) 
{ 
if (first_pick)//如果是第一次点击 
{ 
first_card = i; 
first_pick = false; //note 
ctx.drawImage(card.img, card.sx, card.sy, card.swidth, card.sheight); 
} 
else 
{ 
first_pick = true; //note 
second_card = i; 
ctx.drawImage(card.img, card.sx, card.sy, card.swidth, card.sheight); 
tid=setTimeout(flip_back,1000); 
} 
} 
} 
function flip_back() 
{ 
if (card.info == deck[first_card].info)//配对成功 
{ 
ctx.fillStyle = table_color; 
ctx.fillRect(deck[first_card].sx, deck[first_card].sy, deck[first_card].swidth, deck[first_card].sheight); 
ctx.fillRect(deck[second_card].sx, deck[second_card].sy, deck[second_card].swidth, deck[second_card].sheight); 
deck[first_card].sx = -1; 
deck[second_card].sy = -1; 
first_card=-1; 
} 
else 
{ 
deck[first_card].draw(); 
deck[second_card].draw(); 
first_card=-1; 
} 
} 
function init() 
{ 
canvas = document.getElementById('canvas'); 
canvas.addEventListener('click', choose, false); 
ctx = canvas.getContext('2d'); 
make_deck(); 
shuffle(); 
} 
</script> 
</head> 
<body onLoad="init();"> 
<canvas id="canvas" width="400" height="400"/> 
123142 
</body> 
</html> 
html5,记忆,翻牌游戏
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
                        



