栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

Canvas小游戏——五子棋

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Canvas小游戏——五子棋

前言

Canvas API(画布)是在HTML5中新增的标签用于在网页实时生成图像,并且可以操作图像内容。
HTML5的Canvas画布功能真的很强大,与之对应的还有Svg,都是HTML5的核心之一。想了解更多,来看看Canvas和Svg的对比。

HTML主体



简单
中级
高级


黑子先行


JS

注释很详细,不做过多介绍了,注意赢棋算法,和难易程度算法

var num = 0;//连胜次数
var gameMode = false; // 模式,默认人机
var complexity = 1; // 人机时难度级别,默认简单
layer./confirm/i('请选择模式?', {
  btn: ['人机', '人人'],
  closeBtn: 0,
}, function(index, layero){
  gameMode=false;
  $('.choose').animate({
    opacity:1
  },800)
  $('.choose_shade').animate({
    opacity:0.6
  },800)
  layer.close(index);
}, function(index){
  gameMode=true;
  $('.choose_shade').animate({
    opacity:0,
    'z-index':-1
  },800)
  $('.choose').animate({
    opacity:0,
    'z-index':-1
  },800)
});

$('.levl').click(function(){
  var index=$(this).index() + 1;
  complexity=index;
  $('.choose').animate({
    opacity:0,
    'z-index':-1
  })
  $('.choose_shade').animate({
    opacity:0,
    'z-index':-1
  })
})

var canWidth = Math.min( 500 , $(window).width()-30);
var canHeight=canWidth;

var chess=document.getElementById('chess');
var context=chess.getContext('2d');

var chess_board=document.getElementById('chess_board');
var context2=chess_board.getContext('2d');

var chess_pointer=document.getElementById('chess_pointer');
var context3=chess_pointer.getContext('2d');

var pointerEnd=[];

// 根据屏幕大小绘制棋盘
$('#chess_pointer').css({
  width:canWidth,
  height:canHeight
})
$('#chess').css({
  width:canWidth,
  height:canHeight
})
$('#chess_board').css({
  width:canWidth,
  height:canHeight
})
$('.checkerboard').css({
  width:canWidth,
  height:canHeight
})

var utilW=canWidth/15;
var utilH=utilW;

var me;
var chessBoard;
var over;

//赢法数组
var wins=[];

//赢法统计数组
var myWin=[];
var computerWin=[];

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++;
  }
}


var init=function(){
  context.clearRect(0,0,450,450);
  context3.clearRect(0,0,450,450);
  me=true;
  chessBoard=[];
  over=false;
  for(var i=0;i<15;i++){
    chessBoard[i]=[];
    for(var j=0;j<15;j++){
      chessBoard[i][j]=0;
    }
  }

  for(var i=0;i=3){
    $('#tips').html('常胜将军,已连胜'+num+'局');
  }else{
    $('#tips').html('你已连胜'+num+'局');
  }
  init();
  layer.close(index);
}
     });
   }
 }
      }
      if(!over){
 $('#tips').html('电脑走棋,走着瞧');
 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(chessBoard[i][j]==0){
 for(var k=0;kmax){
   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);
  chessBoard[u][v]=2;
  for(var k=0;k

CSS

css都是可有可无的,不影响功能,都是为了美化页面

body,html{
    margin:0;
    padding:0;
    position: relative;
    width: 100%;
    height: 100%;
  }
  .chess-content{
    padding-top: 48px;
  }
  canvas{
    display: block;
    margin:0px auto;
    box-shadow: -2px -2px 2px #efefef,5px 5px 5px #b9b9b9;
  }
  h3{
    margin:0;
  }
  .clear{
    clear: both;
  }
  .checkerboard{
    margin:0 auto;
  }
  #chess{
    position: absolute;
    z-index: 2;
  }
  #chess_board{
    position: absolute;
    z-index: 1;
  }
  #chess_pointer{
    position: absolute;
    z-index: 0;
  }
  .player{
    max-width: 500px;
    margin:0 auto;
  }
  .player .baiqi{
    float: left;
  }
  .player .baiqi{
    width:15%;
  }
  .player .tips{
    float: left;
    width: 70%;
    text-align: center;
    font-size: 18px;
  }
  .player .heiqi{
    width:15%;
    float: right;
  }
  .player div img{
    width: 100%;
  }
  .choose{
    position: absolute;
    z-index: 10;
    width: 80%;
    max-width: 500px;
    left: 50%;
    border: 1px solid #dfdfdf;
    border-radius: 5px;
    opacity: 0;
    top: 50%;
    transform: translateY(-50%);
    overflow: hidden;
  }
  .choose img{
    width: 100%;
  }
  .choose_shade{
    width: 100%;
    height: 100%;
    position: absolute;
    z-index: 9;
    background: #000;
    opacity: 0.6;
    margin:0;
  }
  .choose-lv{
    position: absolute;
    top: 28%;
    width: 100%;
  }
  .choose-lv div{
    margin: 19px 0px 10px 52%;
    width: 40%;
    text-align: center;
    border-radius: 5px;
    border: 1px solid #F2F2F2;
    color: #fff;
    text-shadow: 10px 7px 17px;
    font-weight: bold;
    line-height: 35px;
    z-index: 1;
    position: relative;
    background: rgba(0, 0, 0, 0.18);
    cursor: pointer;
  }
  .black{
    float: right;
    position: absolute;
    z-index: 1;
    width: 40%;
    max-width: 400px;
    bottom:0;
  }
  .black img{
    width: 100%;
  }
  .b_img3,.b_img4{
    right:0;
  }
  .tips{
    line-height: 75px;
  }

演示程序:演示代码
下载源码:下载源码

公告

以后每月5、15、25号更新原创文章,内容不限,喜欢小编的可以点击关注,也可在下方评论留言,你喜欢什么内容,小编根据大家喜欢的内容尝试更新

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号