js實(shí)現(xiàn)擲骰子小游戲
本文實(shí)例為大家分享了js擲骰子小游戲的具體代碼,供大家參考,具體內(nèi)容如下
因?yàn)檫@次作業(yè)是第一個(gè)實(shí)驗(yàn),比較簡(jiǎn)單,但是要求面向?qū)ο髞?lái)做,而我這個(gè)時(shí)候又剛好在學(xué)JS,JS來(lái)做骰子游戲即有前端了,又省了后臺(tái)處理,代碼量會(huì)比用JAVA來(lái)做少了非常非常多??紤]到這種實(shí)驗(yàn)實(shí)在不想浪費(fèi)時(shí)間去用JAVA寫,于是有了一下JS實(shí)現(xiàn)的版本。但是大家都知道JS的面向?qū)ο笃鋵?shí)是偽面向?qū)ο?。我感覺并不好用,因?yàn)橛镁浔姆绞綗o(wú)法傳值,你封裝成對(duì)象了還得拆出來(lái)成為過(guò)程(單一方法)來(lái)用。
版本1: (沒有用面向?qū)ο螅?/p>
<!DOCTYPE>
<html>
<head>
<title>擲骰子游戲 author:SenDog</title>
<meta charset="UTF-8">
<script>
var leftX = 150;
var topY = 100;
var diceX = 80;
var diceY = 80;
var dotR = 4;
var count = 0;
var lastNum = 0;
var flag = false;
function clickMe() {
count = 0;
if(flag) {
return false;
}
flag = true;
var ctx = document.getElementById("canvas").getContext('2d');
ctx.beginPath();
// ctx.strokeRect(leftX,topY,diceX,diceY);//繪制矩形 加粗
//ctx.strokeRect(leftX+150,topY,diceX,diceY);
setTimeout(function(){
random(ctx);},200);
}
function drawDice(ctx,randomNum,randomNum2) {//繪制 骰子 123456的點(diǎn)數(shù)
ctx.clearRect(leftX,topY,diceX,diceY);
switch(randomNum) {
case 1:
draw1();
break;
case 2:
draw2();
break;
case 3:
draw3();
break;
case 4:
draw4();
break;
case 5:
draw5();
break;
case 6:
draw6();
break;
}
ctx.clearRect(leftX+150,topY,diceX,diceY);
switch(randomNum2) {
case 1:
draw11();
break;
case 2:
draw22();
break;
case 3:
draw33();
break;
case 4:
draw44();
break;
case 5:
draw55();
break;
case 6:
draw66();
break;
}
count++;
if(count>=20) {
if(randomNum+randomNum2==7) {
alert("骰子1:"+randomNum+",骰子2:"+randomNum2+"總和為7您贏了");
}
else {
alert("骰子1:"+randomNum+";骰子2:"+randomNum2);
}
flag = false;
return false;
} else {
setTimeout(function(){
random(ctx);
},200-count);
}
}
function random(ctx) {//生成骰子點(diǎn)數(shù),如果和上一步的點(diǎn)數(shù)相同重新生成點(diǎn)數(shù),并繪制
var randomNum = Math.floor(Math.random()*6)+1;
var randomNum2 = Math.floor(Math.random()*6)+1;
if(randomNum == lastNum) {
random(ctx);
} else {
lastNum = randomNum;
drawDice(ctx,randomNum,randomNum2);
}
}
function commonDraw(ctx,dotX,dotY) {
ctx.beginPath();
ctx.arc(dotX,dotY,dotR,0,2*Math.PI,false);
ctx.stroke();
ctx.fill();
}
function draw1() {
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle="#0000ff";
var dotX = leftX+diceX/2;
var dotY = topY+diceY/2;
commonDraw(ctx,dotX,dotY);
}
function draw2() {
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle="#99FF66";
var dotX = leftX+4*dotR;
var dotY = topY+4*dotR;
commonDraw(ctx,dotX,dotY);
var dotX = leftX+diceX-4*dotR;
var dotY = topY+diceY-4*dotR;
commonDraw(ctx,dotX,dotY);
}
function draw3() {
draw1();
draw2();
}
function draw4() {
draw2();
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle="#99CC00";
var dotX = leftX+diceX-4*dotR;
var dotY = topY+4*dotR;
commonDraw(ctx,dotX,dotY);
var dotX = leftX+4*dotR;
var dotY = topY+diceY-4*dotR;
commonDraw(ctx,dotX,dotY);
}
function draw5(){
draw1();
draw4();
}
function draw6(){
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle="#996633";
var dotX = leftX+4*dotR;
var dotY = topY+diceY/2
commonDraw(ctx,dotX,dotY);
var dotX = leftX+diceY-4*dotR;
commonDraw(ctx,dotX,dotY);
draw4();
}
/* -------------骰子2----------------*/
function draw11() {
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle="#0000ff";
var dotX = leftX+diceX/2+150;
var dotY = topY+diceY/2;
commonDraw(ctx,dotX,dotY);
}
function draw22() {
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle="#99FF66";
var dotX = leftX+4*dotR+150;
var dotY = topY+4*dotR;
commonDraw(ctx,dotX,dotY);
var dotX = leftX+diceX-4*dotR+150;
var dotY = topY+diceY-4*dotR;
commonDraw(ctx,dotX,dotY);
}
function draw33() {
draw11();
draw22();
}
function draw44() {
draw22();
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle="#99CC00";
var dotX = leftX+diceX-4*dotR+150;
var dotY = topY+4*dotR;
commonDraw(ctx,dotX,dotY);
var dotX = leftX+4*dotR+150;
var dotY = topY+diceY-4*dotR;
commonDraw(ctx,dotX,dotY);
}
function draw55(){
draw11();
draw44();
}
function draw66(){
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle="#996633";
var dotX = leftX+150+4*dotR;
var dotY = topY+diceY/2
commonDraw(ctx,dotX,dotY);
var dotX = leftX+150+diceY-4*dotR;
commonDraw(ctx,dotX,dotY);
draw44();
}
function init() {
var ctx = document.getElementById("canvas").getContext('2d');
ctx.beginPath();
ctx.strokeRect(leftX,topY,diceX,diceY);//繪制灰色框框 第一個(gè)骰子
ctx.strokeRect(leftX+150,topY,diceX,diceY);//第二個(gè)骰子的灰色框框
ctx.stroke();
draw6();
draw66();
}
</script>
</head>
<body οnlοad="init();">
<canvas id="canvas" width="600" height="300" style="background-color:#CCFFCC">
your brower is not support html5
</canvas>
<input type="button" value="開始" οnclick="clickMe();"/>
</body>
</html>
版本2,面向?qū)ο?。但是JS真的很不適合面向?qū)ο螅@只是偽裝面向?qū)ο蟆?/p>
輸入用戶名后, 會(huì)吧用戶的姓名和搖出的點(diǎn)數(shù)和存入cookie中。 cookie只會(huì)保存對(duì)應(yīng)用戶最高的點(diǎn)數(shù)合。如果搖出更高的點(diǎn)數(shù)合,舊的就會(huì)被替換掉。通過(guò)查詢按鈕可以查詢?nèi)我庑彰淖罡唿c(diǎn)數(shù)合記錄。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>author:senDog 擲骰子游戲</title>
</head>
<body>
請(qǐng)輸入用戶姓名:<input id="userName1" type="text" >
<button id="btn" > play </button>
查詢用戶最高成績(jī)<button id="btn2" >查詢 </button>
<script language="JavaScript" type="text/javascript">
/*封裝骰子類*/
function shaizi(){
var num = parseInt(1+Math.random()*5);
return{
"getNum":function(){
return num;
},
"alertNum":function(){
alert("骰子點(diǎn)數(shù):"+num);
}
};
}
var s1 = new shaizi();
var s2 = new shaizi();
var x = document.getElementById("btn");
x.addEventListener("click",s1.alertNum);
x.addEventListener("click",s2.alertNum);
/*封裝cookie類*/
function cookie(){
return{
/*把總點(diǎn)數(shù)存入客戶端瀏覽器cookie,并設(shè)置每次關(guān)閉瀏覽器cookie消失*/
"addCookie":function(userName,num3){
var str = userName + "=" + escape(num3);
document.cookie = str;
//alert("str:"+str);
},
"getCookie":function(userName){//獲取指定名稱的cookie的值
var strCookie=document.cookie;
var arrCookie=strCookie.split("; ");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(arr[0]==userName)return arr[1];
}
return "";
}
}
}
var ck = new cookie();
/*記錄用戶最高總點(diǎn)數(shù),存入cookie,然后可以通過(guò)查詢用戶名查出用戶最高點(diǎn)數(shù)的記錄*/
function readName(){
userName1 = document.getElementById("userName1").value;
}
function ckSet(){
var num1=s1.getNum();
var num2 = s2.getNum();
num3 = num1+num2;
var n = ck.getCookie(userName1);
if(n!=null && n<num3) ck.addCookie(userName1,num3);
}
function ckGetName(){
// var userName1 = document.getElementById("userName1").value;
alert("username:"+userName1);
}
function ckGetNum(){
//var userName1 = document.getElementById("userName1").value;
var num=ck.getCookie(userName1);
alert("用戶最高總點(diǎn)數(shù):"+num);
}
x.addEventListener("click",readName);
x.addEventListener("click",ckSet);
x.addEventListener("click",ckGetName);
x.addEventListener("click",ckGetNum);
var y = document.getElementById("btn2");
y.addEventListener("click",readName);
y.addEventListener("click",ckGetName);
y.addEventListener("click",ckGetNum);
</script>
</body>
</html>
把代碼復(fù)制到到TXT文檔,后綴改為html即可運(yùn)行。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS中Json數(shù)據(jù)的處理和解析JSON數(shù)據(jù)的方法詳解
JSON (JavaScript Object Notation)一種簡(jiǎn)單的數(shù)據(jù)格式,比xml更輕巧,這篇文章主要介紹了JS中Json數(shù)據(jù)的處理和解析JSON數(shù)據(jù)的方法詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
JS實(shí)現(xiàn)黑客帝國(guó)文字下落效果
看過(guò)黑客帝國(guó)的朋友或許都對(duì)開頭的字幕效果很熟悉,自從影片播放以來(lái),網(wǎng)頁(yè)設(shè)計(jì)者有不少都在模仿這種文字下落的效果,而且還有文字漸變效果,對(duì)我們學(xué)習(xí)研究JS還是挺有幫助的哦,下面跟著小編一起學(xué)習(xí)JS 黑客帝國(guó)文字下落效果吧2015-09-09
JavaScript實(shí)現(xiàn)淺拷貝與深拷貝的方法分析
這篇文章主要介紹了JavaScript實(shí)現(xiàn)淺拷貝與深拷貝的方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript淺拷貝與深拷貝的定義與使用方法,需要的朋友可以參考下2018-07-07
JS模擬實(shí)現(xiàn)哈希表及應(yīng)用詳解
這篇文章主要介紹了JS模擬實(shí)現(xiàn)哈希表及應(yīng)用,結(jié)合實(shí)例形式分析了javascript模擬實(shí)現(xiàn)哈希表的步驟、相關(guān)操作技巧與使用方法,需要的朋友可以參考下2018-05-05
js 實(shí)現(xiàn)菜單左右滾動(dòng)顯示示例介紹
菜單左右滾動(dòng)顯示的實(shí)現(xiàn)方法有很多,在本文將為大家介紹下如何使用js實(shí)現(xiàn),需要的朋友可以參考下,希望對(duì)大家有所幫助2013-11-11
JS實(shí)現(xiàn)的省份級(jí)聯(lián)實(shí)例代碼
這篇文章主要介紹了js下省份級(jí)聯(lián)效果,需要的朋友可以參考一下2013-06-06
基于JavaScript實(shí)現(xiàn)可搜索的表格
在Web開發(fā)中,數(shù)據(jù)表格是常見的數(shù)據(jù)展示形式,這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript來(lái)實(shí)現(xiàn)這個(gè)功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
原生JS簡(jiǎn)單實(shí)現(xiàn)ajax的方法示例
這篇文章主要介紹了原生JS簡(jiǎn)單實(shí)現(xiàn)ajax的方法,結(jié)合實(shí)例形式分析了ajax的實(shí)現(xiàn)步驟與相關(guān)使用技巧,需要的朋友可以參考下2016-11-11
js對(duì)文章內(nèi)容進(jìn)行分頁(yè)示例代碼
這篇文章主要介紹了使用js對(duì)文章內(nèi)容進(jìn)行分頁(yè)的具體實(shí)現(xiàn),需要的朋友可以參考下2014-03-03

