[360前端星計劃]總部學習筆記(6/6)javascript
21點又名黑傑克(英文:Blackjack) ,起源於法國,已流傳到世界各地。21點,是一種使用撲克牌玩的賭博遊戲。亦是惟一一種在賭埸中能夠在機率中打敗莊家的一種賭博遊戲。html
HTML: 標準的html結構,meta標籤等 思考佈局方式,合理的結構 避免使用行內樣式 事件儘可能採用事件綁定 頁面樣式儘可能處理的精緻一些(優先級以功能爲主,這些次之) 本次做品,時間和質量的比重,質量的權重高,因此要優先提高質量 CSS: 1. 頁面單獨引用xxxx.css 2. 功能樣式能夠分類(就算不必分頁、也能夠按照功能寫在一塊兒),如: 2.1 公共樣式:包括字體、h1~h6 p div等會用到的一些樣式 2.2 佈局樣式:就是佈局相關的css寫在一塊兒,主要處理佈局、結構 2.3 功能樣式:各個子功能塊樣式,如:桌面、操做圖標,基本思想是按功能分塊 2.4 編碼相關:儘量少使用id;最好使用class,且其命名有功能性 (用於綁定事件) 樣式性(用戶寫樣式),命名語義話(能表達出你這個樣式是幹什麼用的, 儘可能避免寫flash一、flash2...)(已經改爲sendCardTo) 動畫相關樣式能夠單獨寫在一個文件裏,進行引用 手機上不居中可能也是這個緣由,另外手機上能夠設置meta的viewport. 按鈕問題:能夠給其父元素一個position:relative; 而後操做元素總體使用position:absolute;bottom:xx;進行定位 若是手機上要求訪問效果和PC相同,能夠考慮樣式作兩套(根據時間狀況看吧) Js: 格式得當。 儘可能簡化代碼。 簡單封裝一下dom操做:獲取dom、addClass、removeClass、事件綁定等。 合理的註釋,每一個方法都得有註釋。 函數命名按照功能命名。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <link rel="stylesheet" href=""> </head> <body> <header></header> <section> <div></div> …… …… …… …… <div></div> </section> <footer></footer> <script></script> </body> </html>
/*繪製透明的綠色桌面以及木質桌面邊緣*/ @keyframes sendCardTo1 { 0% { right:-450px;top: 30px; transform: rotate(240deg); } 100% { right: 0; transform: rotate(0); } } @keyframes sendCardTo2 { 0% { right:-220px; top:30px; transform: rotate(240deg); } 100% { right: 0; top:0; transform: rotate(0); } } @-moz-keyframes sendCardTo1 /* Firefox */ {sendCardTo1 0% { right:-450px;top: 30px; transform: rotate(240deg); } 100% { right: 0; transform: rotate(0); } } @-moz-keyframes sendCardTo2 /* Firefox */ { 0% { right:-220px; top:30px; transform: rotate(240deg); } 100% { right: 0; top:0; transform: rotate(0); } } @-webkit-keyframes sendCardTo1 /* Safari 和 Chrome */ { 0% { right:-450px;top: 30px; transform: rotate(240deg); } 100% { right: 0; transform: rotate(0); } } @-webkit-keyframes sendCardTo2 /* Safari 和 Chrome */ { 0% { right:-220px; top:30px; transform: rotate(240deg); } 100% { right: 0; top:0; transform: rotate(0); } } @-o-keyframes sendCardTo1 /* Opera */ { 0% { right:-450px;top: 30px; transform: rotate(240deg); } 100% { right: 0; transform: rotate(0); } } @-o-keyframes sendCardTo2 /* Opera */ { 0% { right:-220px; top:30px; transform: rotate(240deg); } 100% { right: 0; top:0; transform: rotate(0); } }
.circle { background: rgba(7,121,5,0.7); border-radius: 50%; position: absolute; top: -460px; left: 145px; width: 900px; height: 900px; border: 30px solid rgba(85,72,4,0.9); } /*發牌區動畫的出發點以及牌*/ .send { position: absolute; top: 531px; right: 50px; height: 85px; width: 60px; -ms-transform: rotate(35deg); /* IE 9 */ -webkit-transform: rotate(35deg); /* Safari and Chrome */ -o-transform: rotate(35deg); /* Opera */ -moz-transform: rotate(35deg); /* Firefox */ transform: rotate(35deg); background-color: white; z-index: 2; border-top: 3px solid white; border-right: 2px solid white; }
//此爲核心代碼,重複部分已省去,詳情見源代碼。 var num = 1; if (count[1].count == 0) { num = 2; //AI for (var i = 0; i < num; ++i) { setTimeout(function() {realSend(1)}, i * 100); setTimeout(function() { var n = document.getElementById('p_1') .getElementsByClassName('send-card1'); if (n.length > 0) n[0].classList.remove('send-card1'); }, i * 100 + 800); } }
//此爲核心代碼,重複部分已省去,詳情見源代碼。 var begain = 0;//防止沒開始遊戲直接點擊要牌和亮牌的按鈕 function showCard() { if (begain == 0) {} else { var hidden = document.getElementById('p_1') .getElementsByClassName('card-hidden')[0]; if (typeof(hidden) != "undefined") hidden.result(); if (over) return; count[1].sum = getMax(1); count[2].sum = getMax(2); … … … … if(){alert("… …"); }else{alert("… …"); }; }
if (id == 1 && count[1].count == 1) { /* 莊家第二章暗牌 經過屬性k, v來實現明牌和計算 */ newNode.className = "send-card" + id + " card-hidden"; newNode.setAttribute('k', pos); newNode.result = function() { this.className = "card"; this.style.backgroundPosition = this.getAttribute('k'); } } else { newNode.className = "send-card" + id + " card"; newNode.style.backgroundPosition = pos; } if (count[id].count == 1) newNode.setAttribute('v', card.value); node.appendChild(newNode); ++count[id].count; /* 對A單獨處理 */ if (card.value != 1) { if (card.value > 10) count[id].sum += 10; else count[id].sum += card.value; } else ++count[id].A; var ai = count[1]; var pl = count[2]; if (pl.A == 1 && pl.count == 2 && pl.sum == 10) //若是一開始兩張牌爲1和10則爲黑傑克。 blackjack = 1; if (blackjack == 1 && ai.A != 1 && ai.count != 2 && ai.sum != 10) scale = 2; //若是2號玩家擁有黑傑克而莊家沒有則籌碼翻倍。 /* 先斷定是否已經結束 不然調用機器人函數 */ if (count[id].sum > 21) lose(id); else if (count[id].sum + count[id].A > 21) lose(id); else if (id != 1 && count[2].count > 2) AI();
function getPorkerPos(tmp) { // console.log(tmp.value); return porkerPos[tmp.suit.toString() + tmp.value.toString()]; }
根據不一樣狀況,編寫不一樣的獲勝提示,以二號玩家爲操做玩家的角度提示。前端
function AI() { if (noneed) return; if (count[1].sum + count[1].A < 16 || getMax(1) < 16) { realSend(1); setTimeout(function() { var n = document.getElementById('p_1') .getElementsByClassName('send-card1'); if (n.length > 0) n[0].classList.remove('send-card1'); }, 800); } else noneed = 1; }
// 給[btnName]按鈕 添加fn()功能併發牌功能 function addFn(btnName,fn) { var btnName = document.getElementById("btnName"); btnName.onclick = function() { if (begain == 0) {} else { fn(); } } }
感謝北京奇虎360能夠給我此次展現本身的機會,不管結果如何。
本遊戲僅爲奇虎360公司前端星計劃編寫,任何人未徵得本人贊成 以前請勿使用本代碼做商業用途。