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 相关文章推荐
屏蔽script注入小例子
Nov 12 Javascript
node.js+express制作网页计算器
Jan 17 Javascript
BootStrap中
Dec 10 Javascript
JS常用倒计时代码实例总结
Feb 07 Javascript
纯js实现画一棵树的示例
Sep 05 Javascript
信息滚动效果的实例讲解
Sep 18 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
JavaScript中引用vs复制示例详析
Dec 06 Javascript
使用Angular自定义字段校验指令的方法示例
Feb 01 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
Mar 06 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
javaScript把其它类型转换为Number类型
Oct 13 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 stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
浅谈Python的垃圾回收机制
2016/12/17 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
建筑设计专业求职自我评价
2014/03/02 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫