Java簡單實現無介面五子棋
專案介紹:
本次設計是基於知識點Java類和物件以及陣列開發的一個小型五子棋遊戲程式。遊戲開始時,選擇黑棋、白棋開局,將一枚棋子落在棋盤一座標上,然後輪番落子,如此輪流下子,直到某一方首先在棋盤的豎、橫或兩斜四方向上的五子連成線,則該方該局獲勝。
專案實現思路:
- 棋盤設計為10*10格,棋盤型別Chess[][] 二維陣列,所含屬性String chessType; 棋盤首先chessType值是”➕”。
- 初始化二維陣列
- 玩家選擇黑白圈後,開始下棋。輸入要下棋子的行列座標,黑白棋子輪流落子,當一方連成五子或下滿棋盤時,遊戲結束(連成五子的一方獲勝,下滿棋盤為和棋)。
- 每一次落子成功後,馬上判斷以該位置為中心的八個方向:上、下、左、右、左上、左下、右上、右下是否有相同顏色的棋子連成五子,如果連成五子,則遊戲結束,輸出相應的資訊。
- 當遊戲一方勝利後顯示勝利資訊。從程式表面看,這是一個二維平面圖,所以資料用二維陣列來表示,陣列兩個下標可以表示棋盤上的位置,陣列元素的值代表棋格上的狀態,共有三種情況,分別是,⭕代表白棋,●代表黑棋,➕代表格子。
原始碼
1.棋子
/**
* @author hudongsheng
* @date 2020/10/29 - 9:28
*/
public class ChessType {
private String chessType;
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public ChessType() {
}
public String getChessType() {
return chessType;
}
public void setChessType(String chessType) {
this.chessType = chessType;
}
}
2.下棋
/**
* @author hudongsheng
* @date 2020/10/29 - 9:27
*/
public class Gobang {
private int size = 1;
private ChessType[][] chessTypes;
private int row;
private int colum;
private int x;
private int y;
//建立一個棋盤
public Gobang(int row,int colum){
this.row = row;
this.colum = colum;
chessTypes = new ChessType[row][colum];
}
//初始化棋盤
public void initChessType(){
for(int i = 0; i< chessTypes.length; i++){
for (int j = 0; j< chessTypes[i].length; j++){
chessTypes[i][j] = new ChessType();
chessTypes[i][j].setChessType("➕");
}
}
}
//下白棋
public void setWhiteChess(int x,int y){
chessTypes[x][y].setChessType("⭕");
}
//下黑棋
public void setBlackChess(int x,int y){
chessTypes[x][y].setChessType("●");
}
//判斷是否勝利
public boolean checkWin(int i,int j) {
// TODO Auto-generated method stub
boolean flag = false;
//判斷縱向是否有五個棋子是相同的顏色
int count1 = 1;//相同顏色棋子的個數
String color = chessTypes[i][j].getChessType(); //剛下的棋子的顏色
int a = 1; //棋子索引的增量
while((i+a)<row && color == chessTypes[i+a][j].getChessType()){
count1++;
a++;
}
a = 1;
while((i-a)>=0 && color == chessTypes[i-a][j].getChessType()){
count1++;
a++;
}
if(count1 >= 5){
flag = true;
}
//判斷縱向是否有五個棋子是相同的顏色
int count2 = 1;
a = 1;
while((j+a)<colum && color == chessTypes[i][j+a].getChessType()){
count2++;
a++;
}
a = 1;
while((j-a)>=0 && color == chessTypes[i][j-a].getChessType()){
count2++;
a++;
}
if(count2 >= 5){
flag = true;
}
//右上 左下 是否有五個棋子是相同的顏色
int count3 = 1;
a = 1;
while((i+a)<row && (j-a)>=0 && color == chessTypes[i+a][j-a].getChessType()){
count3++;
a++;
}
a = 1;
while((i-a)>=0 && (j+a)<colum && color == chessTypes[i-a][j+a].getChessType()){
count3++;
a++;
}
if(count3 >= 5){
flag = true;
}
//左上 右下 是否有五個棋子是相同的顏色
int count4 = 1;
a = 1;
while((i-a)>0 && (j-a)>=0 && color == chessTypes[i-a][j-a].getChessType()){
count4++;
a++;
}
a = 1;
while((i+a)<row && (j+a)<colum && color == chessTypes[i+a][j+a].getChessType()){
count4++;
a++;
}
if(count4 >= 5){
flag = true;
}
return flag;
}
//落子後列印棋盤
public void print(){
for(int i = 0; i< chessTypes.length; i++){
for (int j = 0; j< chessTypes[i].length; j++){
System.out.print(chessTypes[i][j].getChessType());
}
System.out.println();
}
}
}
3.測試
**
* @author hudongsheng
* @date 2020/10/29 - 9:27
*/
public class Test {
public static void main(String[] args) {
boolean flag = true;
int x;
int y;
Gobang gobang = new Gobang(10,10);
Scanner scanner = new Scanner(System.in);
gobang.initChessType();
//下棋
System.out.println("黑棋執先");
while (true){
gobang.print();
System.out.println("請輸入下黑棋的座標:");
x = scanner.nextInt();
y = scanner.nextInt();
gobang.setBlackChess(x,y);
if(gobang.checkWin(x,y)){
gobang.print();
System.out.println("黑棋勝!");
break;
}
gobang.print();
System.out.println("請輸入下白棋的座標:");
x = scanner.nextInt();
y = scanner.nextInt();
gobang.setWhiteChess(x,y);
if(gobang.checkWin(x,y)){
gobang.print();
System.out.println("白棋勝!");
break;
}
}
}
}
相關文章
- 簡單的list介面和edit介面使用java swing實現Java
- java簡單練習-五子棋Java
- 人工智慧實現簡單的五子棋程式人工智慧
- AI介面實現:簡單實現Viper配置管理AI
- java實現簡單的JDBCJavaJDBC
- java實現棧的簡單操作Java
- Java用UDP實現簡單聊天JavaUDP
- golang 簡單實現介面資料格式化Golang
- Java使用Netty實現簡單的RPCJavaNettyRPC
- 簡單快遞系統 java實現Java
- heygen模型介面 簡單使用 java版模型Java
- Java Web簡單登陸功能的實現JavaWeb
- 使用Java實現簡單的鬥地主案例Java
- Java 簡單實現撲克牌抽象類Java抽象
- java介面和抽象類的簡單理解Java抽象
- Java實現簡單的增刪改查操作Java
- 簡單的Java實現Netty進行通訊JavaNetty
- Java實現一個簡單的計算器Java
- Java實現一個棧就這麼簡單Java
- Promise 簡單實現Promise
- ReadableStream 簡單實現
- Express 簡單實現Express
- AspectJ簡單實現
- FastClick簡單實現AST
- Flutter系列:2.實現一個簡單的登入介面Flutter
- 用java實現一個簡單的區塊鏈Java區塊鏈
- java實現一個簡單的爬蟲小程式Java爬蟲
- Java 實現《編譯原理》簡單詞法分析功能Java編譯原理詞法分析
- 用java實現一個簡單的計算器Java
- GFS(谷歌檔案系統)的JAVA簡單實現谷歌Java
- [無心插柳]簡單實現常用的表單校驗函式函式
- java實現zabbix介面開發Java
- 精簡版 koa 簡單實現
- Java實現五子棋對戰小遊戲【完整版】Java遊戲
- 簡單版Promise實現Promise
- 簡單實現vuex原理Vue
- AOP的簡單實現
- 物件池簡單實現物件