首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Reversi算法检查

Reversi算法检查
EN

Stack Overflow用户
提问于 2015-07-27 02:33:21
回答 1查看 3.3K关注 0票数 1

我目前正在构建一个Reversi游戏,其中的棋盘是一个8x8系列的整数(0表示空白,1表示白色,2表示黑色)。我已经想出了如何让垂直和水平来检查移动和进行移动,但不知道如何让对角线工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package OthelloTesting;

public class OthelloGameHandler {
    private int[][] gameBoard = new int[8][8];

    public OthelloGameHandler() {

    }

    public void setBoard(int[][] newBoard) {
        gameBoard = newBoard;
    }

    public int[][] getBoard() {
        return gameBoard;
    }




    private final boolean inBounds(int row, int col) {
        return row >= 0 && col >= 0 && row < gameBoard.length && col < gameBoard.length;
    }

    /*
     * Color is: 0 - Empty | 1 - White | 2 - Black Return Messages: 0 - Okay | 1
     * - Piece in Spot | 2 - Not Valid Placement
     */
    public int move(int color, int row, int col) {
        // Check if spot is full
        int oppColor = (color == 1) ? 2 : 1;
        int returnCode = 2;
        if (gameBoard[row][col] != 0) {
            returnCode = 1;
        }
        if (!inBounds(row, col)) {
            returnCode = 2;
        }
        // Check if move is Valid...

        // Check Right Horizontal
        if (col < 6 && gameBoard[row][col + 1] != 0 &&
            gameBoard[row][col + 1] == oppColor) {
            for (int pos = col + 2; pos < 8; pos++) {
                if (gameBoard[row][pos] == 0) {
                    break;
                }
                if (gameBoard[row][pos] == color) {
                    fill(color, row, col, row, pos);
                    returnCode = 0;
                }
            }
        }

        // Check Left Horizontal
        if (col > 1 && gameBoard[row][col - 1] != 0 &&
            gameBoard[row][col - 1] == oppColor) {
            for (int pos = col - 2; pos > -1; pos--) {
                if (gameBoard[row][pos] == 0) {
                    break;
                }
                if (gameBoard[row][pos] == color) {
                    fill(color, row, pos, row, col);
                    returnCode = 0;
                }
            }
        }

        // Check Bottom Vertical
        if (row < 6 && gameBoard[row + 1][col] != 0 && gameBoard[row + 1][col] == oppColor) {
            for (int pos = row + 2; pos < 8; pos++) {
                System.out.println("did");
                if (gameBoard[pos][col] == 0) {
                    break;
                }
                if (gameBoard[pos][col] == color) {
                    fill(color, row, col, pos, col);
                    returnCode = 0;
                }
            }
        }

        // Check Top Vertical
        if (row > 1 && gameBoard[row - 1][col] != 0 && gameBoard[row - 1][col] == oppColor) {
            for (int pos = row - 2; pos > -1; pos++) {
                System.out.println("did");
                if (gameBoard[pos][col] == 0) {
                    break;
                }
                if (gameBoard[pos][col] == color) {
                    fill(color, pos, col, row, col);
                    returnCode = 0;
                }
            }
        }

        // Check Upper Right Diagonal


        // Check Upper Left Diagonal


        // Check Lower Left Diagonal


        // Check Lower Right Diagonal

        return returnCode;
    }

    private void fill(int color, int r1, int c1, int r2, int c2) {

        // Horizontal Filling
        if (r1 == r2) {
            for (int pos = c1; pos <= c2; pos++) {
                gameBoard[r1][pos] = color;
            }
        }
        if (c1 == c2) {
            for (int pos = r1; pos <= r2; pos++) {
                gameBoard[pos][c1] = color;
            }
        }


    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-03-31 08:34:53

我知道这是C++代码,你在做Java。但我认为你可以提炼出大意。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// flips discs in one direction
uint64_t flip_dir(const uint64_t P, const uint64_t O, const uint8_t move, const int dX, const int dY)
{
    uint64_t flips = 0;
    int i = (move % 8) + dX; // Starting index in x direction
    int j = (move / 8) + dY; // Starting index in y direction

    while ((i >= 0) && (i < 8) && (j >= 0) && (j < 8)) // In between boundaries
    {
        const uint64_t bit = 1ULL << (j * 8 + i); // The bit to look at
        if (O & bit) // The bit belongs to the opponent
            flips |= bit; // Add to possible flips
        else if (P & bit) // The bit belongs to the player
            return flips; // All possible flips become real flips
        else // The bit belongs to no player
            return 0; // There are no possible flips
        i += dX; // Advance in direction
        j += dY; // Advance in direction
    }
    return 0;
}

uint64_t flip(const uint64_t P, const uint64_t O, const uint8_t move)
{
    return move == 64 ? 0ULL :
           flip_dir(P, O, move, -1, -1)
         | flip_dir(P, O, move, -1,  0)
         | flip_dir(P, O, move, -1, +1)
         | flip_dir(P, O, move,  0, -1)
         | flip_dir(P, O, move,  0, +1)
         | flip_dir(P, O, move, +1, -1)
         | flip_dir(P, O, move, +1,  0)
         | flip_dir(P, O, move, +1, +1);
}

快乐翻转碟片;-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31644148

复制
相关文章
Windows Phone SDK update for Windows Phone 7.8
微软将于近日正式推送WP 7.8的更新,同时发布了SDK的更新。 在安装7.8更新之前,用户必须安装Windows Phone SDK 8.0 或者 Windows Phone SDK 7.1。 也就
ShiJiong
2018/01/10
1.1K0
Sketchflow for Windows Phone 7
这篇文章小试Sketchflow for Windows Phone 7 简要的介绍了Sketchflow for Windows Phone 7,这里是我主要是介绍下最新版本的功能。Sketchflow for Windows Phone 7在错哦deplex上安家了,地址是:http://wp7sketchflow.codeplex.com,具体使用文档可以参考http://wp7sketchflow.codeplex.com/documentation 使用SketchFlow,您可以 a) 为您的想
张善友
2018/01/30
8650
Sketchflow for Windows Phone 7
将我的 Windows Phone 应用程序更新到 Windows Phone 8
[原文发表地址]  Updating my Windows Phone App to Windows Phone 8 [中文原文地址] 将我的 Windows Phone 应用程序更新到 Windows Phone 8 [原文发表时间]   2012-12-8 12:53 今年早些时候,我花了一天编写了一个小的 Windows Phone 7 应用程序,我将它称之为Lost Phone Screen。它能为你创建锁屏,并在上面显示你的姓名和联系号码,以便当你丢失它时,用老办法帮助找到你的手机。无需 GPS,
张善友
2018/01/29
1.6K0
将我的 Windows Phone 应用程序更新到 Windows Phone 8
Caliburn Micro for Windows Phone 7
Caliburn Micro (caliburnmicro.codeplex.com) 是一个小巧但功能强大的 Caliburn (caliburn.codeplex.com) 框架实施方案,适用于 Silverlight、Windows Phone 7 和 WPF。这些框架旨在帮助您使用 Model-View-Controller (MVC)、Model-View-Presenter (MVP)、Model-View-ViewModel (MVVM) 和 Application Controller 等模
张善友
2018/01/30
9110
Windows Phone SDK 8.0 发布
    在Build大会之后,微软发布了Windows Phone SDK 8.0 ,各位开发者们可以去Microsoft Download Center页面下载了。网页地址为:http://www.
ShiJiong
2018/01/10
8730
Silverlight for Windows Phone Toolkit 更新
The Silverlight Toolkit team has just published the new release of the Silverlight for Windows Phone Toolkit. The update includes the following goodings: AutoCompleteBox (fully themed for Metro) ListPicker (Works as a ListPicker for <5 items and as PickerB
ShiJiong
2018/01/10
1.2K0
[翻译]Windows Phone 7 Application Controls
前言-关于这段译文 Windows Phone开发的中文资料缺乏,这段译文翻译自《UI Design and Interaction Guide for Windows Phone 7 Series》,翻译活动由http://www.wpmind.com/ 的站长小指发起,最终版本将会在http://www.wpmind.com/ 发布。希望更多的人参与到Windows Phone开发中来。 之前,Jake已经在他的Blog中发布了他翻译的部分:Windows Phone 7用户界面框架。本人负责翻译的是W
ShiJiong
2018/01/10
1.6K0
[翻译]Windows Phone 7 Application Controls
获取 Windows Phone 手机系统信息
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120761.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/15
6720
Windows Phone Studio-任何人都能开发Windows Phone App的在线工具
    在一段时间的内测以后,微软于今天早些时候发布了其Windows Phone应用开发的在线工具,名字叫做Windows Phone Studio。其意义在于,通过简单的内容添加和样式选择,实现Windows Phone应用的定制,它不仅屏蔽了Windows Phone应用开发的技术细节,使得没有相关开发经验的普通用户可以创建Windows Phone平台的App,而且可以完成应用原型的快速开发,方便有经验的程序员快速实现其应用程序的原型。 1. 注册Windows Phone Studio     目
ShiJiong
2018/01/10
9610
Windows Phone Studio-任何人都能开发Windows Phone App的在线工具
Windows Phone 7 开发 视频资料
1. MIX10大会Windows Phone 7相关课程视频 课程ID 课程标题 comment Keynote 大会Keynote CL01 Changing our Game – an Introduction to Windows Phone 7 Series CL18 Windows Phone Application Platform Architecture CL20 Distributing and Monetizing Windows Phone Application
ShiJiong
2018/01/10
7590
Windows Phone SDK 7.1 RTM 发布
自昨天开始发规模推送Mango,今天又看到Windows Phone SDK 7.1 RTM可以下载了,大家可以去Microsoft Download Center下载了。 地址如下: Windows Phone SDK 7.1 具体内容如下: The Windows Phone SDK includes the following Microsoft Visual Studio 2010 Express for Windows Phone Windows Phone Emulator Windows P
ShiJiong
2018/01/10
7200
Windows Phone 8.0 SDK Update(10322) Released
    昨天微软低调发布了WP 8 SDK的更新,甚至在Windows Phone Developer Blog上都没有提及。     从开发者的角度来看,此次更新的确没有太多需要关注的地方,因为没有添加新的API和新的功能。该更新是面向 Windows Phone 8.0 (10322) 的 Windows Phone SDK Update,会将四个新的模拟器图像添加到现有的 Windows Phone SDK 8.0 安装。此更新要求 Visual Studio 2012 Update 2。使用此更新,
ShiJiong
2018/01/10
8980
Windows Phone 8.1 新特性 - 页面导航
本篇介绍一下Windows Phone 8.1 中页面导航的实现方式。 大家对Windows Phone 8 中页面导航的实现一定不陌生,我们使用 NavigationService 来实现。具体写法是这样的: NavigationService.Navigate(new Uri("XAML相对路径", UriKind.RelativeOrAbsolute)); 而在导航目标页,我们在 OnNavigatedTo 方法中通过 NavigationContext.QueryString["key"] 来接收页
Shao Meng
2018/04/28
1K0
Windows Phone 8 API一览
    Windows Phone 7平台不支持Native语言的开发,这困扰了许多游戏和底层应用的开发者。Windows Phone 8 SDK的推出,改善了这个情况。下图就是Windows Pho
ShiJiong
2018/01/10
6260
Windows Phone 8 API一览
Windows Phone 7 EKB系列文章发布
由本人撰写,关于Windows Phone 7设备上Office OneNote Mobile使用的文章,已经在EKB平台发表。 内容和链接地址如下: 1. 在 OneNote Mobile 中如何新
ShiJiong
2018/01/10
6680
Windows Phone 7 WebBrowser 中文乱码问题
通过WebBrowser直接请求网页,是正常显示的,只是通过获取到字符串,再通过NavigateToString()就会显示乱码. 中文转换成 Unicode编码就可以了 :     public static string Unicode2HTML(string HTML)     {             StringBuilder str = new StringBuilder();             char c;             for (int i = 0; i < HTML.L
张善友
2018/01/30
9930
Windows Phone SDK 8.0 新特性-Speech
1. 引言     随着Windows Phone SDK 8.0的发布,其包含的新特性也受到了广大开发者的关注,其中之一就是语音方面的提升。其实在Windows Phone SDK 8.0发布之前,Kinect for Windows也更新了其SDK,支持了其他新的语言,可惜没有看到支持中文的选项。而Windows Phone SDK 8.0的Speech中包含了中文的支持,这点令我们中文用户感受到了MS对中国市场的重视。这点大家可以在Windows Phone 8 模拟器中看到,将模拟器的语言设置为中文
ShiJiong
2018/01/10
1.1K0
Windows Phone SDK 8.0 新特性-Speech
Windows Phone 7 Motion Sensor 使用指南
1. 为什么要引入Motion API? 在上一篇《Windows Phone 7 数字罗盘使用指南》中,我们已经对WP7中的传感器有所了解,事实上,WP7正是通过这些传感器来获取手机当前的姿态和位置等信息。但是,对于开发者来说,他们所关心的并不是这些数据的值本身,而是这些数据所表示的含义。举个例子,之前做Windows Mobile设备定位应用的时候,一般会涉及到GPS数据的获取。在WM2003平台上,开发者需要自己写串口通信类,实现NEMA数据的解析。分析这个过程,最终我们提供给应用的有意义的数据其
ShiJiong
2018/01/10
1.8K0
Windows Phone 7  Motion Sensor 使用指南
点击加载更多

相似问题

如何覆盖windows phone 8中的windows back按钮?

45

Windows Phone back按钮未被处理

22

windows phone上的Interupt back按钮

11

Windows Phone 7和Back按钮指南

23

Cordova Android Back按钮事件不触发

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文