五子棋

未完待续。。。。。。。

<html>
    <head>
        <style type="text/css">
            canvas {
                display: block;
                margin: 100px auto;
                background-color: darkslategray;
                box-shadow: -2px -2px 2px #EFEFEF, 5px 5px 5px #B9B9B9;
            }
        </style>
        <script type="application/javascript">
            function draw() {
                var canvas = document.getElementById("canvas");
                if (canvas.getContext) {
                    var context = canvas.getContext("2d");
                    context.strokeStyle = "red"; //画笔的颜色
                    drawLine()
                    // piece()  
                    oneStep(0, 0, true);
                    oneStep(1, 1, false);
                }
                //画网格
                function drawLine() {
                    for (var i = 0; i < 15; i++) {
                        //context.beginPath();
                        context.moveTo(15, 15 + i * 30);
                        context.lineTo(435, 15 + i * 30);
                        context.stroke();
                        context.moveTo(15 + i * 30, 15);
                        context.lineTo(15 + i * 30, 435);
                        context.stroke();
                    }
                }


                //画棋子

                // function piece() {
                //  context.beginPath();
                //  context.arc(200, 200, 100, 0, 2 * Math.PI);
                //  context.closePath();
                //  context.fill();

                //  var gradient = context.createRadialGradient(200, 200, 50, 200, 200, 20);
                //  gradient.addColorStop(0, "#0a0a0a");
                //  gradient.addColorStop(1, "#636766");
                //  context.fillStyle = gradient;
                //  context.fill();
                // }
                function oneStep(i, j, me) { //i,j分别是在棋盘中的定位,me代表白棋还是黑棋
                    context.beginPath();
                    context.arc(15 + i * 30, 15 + j * 30, 13, 0, 2 * Math.PI); //圆心会变的,半径改为13
                    context.closePath();
                    var gradient = context.createRadialGradient(15 + i * 30 + 2, 15 + j * 30 - 2, 15, 15 + i * 30, 15 + j * 30,
                        0);
                    if (me) {
                        gradient.addColorStop(0, "#0a0a0a");
                        gradient.addColorStop(1, "#636766");
                    } else {
                        gradient.addColorStop(0, "#D1D1D1");
                        gradient.addColorStop(1, "#F9F9F9");
                    }
                    context.fillStyle = gradient;
                    context.fill();
                }

                //定义一个空的15*15的二维数组(函数自执行)
                var chessBoard = [];
                (function arr() {
                    for (var i = 0; i < 15; i++) {
                        chessBoard[i] = [];
                        for (var j = 0; j < 15; j++) {
                            chessBoard[i][j] = 0;
                        }
                    }
                })()

                //同一位置不能重复点击,且黑白交替点击
                var me = true;
                canvas.onclick = function(e) {
                    if (over) { //判断游戏是否结束
                        return;
                    }
                    // console.log(chessBoard)
                    var x = e.offsetX;
                    var y = e.offsetY;
                    var i = Math.floor(x / 30);
                    var j = Math.floor(y / 30);

                    if (chessBoard[i][j] == 0) {
                        oneStep(i, j, me);
                        if (me) {
                            chessBoard[i][j] = 2;
                        } else {
                            chessBoard[i][j] = 1;
                        }
                        me = !me;
                        //落下子后需要进行统计
                        for (var k = 0; k < count; k++) {
                            if (wins[i][j][k]) { //某种赢的某子true
                                myWin[k]++; //离胜利又进一步
                                computerWin[k] = 6; //该种赢法计算机没有机会了
                                if (myWin[k] == 5) { //如果达到5就赢了
                                    window.alert("厉害,你赢了!!");
                                    over = true;
                                }
                            }
                        }
                    }
                }
                //赢法数组容器
                var wins = [];
                (function() {
                    for (var i = 0; i < 15; i++) {
                        wins[i] = [];
                        for (var j = 0; j < 15; j++) {
                            wins[i][j] = [];
                        }
                    }
                })()

                var count = 0;
                (function(){
                    win()
                })()
                function win() {
                    //赢法统计  
                    //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++;
                        }
                    }
                    console.log(count); //572
                }

                //游戏结束
                var over = false;
                //统计记法数组  
                var myWin = [];
                var computerWin = [];
                //统计数组的实例化
                (function() {
                    for (var i = 0; i < count; i++) {
                        myWin[i] = 0;
                        computerWin[i] = 0;
                    }
                })()

            }
        </script>
    </head>
    <body onload="draw();">
        <canvas id="canvas" width="450px" height="450px"></canvas>
    </body>
</html>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357