簡單java五子棋代碼下載,java小遊戲編程源代碼五子棋

本文目錄一覽:

求一個簡單的JAVA五子棋代碼!! 網上複製的別來了!

以下是現寫的 實現了兩人對戰 自己複製後運行把 沒什麼難度 類名 Games

import java.util.Scanner;

public class Games {

private String board[][];

private static int SIZE = 17;

private static String roles = “A玩家”;

//初始化數組

public void initBoard() {

board = new String[SIZE][SIZE];

for (int i = 0; i SIZE; i++) {

for (int j = 0; j SIZE; j++) {

// if(i==0){

// String str = “”;

// str += j+” “;

// board[i][j]= str;

// }else if(i!=0j==0){

// String str = “”;

// str += i+” “;

// board[i][j]= str;

// }else{

board[i][j] = “╋”;

// }

}

}

}

//輸出棋盤

public void printBoard() {

for (int i = 0; i SIZE; i++) {

for (int j = 0; j SIZE; j++) {

System.out.print(board[i][j]);

}

System.out.println();

}

}

//判斷所下棋子位置是否合理

public boolean isOk(int x, int y) {

boolean isRight = true;

if (x = 16 || x 1 || y = 16 | y 1) {

//System.out.println(“輸入錯誤,請從新輸入”);

isRight = false;

}

if (board[x][y].equals(“●”) || board[x][y].equals(“○”)) {

isRight = false;

}

return isRight;

}

//判斷誰贏了

public void whoWin(Games wz) {

// 從數組挨個查找找到某個類型的棋子就從該棋子位置向右,向下,斜向右下 各查找5連續的位置看是否為5個相同的

int xlabel;// 記錄第一次找到某個棋子的x坐標

int ylabel;// 記錄第一次找到某個棋子的y坐標

// ●○╋

// 判斷人是否贏了

for (int i = 0; i SIZE; i++) {

for (int j = 0; j SIZE; j++) {

if (board[i][j].equals(“○”)) {

xlabel = i;

ylabel = j;

// 橫向找 x坐標不變 y坐標以此加1連成字元串

String heng = “”;

if (i + 5 SIZE j + 5 SIZE) {

for (int k = j; k j + 5; k++) {

heng += board[i][k];

}

if (heng.equals(“○○○○○”)) {

System.out.println(roles+”贏了!您輸了!”);

System.exit(0);

}

// 向下判斷y不變 x逐增5 連成字元串

String xia = “”;

for (int l = j; l i + 5; l++) {

xia += board[l][j];

// System.out.println(xia);

}

if (xia.equals(“○○○○○”)) {

System.out.println(roles+”贏了!您輸了!”);

System.exit(0);

}

// 斜向右下判斷

String youxia = “”;

for (int a = 1; a = 5; a++) {

youxia += board[xlabel++][ylabel++];

}

if (youxia.equals(“○○○○○”)) {

System.out.println(roles+”贏了!您輸了!”);

System.exit(0);

}

}

}

}

}

// 判斷電腦是否贏了

for (int i = 0; i SIZE; i++) {

for (int j = 0; j SIZE; j++) {

if (board[i][j].equals(“●”)) {

xlabel = i;

ylabel = j;

// 橫向找 x坐標不變 y坐標以此加1連成字元串

String heng = “”;

if (j + 5 SIZE i + 5 SIZE) {

for (int k = j; k j + 5; k++) {

heng += board[i][k];

}

if (heng.equals(“●●●●●”)) {

System.out.println(roles+”贏輸了!您輸了!”);

System.exit(0);

}

// 向下判斷y不變 x逐增5 連成字元串

String xia = “”;

for (int l = i; l i + 5; l++) {

xia += board[l][ylabel];

// System.out.println(xia);

}

if (xia.equals(“●●●●●”)) {

System.out.println(roles+”贏了!您輸了!”);

System.exit(0);

}

// 斜向右下判斷

String youxia = “”;

for (int a = 1; a = 5; a++) {

youxia += board[xlabel++][ylabel++];

}

if (youxia.equals(“●●●●●”)) {

System.out.println(roles+”贏了!您輸了!”);

System.exit(0);

}

}

}

}

}

}

public static void main(String[] args) {

Games wz = new Games();

Scanner sc = new Scanner(System.in);

wz.initBoard();

wz.printBoard();

while (true) {

System.out.print(“請”+roles+”輸入X,Y坐標,必須在0-15範圍內,xy以空格隔開,輸入16 16結束程序”);

int x = sc.nextInt();

int y = sc.nextInt();

if (x == SIZE y == SIZE) {

System.out.println(“程序結束”);

System.exit(0);

}

if (x SIZE || x 0 || y SIZE | y 0) {

System.out.println(“輸入錯誤,請從新輸入”);

continue;

}

//如果roles是A玩家 就讓A玩家下棋,否則就讓B玩家下棋。

if (wz.board[x][y].equals(“╋”)roles.equals(“A玩家”)) {

wz.board[x][y] = “○”;

wz.printBoard();

//判斷輸贏

wz.whoWin(wz);

}else if(wz.board[x][y].equals(“╋”)roles.equals(“B玩家”)){

wz.board[x][y] = “●”;

wz.printBoard();

//判斷輸贏

wz.whoWin(wz);

} else {

System.out.println(“此處已經有棋子,從新輸入”);

continue;

}

if(roles.equals(“A玩家”)){

roles = “B玩家”;

}else if(roles.equals(“B玩家”)){

roles = “A玩家”;

}

}

}

}

java五子棋代碼

package day17.gobang;

import java.util.Arrays;

public class GoBangGame {

public static final char BLANK=’*’;

public static final char BLACK=’@’;

public static final char WHITE=’O’;

public static final int MAX = 16;

private static final int COUNT = 5;

//棋盤

private char[][] board;

public GoBangGame() {

}

//開始遊戲

public void start() {

board = new char[MAX][MAX];

//把二維數組都填充『*』

for(char[] ary: board){

Arrays.fill(ary, BLANK);

}

}

public char[][] getChessBoard(){

return board;

}

public void addBlack(int x, int y) throws ChessExistException{

//@

//char blank = ‘*’;

//System.out.println( x +”,” + y + “:” + board[y][x] + “,” + BLANK);

if(board[y][x] == BLANK){// x, y 位置上必須是空的才可以添棋子

board[y][x] = BLACK;

return;

}

throw new ChessExistException(“已經有棋子了!”);

}

public void addWhite(int x, int y)

throws ChessExistException{

if(board[y][x] == BLANK){// x, y 位置上必須是空的才可以添棋子

board[y][x] = WHITE;

return;

}

throw new ChessExistException(“已經有棋子了!”);

}

//chess 棋子:’@’/’O’

public boolean winOnY(char chess, int x, int y){

//先找到y方向第一個不是 blank的棋子

int top = y;

while(true){

if(y==0 || board[y-1][x]!=chess){

//如果y已經是棋盤的邊緣, 或者的前一個不是chess

//就不再繼續查找了

break;

}

y–;

top = y;

}

//向回統計所有chess的個數,如果是COUNT個就贏了

int count = 0;

y = top;

while(true){

if(y==MAX || board[y][x]!=chess){

//如果找到頭 或者 下一個子不是chess 就不再繼續統計了

break;

}

count++;

y++;

}

return count==COUNT;

}

//chess 棋子:’@’/’O’

public boolean winOnX(char chess, int x, int y){

//先找到x方向第一個不是 blank的棋子

int top = x;

while(true){

if(x==0 || board[y][x-1]!=chess){

//如果x已經是棋盤的邊緣, 或者的前一個不是chess

//就不再繼續查找了

break;

}

x–;

top = x;

}

//向回統計所有chess的個數,如果是COUNT個就贏了

int count = 0;

x = top;

while(true){

if(x==MAX || board[y][x]!=chess){

//如果找到頭 或者 下一個子不是chess 就不再繼續統計了

break;

}

count++;

x++;

}

return count==COUNT;

}

//chess 棋子:’@’/’O’

public boolean winOnXY(char chess, int x, int y){

//先找MAX向第一個不是 blank的棋子

int top = y;

int left = x;

while(true){

if(x==0 || y==0 || board[y-1][x-1]!=chess){

//如果x已經是棋盤的邊緣, 或者的前一個不是chess

//就不再繼續查找了

break;

}

x–;

y–;

top = y;

left=x;

}

//向回統計所有chess的個數,如果是COUNT個就贏了

int count = 0;

x = left;

y = top;

while(true){

if(x==MAX || y==MAX || board[y][x]!=chess){

//如果找到頭 或者 下一個子不是chess 就不再繼續統計了

break;

}

count++;

x++;

y++;

}

return count==COUNT;

}

//chess 棋子:’@’/’O’

public boolean winOnYX(char chess, int x, int y){

//先找到x方向第一個不是 blank的棋子

int top = y;

int left = x;

while(true){

if(x==MAX-1 || y==0 || board[y-1][x+1]!=chess){

//如果x已經是棋盤的邊緣, 或者的前一個不是chess

//就不再繼續查找了

break;

}

x++;

y–;

top = y;

left=x;

}

//向回統計所有chess的個數,如果是COUNT個就贏了

int count = 0;

x = left;

y = top;

while(true){

if(x==0 || y==MAX || board[y][x]!=chess){

//如果找到頭 或者 下一個子不是chess 就不再繼續統計了

break;

}

count++;

x–;

y++;

}

return count==COUNT;

}

public boolean whiteIsWin(int x, int y) {

//在任何一個方向上贏了,都算贏

return winOnY(WHITE, x, y) ||

winOnX(WHITE, x, y) ||

winOnXY(WHITE, x, y) ||

winOnYX(WHITE, x, y);

}

public boolean blackIsWin(int x, int y) {

return winOnY(BLACK, x, y) ||

winOnX(BLACK, x, y) ||

winOnXY(BLACK, x, y) ||

winOnYX(BLACK, x, y);

}

}

跪求JAVA五子棋源代碼

很sb的電腦五子棋:

import java.io.*;

import java.util.*;

public class Gobang {

// 定義一個二維數組來充當棋盤

private String[][] board;

// 定義棋盤的大小

private static int BOARD_SIZE = 15;

public void initBoard() {

// 初始化棋盤數組

board = new String[BOARD_SIZE][BOARD_SIZE];

// 把每個元素賦為”╋”,用於在控制台畫出棋盤

for (int i = 0; i BOARD_SIZE; i++) {

for (int j = 0; j BOARD_SIZE; j++) {

// windows是一行一行來列印的。坐標值為(行值, 列值)

board[i][j] = “╋”;

}

}

}

// 在控制台輸出棋盤的方法

public void printBoard() {

// 列印每個數組元素

for (int i = 0; i BOARD_SIZE; i++) {

for (int j = 0; j BOARD_SIZE; j++) {

// 列印數組元素後不換行

System.out.print(board[i][j]);

}

// 每列印完一行數組元素後輸出一個換行符

System.out.print(“\n”);

}

}

// 該方法處理電腦下棋:隨機生成2個整數,作為電腦下棋的坐標,賦給board數組。

private void compPlay() {

// 構造一個隨機數生成器

Random rnd = new Random();

// Random類的nextInt(int n))方法:隨機地生成並返回指定範圍中的一個 int 值,

// 即:在此隨機數生成器序列中 0(包括)和 n(不包括)之間均勻分布的一個int值。

int compXPos = rnd.nextInt(15);

int compYPos = rnd.nextInt(15);

// 保證電腦下的棋的坐標上不能已經有棋子(通過判斷對應數組元素只能是”╋”來確定)

while (board[compXPos][compYPos].equals(“╋”) == false) {

compXPos = rnd.nextInt(15);

compYPos = rnd.nextInt(15);

}

System.out.println(compXPos);

System.out.println(compYPos);

// 把對應的數組元素賦為”○”。

board[compXPos][compYPos] = “○”;

}

// 該方法用於判斷勝負:進行四次循環掃描,判斷橫、豎、左斜、右斜是否有5個棋連在一起

private boolean judgeWin() {

// flag表示是否可以斷定贏/輸

boolean flag = false;

// joinEle:將每一個橫/豎/左斜/右斜行中的元素連接起來得到的一個字元串

String joinEle;

// 進行橫行掃描

for (int i = 0; i BOARD_SIZE; i++) {

// 每掃描一行前,將joinEle清空

joinEle = “”;

for (int j = 0; j BOARD_SIZE; j++) {

joinEle += board[i][j];

}

// String類的contains方法:當且僅當該字元串包含指定的字元序列時,返回true。

if (joinEle.contains(“●●●●●”)) {

System.out.println(“您贏啦!”);

flag = true;

// 停止往下繼續執行,提前返回flag。

// 如果執行了這個return,就直接返回該方法的調用處;

// 不會再執行後面的任何語句,包括最後那個return語句。

// (而break僅僅是完全跳出這個for循環,還會繼續執行下面的for循環。)

return flag;

} else if (joinEle.contains(“○○○○○”)) {

System.out.println(“您輸啦!”);

flag = true;

// 提前返回flag

return flag;

}

}

// 進行豎行掃描

for (int i = 0; i BOARD_SIZE; i++) {

joinEle = “”;

for (int j = 0; j BOARD_SIZE; j++) {

// 豎行的元素是它們的列值相同

joinEle += board[j][i];

}

if (joinEle.contains(“●●●●●”)) {

System.out.println(“您贏啦!”);

flag = true;

return flag;

} else if (joinEle.contains(“○○○○○”)) {

System.out.println(“您輸啦!”);

flag = true;

return flag;

}

}

// 進行左斜行掃描

for (int i = -(BOARD_SIZE – 2); i BOARD_SIZE – 1; i++) {

joinEle = “”;

for (int j = 0; j BOARD_SIZE; j++) {

int line = i + j;

// 只截取坐標值沒有越界的點

if (line = 0 line 15) {

joinEle += board[j][line];

}

}

if (joinEle.contains(“●●●●●”)) {

System.out.println(“您贏啦!”);

flag = true;

return flag;

} else if (joinEle.contains(“○○○○○”)) {

System.out.println(“您輸啦!”);

flag = true;

return flag;

}

}

// 進行右斜行掃描

for (int i = 1; i 2 * (BOARD_SIZE – 1); i++) {

joinEle = “”;

for (int j = 0; j BOARD_SIZE; j++) {

int line = i – j;

if (line = 0 line 15) {

joinEle += board[j][line];

}

}

if (joinEle.contains(“●●●●●”)) {

System.out.println(“您贏啦!”);

flag = true;

return flag;

} else if (joinEle.contains(“○○○○○”)) {

System.out.println(“您輸啦!”);

flag = true;

// 最後這個return可省略

}

}

// 確保該方法有返回值(如果上麵條件都不滿足時)

return flag;

}

public static void main(String[] args) throws Exception, IOException {

Gobang gb = new Gobang();

gb.initBoard();

gb.printBoard();

// BufferedReader類:帶緩存的讀取器————從字元輸入流中讀取文本,並緩存字元。可用於高效讀取字元、數組和行。

// 最好用它來包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReader 和 InputStreamReader)。

// 下面構造一個讀取器對象。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// 定義輸入字元串

String inputStr = null;

// br.readLine():每當在鍵盤上輸入一行內容按回車,剛輸入的內容將被br(讀取器對象)讀取到。

// BufferedReader類的readLine方法:讀取一個文本行。

// 初始狀態由於無任何輸入,br.readLine()會拋出異常。因而main方法要捕捉異常。

while ((inputStr = br.readLine()) != null) {

// 將用戶輸入的字元串以逗號(,)作為分隔符,分隔成2個字元串。

// String類的split方法,將會返回一個拆分後的字元串數組。

String[] posStrArr = inputStr.split(“,”);

// 將2個字元串轉換成用戶下棋的坐標

int xPos = Integer.parseInt(posStrArr[0]);

int yPos = Integer.parseInt(posStrArr[1]);

// 校驗用戶下棋坐標的有效性,只能是數字,不能超出棋盤範圍

if (xPos 15 || xPos 1 || yPos 15 || yPos 1) {

System.out.println(“您下棋的坐標值應在1到15之間,請重新輸入!”);

continue;

}

// 保證用戶下的棋的坐標上不能已經有棋子(通過判斷對應數組元素只能是”╋”來確定)

// String類的equals方法:比較字元串和指定對象是否相等。結果返回true或false。

if (gb.board[xPos – 1][yPos – 1].equals(“╋”)) {

// 把對應的數組元素賦為”●”。

gb.board[xPos – 1][yPos – 1] = “●”;

} else {

System.out.println(“您下棋的點已有棋子,請重新輸入!”);

continue;

}

// 電腦下棋

gb.compPlay();

gb.printBoard();

// 每次下棋後,看是否可以斷定贏/輸了

if (gb.judgeWin() == false) {

System.out.println(“請輸入您下棋的坐標,應以x,y的格式:”);

} else {

// 完全跳出這個while循環,結束下棋

break;

}

}

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286364.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 03:47
下一篇 2024-12-23 03:47

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • g3log源代碼學習

    g3log是一個高性能C++日誌庫,其代碼十分精簡和可讀性強,本文將從3個方面詳細介紹g3log源代碼學習。 一、g3log源代碼整體架構 g3log的整體架構十分清晰,其中有3個…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29

發表回復

登錄後才能評論