php 井字过三关,【JQuery】“井字过三关”游戏

虽然我是一名实打实的产品喵,但是为了能够和程序猿们愉快地沟通(让撕逼再和谐一点),我自学了一些代码知识,写了一些不入流不靠谱不成熟的“三不”应用,随便扔在这里分享一下。

简介

“井字过三关”相信大家都很熟悉了,其实用JQuery处理起来也不算太难,我这里编写了两款,一款是“玩家VS玩家”,一款是“玩家VS电脑”。其实“VS电脑”的版本我只是做了一个很基础的设定,那就是“玩家怎么走,电脑就怎么封路”,毕竟我就是一产品汪,写不出啥牛逼的算法。

基本的思路就是玩家点击哪块,哪块就增加一个“X”或“O”(没错,为了简单处理,我使用的就是英文字母大写的“X”和“O”),每一次有玩家/电脑走完,系统都会判断一次是否获胜,如果获胜了就结束游戏并重置。

挺适合前端新手用来练手的。

截图

fff7e9c5b75a

激烈战斗中

代码

HTML+CSS框架使用的是bootstrap 3,不过这里主要分享一下js部分的代码,使用的是JQuery。

玩家VS玩家:

window.onload = function () {

$(document).ready(function(){

//定义玩家序号

var player = 1;

//点击某方块时

$(".block").click(function(){

var blockSelected = $(this);

//我们通过class来定义“X”和“O”

if(blockSelected.hasClass("ex") || blockSelected.hasClass("oh")){

alert("Please select another block.");

}

//当胜负已判时,提醒玩家重置游戏

else if(blockSelected.hasClass("game-over")){

alert("This game is finished. Please click 'RESET' to start a new game.");

}

else {

//1号玩家用“X”,首先测是否获胜,如果不获胜,玩家代号变为2

if(player === 1){

blockSelected.addClass("ex").text("X");

if(checkVictory("ex")){

$(".victory-msg").text("Player " + player + "'s Victory!").fadeIn("slow");

$(".block").addClass("game-over");

}

player = 2;

}

//号玩家用“O”,首先测是否获胜,如果不获胜,玩家代号变为1

else {

blockSelected.addClass("oh").text("O");

if(checkVictory("oh")){

$(".victory-msg").text("Player " + player + "'s Victory!").fadeIn("slow");

$(".block").addClass("game-over");

}

player = 1;

}

}

});

//重置游戏

$(".reset").click(function(){

$(".block").html("").removeClass("ex oh game-over");

$(".victory-msg").fadeOut("slow");

player = 1;

});

//判断胜负的函数

//“井字过三关”一共只有8种胜利情况,因此我很无脑地把他们都列出来了

//函数的参数使用的是“X”以及“O”

function checkVictory(symbol){

if($("#1").hasClass(symbol) && $("#2").hasClass(symbol)&& $("#3").hasClass(symbol)){

return true;

}

else if($("#4").hasClass(symbol) && $("#5").hasClass(symbol) && $("#6").hasClass(symbol)){

return true;

}

else if($("#7").hasClass(symbol) && $("#8").hasClass(symbol) && $("#9").hasClass(symbol)){

return true;

}

else if($("#1").hasClass(symbol) && $("#4").hasClass(symbol) && $("#7").hasClass(symbol)){

return true;

}

else if($("#2").hasClass(symbol) && $("#5").hasClass(symbol) && $("#8").hasClass(symbol)){

return true;

}

else if($("#3").hasClass(symbol) && $("#6").hasClass(symbol) && $("#9").hasClass(symbol)){

return true;

}

else if($("#1").hasClass(symbol) && $("#5").hasClass(symbol) && $("#9").hasClass(symbol)){

return true;

}

else if($("#3").hasClass(symbol) && $("#5").hasClass(symbol) && $("#7").hasClass(symbol)){

return true;

}

else {

return false;

}

}

});

}

玩家VS电脑:

window.onload = function () {

$(document).ready(function(){

//定义电脑

var AiMoveId;

$(".block").click(function(){

var blockSelected = $(this);

if(blockSelected.hasClass("ex") || blockSelected.hasClass("oh")){

alert("Please select another block.");

}

else if(blockSelected.hasClass("game-over")){

alert("This game is finished. Please click 'RESET' to start a new game.");

}

else {

//玩家走“X”

blockSelected.addClass("ex").text("X");

if(checkVictory("ex")){

$(".block").addClass("game-over");

$(".victory-msg").text("Player's Victory!").fadeIn("slow");

}

else {

//在上面玩家走完之后,下面轮到电脑走“O”

AiMoveId = AiSmartMove();

$("#"+AiMoveId).addClass("oh").text("O");

if(checkVictory("oh")){

$(".block").addClass("game-over");

$(".victory-msg").text("AI's Victory!").fadeIn("slow");

}

}

}

});

$(".reset").click(function(){

$(".block").html("").removeClass("ex oh game-over");

$(".victory-msg").fadeOut("slow");

});

function checkVictory(symbol){

if($("#1").hasClass(symbol) && $("#2").hasClass(symbol)&& $("#3").hasClass(symbol)){

return true;

}

else if($("#4").hasClass(symbol) && $("#5").hasClass(symbol) && $("#6").hasClass(symbol)){

return true;

}

else if($("#7").hasClass(symbol) && $("#8").hasClass(symbol) && $("#9").hasClass(symbol)){

return true;

}

else if($("#1").hasClass(symbol) && $("#4").hasClass(symbol) && $("#7").hasClass(symbol)){

return true;

}

else if($("#2").hasClass(symbol) && $("#5").hasClass(symbol) && $("#8").hasClass(symbol)){

return true;

}

else if($("#3").hasClass(symbol) && $("#6").hasClass(symbol) && $("#9").hasClass(symbol)){

return true;

}

else if($("#1").hasClass(symbol) && $("#5").hasClass(symbol) && $("#9").hasClass(symbol)){

return true;

}

else if($("#3").hasClass(symbol) && $("#5").hasClass(symbol) && $("#7").hasClass(symbol)){

return true;

}

else {

return false;

}

}

//电脑封路的函数

//总体思路也很无脑,就是把所有玩家(“X”)连成一条的情况列出来,然后让电脑去走玩家会获胜的那一块,在没有出现这种情况的时候,电脑随机走

function AiSmartMove(){

var result;

if(($("#2").hasClass("ex") && $("#3").hasClass("ex")) || ($("#4").hasClass("ex") && $("#7").hasClass("ex")) || ($("#5").hasClass("ex") && $("#9").hasClass("ex"))){

if($("#1").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 1;

}

}

else if(($("#1").hasClass("ex") && $("#3").hasClass("ex")) || ($("#5").hasClass("ex") && $("#8").hasClass("ex"))){

if($("#2").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 2;

}

}

else if(($("#1").hasClass("ex") && $("#2").hasClass("ex")) || ($("#5").hasClass("ex") && $("#7").hasClass("ex")) || ($("#6").hasClass("ex") && $("#9").hasClass("ex"))){

if($("#3").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 3;

}

}

else if(($("#1").hasClass("ex") && $("#7").hasClass("ex")) || ($("#5").hasClass("ex") && $("#6").hasClass("ex"))){

if($("#4").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 4;

}

}

else if(($("#4").hasClass("ex") && $("#6").hasClass("ex")) || ($("#2").hasClass("ex") && $("#8").hasClass("ex")) || ($("#1").hasClass("ex") && $("#9").hasClass("ex")) || ($("#3").hasClass("ex") && $("#7").hasClass("ex"))){

if($("#5").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 5;

}

}

else if(($("#4").hasClass("ex") && $("#5").hasClass("ex")) || ($("#3").hasClass("ex") && $("#9").hasClass("ex"))){

if($("#6").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 6;

}

}

else if(($("#1").hasClass("ex") && $("#4").hasClass("ex")) || ($("#8").hasClass("ex") && $("#9").hasClass("ex")) || ($("#3").hasClass("ex") && $("#5").hasClass("ex"))){

if($("#7").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 7;

}

}

else if(($("#7").hasClass("ex") && $("#9").hasClass("ex")) || ($("#2").hasClass("ex") && $("#5").hasClass("ex"))){

if($("#8").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 8;

}

}

else if(($("#1").hasClass("ex") && $("#5").hasClass("ex")) || ($("#7").hasClass("ex") && $("#8").hasClass("ex")) || ($("#3").hasClass("ex") && $("#6").hasClass("ex"))){

if($("#9").hasClass("oh")){

result = AiRandomMove();

}

else {

result = 9;

}

}

else {

result = AiRandomMove();

}

return result;

}

//电脑随机走,返回电脑可走的方块代号

function AiRandomMove(){

var blockIdArr = [1,2,3,4,5,6,7,8,9];

var movableBlocksArr = blockIdArr.filter(function(e){

if(!$("#"+e).hasClass("ex") && !$("#"+e).hasClass("oh") && !$("#"+e).hasClass("game-over")){

return e;

}

});

return movableBlocksArr[Math.floor(Math.random()*movableBlocksArr.length)];

}

});

}

相关

想看源代码的童鞋可以来CODING.NET获取。

也可以通过这些DEMO体验一下:玩家VS玩家 / 玩家VS电脑。

THE END.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值