• 简单canvas五子棋


    var YFTools = {
                $:function(id)
                {
                    return document.getElementById(id);    
                },
                
                addHandler:function(element,type,handler)
                {
                    if (element.addEventListener)
                    {
                        element.addEventListener(type, handler, false);
                    }
                    else if(element.attachEvent)
                    {
                        element.attachEvent('on'+type, handler)
                    }
                    else
                    {
                        element['on'+type] = handler;
                    }
                },
                
                removeHandler:function(element, type, handler)
                {
                    if (element.removeEventListener)
                    {
                        element.removeEventListener(type, handler, false);
                    }
                    else if(element.detachEvent)
                    {
                        element.detachEvent('on'+type, handler);
                    }
                    else
                    {
                        element['on'+type] = null;    
                    }
                },
                
                getEvent:function(event)
                {
                    return event || window.event;    
                },
                
                getTarget:function(event)
                {
                    return event.target || event.srcEvent;
                },
                
                getRelatedTarget:function(event)
                {
                    return event.relatedTarget || 
                            event.stoElement || 
                            fromElement || 
                            null;
                },
                
                getMouseX:function(event)
                {
                    var event = this.getEvent(event);
                    var pageX = event.pageX;
                    
                        if(pageX===undefined)
                        {
                            pageX = event.clientX + (document.body.scrollLeft || 
                                                     document.documentElement.scrollLeft);
                        }
                    
                        return pageX;
                },
                
                getMouseY:function(e)
                {
                    var event = this.getEvent(e)
                    var pageY = event.pageY;
                    
                        if(pageY===undefined)
                        {
                            pageY = event.clientY + (document.body.scrollTop || 
                                                     document.documentElement.scrollTop);
                        }
                    
                        return pageY;
                }
            }
            
        var BindAsEventListener = function(object, fun) 
            {
                return function(event) 
                {
                    return fun.call(object, (event || window.event));
                }
            }
            
        function WUZI(id)
        {
            this.isBlack     =  true;
            this.canvas      =  YFTools.$(id);
            this.context     =  this.canvas.getContext('2d');
            this.arrayChess  =  [];
            this.canPlay     =  true;
        }
        
        WUZI.prototype = {
                constructor:WUZI,
                init:function(event)
                {
                    for (var i=0;i<=15;i++)
                    {
                        this.arrayChess[i] = [];
                        
                        for (var j=0;j<=15;j++)
                        {
                            this.arrayChess[i][j] = 0;
                        }
                    }
                    
                    this.drawBoard();
                    YFTools.addHandler(this.canvas,'click',BindAsEventListener(this,this.drawChess))
                },
                
                // 画棋盘网格
                drawBoard:function()
                {
                
                        var context = this.context;
                            this.context.strokeStyle = "#1d1409";
                            this.context.lineWidth = 1;
                        
                        for (var i=0;i<15;i++)
                        {
                            this.context.beginPath();
                            this.context.moveTo(24,i*35+24);
                            this.context.lineTo(15*35-11,i*35+24);
                            this.context.closePath();
                            this.context.stroke();
                            
                        }
                        
                        for (var j=0;j<15;j++)
                        {
                            this.context.beginPath();
                            this.context.moveTo(j*35+24,24);
                            this.context.lineTo(j*35+24,15*35-11);
                            this.context.closePath();
                            this.context.stroke();
                            
                        }
    
                },
                
                /*画棋子*/
                drawChess:function(event)
                {
                    
                    if (this.canPlay)
                    {
                        var context = this.context;
                            
                        var pageX = YFTools.getMouseX(event)-this.canvas.offsetLeft;
                                        
                        var pageY = YFTools.getMouseY(event)-this.canvas.offsetTop;
                                        
                        var tempX = Math.floor(pageX/35);
                            tempX = tempX >= 15 ? 14 : tempX;
                            
                        var tempY = Math.floor(pageY/35);
                            tempY = tempY >= 15 ? 14 : tempY;
                            
                        var x = tempX*35+24;
                        var y = tempY*35+24;
                        
                        //console.log("横向第"+x+" 纵向第"+y)
                        if (this.arrayChess[tempX][tempY]==0)
                        {
                            
                            this.isBlack ? context.fillStyle = "#000000" :
                                            context.fillStyle = "#ffffff";
                                            
                            context.beginPath();      
                            context.moveTo(x,y);
                            context.arc(x,y,15,0,2*Math.PI,false);
                            context.fill();
                            context.closePath(); 
                                
                            if (this.isBlack)
                            {
                                this.arrayChess[tempX][tempY]=1;
                                this.isBlack = false;
                            }
                            else
                            {
                                this.arrayChess[tempX][tempY]=2;    
                                this.isBlack = true;
                            }
                            
                            var tempFlag = this.checkWin(tempX,tempY);
                            
                            if (tempFlag)
                            {
                                this.canPlay = false;
                                if (this.isBlack)
                                {
                                    alert('游戏结束,白方获胜!');
                                }
                                else
                                {
                                    alert('游戏结束,黑方获胜!');
                                }
                                
                            }
                        }
                    }
                },
                
                checkWin:function(x,y)
                {
                    var flag = false,
                        color = this.arrayChess[x][y],
                        count = 1,
                            i = 1;
                        //console.log("X:"+(x)+" Y:"+(y))
                        // 横向判断
                        while(color == this.arrayChess[x+i][y+0])
                        {
                            count++;
                                i++;
                        };
                        
                        i = 1;
                        
                        while(color == this.arrayChess[x-i][y-0])
                        {
                            count++;
                                i++;
                        };
                        
                        
                        
                        if (count >= 5)
                        {
                            flag = true;
                        }
                        
                        // 纵向判断
                        count = 1;
                            i = 1;
                        while (color == this.arrayChess[x+0][y+i])
                        {
                            count++;
                                i++;
                        }
                        
                        i = 1;
                        while (color == this.arrayChess[x-0][y-i])
                        {
                            count++;
                                i++;
                        }
                        
                        if (count >= 5)
                        {
                            flag = true;
                        }
                        
                        // 右上左下判断
                        count = 1;
                            i = 1;
                        while (color == this.arrayChess[x+i][y+i])
                        {
                            count++;
                                i++;
                        }
                        
                        i = 1;
                        while (color == this.arrayChess[x-i][y-i])
                        {
                            count++;
                                i++;
                        }
                        
                        if (count >= 5)
                        {
                            flag = true;
                        }
                        
                        // 左上右下判断
                        count = 1;
                            i = 1;
                        while (color == this.arrayChess[x+i][y-i])
                        {
                            count++;
                                i++;
                        }
                        
                        i = 1;
                        while (color == this.arrayChess[x-i][y+i])
                        {
                            count++;
                                i++;
                        }
                        
                        if (count >= 5)
                        {
                            flag = true;
                        }
                        
                        return flag;
                }
            }
        
        window.onload = function()
        {
            var w = new WUZI('mycanvas');
                w.init();
        }    

    把上面代码加入到head,以html5格式声明DOCTYPE

    如果是ie8以下浏览器,可以在网上找到这两个文件:

    html5.js 和 excanvas.compiled.js

    <!--[if lt IE 9]><script type="text/javascript" src="html5.js"></script><![endif]-->
    <!--[if lt IE 9]><script type="text/javascript" src="excanvas.compiled.js"></script><![endif]-->

    下面是完整代码:

    <!DOCTYPE html>
    <head>
    <!--[if lt IE 9]><script type="text/javascript" src="html5.js"></script><![endif]-->
    <!--[if lt IE 9]><script type="text/javascript" src="excanvas.compiled.js"></script><![endif]-->
    <meta charset="gb2312" />
    <title>简单五子棋</title>
    
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <style type="text/css">
    body,td,th {
        font-size: 12px;
    }
    body {
        margin-left: 0px;
        margin-top: 0px;
        margin-right: 0px;
        margin-bottom: 0px;
        text-align:center;
    }
    canvas{display:block;background:url(images/bg.jpg);margin:20px auto;width:537px;cursor:pointer;}
    </style>
    <script>
        
        var YFTools = {
                $:function(id)
                {
                    return document.getElementById(id);    
                },
                
                addHandler:function(element,type,handler)
                {
                    if (element.addEventListener)
                    {
                        element.addEventListener(type, handler, false);
                    }
                    else if(element.attachEvent)
                    {
                        element.attachEvent('on'+type, handler)
                    }
                    else
                    {
                        element['on'+type] = handler;
                    }
                },
                
                removeHandler:function(element, type, handler)
                {
                    if (element.removeEventListener)
                    {
                        element.removeEventListener(type, handler, false);
                    }
                    else if(element.detachEvent)
                    {
                        element.detachEvent('on'+type, handler);
                    }
                    else
                    {
                        element['on'+type] = null;    
                    }
                },
                
                getEvent:function(event)
                {
                    return event || window.event;    
                },
                
                getTarget:function(event)
                {
                    return event.target || event.srcEvent;
                },
                
                getRelatedTarget:function(event)
                {
                    return event.relatedTarget || 
                            event.stoElement || 
                            fromElement || 
                            null;
                },
                
                getMouseX:function(event)
                {
                    var event = this.getEvent(event);
                    var pageX = event.pageX;
                    
                        if(pageX===undefined)
                        {
                            pageX = event.clientX + (document.body.scrollLeft || 
                                                     document.documentElement.scrollLeft);
                        }
                    
                        return pageX;
                },
                
                getMouseY:function(e)
                {
                    var event = this.getEvent(e)
                    var pageY = event.pageY;
                    
                        if(pageY===undefined)
                        {
                            pageY = event.clientY + (document.body.scrollTop || 
                                                     document.documentElement.scrollTop);
                        }
                    
                        return pageY;
                }
            }
            
        var BindAsEventListener = function(object, fun) 
            {
                return function(event) 
                {
                    return fun.call(object, (event || window.event));
                }
            }
            
        function WUZI(id)
        {
            this.isBlack     =  true;
            this.canvas      =  YFTools.$(id);
            this.context     =  this.canvas.getContext('2d');
            this.arrayChess  =  [];
            this.canPlay     =  true;
        }
        
        WUZI.prototype = {
                constructor:WUZI,
                init:function(event)
                {
                    for (var i=0;i<=15;i++)
                    {
                        this.arrayChess[i] = [];
                        
                        for (var j=0;j<=15;j++)
                        {
                            this.arrayChess[i][j] = 0;
                        }
                    }
                    
                    this.drawBoard();
                    YFTools.addHandler(this.canvas,'click',BindAsEventListener(this,this.drawChess))
                },
                
                // 画棋盘网格
                drawBoard:function()
                {
                
                        var context = this.context;
                            this.context.strokeStyle = "#1d1409";
                            this.context.lineWidth = 1;
                        
                        for (var i=0;i<15;i++)
                        {
                            this.context.beginPath();
                            this.context.moveTo(24,i*35+24);
                            this.context.lineTo(15*35-11,i*35+24);
                            this.context.closePath();
                            this.context.stroke();
                            
                        }
                        
                        for (var j=0;j<15;j++)
                        {
                            this.context.beginPath();
                            this.context.moveTo(j*35+24,24);
                            this.context.lineTo(j*35+24,15*35-11);
                            this.context.closePath();
                            this.context.stroke();
                            
                        }
    
                },
                
                /*画棋子*/
                drawChess:function(event)
                {
                    
                    if (this.canPlay)
                    {
                        var context = this.context;
                            
                        var pageX = YFTools.getMouseX(event)-this.canvas.offsetLeft;
                                        
                        var pageY = YFTools.getMouseY(event)-this.canvas.offsetTop;
                                        
                        var tempX = Math.floor(pageX/35);
                            tempX = tempX >= 15 ? 14 : tempX;
                            
                        var tempY = Math.floor(pageY/35);
                            tempY = tempY >= 15 ? 14 : tempY;
                            
                        var x = tempX*35+24;
                        var y = tempY*35+24;
                        
                        //console.log("横向第"+x+" 纵向第"+y)
                        if (this.arrayChess[tempX][tempY]==0)
                        {
                            
                            this.isBlack ? context.fillStyle = "#000000" :
                                            context.fillStyle = "#ffffff";
                                            
                            context.beginPath();      
                            context.moveTo(x,y);
                            context.arc(x,y,15,0,2*Math.PI,false);
                            context.fill();
                            context.closePath(); 
                                
                            if (this.isBlack)
                            {
                                this.arrayChess[tempX][tempY]=1;
                                this.isBlack = false;
                            }
                            else
                            {
                                this.arrayChess[tempX][tempY]=2;    
                                this.isBlack = true;
                            }
                            
                            var tempFlag = this.checkWin(tempX,tempY);
                            
                            if (tempFlag)
                            {
                                this.canPlay = false;
                                if (this.isBlack)
                                {
                                    alert('游戏结束,白方获胜!');
                                }
                                else
                                {
                                    alert('游戏结束,黑方获胜!');
                                }
                                
                            }
                        }
                    }
                },
                
                checkWin:function(x,y)
                {
                    var flag = false,
                        color = this.arrayChess[x][y],
                        count = 1,
                            i = 1;
                        //console.log("X:"+(x)+" Y:"+(y))
                        // 横向判断
                        while(color == this.arrayChess[x+i][y+0])
                        {
                            count++;
                                i++;
                        };
                        
                        i = 1;
                        
                        while(color == this.arrayChess[x-i][y-0])
                        {
                            count++;
                                i++;
                        };
                        
                        
                        
                        if (count >= 5)
                        {
                            flag = true;
                        }
                        
                        // 纵向判断
                        count = 1;
                            i = 1;
                        while (color == this.arrayChess[x+0][y+i])
                        {
                            count++;
                                i++;
                        }
                        
                        i = 1;
                        while (color == this.arrayChess[x-0][y-i])
                        {
                            count++;
                                i++;
                        }
                        
                        if (count >= 5)
                        {
                            flag = true;
                        }
                        
                        // 右上左下判断
                        count = 1;
                            i = 1;
                        while (color == this.arrayChess[x+i][y+i])
                        {
                            count++;
                                i++;
                        }
                        
                        i = 1;
                        while (color == this.arrayChess[x-i][y-i])
                        {
                            count++;
                                i++;
                        }
                        
                        if (count >= 5)
                        {
                            flag = true;
                        }
                        
                        // 左上右下判断
                        count = 1;
                            i = 1;
                        while (color == this.arrayChess[x+i][y-i])
                        {
                            count++;
                                i++;
                        }
                        
                        i = 1;
                        while (color == this.arrayChess[x-i][y+i])
                        {
                            count++;
                                i++;
                        }
                        
                        if (count >= 5)
                        {
                            flag = true;
                        }
                        
                        return flag;
                }
            }
        
        window.onload = function()
        {
            var w = new WUZI('mycanvas');
                w.init();
        }    
    </script>
    </head>
    
    <body>
    <canvas id="mycanvas" width="537" height="537"></canvas>
    </body>
    </html>
  • 相关阅读:
    用新版本的job打成jar包在终端运行mapreduce程序遇到的问题 找不到Map class?
    在map端使用关联数组实现wordcount
    基数排序c++实现
    (sql补充)关于锁
    (sql server补充)关于事务
    (sql补充)关于游标
    java api文档的阅读技巧
    android开发学习路线图
    (sql补充)关于索引
    Android开发之学习路线
  • 原文地址:https://www.cnblogs.com/pigtail/p/2596757.html
Copyright © 2020-2023  润新知