1. `startGame()` 方法用于初始化棋盘并打印初始状态。
2. `init()` 方法用于初始化棋盘,将棋盘数组中的所有元素都设置为字符串 "十"。
3. `print()` 方法用于打印棋盘的当前状态,其中使用了一个包含棋盘列标号的字符串数组 `num`。
4. `play()` 方法实现了黑白子交替下棋的逻辑。它首先要求玩家输入下棋的行和列,然后检查输入的位置是否合法,如果合法则在该位置下子,并打印当前棋盘状态。接着检查是否有玩家获胜,如果有则返回 `false`,游戏结束。如果没有玩家获胜,则交换玩家,继续进行下一轮。
5. `check()` 方法用于检查下棋的位置是否合法,如果越界或者下在已有棋子的位置,则返回 `true`。
6. `over()` 方法用于判断游戏是否结束的条件。它检查横向、纵向、左上右下、左下右上四个方向上是否有五子连珠,如果有则返回 `false`,游戏结束。
这段代码实现了一个简单的五子棋游戏,通过命令行交互的方式进行游戏。玩家可以输入行和列来下子,程序会判断下子的合法性并判断是否有玩家获胜。
代码如下
package Game;
import java.util.Scanner;
public class wzq {
public static void main(String[] args) {
startGame();
System.out.println("游戏开始");
while(true){
if(!play()){
break;
}
}
System.out.println("游戏结束");
}
/*
1.提供一个启动五子棋游戏的方法
初始化棋盘方法
打印棋盘方法
2.开始下棋,黑白棋交替下棋
3.判断坐标是否合法,是否重复
4.判断输赢
*/
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
//启动五子棋游戏
public static void startGame(){
init();
print();
}
//初始化棋盘
public static void init(){
for(int i=0;i< qp.length;i++){
for(int j=0;j< qp.length;j++){
qp[i][j]="十";
}
}
}
//打印棋盘
public static void print(){
for(int i=0;i< qp.length;i++){
for(int j=0;j< qp.length-1;j++){
if(i==qp.length-1){
qp[i][j]=num[j];
}
System.out.print(qp[i][j]);
}
System.out.print(i+1+".");
System.out.println();
}
}
//黑白子交替下棋
public static boolean play(){
int r,l;
Scanner scanner=new Scanner(System.in);
do{
System.out.println("黑子下");
System.out.println("输入行");
r= scanner.nextInt()-1;
System.out.println("输入列");
l= scanner.nextInt()-1;
if(check(r,l)){
System.out.println("下棋位置重复或越界");
continue;
}
qp[r][l]=black;
print();
break;
}while(true);
if(!over(r,l)){
System.out.println("黑棋赢了");
return false;
}
do{
System.out.println("白子下");
System.out.println("输入行");
r= scanner.nextInt()-1;
System.out.println("输入列");
l= scanner.nextInt()-1;
if(check(r,l)){
System.out.println("下棋位置重复或越界");
continue;
}
qp[r][l]=white;
print();
break;
}while(true);
if(!over(r,l)){
System.out.println("白棋赢了");
return false;
}
else
return true;
}
//判断下棋的位置是否有误
public static boolean check(int r,int l){
if(r<0||l<0||r> qp.length-1||l> qp[r].length-1){
return true;
}
else if(qp[r][l]!=line){
return true;
}
else
return false;
}
//判断游戏是否结束的条件
public static boolean over(int r,int l){
int wide,straight,left1,left2,rigth1,rigth2;
//横向
int piece=1;
for(wide=l-1;wide>=0;wide--){
if(qp[r][wide]==qp[r][l]){
piece++;
continue;
}
break;
}
for(wide=l+1;wide<=qp[r].length;wide++){
if(qp[r][wide]==qp[r][l]){
piece++;
continue;
}
break;
}
if(piece==5){
return false;
}
//纵向
piece=1;
for(straight=r-1;straight>=0;straight--){
if(qp[straight][l]==qp[r][l]){
piece++;
continue;
}
break;
}
for(straight=r+1;straight<qp.length;straight++){
if(qp[straight][l]==qp[r][l]){
piece++;
continue;
}
break;
}
if(piece==5){
return false;
}
//左上右下
piece=1;
rigth1=l;
for(left1=r-1;left1>=0;left1--){
if(rigth1>0){
rigth1--;
}
if(qp[left1][rigth1]==qp[r][l]){
piece++;
continue;
}
rigth1=l;
break;
}
for(left1=r+1;left1<=qp.length-1;left1++){
if(rigth1<qp[r].length-1){
rigth1++;
}
if(qp[left1][rigth1]==qp[r][l]){
piece++;
continue;
}
break;
}
if(piece==5){
return false;
}
//左下右上
piece=1;
rigth2=l;
for(left2=r-1;left2>=0;left2--){
if(rigth2<qp[r].length){
rigth2++;
}
if(qp[left2][rigth2]==qp[r][l]){
piece++;
continue;
}
break;
}
rigth2=l;
for(left2=r+1;left2<= qp.length;left2++)
{
if(rigth2>0){
rigth2++;
}
if(qp[left2][rigth2]==qp[r][l]){
piece++;
continue;
}
break;
}
if(piece==5){
return false;
}
return true;
}
}
由于背景原因,白色实心的是黑棋,黑色空心的是白棋