本人只是前台的新手,看到一个五子棋的游戏,突然想能不能用前台的css+jQuery做一个呢。虽然是做出来了,可是度娘一下看到有用css3做的。瞬间就感觉虚了。 对css3有兴趣的同学的可以看看http://blog.sina.com.cn/s/blog_74d6cedd0100ywhv.html。

废话不多说,下面写一下需求吧

1、有一个棋盘,能下两种颜色的棋子。

2、程序能判定是否有赢家。能重新开局。

3、尽量的美化一下效果。

就这么简单的需求。

这是我做的效果        

一、页面布局

首先开始给页面布局,我的想法是最上面有个重新开始的按钮,然后下面就是棋盘。

其中样式为space是用来占位的div,让棋盘能够居中。plate就是棋盘。

<body> 
    <div class="restart">
     <input type="button" value="重新开始" style="margin:5px auto;"/>
    </div>
    <div class="space"> </div>

<div class="plate"></div>
</body>

css样式:

<style type="text/css">
body{ margin:0 0}
.restart{width:100%;float:left; text-align:center}
.space{ width:28%; height:600px; float:left}
.plate{ width:600px; height:600px; margin:10px auto; border:3px #000000 solid; float:left;}
</style>

二、导入jquery包,画出棋子。

棋子用一个div代替,(正常的五子棋是下在相交线上,但是我不知道怎么不用图片做出这个效果。如果有高手知道,求教育。。)有红蓝两种颜色,有hover效果,如果是对应的棋子hover对应的颜色

一般的五子棋都是15 * 15的棋盘。所以用循环画出对应的没有颜色的div。

导包:<script language="javascript" src="js/jquery-1.7.2.min.js"></script>

//定义一个boolean变量来判断是那种颜色咋下棋
var person = true;
$(function(){
 //行数
 var rows = 15;

//列数
 var columns = 15;
 for(var i = 0; i < rows; i++){
  for(var j = 0; j < columns; j++){
   var unit = $('<div class="unit" row="'+i+'" column="'+j+'"></div>');
   $('.plate').append(unit);
  }
 }
 unit_click();
 unit_hover();
});

css样式:

.unit{ width:34px; height:34px; border:1px #000000 dotted; background:#FFFFFF; float:left; margin:2px;}.unit:hover{ cursor: pointer;}

js:

//绑定的hover和click事件

function unit_hover(){
 $('.unit').hover(

//鼠标移入效果,如果是没有颜色的就显示相应颜色
  function(){
   if($(this).attr("clicked") != "true"){
    if(person == true){
     $(this).css("background-color","blue");
    }else{
     $(this).css("background-color","red");
    }
   }
  },function(){ //鼠标移出事件
   if($(this).attr("clicked") != "true"){
    $(this).css("background-color","white");   
   }
  }   
 );
}

function unit_click(){
 $('.unit').click(function(){

//点击之后添加根据相应的person添加颜色
  if($(this).attr("clicked") != "true"){
   $(this).attr("clicked","true");
   if(person == true){
    person = false;
    $(this).css("background-color","blue");
   } else{
    person = true;
    $(this).css("background-color","red");
   }
   var curColor = $(this).css("background-color");

然后每走一步去判断是不是有胜利的玩家。传入相应的行列数和最后一个子的颜色
   if(judge($(this).attr("row"),$(this).attr("column"),curColor)){

//如果有人胜出,
    $('.unit').unbind("click");
    $('.unit').unbind("hover");
    if(curColor == "rgb(255, 0, 0)")
    alert("红棋胜利");
    else alert("蓝棋胜利");
       }
  }
 });
}
三、实现获取判断是否有赢玩家的算法

思路是:整体分为四组循环,横,竖,45°,-45度。以横向为例子讲解,根据传入的坐标,获取右边第一个div,检查是否和最后一个下的子的颜色一样。如果一样计数器count 加一,再判断右边第二个子,一直到最后一个子的右边4个子都和它一样颜色。或者是遇到颜色不一样的子,就停止向右检查,改为向左判断,count计数并不清零,如果一样那么count加一,同理最多判断到左边第四个,如果count等于4 说明横向出现了5个子相连,那么有人胜出。如果count小于4.那么count清零。进行竖,斜的判断。

function judge(row, column,curColor){
 var result = false;
 var count = 0;
 row = parseInt(row);
 column = parseInt(column);
 //横向
 
 for(var i = 1; i <= 4;i++){
  if($($(".unit").get((column + i) + row *15)) != null){
   if($($(".unit").get((column + i) + row *15)).css("background-color") == curColor ){
    count ++;
    if(count == 4){
     return true;
    }
   }else {
    break;
   }
  }
 }
 for(var i = 1; i <= 4;i++){
  if($($(".unit").get((column - i) + row *15)) != null){
   if($($(".unit").get((column - i) + row *15)).css("background-color") == curColor ){
    count ++;
    if(count == 4){
     return true;
    }
   }else {
    break;
   }
  }
 }
 //竖向
 count = 0;
 for(var i = 1; i <= 4;i++){
  if($($(".unit").get(15 * (row +i) + column)) != null){
   if($($(".unit").get(15 * (row +i) + column)).css("background-color") == curColor){
    count ++;
    if(count == 4){
     return true;
    }
   }else {
    break;
   }
  }
 }
 for(var i = 1; i <= 4;i++){
  if($($(".unit").get(15 * (row -i) + column)) != null){
   if($($(".unit").get(15 * (row -i) + column)).css("background-color") == curColor){
    count ++;
    if(count == 4){
     return true;
    }
   }else {
    break;
   }
  }
 }
 //-45°倾斜
 count = 0;
 for(var i = 1; i <= 4;i++){
  if($($(".unit").get(15 * (row +i) + column + i)) != null){
   if($($(".unit").get(15 * (row +i) + column + i)).css("background-color") == curColor){
    count ++;
    if(count == 4){
     return true;
    }
   }else {
    break;
   }
  }
 }
 for(var i = 1; i <= 4;i++){
  if($($(".unit").get(15 * (row -i) + column - i )) != null){
   if($($(".unit").get(15 * (row -i) + column - i)).css("background-color") == curColor){
    count ++;
    if(count == 4){
     return true;
    }
   }else {
    break;
   }
  }
 }
 //45°倾斜
 count = 0;
 for(var i = 1; i <= 4;i++){
  if($($(".unit").get(15 * (row -i) + column + i)) != null){
   if($($(".unit").get(15 * (row -i) + column + i)).css("background-color") == curColor){
    count ++;
    if(count == 4){
     return true;
    }
   }else {
    break;
   }
  }
 }
 for(var i = 1; i <= 4;i++){
  if($($(".unit").get(15 * (row +i) + column - i )) != null){
   if($($(".unit").get(15 * (row +i) + column - i)).css("background-color") == curColor){
    count ++;
    if(count == 4){
     return true;
    }
   }else {
    break;
   }
  }
 }
 
 return result;
}

四、增加重新开始的功能。

现在所有功能基本上完成了。 重新开始需要把所有格子属性去除,然后重新绑定click和hover事件

在载入函数中加入:

$("input").click(function(){
  $(".unit").removeAttr("clicked");
  $(".unit").css("background-color","white");
  unit_click();
  unit_hover();
  person = true;
 });

这样一个简单的五子棋游戏就完成了, 比较适合新手练习jquery。  算法思路也有由一个同学提供的。如果大家有更好的算法,欢迎留言。

ps:用代码那个模式编辑了几次。都是很多不是代码的文字也写入代码中去了。 请问代码要选成什么变成语言?

基于jquery的五子棋单机版相关推荐

  1. 基于flask的五子棋小游戏

    基于flask的五子棋小游戏 前言 ​ 首先说明一下,本人方向是java后端,只因老师布置了一个作业,要用flask来做一个五子棋,没办法被逼上梁山,程序不太美观,但是应付作业还是够了的. ​ 废话不 ...

  2. 基于jQuery垂直多级导航菜单代码

    基于jQuery垂直多级导航菜单代码是一款黑色风格的jQuery竖直导航菜单特效下载.效果图如下: 在线预览    源码下载 实现的代码. html代码: <ul class="ce& ...

  3. 使用 Sticky-Kit 实现基于 jQuery 的元素固定效果

    元素固定效果在网页中应用得很多,比较常见的使用场景有改进导航,显示广告.Sticky-Kit 是一个非常方便的 jQuery 插件,简化了创建/管理粘元素,有复杂的使用功能.这些功能包括:处理多个固定 ...

  4. 基于jQuery图片自适应排列显示代码

    基于jQuery图片自适应排列显示代码.这是一款基于jquery.flex-images插件实现的类似谷歌图片流效果.效果图如下: 在线预览    源码下载 实现的代码. html代码: <di ...

  5. 一款基于jquery和css3的响应式二级导航菜单

    今天给大家分享一款基于jquery和css3的响应式二级导航菜单,这款导航是传统的基于顶部,鼠标经过的时候显示二级导航,还采用了当前流行的响应式设计.效果图如下: 在线预览   源码下载 实现的代码. ...

  6. 基于Jquery插件Uploadify实现实时显示进度条上传图片

    网址:http://www.jb51.net/article/83811.htm 这篇文章主要介绍了基于Jquery插件Uploadify实现实时显示进度条上传图片的相关资料,感兴趣的小伙伴们可以参考 ...

  7. 转载 - 10个基于jQuery实现的漂亮网站赏析

    这10个基于jQuery实现的网站,不仅美观而且设计师也可以从中获得很好的灵感. 1. Google+ Tour 2. NIzo 3. Cultural Solutions 4. Kasteel Wi ...

  8. 13款基于jQuery Mobile的布局插件和示例

    现在已经进入了移动互联网时代,因此将你的网站迁移到移动设备上就显得比较重要的.问题是,如何在移动设备的小屏幕中呈现你的网站中的所有内容呢? 本文介绍13款基于jQuery Mobile的布局插件和示例 ...

  9. 基于jQuery实现富文本的拖拽和修改大小

    实现功能 实现富文本编辑器在定义区域内可以拖拽和调整其大小,编辑完成后可将内容生成图片. 由于系统较陈旧,所以选择的是基于jQuery的插件实现. 相关插件 wangEditor jQuery UI ...

最新文章

  1. [BZOJ 2523][Ctsc2001]聪明的学生(递归)
  2. 【NetApp】安装Cmode模拟器时,应使用带交换机的模式
  3. 何时查询2021高考成绩长春市,2020年吉林长春成人高考成绩查询入口(已开通)...
  4. PHPExcel进行获取列字母
  5. Python爬取某旅游网站中的中国城市信息
  6. 两篇同年硕士论文高度雷同!电子科技大学回应:启动调查!
  7. 去月球“你知道戴维会变身成哪种动物吗?”
  8. 作者:陈振冲(1959-),男,博士,香港理工大学学务长,电子计算学系教授...
  9. FreeEIM 来点新知识iOS UIScrollView详解
  10. Flutter 绘图 Paint strokeCap 延伸类型 strokeJoin 拐角类型 图文分析
  11. 智能水位检测系统proteus_浅谈智能视觉检测系统的6大优点
  12. 证书服务器web注册,无法通过 Web 注册请求证书 - Windows Server | Microsoft Docs
  13. 荣耀赵明 “Diss” 5G 手机;甲骨文创始人埃里森:Uber 一文不值;Chrome 77 发布 | 极客头条...
  14. docker stats 监控资源使用情况
  15. At least one JAR was scanned for TLDs yet contained no TLDs.问题解决方式
  16. 【洛谷P2123】皇后游戏
  17. 项目启动后sqlSessionFactory获取不到创建数据库连接失败
  18. 关于LCD_ShowString的顽固感叹号!
  19. Ubuntu18.04 编译Android 10源码 并烧录源码到pixel3的避坑指南
  20. css实现日出日落效果

热门文章

  1. 手握多样算力,从容面对下一代互联网的百样创新
  2. 跟燕青学Redis-Redis集群安装
  3. 镇江php开发,myweb 我的家乡镇江,web技术开发的网站,三层架构,5大模块设计 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
  4. 破解TCP为Windows7下的迅雷提速(图形方式修改)
  5. 总结python中列表、元组、字典、集合的共同点和不同点
  6. 华为校招java笔试题库_华为校招Java笔试题库,看你会不会做
  7. iOS常用国外网站清单
  8. 做了996的网站优化,就来聊聊SEO网络优化
  9. 众安在线荣获第十届中国证券金紫荆“最佳投资者关系上市公司”奖
  10. MySQL基础(二十八)索引优化与查询优化