我正在编写一些 Java 代码来实现 Connect 4 游戏。当玩家在水平、垂直或对角线上连续放置四个筹码时,宣布获胜者。显然,我可以编写一些 for 循环并每次都检查赢家,但我希望得到一些关于更优雅地做这件事的建议。我正在考虑将所有获胜组合添加到某个数据结构中,并只检查最后一步所涉及的组合,但我不确定这是否可能或如何实现。我是 Java 的新手,所以任何关于使用什么数据结构或如何实现的提示或建议将不胜感激。谢谢
编辑:好的,有人可以告诉我从哪里开始实现这些家伙的答案吗:algorithm to check a connect four field
最佳答案
其他答案声称您无法在不循环的情况下检查是否获胜。今天我要唱反调:你可以做(尽管你仍然不应该做)!对于典型的 7*6 Connnect Four 板,每种颜色只有 69 个可能的获胜位置,即使您是一个打字速度较慢的人,也可以在一两个下午轻松完成编码。
此代码假设您有一个 7x6 二维字符数组,称为 matrix
,其中包含三个值之一 'B'
、'R'
或 ' '
,分别对应黑色、红色或空的图 block 。它要么返回获胜者的角色,要么返回 null
(如果还没有获胜者)。
char getWinner(){
if (matrix[0][0] == 'B' and matrix[1][0] == 'B' and matrix[2][0] == 'B' and matrix[3][0] == 'B'){return 'B';}
if (matrix[0][0] == 'R' and matrix[1][0] == 'R' and matrix[2][0] == 'R' and matrix[3][0] == 'R'){return 'R';}
if (matrix[1][0] == 'B' and matrix[2][0] == 'B' and matrix[3][0] == 'B' and matrix[4][0] == 'B'){return 'B';}
if (matrix[1][0] == 'R' and matrix[2][0] == 'R' and matrix[3][0] == 'R' and matrix[4][0] == 'R'){return 'R';}
if (matrix[2][0] == 'B' and matrix[3][0] == 'B' and matrix[4][0] == 'B' and matrix[5][0] == 'B'){return 'B';}
if (matrix[2][0] == 'R' and matrix[3][0] == 'R' and matrix[4][0] == 'R' and matrix[5][0] == 'R'){return 'R';}
if (matrix[3][0] == 'B' and matrix[4][0] == 'B' and matrix[5][0] == 'B' and matrix[6][0] == 'B'){return 'B';}
if (matrix[3][0] == 'R' and matrix[4][0] == 'R' and matrix[5][0] == 'R' and matrix[6][0] == 'R'){return 'R';}
if (matrix[0][1] == 'B' and matrix[1][1] == 'B' and matrix[2][1] == 'B' and matrix[3][1] == 'B'){return 'B';}
if (matrix[0][1] == 'R' and matrix[1][1] == 'R' and matrix[2][1] == 'R' and matrix[3][1] == 'R'){return 'R';}
if (matrix[1][1] == 'B' and matrix[2][1] == 'B' and matrix[3][1] == 'B' and matrix[4][1] == 'B'){return 'B';}
if (matrix[1][1] == 'R' and matrix[2][1] == 'R' and matrix[3][1] == 'R' and matrix[4][1] == 'R'){return 'R';}
if (matrix[2][1] == 'B' and matrix[3][1] == 'B' and matrix[4][1] == 'B' and matrix[5][1] == 'B'){return 'B';}
if (matrix[2][1] == 'R' and matrix[3][1] == 'R' and matrix[4][1] == 'R' and matrix[5][1] == 'R'){return 'R';}
if (matrix[3][1] == 'B' and matrix[4][1] == 'B' and matrix[5][1] == 'B' and matrix[6][1] == 'B'){return 'B';}
if (matrix[3][1] == 'R' and matrix[4][1] == 'R' and matrix[5][1] == 'R' and matrix[6][1] == 'R'){return 'R';}
if (matrix[0][2] == 'B' and matrix[1][2] == 'B' and matrix[2][2] == 'B' and matrix[3][2] == 'B'){return 'B';}
if (matrix[0][2] == 'R' and matrix[1][2] == 'R' and matrix[2][2] == 'R' and matrix[3][2] == 'R'){return 'R';}
if (matrix[1][2] == 'B' and matrix[2][2] == 'B' and matrix[3][2] == 'B' and matrix[4][2] == 'B'){return 'B';}
if (matrix[1][2] == 'R' and matrix[2][2] == 'R' and matrix[3][2] == 'R' and matrix[4][2] == 'R'){return 'R';}
if (matrix[2][2] == 'B' and matrix[3][2] == 'B' and matrix[4][2] == 'B' and matrix[5][2] == 'B'){return 'B';}
if (matrix[2][2] == 'R' and matrix[3][2] == 'R' and matrix[4][2] == 'R' and matrix[5][2] == 'R'){return 'R';}
if (matrix[3][2] == 'B' and matrix[4][2] == 'B' and matrix[5][2] == 'B' and matrix[6][2] == 'B'){return 'B';}
if (matrix[3][2] == 'R' and matrix[4][2] == 'R' and matrix[5][2] == 'R' and matrix[6][2] == 'R'){return 'R';}
if (matrix[0][3] == 'B' and matrix[1][3] == 'B' and matrix[2][3] == 'B' and matrix[3][3] == 'B'){return 'B';}
if (matrix[0][3] == 'R' and matrix[1][3] == 'R' and matrix[2][3] == 'R' and matrix[3][3] == 'R'){return 'R';}
if (matrix[1][3] == 'B' and matrix[2][3] == 'B' and matrix[3][3] == 'B' and matrix[4][3] == 'B'){return 'B';}
if (matrix[1][3] == 'R' and matrix[2][3] == 'R' and matrix[3][3] == 'R' and matrix[4][3] == 'R'){return 'R';}
if (matrix[2][3] == 'B' and matrix[3][3] == 'B' and matrix[4][3] == 'B' and matrix[5][3] == 'B'){return 'B';}
if (matrix[2][3] == 'R' and matrix[3][3] == 'R' and matrix[4][3] == 'R' and matrix[5][3] == 'R'){return 'R';}
if (matrix[3][3] == 'B' and matrix[4][3] == 'B' and matrix[5][3] == 'B' and matrix[6][3] == 'B'){return 'B';}
if (matrix[3][3] == 'R' and matrix[4][3] == 'R' and matrix[5][3] == 'R' and matrix[6][3] == 'R'){return 'R';}
if (matrix[0][4] == 'B' and matrix[1][4] == 'B' and matrix[2][4] == 'B' and matrix[3][4] == 'B'){return 'B';}
if (matrix[0][4] == 'R' and matrix[1][4] == 'R' and matrix[2][4] == 'R' and matrix[3][4] == 'R'){return 'R';}
if (matrix[1][4] == 'B' and matrix[2][4] == 'B' and matrix[3][4] == 'B' and matrix[4][4] == 'B'){return 'B';}
if (matrix[1][4] == 'R' and matrix[2][4] == 'R' and matrix[3][4] == 'R' and matrix[4][4] == 'R'){return 'R';}
if (matrix[2][4] == 'B' and matrix[3][4] == 'B' and matrix[4][4] == 'B' and matrix[5][4] == 'B'){return 'B';}
if (matrix[2][4] == 'R' and matrix[3][4] == 'R' and matrix[4][4] == 'R' and matrix[5][4] == 'R'){return 'R';}
if (matrix[3][4] == 'B' and matrix[4][4] == 'B' and matrix[5][4] == 'B' and matrix[6][4] == 'B'){return 'B';}
if (matrix[3][4] == 'R' and matrix[4][4] == 'R' and matrix[5][4] == 'R' and matrix[6][4] == 'R'){return 'R';}
if (matrix[0][5] == 'B' and matrix[1][5] == 'B' and matrix[2][5] == 'B' and matrix[3][5] == 'B'){return 'B';}
if (matrix[0][5] == 'R' and matrix[1][5] == 'R' and matrix[2][5] == 'R' and matrix[3][5] == 'R'){return 'R';}
if (matrix[1][5] == 'B' and matrix[2][5] == 'B' and matrix[3][5] == 'B' and matrix[4][5] == 'B'){return 'B';}
if (matrix[1][5] == 'R' and matrix[2][5] == 'R' and matrix[3][5] == 'R' and matrix[4][5] == 'R'){return 'R';}
if (matrix[2][5] == 'B' and matrix[3][5] == 'B' and matrix[4][5] == 'B' and matrix[5][5] == 'B'){return 'B';}
if (matrix[2][5] == 'R' and matrix[3][5] == 'R' and matrix[4][5] == 'R' and matrix[5][5] == 'R'){return 'R';}
if (matrix[3][5] == 'B' and matrix[4][5] == 'B' and matrix[5][5] == 'B' and matrix[6][5] == 'B'){return 'B';}
if (matrix[3][5] == 'R' and matrix[4][5] == 'R' and matrix[5][5] == 'R' and matrix[6][5] == 'R'){return 'R';}
if (matrix[0][0] == 'B' and matrix[0][1] == 'B' and matrix[0][2] == 'B' and matrix[0][3] == 'B'){return 'B';}
if (matrix[0][0] == 'R' and matrix[0][1] == 'R' and matrix[0][2] == 'R' and matrix[0][3] == 'R'){return 'R';}
if (matrix[0][1] == 'B' and matrix[0][2] == 'B' and matrix[0][3] == 'B' and matrix[0][4] == 'B'){return 'B';}
if (matrix[0][1] == 'R' and matrix[0][2] == 'R' and matrix[0][3] == 'R' and matrix[0][4] == 'R'){return 'R';}
if (matrix[0][2] == 'B' and matrix[0][3] == 'B' and matrix[0][4] == 'B' and matrix[0][5] == 'B'){return 'B';}
if (matrix[0][2] == 'R' and matrix[0][3] == 'R' and matrix[0][4] == 'R' and matrix[0][5] == 'R'){return 'R';}
if (matrix[1][0] == 'B' and matrix[1][1] == 'B' and matrix[1][2] == 'B' and matrix[1][3] == 'B'){return 'B';}
if (matrix[1][0] == 'R' and matrix[1][1] == 'R' and matrix[1][2] == 'R' and matrix[1][3] == 'R'){return 'R';}
if (matrix[1][1] == 'B' and matrix[1][2] == 'B' and matrix[1][3] == 'B' and matrix[1][4] == 'B'){return 'B';}
if (matrix[1][1] == 'R' and matrix[1][2] == 'R' and matrix[1][3] == 'R' and matrix[1][4] == 'R'){return 'R';}
if (matrix[1][2] == 'B' and matrix[1][3] == 'B' and matrix[1][4] == 'B' and matrix[1][5] == 'B'){return 'B';}
if (matrix[1][2] == 'R' and matrix[1][3] == 'R' and matrix[1][4] == 'R' and matrix[1][5] == 'R'){return 'R';}
if (matrix[2][0] == 'B' and matrix[2][1] == 'B' and matrix[2][2] == 'B' and matrix[2][3] == 'B'){return 'B';}
if (matrix[2][0] == 'R' and matrix[2][1] == 'R' and matrix[2][2] == 'R' and matrix[2][3] == 'R'){return 'R';}
if (matrix[2][1] == 'B' and matrix[2][2] == 'B' and matrix[2][3] == 'B' and matrix[2][4] == 'B'){return 'B';}
if (matrix[2][1] == 'R' and matrix[2][2] == 'R' and matrix[2][3] == 'R' and matrix[2][4] == 'R'){return 'R';}
if (matrix[2][2] == 'B' and matrix[2][3] == 'B' and matrix[2][4] == 'B' and matrix[2][5] == 'B'){return 'B';}
if (matrix[2][2] == 'R' and matrix[2][3] == 'R' and matrix[2][4] == 'R' and matrix[2][5] == 'R'){return 'R';}
if (matrix[3][0] == 'B' and matrix[3][1] == 'B' and matrix[3][2] == 'B' and matrix[3][3] == 'B'){return 'B';}
if (matrix[3][0] == 'R' and matrix[3][1] == 'R' and matrix[3][2] == 'R' and matrix[3][3] == 'R'){return 'R';}
if (matrix[3][1] == 'B' and matrix[3][2] == 'B' and matrix[3][3] == 'B' and matrix[3][4] == 'B'){return 'B';}
if (matrix[3][1] == 'R' and matrix[3][2] == 'R' and matrix[3][3] == 'R' and matrix[3][4] == 'R'){return 'R';}
if (matrix[3][2] == 'B' and matrix[3][3] == 'B' and matrix[3][4] == 'B' and matrix[3][5] == 'B'){return 'B';}
if (matrix[3][2] == 'R' and matrix[3][3] == 'R' and matrix[3][4] == 'R' and matrix[3][5] == 'R'){return 'R';}
if (matrix[4][0] == 'B' and matrix[4][1] == 'B' and matrix[4][2] == 'B' and matrix[4][3] == 'B'){return 'B';}
if (matrix[4][0] == 'R' and matrix[4][1] == 'R' and matrix[4][2] == 'R' and matrix[4][3] == 'R'){return 'R';}
if (matrix[4][1] == 'B' and matrix[4][2] == 'B' and matrix[4][3] == 'B' and matrix[4][4] == 'B'){return 'B';}
if (matrix[4][1] == 'R' and matrix[4][2] == 'R' and matrix[4][3] == 'R' and matrix[4][4] == 'R'){return 'R';}
if (matrix[4][2] == 'B' and matrix[4][3] == 'B' and matrix[4][4] == 'B' and matrix[4][5] == 'B'){return 'B';}
if (matrix[4][2] == 'R' and matrix[4][3] == 'R' and matrix[4][4] == 'R' and matrix[4][5] == 'R'){return 'R';}
if (matrix[5][0] == 'B' and matrix[5][1] == 'B' and matrix[5][2] == 'B' and matrix[5][3] == 'B'){return 'B';}
if (matrix[5][0] == 'R' and matrix[5][1] == 'R' and matrix[5][2] == 'R' and matrix[5][3] == 'R'){return 'R';}
if (matrix[5][1] == 'B' and matrix[5][2] == 'B' and matrix[5][3] == 'B' and matrix[5][4] == 'B'){return 'B';}
if (matrix[5][1] == 'R' and matrix[5][2] == 'R' and matrix[5][3] == 'R' and matrix[5][4] == 'R'){return 'R';}
if (matrix[5][2] == 'B' and matrix[5][3] == 'B' and matrix[5][4] == 'B' and matrix[5][5] == 'B'){return 'B';}
if (matrix[5][2] == 'R' and matrix[5][3] == 'R' and matrix[5][4] == 'R' and matrix[5][5] == 'R'){return 'R';}
if (matrix[6][0] == 'B' and matrix[6][1] == 'B' and matrix[6][2] == 'B' and matrix[6][3] == 'B'){return 'B';}
if (matrix[6][0] == 'R' and matrix[6][1] == 'R' and matrix[6][2] == 'R' and matrix[6][3] == 'R'){return 'R';}
if (matrix[6][1] == 'B' and matrix[6][2] == 'B' and matrix[6][3] == 'B' and matrix[6][4] == 'B'){return 'B';}
if (matrix[6][1] == 'R' and matrix[6][2] == 'R' and matrix[6][3] == 'R' and matrix[6][4] == 'R'){return 'R';}
if (matrix[6][2] == 'B' and matrix[6][3] == 'B' and matrix[6][4] == 'B' and matrix[6][5] == 'B'){return 'B';}
if (matrix[6][2] == 'R' and matrix[6][3] == 'R' and matrix[6][4] == 'R' and matrix[6][5] == 'R'){return 'R';}
if (matrix[0][3] == 'B' and matrix[1][2] == 'B' and matrix[2][1] == 'B' and matrix[3][0] == 'B'){return 'B';}
if (matrix[0][3] == 'R' and matrix[1][2] == 'R' and matrix[2][1] == 'R' and matrix[3][0] == 'R'){return 'R';}
if (matrix[3][3] == 'B' and matrix[2][2] == 'B' and matrix[1][1] == 'B' and matrix[0][0] == 'B'){return 'B';}
if (matrix[3][3] == 'R' and matrix[2][2] == 'R' and matrix[1][1] == 'R' and matrix[0][0] == 'R'){return 'R';}
if (matrix[0][4] == 'B' and matrix[1][3] == 'B' and matrix[2][2] == 'B' and matrix[3][1] == 'B'){return 'B';}
if (matrix[0][4] == 'R' and matrix[1][3] == 'R' and matrix[2][2] == 'R' and matrix[3][1] == 'R'){return 'R';}
if (matrix[3][4] == 'B' and matrix[2][3] == 'B' and matrix[1][2] == 'B' and matrix[0][1] == 'B'){return 'B';}
if (matrix[3][4] == 'R' and matrix[2][3] == 'R' and matrix[1][2] == 'R' and matrix[0][1] == 'R'){return 'R';}
if (matrix[0][5] == 'B' and matrix[1][4] == 'B' and matrix[2][3] == 'B' and matrix[3][2] == 'B'){return 'B';}
if (matrix[0][5] == 'R' and matrix[1][4] == 'R' and matrix[2][3] == 'R' and matrix[3][2] == 'R'){return 'R';}
if (matrix[3][5] == 'B' and matrix[2][4] == 'B' and matrix[1][3] == 'B' and matrix[0][2] == 'B'){return 'B';}
if (matrix[3][5] == 'R' and matrix[2][4] == 'R' and matrix[1][3] == 'R' and matrix[0][2] == 'R'){return 'R';}
if (matrix[1][3] == 'B' and matrix[2][2] == 'B' and matrix[3][1] == 'B' and matrix[4][0] == 'B'){return 'B';}
if (matrix[1][3] == 'R' and matrix[2][2] == 'R' and matrix[3][1] == 'R' and matrix[4][0] == 'R'){return 'R';}
if (matrix[4][3] == 'B' and matrix[3][2] == 'B' and matrix[2][1] == 'B' and matrix[1][0] == 'B'){return 'B';}
if (matrix[4][3] == 'R' and matrix[3][2] == 'R' and matrix[2][1] == 'R' and matrix[1][0] == 'R'){return 'R';}
if (matrix[1][4] == 'B' and matrix[2][3] == 'B' and matrix[3][2] == 'B' and matrix[4][1] == 'B'){return 'B';}
if (matrix[1][4] == 'R' and matrix[2][3] == 'R' and matrix[3][2] == 'R' and matrix[4][1] == 'R'){return 'R';}
if (matrix[4][4] == 'B' and matrix[3][3] == 'B' and matrix[2][2] == 'B' and matrix[1][1] == 'B'){return 'B';}
if (matrix[4][4] == 'R' and matrix[3][3] == 'R' and matrix[2][2] == 'R' and matrix[1][1] == 'R'){return 'R';}
if (matrix[1][5] == 'B' and matrix[2][4] == 'B' and matrix[3][3] == 'B' and matrix[4][2] == 'B'){return 'B';}
if (matrix[1][5] == 'R' and matrix[2][4] == 'R' and matrix[3][3] == 'R' and matrix[4][2] == 'R'){return 'R';}
if (matrix[4][5] == 'B' and matrix[3][4] == 'B' and matrix[2][3] == 'B' and matrix[1][2] == 'B'){return 'B';}
if (matrix[4][5] == 'R' and matrix[3][4] == 'R' and matrix[2][3] == 'R' and matrix[1][2] == 'R'){return 'R';}
if (matrix[2][3] == 'B' and matrix[3][2] == 'B' and matrix[4][1] == 'B' and matrix[5][0] == 'B'){return 'B';}
if (matrix[2][3] == 'R' and matrix[3][2] == 'R' and matrix[4][1] == 'R' and matrix[5][0] == 'R'){return 'R';}
if (matrix[5][3] == 'B' and matrix[4][2] == 'B' and matrix[3][1] == 'B' and matrix[2][0] == 'B'){return 'B';}
if (matrix[5][3] == 'R' and matrix[4][2] == 'R' and matrix[3][1] == 'R' and matrix[2][0] == 'R'){return 'R';}
if (matrix[2][4] == 'B' and matrix[3][3] == 'B' and matrix[4][2] == 'B' and matrix[5][1] == 'B'){return 'B';}
if (matrix[2][4] == 'R' and matrix[3][3] == 'R' and matrix[4][2] == 'R' and matrix[5][1] == 'R'){return 'R';}
if (matrix[5][4] == 'B' and matrix[4][3] == 'B' and matrix[3][2] == 'B' and matrix[2][1] == 'B'){return 'B';}
if (matrix[5][4] == 'R' and matrix[4][3] == 'R' and matrix[3][2] == 'R' and matrix[2][1] == 'R'){return 'R';}
if (matrix[2][5] == 'B' and matrix[3][4] == 'B' and matrix[4][3] == 'B' and matrix[5][2] == 'B'){return 'B';}
if (matrix[2][5] == 'R' and matrix[3][4] == 'R' and matrix[4][3] == 'R' and matrix[5][2] == 'R'){return 'R';}
if (matrix[5][5] == 'B' and matrix[4][4] == 'B' and matrix[3][3] == 'B' and matrix[2][2] == 'B'){return 'B';}
if (matrix[5][5] == 'R' and matrix[4][4] == 'R' and matrix[3][3] == 'R' and matrix[2][2] == 'R'){return 'R';}
if (matrix[3][3] == 'B' and matrix[4][2] == 'B' and matrix[5][1] == 'B' and matrix[6][0] == 'B'){return 'B';}
if (matrix[3][3] == 'R' and matrix[4][2] == 'R' and matrix[5][1] == 'R' and matrix[6][0] == 'R'){return 'R';}
if (matrix[6][3] == 'B' and matrix[5][2] == 'B' and matrix[4][1] == 'B' and matrix[3][0] == 'B'){return 'B';}
if (matrix[6][3] == 'R' and matrix[5][2] == 'R' and matrix[4][1] == 'R' and matrix[3][0] == 'R'){return 'R';}
if (matrix[3][4] == 'B' and matrix[4][3] == 'B' and matrix[5][2] == 'B' and matrix[6][1] == 'B'){return 'B';}
if (matrix[3][4] == 'R' and matrix[4][3] == 'R' and matrix[5][2] == 'R' and matrix[6][1] == 'R'){return 'R';}
if (matrix[6][4] == 'B' and matrix[5][3] == 'B' and matrix[4][2] == 'B' and matrix[3][1] == 'B'){return 'B';}
if (matrix[6][4] == 'R' and matrix[5][3] == 'R' and matrix[4][2] == 'R' and matrix[3][1] == 'R'){return 'R';}
if (matrix[3][5] == 'B' and matrix[4][4] == 'B' and matrix[5][3] == 'B' and matrix[6][2] == 'B'){return 'B';}
if (matrix[3][5] == 'R' and matrix[4][4] == 'R' and matrix[5][3] == 'R' and matrix[6][2] == 'R'){return 'R';}
if (matrix[6][5] == 'B' and matrix[5][4] == 'B' and matrix[4][3] == 'B' and matrix[3][2] == 'B'){return 'B';}
if (matrix[6][5] == 'R' and matrix[5][4] == 'R' and matrix[4][3] == 'R' and matrix[3][2] == 'R'){return 'R';}
return null;
}
关于java - 连接4,检查赢家算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201216/