Web前端最全html五子棋游戏(附源码)(1),2024年最新这些面试题你会吗

对象篇

模块化编程-自研模块加载器

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

context.strokeStyle = ‘#bfbfbf’; //边框颜色

var backbtn = document.getElementById(“goback”);

var returnbtn = document.getElementById(“return”);

window.onload = function(){

drawChessBoard(); // 画棋盘

}

document.getElementById(“restart”).onclick = function(){

window.location.reload();

}

// 我,下棋

chess.onclick = function(e){

if(over){

return;

}

if(!me){

return;

}

// 悔棋功能可用

backbtn.className = backbtn.className.replace( new RegExp( “(\s|^)unable(\s|$)” )," " );

var x = e.offsetX;

var y = e.offsetY;

var i = Math.floor(x / 30);

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

_nowi = i;

_nowj = j;

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

oneStep(i,j,me);

chressBord[i][j] = 1; //我,已占位置

for(var k = 0; k < count; k++){ // 将可能赢的情况都加1

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

// debugger;

myWin[k]++;

_compWin[k] = computerWin[k];

computerWin[k] = 6;//这个位置对方不可能赢了

if(myWin[k] == 5){

// window.alert(‘你赢了’);

resultTxt.innerHTML = ‘恭喜,你赢了!’;

over = true;

}

}

}

if(!over){

me = !me;

computerAI();

}

}

}

// 悔棋

backbtn.onclick = function(e){

if(!backAble) { return;}

over = false;

me = true;

// resultTxt.innerHTML = ‘o(╯□╰)o,悔棋中’;

// 撤销悔棋功能可用

returnbtn.className = returnbtn.className.replace( new RegExp( “(\s|^)unable(\s|$)” )," " );

// 我,悔棋

chressBord[_nowi][_nowj] = 0; //我,已占位置 还原

minusStep(_nowi, _nowj); //销毁棋子

for(var k = 0; k < count; k++){ // 将可能赢的情况都减1

if(wins[_nowi][_nowj][k]){

myWin[k]–;

computerWin[k] = _compWin[k];//这个位置对方可能赢

}

}

// 计算机相应的悔棋

chressBord[_compi][_compj] = 0; //计算机,已占位置 还原

minusStep(_compi, _compj); //销毁棋子

for(var k = 0; k < count; k++){ // 将可能赢的情况都减1

if(wins[_compi][_compj][k]){

computerWin[k]–;

myWin[k] = _myWin[i];//这个位置对方可能赢

}

}

resultTxt.innerHTML = ‘–益智五子棋–’;

returnAble = true;

backAble = false;

}

// 撤销悔棋

returnbtn.onclick = function(e){

if(!returnAble) { return; }

// 我,撤销悔棋

chressBord[_nowi][_nowj] = 1; //我,已占位置

oneStep(_nowi,_nowj,me);

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

if(wins[_nowi][_nowj][k]){

myWin[k]++;

_compWin[k] = computerWin[k];

computerWin[k] = 6;//这个位置对方不可能赢

}

if(myWin[k] == 5){

resultTxt.innerHTML = ‘恭喜,你赢了!’;

over = true;

}

}

// 计算机撤销相应的悔棋

chressBord[_compi][_compj] = 2; //计算机,已占位置

oneStep(_compi,_compj,false);

for(var k = 0; k < count; k++){ // 将可能赢的情况都减1

if(wins[_compi][_compj][k]){

computerWin[k]++;

_myWin[k] = myWin[k];

myWin[k] = 6;//这个位置对方不可能赢

}

if(computerWin[k] == 5){

resultTxt.innerHTML = ‘o(╯□╰)o,计算机赢了,继续加油哦!’;

over = true;

}

}

returnbtn.className += ’ '+ ‘unable’;

returnAble = false;

backAble = true;

}

// 计算机下棋

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;

}

}

}

}

}

_compi = u;

_compj = v;

oneStep(u,v,false);

chressBord[u][v] = 2; //计算机占据位置

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

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

computerWin[k]++;

_myWin[k] = myWin[k];

myWin[k] = 6;//这个位置对方不可能赢了

if(computerWin[k] == 5){

resultTxt.innerHTML = ‘o(╯□╰)o,计算机赢了,继续加油哦!’;

over = true;

}

}

}

if(!over){

me = !me;

}

backAble = true;

returnAble = false;

var hasClass = new RegExp(‘unable’).test(’ ’ + returnbtn.className + ’ ');

if(!hasClass) {

returnbtn.className += ’ ’ + ‘unable’;

}

}

//绘画棋盘

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();

}

//销毁棋子

跳槽是每个人的职业生涯中都要经历的过程,不论你是搜索到的这篇文章还是无意中浏览到的这篇文章,希望你没有白白浪费停留在这里的时间,能给你接下来或者以后的笔试面试带来一些帮助。

也许是互联网未来10年中最好的一年。WINTER IS COMING。但是如果你不真正的自己去尝试尝试,你永远不知道市面上的行情如何。这次找工作下来,我自身感觉市场并没有那么可怕,也拿到了几个大厂的offer。在此进行一个总结,给自己,也希望能帮助到需要的同学。

面试准备

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

面试准备根据每个人掌握的知识不同,准备的时间也不一样。现在对于前端岗位,以前也许不是很重视算法这块,但是现在很多公司也都会考。建议大家平时有空的时候多刷刷leetcode。算法的准备时间比较长,是一个长期的过程。需要在掌握了大部分前端基础知识的情况下,再有针对性的去复习算法。面试的时候算法能做出来肯定加分,但做不出来也不会一票否决,面试官也会给你提供一些思路。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值