js实现简单五子棋游戏


Posted in Javascript onMay 28, 2020

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

html

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8" />
 <title>五子棋</title>
 <link rel="stylesheet" href="css/style.css" />
 </head>
 <body>
 <canvas id="chess" width="450px" height="450px"></canvas>
 <script type="text/javascript" src="js/script.js" ></script>
 </body>
</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<count;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<count;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; 
 }
}

js实现简单五子棋游戏

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

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

Javascript 相关文章推荐
javascript add event remove event
Apr 07 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
Nov 21 Javascript
最佳JS代码编写的14条技巧
Jan 09 Javascript
js中opener与parent的区别详细解析
Jan 14 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
Jan 28 Javascript
javascript浏览器窗口之间传递数据的方法
Jan 20 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
Nov 17 Javascript
jQuery操作属性和样式详解
Apr 13 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
详解html-webpack-plugin用法全解
Jan 22 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 jQuery
layui 上传文件_批量导入数据UI的方法
Sep 23 Javascript
js实现双人五子棋小游戏
May 28 #Javascript
vue实现五子棋游戏
May 28 #Javascript
用vue 实现手机触屏滑动功能
May 28 #Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 #jQuery
JQuery插件tablesorter表格排序实现过程解析
May 28 #jQuery
JS替换字符串中指定位置的字符(多种方法)
May 28 #Javascript
js实现九宫格布局效果
May 28 #Javascript
You might like
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
python+mysql实现简单的web程序
2014/09/11 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
教师党员个人整改措施
2014/10/27 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
居安思危观后感
2015/06/11 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL