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 相关文章推荐
jquery $.ajax入门应用一
Nov 19 Javascript
javascript 模式设计之工厂模式学习心得
Apr 27 Javascript
extjs render 用法介绍
Sep 11 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
如何高效率去掉js数组中的重复项
Apr 12 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
Nov 24 Javascript
Bootstrap模态窗口源码解析
Feb 08 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
React Native自定义控件底部抽屉菜单的示例
Feb 08 Javascript
js回溯法计算最佳旅行线路代码实例
Sep 11 Javascript
基于Web Audio API实现音频可视化效果
Jun 12 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限制ip地址范围的方法
2015/03/31 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
常用的javascript function代码
2008/05/23 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Django中的Signal代码详解
2018/02/05 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
pandas中的series数据类型详解
2019/07/06 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
中英文自我评价语句
2013/12/20 职场文书
美发店5.1活动方案
2014/01/24 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js