使用纯js的小游戏,五子棋

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>五子棋</title>
<style type="text/css">
*{
padding:0;
margin:0;
}
canvas{
margin:10px;
border:2px solid #CCCCCC; }
#box{
display:inline-block;
position:absolute;
margin-top: 200px;
margin-left: 100px;
}
span{
font :24px "微软雅黑";
display: inline-block;
height:50px;
}
input{
margin-top:30px;
display:block;
width:100px;
height: 50px;
font:16px "微软雅黑";
color:#fff;
background-color: #0099cc;
} </style> </head>
<body>
<canvas width="640" height="640" id="cas"></canvas>
<div id = "box">
<span id= "txt"></span>
<input type = "button" id = "btn" value="重新开始" />
</div> <script type="text/javascript"> var flag = true;//true代表白棋下的棋子,false 代表黑棋子
var isWin = false;
var step = 40; //设置每个棋子的高度是40
var txt = document.getElementById("txt"); var btn = document.getElementById("btn"); var cas = document.getElementById("cas");//画布 var ctx = cas.getContext("2d");
cas.style.backgroundImage = "url(img/an.jpg)";
var img_b = new Image();
img_b.src = "img/red.png";
var img_w = new Image();
img_w.src = "img/bg.png";
//用二维数组来保存棋盘,0代表没有走过,1代表白棋走过。2代表黑气走过
var arr = new Array(16);//声明一个一维数组;
for(var i= 0;i<=15;i++){
arr[i] = new Array(16);
for(var j= 0;j<=15;j++){
arr[i][j] = 0; }
} //绘制棋盘
function drawLine(){ for(var i= 0;i<cas.width/step;i++){
//画竖线
ctx.moveTo((i+1)*step,0);
ctx.lineTo((i+1)*step,cas.height);
//画横线
ctx.moveTo(0,(i+1)*step);
ctx.lineTo(cas.width,(i+1)*step);
ctx.stroke(); }
}
//获取鼠标点击的位置。
cas.onclick = function(e){
//先判断游戏是否结束
if(isWin){
alert("游戏已经结束,请重新开始");
return 0;
}
//判断棋子显示的地方,四条边上不显示棋子。
//鼠标点击的位置减去边框距离页面的上和左的距离(10),减去一个格子宽高的一半(20)
// var x = (e.clientX-10-20)/40 +1;
// var y = (e.clientY-10-20)/40 +1;
var x = (e.pageX-10-20)/40 +1;
var y = (e.pageY-10-20)/40 +1; //进行取整来确定棋子最终显示的位置。
x = parseInt(x); y = parseInt(y);
//如果超出棋盘或者在棋盘的边界直接返回,边界上不能画棋子。
if(x<=0||x>15||y<=0||y>15){
alert("不可以在边界下棋子!");
return;
} //判断这个位置是否已经显示过棋子
if(arr[x][y]!=0){
alert("这个地方已经有棋子了,不可以重复棋子");
return;
}
//判断显示黑棋还是白棋
if(flag){
flag= false;//将标志设置为false,表示下次为黑子。
drawChess(1,x,y);//调用函数画棋子
}else{
flag = true;//将标志改为true,表示下次为白棋。
drawChess(2,x,y);
}
} //画棋子
function drawChess(num,x,y){
//根据x和y确定图片显示的位置,让图片显示在十字线的中间。
//一个格子为40,图片大小为30,所以40-30/2等于25,所以加上25
var x0 = x*step ;
var y0 = y*step ;
if(num ==1 ){ ctx.beginPath();
ctx.arc(x0,y0,15,0,2*Math.PI);
ctx.fillStyle ="#ff2233";
//ctx.fillStyle.backgroundImage = "url(img/red.png)";
ctx.fill();
ctx.closePath();
ctx.stroke(); //ctx.drawImage(img_w,x0,y0);
arr[x][y] = 1;//白子
}else if(num==2){
ctx.beginPath();
ctx.arc(x0,y0,15,0,2*Math.PI);
ctx.fillStyle ="#008000";
//ctx.fillStyle.backgroundImage ="url(img/f.png)";
ctx.fill();
ctx.closePath();
ctx.stroke();
//ctx.drawImage(img_b,x0,y0);
arr[x][y] = 2;//黑子
} //调用函数判断输赢
judge(num,x,y);
} function judge(num,x,y){
//左右方向,上下方向,左上右下,左下右上
var n1=0 , n2 = 0, n3= 0, n4 = 0;
//左右方向
for(var i=x ;i>0;i--){
if(arr[i][y]!=num){
break;
}
n1++;
}
for(var i= x+1;i<=15;i++){
if(arr[i][y]!=num){
break;
}
n1++;
}
//上下方向。
for(var j=y ;j>0;j--){
if(arr[x][j]==num){
n2++;
}else{
break;
}
}
for(var j= y+1;j<=15;j++){ if(arr[x][j]==num){
n2++;
}else{
break;
}
}
//左上到右下
for(var i= x,j= y;i>=0,j>=0;i--,j--){
if(i<0||j<0||arr[i][j]!=num){
break;
}
n3++;
}
for(var i= x+1,j=y+1;i<=15,j<=15;i++,j++){
if(i>15||j>15||arr[i][j]!=num){
break;
}
n3++;
}
//左下到右上
for(var i= x,j= y;i>0,j<=15;i--,j++){
if(i<0||j>=15||arr[i][j]!=num){
break;
}
n4++;
}
for(var i= x+1,j=y-1;i<=15,j>=0;i++,j--){
if(i>=15||j<0||arr[i][j]!=num){
break;
}
n4++;
}
//用一个定时器来延时,否则会显示对话框,然后才显示棋子。
//alert(n1+"--"+n2+"--"+n3+"--"+n4);
var str ;
if(n1>=5||n2>=5||n3>=5||n4>=5){
if(num==1){
alert("恭喜白棋夺冠!");
str = "白棋赢了,游戏结束";
}else if(num ==2){
alert("恭喜黑棋夺冠!");
str = "黑棋赢了,游戏结束";
}
txt.innerHTML = str;
isWin = true;
}
} //重新开始
btn.onclick = function(){
falg = true;
isWin = false; for(var i= 0 ;i<=15;i++){
for(var j= 0;j<=15;j++){
arr[i][j] =0;
}
}
ctx.clearRect(0,0,640,640);
txt.innerHTML = "";
drawLine();
}
drawLine();
</script>
</body>
</html>

现在可以开始玩喽!

js小游戏:五子棋的更多相关文章

  1. 一个js小游戏----总结

    花了大概一天左右的功夫实现了一个js小游戏的基本功能,类似于“雷电”那样的小游戏,实现了随即怪物发生器,碰撞检测,运动等等都实现了,下一个功能是子弹轨迹,还有其他一些扩展功能,没有用库,也没有用web ...

  2. JS小游戏:贪吃蛇(附源码)

    javascript小游戏:贪吃蛇 此小游戏采用的是面向对象的思想,将蛇,食物,和游戏引擎分为3个对象来写的. 为方便下载,我把js写在了html中, 源码中暂时没有注释,等有空我在添加点注释吧. 游 ...

  3. JS小游戏-蓝色拼图

    // a[href=#viewSource]"); //查看源代码标签 viewSourceArr.attr("title", "查看源代码"); v ...

  4. JS小游戏寻找房祖名

    提示:1:先把两个图片放到重命名并放到相应的路径内. 2:本小游戏只为闲事练手,如有小bug自行解决,解决不了的可以留言,我看到后解决. 代码如下: <!DOCTYPE html>< ...

  5. c++小游戏--五子棋

    大家好,我是芝麻狐! 这是我自制的小游戏,目前仅支持devc++. 如果你没有c++软件, 请打开网站GDB online Debugger | Compiler - Code, Compile, R ...

  6. 【GXZ的原创】C++小游戏——五子棋

    前些时候考完试自己编的带有胜负判定的五子棋. 操作方法:WSAD或↑↓←→移动下棋位置,Space或Enter放置. 如果游戏出现bug,欢迎大家在评论区反馈. #include <stdio. ...

  7. c++小游戏——五子棋

    #include<iostream> #include<iomanip> #include<cstring> using namespace std; const ...

  8. Vue.js小游戏:测试CF打狙速度

    此项目只测试反应速度,即手点击鼠标的反应速度 html代码 <div id="top">请等待图片变颜色,颜色便的那一刻即可点击测手速</div> < ...

  9. js小游戏---智力游戏

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

随机推荐

  1. python + lisp hy的新手注记2 eval, HyModel and python AST

    来自我在Stack Overflow上的提问,https://stackoverflow.com/questions/51675355/how-to-eval-a-cond-case-and-retu ...

  2. vscode 的tab与空格设置

    为了python 的pep8 标准,把tab键输入从\t的制表符 转为4个空格. 1在vscode下边栏点击 “空格” 在上面选项里设置 使用空格缩进, 以及可以 将缩进转换为空格 2在“文件-> ...

  3. 微信小程序不可操作dom节点

    //根据历史记录快速搜索 fastSearch:function(e){ console.log(e.currentTarget.id) wx.navigateTo({ url: '../search ...

  4. C#打印格式

    一:C#代码直接打印pdf文件(打印质保书pdf文件) 引用: 代码注释很详细了. private void btn_pdf_Click(object sender, RoutedEventArgs ...

  5. c# HTML中提取图片地址

    public class HtmlHelper    {        /// <summary>        /// HTML中提取图片地址        /// </summa ...

  6. Entity Framework 学习

    Entity Framework 学习初级篇1--EF基本概况 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry. ...

  7. 20170914xlVBA通讯公司分类汇总

    Sub 租房() Dim Wb As Workbook Dim Sht As Worksheet Dim OpenWb As Workbook Dim OpenSht As Worksheet Dim ...

  8. vue基础 (三) 自动化工具(Vue CIL)

    一.自动化工具(Vue CIL) 安装过程 1. 先安装nvm 参考:https://www.jianshu.com/p/d0e0935b150a https://www.cnblogs.com/tj ...

  9. 6、DHCP

    DHCP 一.DHCP简介 1.什么是DHCP DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种用户简化计算机IP地址管理的标准: 2.DHC ...

  10. bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 后缀自动机在tire树上拓展

    题意:有棵树每个点有个颜色(不超过10种),每个节点不超过20个儿子,问你每两点之间的颜色序列不同的有多少种 题解:先建出树,对于每个叶子节点,bfs一遍建在sam上,每次保留当前点在sam上的位置, ...