HTML写五子棋小游戏,js实现简单五子棋游戏

本文实例为大家分享了js实现五子棋游戏的具体代码,供大家参考,具体内容如下

html

五子棋

css

canvas{

display: block;

margin: 50px auto;

box-shadow: -2px -2px 2px #EFEFEF,5px 5px 5px #B9B9B9;

}

js

var me = true;

var over = false;

var chessBox = [];

var wins = []; //定义三维数组

//赢法统计数组

var myWin = [];

var computerWin = [];

for(i=0;i<15;i++){

chessBox[i]=[];

for(j=0;j<15;j++){

chessBox[i][j]=0;

}

}

for(var i=0;i<15;i++){

wins[i]=[];

for(var j=0;j<15;j++){

wins[i][j]=[];

}

}

var count =0;

//所有横线

for(var i=0;i<15;i++){

for(var j=0;j<11;j++){

//执行1次

// wins[0][0][0]=true;

// wins[0][1][0]=true;

// wins[0][2][0]=true;

// wins[0][3][0]=true;

// wins[0][4][0]=true;

//执行2次

// wins[0][1][1]=true;

// wins[0][2][1]=true;

// wins[0][3][1]=true;

// wins[0][4][1]=true;

// wins[0][5][1]=true;

for(var k=0; k<5;k++){

wins[i][j+k][count] = true;

}

count++;

}

}

//所有竖线

for(var i=0;i<15;i++){

for(var j=0;j<11;j++){

for(var k=0; k<5;k++){

wins[j+k][i][count] = true;

}

count++;

}

}

//所有斜线

for(var i=0;i<11;i++){

for(var j=0;j<11;j++){

for(var k=0; k<5;k++){

wins[i+k][j+k][count] = true;

}

count++;

}

}

//所有反斜线

for(var i=0;i<11;i++){

for(var j=14;j>3;j--){

for(var k=0; k<5;k++){

wins[i+k][j-k][count] = true;

}

count++;

}

}

console.log(count);

for (var i=0;i

myWin[i] = 0;

computerWin[i] = 0;

}

var chess = document.getElementById('chess');

var context = chess.getContext('2d');

context.strokeStyle = "#BFBFBF";

var logo= new Image();

logo.src = "img/木头.jpg";

logo.onload = function(){

context.drawImage(logo,0,0,450,450);

drawChessBoard();

// oneStep(0,0,true);

// oneStep(1,1,false);

}

function drawChessBoard(){

for(var i=0;i<15;i++){

context.moveTo(15+i*30,15);

context.lineTo(15+i*30,435);

context.moveTo(15,15+i*30);

context.lineTo(435,15+i*30);

context.stroke();

}

}

var oneStep = function(i,j,me){

context.beginPath();

context.arc(15+i*30,15+j*30,13,0,2*Math.PI);

context.closePath();

var gradient = context.createRadialGradient(15+i*30,15+j*30,13,15+i*30,15+j*30,0);

if(me){

gradient.addColorStop(0,"#0A0A0A");

gradient.addColorStop(1,"#636766");

}else{

gradient.addColorStop(0,"#D1D1D1");

gradient.addColorStop(1,"#F9F9F9");

}

context.fillStyle = gradient;

context.fill();

}

chess.onclick = function(e){

if(over){

return;

}

if(!me){

return;

}

var x = e.offsetX;

var y = e.offsetY;

var i = Math.floor(x/30); //i,j为索引序列号

var j = Math.floor(y/30);

if(chessBox[i][j]==0){

oneStep(i,j,me);

chessBox[i][j]=1;

for(var k=0;k < count; k++){

if(wins[i][j][k]) {

myWin[k]++;

computerWin[k] = 6; //设置异常值

if(myWin[k] == 5) {

window.alert("你赢了");

over = true;

}

}

}

if(!over){

me=!me;

computerAI();

}

}

}

var computerAI = function(){

var myScore = [];

var computerScore = [];

var max = 0; //保存最高分数;

var u = 0, v =0; //保存坐标

for(var i=0;i<15;i++){

myScore[i] = [];

computerScore [i] = [];

for(var j=0;j<15;j++){

myScore[i][j] = 0;

computerScore[i][j] = 0;

}

}

for (var i=0; i<15;i++) {

for (var j=0;j<15;j++) {

if(chessBox[i][j] == 0){

for(var k =0 ;k

if(wins[i][j][k]){

if(myWin[k]==1){

myScore[i][j]+= 200;

}else if(myWin[k]==2){

myScore[i][j]+= 400;

}else if(myWin[k]==3){

myScore[i][j]+= 2000;

}else if(myWin[k]==4){

myScore[i][j]+= 10000;

}

if(computerWin[k]==1){

computerScore[i][j]+= 220;

}else if(computerWin[k]==2){

computerScore[i][j]+= 420;

}else if(computerWin[k]==3){

computerScore[i][j]+= 2020;

}else if(computerWin[k]==4){

computerScore[i][j]+= 10020;

}

}

}

if(myScore[i][j]>max){

max = myScore[i][j];

u = i;

v = j;

}else if(myScore[i][j] == max){

if(computerScore[i][j] > computerScore[u][v]){

u = i;

v = j;

}

}

if(computerScore[i][j]>max){

max = computerScore[i][j];

u = i;

v = j;

}else if(computerScore[i][j] == max){

if(myScore[i][j] > myScore[u][v]){

u = i;

v = j;

}

}

}

}

}

oneStep(u,v,false);

chessBox[u][v] = 2;

for(var k=0;k < count; k++){

if(wins[u][v][k]) {

computerWin[k]++;

myWin[k] = 6; //设置异常值

if(computerWin[k] == 5) {

window.alert("计算机赢了");

over = true;

}

}

}

if(!over){

me=!me;

}

}

83a3bc8acb70272b98a3890f44623431.png

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值