久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

html5記憶翻牌游戲?qū)崿F(xiàn)思路及代碼_html5教程技巧

html5記憶翻牌游戲?qū)崿F(xiàn)思路及代碼_html5教程技巧HTML5中文學(xué)習(xí)網(wǎng),是中國(guó)最大的HTML5中文門(mén)戶,為廣大HTML5愛(ài)好者提供各種HTML5資料,包括HTML5網(wǎng)站、HTML5資訊、HTML5應(yīng)用、HTML5游戲、HTML5教程
點(diǎn)評(píng):主要功能實(shí)現(xiàn)翻開(kāi)的2張牌如果配對(duì)就會(huì)消除,否則2張牌都會(huì)返回背面,下面為大家介紹一下需求分析及示例代碼,感興趣的朋友可以學(xué)習(xí)下

翻開(kāi)的2張牌如果配對(duì)就會(huì)消除,否則2張牌都會(huì)返回背面。

需求分析

怎么繪制正的牌面和背的牌面及配對(duì)成功后怎么消除牌面
怎么生成牌組并且確定每張牌的位置和對(duì)應(yīng)的圖片

怎么洗牌
怎么記錄牌組的配對(duì)信息
怎么確定點(diǎn)擊事件是第一次點(diǎn)擊還是第二次點(diǎn)擊

作弊事件的處理:兩次點(diǎn)擊同一張牌 點(diǎn)擊已經(jīng)消除的牌面 點(diǎn)擊牌面之外的區(qū)域
牌翻開(kāi)之后需要給一定時(shí)間讓玩家看清楚,怎么實(shí)現(xiàn)暫停

鼠標(biāo)點(diǎn)擊事件的響應(yīng)及獲得鼠標(biāo)點(diǎn)擊位置的坐標(biāo)從而確定點(diǎn)擊的是哪一張牌

MYCode:

復(fù)制代碼
代碼如下:

<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; //第一次點(diǎn)擊的標(biāo)志
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)//構(gòu)造函數(shù)
{
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 = http://pic.html5code.netpairs[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)//牌未被消除
{
//判斷點(diǎn)擊的是哪一張牌
if (mx > card.sx && mx < card.sx + card.swidth && my > card.sy && my < card.sy + card.sheight)
{
if (i != first_card)//如果兩次點(diǎn)擊同一張牌不做處理
break;
}
}
}
if (i < deck.length)
{
if (first_pick)//如果是第一次點(diǎn)擊
{
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)//配對(duì)成功
{
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>


【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

主站蜘蛛池模板: 中文字幕日韩欧美一区二区三区 | 久久国产一区 | 久久网亚洲 | 波多野结衣中文字幕一区二区三区 | 天天躁日日躁狠狠的躁天龙影院 | 亚洲第一区国产精品 | 国产三级国产精品 | 欧美1区 | 中文字幕成人av | 亚洲免费在线播放 | 亚洲一区精品在线 | 国产三级精品视频 | 亚洲福利精品 | 日韩中文字幕一区二区 | 色婷婷综合久久久中字幕精品久久 | 亚洲超碰在线观看 | 欧美国产中文 | 不用播放器看的av | 欧洲一级黄| 国产欧美一区二区三区日本久久久 | 成年人黄色一级片 | 天天干视频 | 亚洲视频免费在线看 | 成人av网站在线观看 | 老熟女毛片 | 亚洲精品一区在线 | 九九精品热 | 最新中文字幕在线 | 欧美成人精品一区二区男人看 | 亚洲人免费视频 | 亚洲一区二区三区在线免费 | 亚洲成人一区二区三区 | 日韩在线电影 | 免费黄色片在线观看 | 欧美日韩国产高清 | 欧美黄色一区 | 成人免费视频在线观看 | 中文字幕一区二区三区乱码在线 | 国产精品爱久久久久久久 | 亚洲一区国产精品 | 日韩国产精品一区二区三区 |