问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JavaScript 做五子棋,网络对战那种,相信很多人都会,请问JS大虾,哪些步骤需要用到异步方法,详细点!

发布网友 发布时间:2022-04-23 07:49

我来回答

3个回答

懂视网 时间:2022-04-23 12:10

本文主要和大家分享js实现五子棋代码,通过canvas绘制棋盘与棋子,通过js代码实现逻辑。

index.html代码:

<!DOCTYPE html><html><head>
 <meta charset="utf-8">
 <title>五子棋</title>
 <link rel="stylesheet" type="text/css" href="css/style.css"></head><body>
 <canvas id="chess" width="450px" height="450px"></canvas>
 <p id='restart' class="restart">
  <span>重新开始</span>
 </p>
 <script type="text/javascript" src="js/script.js"></script></body></html>

style.css代码:

canvas{ display: block; margin: 50px auto; box-shadow: -2px -2px 2px #EFEFEF, 5px 5px 5px #B9B9B9;}.restart{ text-align: center;}.restart>span{ display: inline-block; padding: 10px 20px; color: #fff; background-color: #C92027; border-radius: 5px;}

script.js代码:

//判断是否结束var over = false;//判断落子方var me = true; //我var chressBord = [];//棋盘for(var i = 0; i < 15; i++){
 chressBord[i] = []; for(var j = 0; j < 15; j++){
 chressBord[i][j] = 0;
 }
}//赢法的统计数组var myWin = [];var computerWin = [];//赢法数组var wins = [];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++){ 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++;
 }
}for(var i = 0; i < count; i++){
 myWin[i] = 0;
 computerWin[i] = 0;
}//获得canvas对象var chess = document.getElementById("chess");var context = chess.getContext('2d');

context.strokeStyle = '#bfbfbf'; //边框颜色var logo = new Image();
logo.src = 'images/logo.jpg';
logo.onload = function(){
 context.drawImage(logo,0,0,450,450);
 drawChessBoard();
}

document.getElementById("restart").onclick = function(){
 window.location.reload();
}
chess.onclick = function(e){
 if(over){ return;
 } if(!me){ return;
 } var x = e.offsetX; var y = e.offsetY; var i = Math.floor(x / 30); var j = Math.floor(y / 30); if(chressBord[i][j] == 0){
 oneStep(i,j,me);
 chressBord[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(chressBord[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] += 2100;
   }else if(computerWin[k] == 4){
    computerScore[i][j] += 20000;
   }   
   }
  }  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);
 chressBord[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;
 }
}//绘画棋盘var drawChessBoard = function(){
 for(var i = 0; i < 15; i++){
 context.moveTo(15 + i * 30 , 15);
 context.lineTo(15 + i * 30 , 435);
 context.stroke();
 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 + 2, 15 + j * 30 - 2, 13, 15 + i * 30 + 2, 15 + j * 30 - 2, 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();
}

热心网友 时间:2022-04-23 09:18

我是个在校高中生,初中各科成绩都比较好,基础也很好。但是到了高中以后学习就很差,高中的课程就除了刚开始的几节课听了,数学好像能明白的也就集合和立体几何的基础。其余的都没听。但是英语一直都在坚持背单词。。。很想学习计算机编程,有几个疑问,请大家告诉我。
1.我已经自学了C语言,买了两本书,一本是08年的全国计算机等级考试教材《C语言程序设计》和谭浩强的那本。感觉并不难(起码到现在已经学完了指针和数组为止没感觉到多难),稍微复杂点的细细琢磨琢磨还是能理解的。习题也是。请问我的理解能力怎么样?如果坚持下去,可以学好编程吗?
2.计算机组成原理和C语言数据结构,我现在可以不可以学习呢?我能不能学会?
3.大学里的计算机专业都开设哪些课程?哪些是有必要学的,哪些是不需要的?另外。计算机专业本科毕业的学生计算机能达到一个什么水平呢?
4.想学好编程要求数学到什么程度?听说离散数学很重要是吗?需要学吗?
5.我很想在计算机方面有所发展,所以很想学好计算机,能有个很出色的计算机水平。请大家给我个学习的建议,先学什么,后学什么。具有哪些知识基础可以学好?
我是自学的。追问好样的,小伙子。
作为一位即将读研的师兄告诉你,想学习编程很不错,但是学计算机专业数学和英语最最最重要,一定要学好。我先回答你问题:
1.c语言是任何计算机专业都必须学的,c语言也叫程序设计基础,很重要,这属于底层的,学好了现在都能找好工作,就C就可以了,嵌入式
2.这两门课都可以学啊,而且不难,特别是数据结构,但是组成原理就相对抽象些了

追答基于WebSocket的话就需要你的页面去轮询,这个轮询的过程需要异步

热心网友 时间:2022-04-23 10:36

如果不是基于WebSocket的话就需要你的页面去轮询,这个轮询的过程需要异步
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑lol突然很卡怎么办啊电脑玩lolfps低怎么解决 危化品仓库有什么设备 香港中文大学2021-2022在河北,重庆最低录取分数线 ChaCheer 洽洽 南瓜子 盐焗味 500g-适用对象 老闫家小粒香南瓜子-适用对象 洽洽盐焗味南瓜子-适用对象 盐焗南瓜子里有添加明矾吗 老街口盐焗味南瓜子500g*2袋量大优惠休闲零食 一天走多少步可以减肥每天走多少步可以减肥 肉炖土豆需要炖多久时间 geany 编辑器窗口最大化了,如何调成正常大小 借呗1000亿免息生活费一星期不还可以吗? ACCESS数据库数据表格字段中如何自动计算工龄、年龄 ACCESS如何设计字段计算 access如何对字段做运算 ACCESS 如何计算两个字段的和 桌面刷新的快捷键是啥? 大四申请国家奖学金是前三年的平均成绩还是大三一年的平均成绩 为什么我手机只玩了十多分钟就头晕头疼记忆力分析力都下降了? 大一是贫困生,大二不是,大二能申请国家励志奖学金吗? js编写五子棋代码 华为荣耀六手机自带的电池不耐用了,去售后换原装电池,换的电池还耐用吗 个税改革的影响和意义 早上空腹吃了凉拌菜,而菜里放了好多大蒜,全被我吃下现在感觉心里好难受,而且起床后喝了少许的蜂蜜! 早上七点吃蜂蜜拌番茄,八点吃凉拌黄瓜可以吗?有什么好处、坏处?为什么... 每天早饭都吃拌凉菜、身体会有湿气吗 早晨吃这些好吗? 请问下怎样可以拒里面群发的信息呢?不是群里面的信息哦 是别人群发的哦 怎么才能不退群情况下不接群消息? 西瓜又?又?。 北京快乐微云投资有限公司怎么样? QQ音乐微云为什么不显示封面 刷机会不会影响qq音乐微云音乐网盘里的音乐 三星云和微云哪个好用 三个半月哺乳期回奶了怎么办 如何做动画版的ppt 卧蚕眼是什么意思? “蚕宝宝眼型”卧蚕眼是什么样的 怎样用PPT制作动画幻灯片?能到几百M的那种,类似FLASH的,好漂亮! 卧蚕画法 卧蚕是什么 卧蚕眼 卧蚕和眼袋区别 哪位大神有最新的2010CAD序列号和密钥,小弟在这里谢过啦 公司公章,合同章不够用, 怎么办?可以再复制个吗? html代码中打开其他文件的代码是什么 node.js写的一个五子棋 怎么访问html页面 win10里面的运行在哪里 手工馒头的做法步骤图,手工馒头怎么做好吃 海螺的生存本领是什么? 海螺为什么是活的 谁有旺旺号批量申请器,最好是软件+注册机都有,谢谢!! 如何用nodejs搭建五子棋的服务器