分享一下我的方法

来源:2-2 [iOS-五子棋大战]棋子绘制

charspan

2020-04-15 21:36

// 申明离点击位置最近的两条线(一横一竖),h 代表横线编号,v 代表竖线编号,编号顺序从左到右,从上到下,从0开始编号

    NSUInteger h = 0 , v = 0;

    // 每个小正方形的边长

    float squareLength = self.frame.size.width / (piecesNumber + 1);

    // 遍历查找竖线编号

    for (NSUInteger i = 0; i <= piecesNumber; i ++) {

        // 触摸点x坐标在第i条竖线和第i+1条竖线之间

        if (i * squareLength <= point.x && point.x < (i + 1) * squareLength) {

            // i = 0 就是第一条竖线

            if (i == 0) {

                v = 1;

                break;

            }

            // i = piecesNumber 就是最后一条竖线

            if (i == piecesNumber) {

                v = piecesNumber;

                break;

            }

            // 判断触摸点x坐标离第i条竖线和第i+1条竖线的那一条最近,离得越近x坐标相减的绝对值越小

            if (fabs(i * squareLength - point.x) >= fabs((i + 1) * squareLength - point.x)) {

                v = i + 1;

                break;

            } else {

                v = i;

                break;

            }

        }

    }

    // 遍历查找横线编号

    for (NSUInteger i = 0; i <= piecesNumber; i ++) {

        // 触摸点y坐标在第i条横线和第i+1条横线之间

        if (i * squareLength <= point.y && point.y < (i + 1) * squareLength) {

            // i = 0 就是第一条横线

            if (i == 0) {

                h = 1;

                break;

            }

            // i = piecesNumber 就是最后一条横线

            if (i == piecesNumber) {

                h = piecesNumber;

                break;

            }

            // 判断触摸点y坐标离第i条横线和第i+1条横线的那一条最近,离得越近y坐标相减的绝对值越小

            if (fabs(i * squareLength - point.y) >= fabs((i + 1) * squareLength - point.y)) {

                h = i + 1;

                break;

            } else {

                h = i;

                break;

            }

        }

    }

    NSLog(@"第%tu条竖线, 第%tu条横线", v, h);


ps:老师的五子棋边缘是不能落子的


写回答 关注

1回答

  • 慕梦前来
    2022-01-15 18:03:45

    真不错啊,这总结的好,优秀

iOS-五子棋大战

从零开始,挑战阿尔法狗,详细讲解和最终AI的算法实现

25731 学习 · 11 问题

查看课程

相似问题