- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在构建一个黑白棋游戏,其中棋盘是一系列 8x8 整数(0 表示空白,1 表示白色,2 表示黑色)。我已经想出如何让垂直和水平方向检查移动并进行移动,但无法弄清楚如何让对角线工作。
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;
}
}
}
}
最佳答案
我知道这是 C++ 代码,而您正在执行 Java。但我认为您可以提取主要思想。
// 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);
}
快乐的光盘翻转;-)
关于java - 黑白棋算法检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31644148/
我正在尝试在 Eclipse 中编写一个黑 jack 程序,但当该程序处理 Ace 时遇到问题。我询问用户是否希望 A 值 1 或 11。确实如此,但当我输入值时,它会给出错误消息 "Exceptio
我在黑 jack 游戏中需要帮助。我在数组中有一副牌,每次我取出一张牌并处理它时,数组都会被重新分配为小于大小的一个。所以我有这个循环,向每个第 n 个玩家发两张牌 deck=crea
我正在尝试检测黑点或其中有黑点的圆圈(我在下图中用箭头指向的圆圈)。 我目前的方法是在 OpenCV 中使用 HoughCircles 函数来检测半径大于 2 像素的圆。我对社区的问题是:假设我检测到
我正在用 python 编写一个非常基本的轮盘模拟器。目前,我只专注于红/黑投注(基本上与投注正面或反面相同,使用硬币)。 我的代码有各种问题。请原谅我对语言的基本了解。 import random
目前,我正在尝试使用 javascript 制作黑 jack 游戏。 到目前为止,我有庄家牌和闲家牌。当玩家决定再拿一张牌时就会出现问题。似乎 document.write 在将字符串写入网页时迟到了
b/w PRLock 和 PRRWLock 有什么区别由 nspr 库提供? 最佳答案 我对这个库一无所知,但从名字可以看出,一个是标准锁,另一个是读写器锁。第一个总是提供独占访问,第二个允许多个并发
如何使用 ios5 将 RGB 图像转换为 1 channel 图像(黑/白)? 输入图像通常是书页的照片。 目标是通过将复印件转换为 1 channel 图像来减小复印件的大小。 最佳答案 如果我理
我是一名优秀的程序员,十分优秀!