java控制臺版實現(xiàn)五子棋游戲
更新時間:2020年12月30日 08:04:11 作者:悲歌白狼
這篇文章主要為大家詳細(xì)介紹了java控制臺版實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
控制臺實現(xiàn)五子棋游戲,供大家參考,具體內(nèi)容如下
- 控制臺打印棋盤
- 編寫兩人對弈的五子棋游戲,游戲規(guī)則:黑白雙方有一方首先實現(xiàn)五子連續(xù),則獲勝,游戲結(jié)束。

代碼:
import java.util.Scanner;
public class Wuziqi {
//自定義二維數(shù)組來描述棋盤,默認(rèn)初始值為0
int[][] chessBoard = new int[16][16];
//自定義成員方法來繪制棋盤
void paint(){
//1.先繪制棋盤中第一行的坐標(biāo)信息,也就是列坐標(biāo)信息
for (int i = 0; i < 17; i++) {
if( 0 == i){
System.out.println(" ");
}else {
//按照16進制打印i-1的數(shù)值
System.out.printf("%x " , i - 1);
}
}
System.out.println();
//2.繪制棋盤中除了第一行之外的其他部分以及行坐標(biāo)信息
for (int i = 0; i < 16; i++) {
//用于打印行坐標(biāo)信息
System.out.printf("%x ", i);
for (int j = 0; j < 16; j++) {
//剛開始棋盤中所有內(nèi)容都是+ , 因此直接打印
if (0 == chessBoard[i][j]){
System.out.print("+ ");
} else if (1 == chessBoard[i][j]){
System.out.print("● ");
}else {
System.out.print("○ ");
}
}
//打印完一行的所有內(nèi)容之后進行換行
System.out.println();
}
}
//自定義成員方法來提示黑方和白方分別下棋
void play(){
//定義標(biāo)志位來進行黑方和白方的切換,true代表黑方,false代表白方
boolean flag = true;
//不斷地分別提示黑方和白方下棋
while(true){
System.out.println("請" + (flag ? "黑方" : "白方") + "輸入落子坐標(biāo)(x,y):");
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();
//根據(jù)用戶輸入的坐標(biāo)來調(diào)整棋盤中的圖案,策略為改變數(shù)值的元素值,
//當(dāng)黑子落子時就將數(shù)組中對應(yīng)的元素值改為1,當(dāng)白方落子時就將數(shù)組中對應(yīng)的元素改為2
chessBoard[x][y] = (flag ? 1 : 2);
//重新繪制圖案
paint();
//判斷當(dāng)前方是否勝利,若勝利就結(jié)束游戲
if (Success(x, y)) {
System.out.println("恭喜" + (flag ? "黑方" : "白方") + "勝利了!");
break;
}
// 此時切換下棋方
flag = !flag;
}
}
//自定義成員方法來判斷用戶是否獲勝,獲勝的規(guī)則時:任意相同顏色的5個棋子連成一條線
boolean Success(int x, int y){
//1.判斷豎向是否連成一線,則需要以該點為中心向上四個點向下四個點
//聲明變量來統(tǒng)計豎向相同顏色棋子的個數(shù),先統(tǒng)計向上同色棋子的個數(shù)
//先統(tǒng)計向上顏色相同的個數(shù)
int count = 1;
for (int i = x - 1; i >= 0; i--) {
//若當(dāng)前點代表的棋子與上述某個點代表的棋子不一樣,則向上統(tǒng)計結(jié)束
if (chessBoard[x][y] != chessBoard[i][y]){
break;
}
count++;
}
//再統(tǒng)計向下顏色相同的個數(shù)
for (int i = x + 1; i < chessBoard.length; i++) {
if (chessBoard[x][y] != chessBoard[i][y]){
break;
}
count++;
}
if (5 == count){
return true;
}
//2.判斷橫向是否連成一條線,則需要以該店為中心向左四個點向右四個點
count = 1;
//先統(tǒng)計向左顏色相同的個數(shù)
for (int j = y - 1; j >= 0; j--) {
//若當(dāng)前點代表的棋子與上述某個點代碼的棋子不一樣,則向上統(tǒng)計結(jié)束
if (chessBoard[x][y] != chessBoard[x][j]) {
break;
}
count++;
}
//再統(tǒng)計向右顏色相同的個數(shù)
for (int j = y + 1; j < chessBoard.length; j++) {
if(chessBoard[x][y] != chessBoard[x][j]){
break;
}
count++;
}
if (5 == count){
return true;
}
// 3.判斷左上到右下是否連成一線,則需要以該點為中心向左上四個點向右下四個點
count = 1;
// 先統(tǒng)計左上顏色相同的個數(shù)
for (int i = x-1, j = y - 1; i >= 0 && j >= 0; i--, j--) {
// 若當(dāng)前點代表的棋子與上述某個點代表的棋子不一樣,則向上統(tǒng)計結(jié)束
if (chessBoard[x][y] != chessBoard[i][j]) {
break;
}
count++;
}
// 再統(tǒng)計右下顏色相同的個數(shù)
for (int i = x+1, j = y + 1; i <= 15 && j <= 15; i++, j++) {
if (chessBoard[x][y] != chessBoard[i][j]) {
break;
}
count++;
}
if (5 == count) {
return true;
}
// 4.判斷右上到左下是否連成一線,則需要以該點為中心向右上四個點向左下四個點
count = 1;
// 先統(tǒng)計右上顏色相同的個數(shù)
for (int i = x-1, j = y + 1; i >= 0 && j <= 15; i--, j++) {
// 若當(dāng)前點代表的棋子與上述某個點代表的棋子不一樣,則向上統(tǒng)計結(jié)束
if (chessBoard[x][y] != chessBoard[i][j]) {
break;
}
count++;
}
// 再統(tǒng)計左下顏色相同的個數(shù)
for (int i = x+1, j = y - 1; i <= 15 && j >= 0; i++, j--) {
if (chessBoard[x][y] != chessBoard[i][j]) {
break;
}
count++;
}
if (5 == count) {
return true;
}
// 當(dāng)上述所有情況都不成立時,表示該下棋方?jīng)]有獲勝
return false;
}
}
public class WuziqiTest {
public static void main(String[] args) {
//聲明一個Wuziqi類型的引用指向Wuziqi類型的對象
Wuziqi wz = new Wuziqi();
//調(diào)用paint()方法打印列信息
wz.paint();
//下棋開始
wz.play();
}
}
結(jié)果如下

文中沒有對下棋時候的數(shù)組下標(biāo)進行合理值判斷,各位可自行完善。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
idea創(chuàng)建spring boot項目及java版本只能選擇17和21的問題
這篇文章主要介紹了idea創(chuàng)建spring boot項目及java版本只能選擇17和21的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
用SpringBoot Admin監(jiān)控SpringBoot程序
這篇文章主要介紹了用SpringBoot Admin監(jiān)控SpringBoot程序,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-10-10
解決IDEA中 Ctrl+ALT+V這個快捷鍵無法使用的情況
這篇文章主要介紹了解決IDEA中 Ctrl+ALT+V這個快捷鍵無法使用的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
在java中 利用匿名內(nèi)部類進行較簡潔的雙括弧初始化的方法
本篇文章小編將為大家介紹,關(guān)于在java中 利用匿名內(nèi)部類進行較簡潔的雙括弧初始化的方法,有需要的朋友可以參考一下2013-04-04
Spring框架中一個有用的小組件之Spring Retry組件詳解
Spring Retry 是從 Spring batch 中獨立出來的一個功能,主要實現(xiàn)了重試和熔斷,對于那些重試后不會改變結(jié)果,毫無意義的操作,不建議使用重試,今天通過本文給大家介紹Spring Retry組件詳解,感興趣的朋友一起看看吧2021-07-07

