JavaScript實(shí)現(xiàn)網(wǎng)頁版五子棋游戲
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)網(wǎng)頁版五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
學(xué)習(xí)js的第三天,跟著老師完成的五子棋小游戲,記錄學(xué)習(xí)成果歡迎大佬們一起分享經(jīng)驗(yàn),批評指正。
本程序主要通過三部分實(shí)現(xiàn):
1.棋盤繪制
2.鼠標(biāo)交互
3.輸贏判斷
<!DOCTYPE html>
<html>
<head>
<title>
canvastest
</title>
</head>
<body>
<h1> canvas</h1>
<canvas id="canvas"width="400"height="400">
</canvas>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>
var canv=document.getElementById("canvas");
var ctx=canv.getContext("2d");
ctx.strokeStyle="black";
var bow=0;
//畫出棋盤;
var matrix=[
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
];
ctx.beginPath();
for(var i=0;i<19;i++){
ctx.moveTo(10+20*i,10);
ctx.lineTo(10+i*20,370);
ctx.moveTo(10,20*i+10);
ctx.lineTo(370,i*20+10);
}
ctx.stroke();
//鼠標(biāo)交互;
$("#canvas").click(function(event)
{
console.log(event.offsetX)
console.log(bow);
var arcPosX,arcPosY;
var mtxPosX,mtxPosY;
for(var x=0;x<19;x++)
{
if((Math.abs(event.offsetX-(10+x*20)))<10)
{
arcPosX=10+x*20;
mtxPosX=x;
}
if((Math.abs(event.offsetY-(10+x*20)))<10)
{
arcPosY=10+x*20;
mtxPosY=x;
}
}
if(matrix[mtxPosX][mtxPosY] == 0)
{
bow=!bow;
ctx.beginPath();
if(bow){
ctx.fillStyle="Black";
ctx.arc(arcPosX,arcPosY,10,0,Math.PI*2,false);
matrix[mtxPosX][mtxPosY]=1;
}
else{
ctx.fillStyle="White";
ctx.arc(arcPosX,arcPosY,10,0,Math.PI*2,false);
ctx.stroke();
matrix[mtxPosX][mtxPosY]=2;
}
ctx.fill();
}
//實(shí)現(xiàn)輸贏判斷
var winFlag=0;
if(winFlag==0){
if(matrix[mtxPosX-1][mtxPosY] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-2][mtxPosY] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-3][mtxPosY] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-4][mtxPosY] == matrix[mtxPosX][mtxPosY])
{
winFlag = 1;
}
else
{
if(matrix[mtxPosX+1][mtxPosY] == matrix[mtxPosX][mtxPosY])
{
winFlag = 1;
}
else
{
winFlag = 0;
}
}
}
else
{
for(var w = 0; w < 2 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
else
{
for(var w = 0; w < 3 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
else
{
for(var w = 0; w < 4 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
if(matrix[mtxPosX][mtxPosY-1] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX][mtxPosY-2] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX][mtxPosY-3] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX][mtxPosY-4] == matrix[mtxPosX][mtxPosY])
{
winFlag = 1;
}
else
{
if(matrix[mtxPosX][mtxPosY+1] == matrix[mtxPosX][mtxPosY])
{
winFlag = 1;
}
else
{
winFlag = 0;
}
}
}
else
{
for(var w = 0; w < 2 ; w ++)
{
if(matrix[mtxPosX][mtxPosY+w+1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
else
{
for(var w = 0; w < 3 ; w ++)
{
if(matrix[mtxPosX][mtxPosY+w+1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
else
{
for(var w = 0; w < 4 ; w ++)
{
if(matrix[mtxPosX][mtxPosY+w+1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
if(matrix[mtxPosX-1][mtxPosY-1] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-2][mtxPosY-2] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-3][mtxPosY-3] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-4][mtxPosY-4] == matrix[mtxPosX][mtxPosY])
{
winFlag = 1;
}
else
{
if(matrix[mtxPosX+1][mtxPosY+1] == matrix[mtxPosX][mtxPosY])
{
winFlag = 1;
}
else
{
winFlag = 0;
}
}
}
else
{
for(var w = 0; w < 2 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY+w+1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
else
{
for(var w = 0; w < 3 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY+w+1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
else
{
for(var w = 0; w < 4 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY+w+1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
if(matrix[mtxPosX-1][mtxPosY+1] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-2][mtxPosY+2] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-3][mtxPosY+3] == matrix[mtxPosX][mtxPosY])
{
if(matrix[mtxPosX-4][mtxPosY+4] == matrix[mtxPosX][mtxPosY])
{
winFlag = 1;
}
else
{
if(matrix[mtxPosX+1][mtxPosY-1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
}
else
{
winFlag = 1;
}
}
}
else
{
for(var w = 0; w < 2 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY-w-1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
else
{
for(var w = 0; w < 3 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY-w-1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
else
{
for(var w = 0; w < 4 ; w ++)
{
if(matrix[mtxPosX+w+1][mtxPosY-w-1] != matrix[mtxPosX][mtxPosY])
{
winFlag = 0;
break;
}
else
{
winFlag = 1;
}
}
}
}
if(winFlag ==1){
if(bow)
alert("black win!");
else
alert("white win!");
}
});
</script>
</body>
</html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解JavaScript中關(guān)于this指向的4種情況
這篇文章主要介紹了JavaScript中關(guān)于this指向的4種情況,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
js時(shí)間戳轉(zhuǎn)yyyy-MM-dd HH-mm-ss工具類詳解
這篇文章主要介紹了js時(shí)間戳轉(zhuǎn)yyyy-MM-dd HH-mm-ss工具類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
詳解如何用babel轉(zhuǎn)換es6的class語法
這篇文章主要介紹了詳解如何用babel轉(zhuǎn)換es6的class語法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
js下拉選擇框與輸入框聯(lián)動(dòng)實(shí)現(xiàn)添加選中值到輸入框的方法
這篇文章主要介紹了js下拉選擇框與輸入框聯(lián)動(dòng)實(shí)現(xiàn)添加選中值到輸入框的方法,涉及javascript中onchange事件及頁面元素遍歷的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
實(shí)現(xiàn)JavaScript高性能的數(shù)據(jù)存儲
本文主要對JavaScript的數(shù)據(jù)存儲,產(chǎn)生性能問題的原因,內(nèi)存泄露的幾種情況等做了簡要分析介紹,需要的朋友可以看下2016-12-12
每天一篇javascript學(xué)習(xí)小結(jié)(Boolean對象)
這篇文章主要介紹了javascript中的Boolean對象知識點(diǎn),對Boolean對象的基本使用方法進(jìn)行解釋,一段很詳細(xì)的代碼介紹,感興趣的小伙伴們可以參考一下2015-11-11

