文章目錄
- 需求
- 思路演算法
- 代碼實作
- 運行結果
需求
用二維陣列,實作五子棋功能:
在控制臺通過Scanner輸入黑白棋坐標),使用實心五角星和空心五角星表示黑白棋子.

輸入后重新輸出棋盤如下圖:

黑白棋依次重復輸入下棋
當任意一方構成五子相連時提示勝利,結束游戲.
思路演算法
使用二維陣列定義棋盤 注意陣列越界
//開始游戲
startGame();
//判斷輸贏
isWin()
//橫向
qp[i][j]==black&&qp[i][j+1]==black&&qp[i][j+2]==black&&qp[i][j+3]==black&&qp[i][j+4]==black
//縱向
qp[i][j]==black&&qp[i+1][j]==black&&qp[i+2][j]==black&&qp[i+3][j]==black&&qp[i+4][j]==black
//斜向
qp[i][j]==black&&qp[i+1][j+1]==black&&qp[i+2][j+2]==black&&qp[i+3][j+3]==black&&qp[i+4][j+4]==black
//下棋 判斷坐標
check()
//無效位置
//棋子重復
//初始化棋盤
WuZiQi.initQp(count);
//遍歷輸出
WuZiQi.printQp();
//重復上述步驟
代碼實作
import java.util.Scanner;
public class WuZiQi {
static char[] num = {'⒈','⒉','⒊','⒋','⒌','⒍','⒎','⒏','⒐','⒑','⒒','⒓','⒔','⒕','⒖'};
static char black = '★';
static char white = '☆';
static char line = '十';
static char[][] qp;//全域共享
static Scanner scanner = new Scanner(System.in);
static int count=15;
static boolean flag = true;//true-黑棋 false-白棋
public static void main(String[] args) {
//初始化棋盤
WuZiQi.initQp(count);
//列印輸出
WuZiQi.printQp();
//開始游戲
startGame();
}
/*
開始游戲
*/
public static void startGame() {
while(true){
if(flag){//黑棋下
System.out.println("黑棋下");
boolean res = check();
if(!res){//棋子無效,跳過 重新下棋
continue;
}
printQp();
//判斷輸贏
if(isWin()){
System.out.println("黑棋勝");
break;
}
flag=false;
}else{//白棋下
System.out.println("白棋下");
boolean res = check();
if(!res){//棋子無效,跳過 重新下棋
continue;
}
printQp();
flag= true;
}
}
}
//判斷輸贏
private static boolean isWin() {
if(flag){
for (int i = 0; i < qp.length; i++) {
for (int j = 0; j < qp[i].length; j++) {
//橫向
if(qp[i][j]==black&&qp[i][j+1]==black&&qp[i][j+2]==black&&qp[i][j+3]==black&&qp[i][j+4]==black){
return true;
}
//縱向
if(qp[i][j]==black&&qp[i+1][j]==black&&qp[i+2][j]==black&&qp[i+3][j]==black&&qp[i+4][j]==black){
return true;
}
//斜向
if(qp[i][j]==black&&qp[i+1][j+1]==black&&qp[i+2][j+2]==black&&qp[i+3][j+3]==black&&qp[i+4][j+4]==black){
return true;
}
}
}
return false;
}else{
return false;
}
}
//下棋 判斷坐標
public static boolean check(){
int c1 = scanner.nextInt();
int c2 = scanner.nextInt();
if((c1<0||c1>count-1)&&(c2<0||c2>count-1)){
System.out.println("無效位置");
return false;
}
if(qp[c1-1][c2-1]==black||qp[c1-1][c2-1]==white){
System.out.println("棋子重復了");
return false;
}
qp[c1-1][c2-1] = flag?black:white;
return true;
}
//初始化棋盤
public static void initQp(int count){
qp=new char[count][count];
for (int i = 0; i < qp.length; i++) {
for (int j = 0; j <qp[i].length ; j++) {
qp[i][j] = line;
if(j==qp[i].length-1){
qp[i][count-1] = num[i];
}
if(i==count-1){
qp[i][j] = num[j];
}
}
}
}
//遍歷輸出
public static void printQp(){
for (int i = 0; i < qp.length; i++) {
for (int j = 0; j <qp[i].length ; j++) {
System.out.print(qp[i][j]);
}
System.out.println();
}
}
運行結果
當下到重復位置時,會顯示重復了


直到五顆連成一條線時,顯示*棋勝

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277517.html
標籤:其他
