Java五子棋簡(jiǎn)單實(shí)現(xiàn)代碼舉例
一:案例要求:
實(shí)現(xiàn)一個(gè)控制臺(tái)下五子棋的程序。用一個(gè)二維數(shù)組模擬一個(gè)15*15路的五子棋棋盤,把每個(gè)元素賦值位“┼”可以畫出棋盤, “○”代表該交叉點(diǎn)下了一顆白棋子,“●”代表該交叉點(diǎn)下了一顆黑棋子。每次用戶輸入要下棋的坐標(biāo),然后程序顯示出下完后的棋盤,默認(rèn)黑子先行。(選做)
二:代碼:
package ceshi;
import java.util.Scanner;
public class test {
static Scanner sc =new Scanner(System.in);
public static void main(String[] args) {
char[][] qipan=new char[15][15];
origin(qipan);//初始化
menu(qipan);//打印棋盤
int flag=1;
int a=-10;
int [] a1;
char s;
while (true) {
a1=xia(qipan, flag);//下棋操作(flag)決定下黑棋還是白棋
s=flag==1?'●':'○';
a=judge(qipan,a1,s);//判斷下棋位置是否已有棋子和是否獲勝
if(a==1){
System.out.println("黑棋獲勝");break;
}
if(a==-1){
System.out.println("白棋獲勝");break;
}
flag*=-1;
}
}
private static int judge(char[][] qipan,int[] a1,char s) {//判斷下棋位置是否已有棋子和是否獲勝
int n=0,n1=1;
int f1=-1,f2=-1;
int sizelie=1,sizehang=1,sizexie=1,sizexie1=1;
int i=a1[0];
int j=a1[1];
while(n<5){//列
if(i<=0){
f1=0;
} else if (i==14) {
f2=0;
}
if(f1!=0){
if(qipan[i+n1][j]==s){
sizelie++;
}else{
f1=0;
}
}
if(f2!=0){
if(qipan[i-n1][j]==s){
sizelie++;
}else{
f2=0;
}
}
if(sizelie>=5){
return 1;
}
n++;n1++;
}
n=0;n1=1;
f1=f2=-1;
while(n<5){//行
if(j<=0){
f1=0;
} else if (j==14) {
f2=0;
}
if(f1!=0){
if(qipan[i][j-n1]==s){
sizehang++;
}else{
f1=0;
}
}
if(f2!=0){
if(qipan[i][j+n1]==s){
sizehang++;
}else{
f2=0;
}
}
if(sizehang>=5){
return 1;
}
n++;n1++;
}
n=0;n1=1;
f1=f2=-1;
while(n<5){//斜著
if(j<=0||i==0){
f1=0;
} else if (j==14||i==14) {
f2=0;
}
if(f1!=0){
if(qipan[i-n1][j-n1]==s){
sizexie++;
}else{
f1=0;
}
}
if(f2!=0){
if(qipan[i+n1][j+n1]==s){
sizexie++;
}else{
f2=0;
}
}
if(sizexie>=5){
return 1;
}
n++;n1++;
}
n=0;n1=1;
f1=f2=-1;
while(n<5){//斜著fan
if(j==14||i==0){//右上
f1=0;
} else if (j==0||i==14) {
f2=0;
}
if(f1!=0){
if(qipan[i-n1][j+n1]==s){
sizexie1++;
}else{
f1=0;
}
}
if(f2!=0){
if(qipan[i+n1][j-n1]==s){
sizexie1++;
}else{
f2=0;
}
}
if(sizexie1>=5){
return 1;
}
n++;n1++;
}
return 0;
}
private static int[] xia(char[][] qipan,int flag) {//下棋操作(flag)決定下黑棋還是白棋
char s=flag==1?'●':'○';
if(s=='●'){
System.out.print("請(qǐng)選擇'●'的坐標(biāo):");
}else {
System.out.print("請(qǐng)選擇'○'的坐標(biāo):");
}
int x=0,y=0;
while (true) {
x=sc.nextInt();
y=sc.nextInt();
if(qipan[x][y]!='┼'){
System.out.println("該位置已有棋子,請(qǐng)重新輸入:");
}else{
break;
}
}
qipan[x][y]=s;
menu(qipan);
int[] a={x,y};
return a;
}
private static void menu(char[][] qipan) {
System.out.print(" ");
for (int i = 0; i < 15; i++) {
System.out.print((i+1)+" ");
}
System.out.println();
for(int i=0;i<15;i++){
if(i<9)
System.out.print(i+1+" ");
else
System.out.print(i+1+" ");
for(int j=0;j<15;j++){
System.out.print(qipan[i][j]+" ");
}
System.out.println();
}
}
private static void origin(char[][] qipan) {//初始化
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
qipan[i][j]='┼';
}
}
}
}
三:結(jié)果:

總結(jié)
到此這篇關(guān)于Java五子棋簡(jiǎn)單實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java五子棋內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?security?oauth2以redis作為tokenstore及jackson序列化失敗問題
這篇文章主要介紹了Spring?security?oauth2以redis作為tokenstore及jackson序列化失敗問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教<BR>2024-04-04
java實(shí)現(xiàn)檢測(cè)Linux網(wǎng)絡(luò)狀態(tài)(附源碼)
實(shí)時(shí)監(jiān)控服務(wù)器網(wǎng)絡(luò)狀態(tài)是保證業(yè)務(wù)高可用性和可靠性的重要環(huán)節(jié),本文主要介紹了如何設(shè)計(jì)并實(shí)現(xiàn)一個(gè)高性能,可擴(kuò)展,支持事件訂閱與周期采樣的Linux?網(wǎng)絡(luò)狀態(tài)檢測(cè)工具,需要的可以了解下2025-06-06
Springcloud Stream消息驅(qū)動(dòng)工具使用介紹
SpringCloud Stream由一個(gè)中間件中立的核組成,應(yīng)用通過SpringCloud Stream插入的input(相當(dāng)于消費(fèi)者consumer,它是從隊(duì)列中接收消息的)和output(相當(dāng)于生產(chǎn)者producer,它是發(fā)送消息到隊(duì)列中的)通道與外界交流2022-09-09
java后臺(tái)實(shí)現(xiàn)支付寶對(duì)賬功能的示例代碼
這篇文章主要介紹了java后臺(tái)實(shí)現(xiàn)支付寶對(duì)賬功能的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
jedis獲取redis中二進(jìn)制圖片轉(zhuǎn)Base64方式
這篇文章主要介紹了jedis獲取redis中二進(jìn)制圖片轉(zhuǎn)Base64方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
redis 使用lettuce 啟動(dòng)內(nèi)存泄漏錯(cuò)誤的解決方案
這篇文章主要介紹了redis 使用lettuce 啟動(dòng)內(nèi)存泄漏錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Java如何讀寫Properties配置文件(Properties類)
這篇文章主要介紹了Java如何讀寫Properties配置文件(Properties類),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
Springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析
這篇文章主要介紹了springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

