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)文章
關(guān)于JAVA經(jīng)典算法40題(超實(shí)用版)
本篇文章小編為大家介紹一下,關(guān)于JAVA經(jīng)典算法40題(超實(shí)用版),有需要的朋友可以參考一下2013-04-04Java基礎(chǔ)教程之獲取操作系統(tǒng)及瀏覽器信息
最近在開發(fā)中需要從request中獲取操作系統(tǒng),瀏覽器及瀏覽器版本信息,所以下面這篇文章主要給的大家介紹了關(guān)于Java基礎(chǔ)教程之獲取操作系統(tǒng)及瀏覽器信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10深入解析java中的靜態(tài)代理與動(dòng)態(tài)代理
本篇文章是對(duì)java中的靜態(tài)代理與動(dòng)態(tài)代理進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10IDEA 連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
這篇文章主要介紹了IDEA 連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Java INPUTSTREAM如何實(shí)現(xiàn)重復(fù)使用
這篇文章主要介紹了Java INPUTSTREAM如何實(shí)現(xiàn)重復(fù)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10SpringBoot實(shí)現(xiàn)接口返回?cái)?shù)據(jù)脫敏的代碼示例
在當(dāng)今的信息化時(shí)代,數(shù)據(jù)安全尤為重要,接口返回?cái)?shù)據(jù)脫敏是一種重要的數(shù)據(jù)保護(hù)手段,可以防止敏感信息通過(guò)接口返回給客戶端,本文旨在探討如何在SpringBoot應(yīng)用程序中實(shí)現(xiàn)接口返回?cái)?shù)據(jù)脫敏,需要的朋友可以參考下2024-07-07