我的項目 6 js實現翻牌遊戲

來源:互聯網
上載者:User

我的項目 6 js實現翻牌遊戲

在我的項目中需要在裡面添加一個翻牌遊戲,就研究了一下,在這裡只實現了基本的效果。不多說,和大家分享一下。

說到翻牌遊戲,大致分為以下幾個步驟:

繪製正反面卡牌-------------->洗牌----------------------->翻牌------------------->翻牌判斷

這裡面應用的一些圖片,,,,,,額額額額,,,大家就自己下兩個試試,這裡也提供不了。。。嘿嘿

1.繪製正反面卡牌

function make_deck()//產生卡組並繪製{var i;//var a_card;//a組卡牌容器var b_card;//b組卡牌容器var a_pic;//a組卡牌圖片var b_pic;//b組卡牌圖片var cx = first_x;//初始座標X=50var cy = first_y;//初始座標Y=10for ( i = 0; i < pairs.length/2; i++) {                          /*Canvas繪製圖片                            * var c=document.getElementById("myCanvas");                           var cxt=c.getContext("2d");                           var img=new Image()                           img.src="flower.png"                           cxt.drawImage(img,0,0);*/                     a_pic = new Image();a_pic.src = pairs[i][0];//繪製卡牌a組a_card = new Card(cx, cy, card_width, card_height, a_pic, i);//給卡牌屬性即卡牌對象產生了,並繪製了背面deck.push(a_card);//將a組卡牌裝進數組deck[]//繪製與之a組卡牌面相同的b組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);// 將b組卡牌裝進數組deck[]cx = cx + card_width  + margin;//cy = cy + card_height + margin; //notea_card.draw();b_card.draw();}//繪製後兩排cx=first_x;cy=first_y+card_height*2+margin*2;for ( i = 4; i < pairs.length; i++) {a_pic = new Image();a_pic.src = pairs[i][0];//繪製卡牌a組a_card = new Card(cx, cy, card_width, card_height, a_pic, i);deck.push(a_card);//繪製與之a組卡牌面相同的b組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;//cy = cy + card_height + margin; //notea_card.draw();b_card.draw();}}

2.洗牌

function shuffle()//洗牌{var i;var j;var temp_info;var temp_img;var deck_length = deck.length;var k;for ( k = 0; k < 9 * deck_length; k++) {i = Math.floor(Math.random() * deck_length);//0-16j = Math.floor(Math.random() * deck_length);//0-16temp_info = deck[i].info;//第1張temp_img = deck[i].img;//第1張圖片deck[i].info = deck[j].info;deck[i].img = deck[j].img;deck[j].info = temp_info;deck[j].img = temp_img;}}

3.翻牌判斷

function choose(ev) {//var out;var mx;var my;//var pick1;//var pick2;var i;//noteif (ev.layerX || ev.layerX == 0) {// Firefoxmx = ev.layerX;my = ev.layerY;} else if (ev.offsetX || ev.offsetX == 0) {// Operamx = 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)//如果是第一次點擊{                        window.addEventListener("load",function(){                           var myaudio=document.getElementByIdx_x("a1");                           myaudio.volume=0.5;//表示的是播放音量為一半                           myaudio.play();                           alert("shengyin");                       });first_card = i;first_pick = false;//notectx.drawImage(card.img, card.sx, card.sy, card.swidth, card.sheight);} else {first_pick = true;//notesecond_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;     gg();} else {deck[first_card].draw();deck[second_card].draw(); first_card = -1;}}
全部代碼如下

test <script type="text/javascript" src="./js/jquery.min.js"></script><script type="text/javascript">    var i=0;//計時用到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 = [];//卡牌數組//notevar first_x = 50;//初始座標Xvar first_y = 10;//初始座標Yvar margin = 30;//卡牌餘卡牌之間的間距var card_width = 100;//卡牌的寬var card_height = 100;//卡牌的高//定義卡牌正面圖片var pairs = [["img/1_a.png", "img/1_b.png"],["img/2_a.png", "img/2_b.png"], ["img/3_a.png", "img/3_b.png"], ["img/4_a.png", "img/4_b.png"], ["img/5_a.png", "img/5_b.png"], ["img/6_a.png", "img/6_b.png"], ["img/7_a.png", "img/7_b.png"], ["img/8_a.png", "img/8_b.png"]];//繪製卡片背面function draw_back(){ctx.fillStyle = back_color;ctx.fillRect(this.sx, this.sy, this.swidth, this.sheight);}            //定義牌的屬性:x,y座標,長寬,背景圖片,資訊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;//a組卡牌容器var b_card;//b組卡牌容器var a_pic;//a組卡牌圖片var b_pic;//b組卡牌圖片var cx = first_x;//初始座標X=50var cy = first_y;//初始座標Y=10for ( i = 0; i < pairs.length/2; i++) {                          /*Canvas繪製圖片                            * var c=document.getElementById("myCanvas");                           var cxt=c.getContext("2d");                           var img=new Image()                           img.src="flower.png"                           cxt.drawImage(img,0,0);*/                     a_pic = new Image();a_pic.src = pairs[i][0];//繪製卡牌a組a_card = new Card(cx, cy, card_width, card_height, a_pic, i);//給卡牌屬性即卡牌對象產生了,並繪製了背面deck.push(a_card);//將a組卡牌裝進數組deck[]//繪製與之a組卡牌面相同的b組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);// 將b組卡牌裝進數組deck[]cx = cx + card_width  + margin;//cy = cy + card_height + margin; //notea_card.draw();b_card.draw();}//繪製後兩排cx=first_x;cy=first_y+card_height*2+margin*2;for ( i = 4; i < pairs.length; i++) {a_pic = new Image();a_pic.src = pairs[i][0];//繪製卡牌a組a_card = new Card(cx, cy, card_width, card_height, a_pic, i);deck.push(a_card);//繪製與之a組卡牌面相同的b組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;//cy = cy + card_height + margin; //notea_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 < 9 * deck_length; k++) {i = Math.floor(Math.random() * deck_length);//0-16j = Math.floor(Math.random() * deck_length);//0-16temp_info = deck[i].info;//第1張temp_img = deck[i].img;//第1張圖片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;//noteif (ev.layerX || ev.layerX == 0) {// Firefoxmx = ev.layerX;my = ev.layerY;} else if (ev.offsetX || ev.offsetX == 0) {// Operamx = 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)//如果是第一次點擊{                        window.addEventListener("load",function(){                           var myaudio=document.getElementByIdx_x("a1");                           myaudio.volume=0.5;//表示的是播放音量為一半                           myaudio.play();                           alert("shengyin");                       });first_card = i;first_pick = false;//notectx.drawImage(card.img, card.sx, card.sy, card.swidth, card.sheight);} else {first_pick = true;//notesecond_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;     gg();} 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();//洗牌}function jishi(){ //alert("----------")i++;//alert(i)document.getElementById("p1").innerHTML=i//alert("----------")if(i>60){ init(); document.getElementById("p1").innerHTML="時間到"}}$(window).ready(function(){   init();   $("#start").click(function(){      setInterval("jishi()", 1000);             });});</script>                 開始計時        

dddddddddddd

大家可以試試,挺有意思的。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.