js小游戏:五子棋
使用纯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小游戏:五子棋的更多相关文章
- 一个js小游戏----总结
花了大概一天左右的功夫实现了一个js小游戏的基本功能,类似于“雷电”那样的小游戏,实现了随即怪物发生器,碰撞检测,运动等等都实现了,下一个功能是子弹轨迹,还有其他一些扩展功能,没有用库,也没有用web ...
- JS小游戏:贪吃蛇(附源码)
javascript小游戏:贪吃蛇 此小游戏采用的是面向对象的思想,将蛇,食物,和游戏引擎分为3个对象来写的. 为方便下载,我把js写在了html中, 源码中暂时没有注释,等有空我在添加点注释吧. 游 ...
- JS小游戏-蓝色拼图
// a[href=#viewSource]"); //查看源代码标签 viewSourceArr.attr("title", "查看源代码"); v ...
- JS小游戏寻找房祖名
提示:1:先把两个图片放到重命名并放到相应的路径内. 2:本小游戏只为闲事练手,如有小bug自行解决,解决不了的可以留言,我看到后解决. 代码如下: <!DOCTYPE html>< ...
- c++小游戏--五子棋
大家好,我是芝麻狐! 这是我自制的小游戏,目前仅支持devc++. 如果你没有c++软件, 请打开网站GDB online Debugger | Compiler - Code, Compile, R ...
- 【GXZ的原创】C++小游戏——五子棋
前些时候考完试自己编的带有胜负判定的五子棋. 操作方法:WSAD或↑↓←→移动下棋位置,Space或Enter放置. 如果游戏出现bug,欢迎大家在评论区反馈. #include <stdio. ...
- c++小游戏——五子棋
#include<iostream> #include<iomanip> #include<cstring> using namespace std; const ...
- Vue.js小游戏:测试CF打狙速度
此项目只测试反应速度,即手点击鼠标的反应速度 html代码 <div id="top">请等待图片变颜色,颜色便的那一刻即可点击测手速</div> < ...
- js小游戏---智力游戏
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
随机推荐
- MySQL学习(五)
查询数据的学习与练习 建立一个表 CREATE TABLE goods ( `goos_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `cat_ ...
- 约瑟夫环(Joseph)的高级版(面向事件及“伪链表””)
约瑟夫环问题: 在一间房间总共有n个人(下标0-n-1),只能有最后一个人活命. 按照如下规则去杀人: 所有人围成一圈 顺时针报数,每次报到q的人将被杀掉 被杀掉的人将从房间内被移走 然后从被杀掉的下 ...
- 阿里云域名+github建立网站
1.准备工作 ①购买一个阿里云域名,这里测试的域名为 www.cores.vip ②创建一个github账号 (注意:一个github账号只能建立一个username.github.io的网站,不能建 ...
- 算法笔记--最大流和最小割 && 最小费用最大流 && 上下界网络流
最大流: 给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow). 最小割: 割是网 ...
- 小程序for循环给里面单独的view加单独的样式
效果图如下: 上面是个列表从数据库拿下来所有的信息:在视图层直接一个for循环展示下来,现在麻烦来了前三个和后面的额不一样,小程序不允许dom操作,那怎么解决呢? 解决办法: wx:for和wx:if ...
- NGUI实现UITexture的UV滚动
材质上使用的贴图: 效果:实现该纹理在屏幕上的滚动 代码: using System.Collections; using System.Collections.Generic; using Unit ...
- js时间戳如何转时间
js时间戳如何转时间 一.总结 一句话总结:Date对象分别获取年now.getFullYear()月now.getMonth()+1日now.getDate()即可 Date对象分别获取年now.g ...
- 并发之ThreadLocal
ThreadLocal ThreadLocal 用一种存储变量与线程绑定的方式,在每个线程中用自己的 ThreadLocalMap 安全隔离变量,为解决多线程程序的并发问题提供了一种新的思路. 简 ...
- RLE Plots: relative log expression
RLE Plots: Visualising Unwanted Variation in High Dimensional Data 参考:RLE Plots: Visualising Unwante ...
- 动手动脑java异常处理
1>请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutEx ...