java實(shí)現(xiàn)簡(jiǎn)單三子棋游戲
本文實(shí)例為大家分享了java實(shí)現(xiàn)簡(jiǎn)單三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
JOptionPane類的使用
編寫程序,實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲。在三子棋中,雙方在3×3的棋盤中輪流下棋,一方用*示,另一方用O表示。如果一方的3個(gè)棋子占據(jù)了同一行,同一列或者對(duì)角線,則該方獲勝。如果棋盤已被棋子占滿,但沒(méi)有一方獲勝則出現(xiàn)平局。在程序中,一方為用戶,用戶在界面上輸入每次下棋的位置;另一方下棋的位置為隨機(jī)自動(dòng)生成。示例界面如圖所示。
提示:(1) 采用Scanner類或者JOptionPane類中提供的方法輸入,輸出采用System.out中的方法或JOptionPane類提供的方法。 (2) 字符串處理可以使用String或StringBuffer類。
實(shí)現(xiàn)代碼:
import java.util.Random; import javax.swing.*; public class Main { ? ?public static boolean check(StringBuffer st,int pos){ ? //檢查pos上的棋子有沒(méi)有獲勝 ? ? ? char des=st.charAt(pos); ? ? ? char []s=new char[10]; ? ? ? for(int i=1;i<=9;i++) s[i]=st.charAt(i); ? ? ? if((s[3]==des&&s[6]==des&&s[9]==des)|| ? ? ? (s[1]==des&&s[4]==des&&s[7]==des)|| ? ? ? (s[2]==des&&s[5]==des&&s[8]==des)|| ? ? ? (s[1]==des&&s[3]==des&&s[2]==des)|| ? ? ? (s[6]==des&&s[4]==des&&s[5]==des)|| ? ? ? (s[9]==des&&s[7]==des&&s[8]==des)|| ? ? ? (s[1]==des&&s[5]==des&&s[9]==des)|| ? ? ? (s[3]==des&&s[5]==des&&s[7]==des)) return true; ? ? ? return false; ? ?} ? ?public static void main(String[] args) { ? ? ? StringBuffer s= new StringBuffer("0123456789"); ? ? ? String tp; ? ? ? for(int i=0;i<=5;){ ? ? ? ? ?int k=-1; ? ? ? ? ?tp=JOptionPane.showInputDialog("---------------------------\n| ? ?"+s.charAt(1)+" ? ?| ? ?"+s.charAt(2)+" ? ?| ? ?"+s.charAt(3)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(4)+" ? ?| ? ?"+s.charAt(5)+" ? ?| ? ?"+s.charAt(6)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(7)+" ? ?| ? ?"+s.charAt(8)+" ? ?| ? ?"+s.charAt(9)+" ? ?|\n---------------------------\n"+"請(qǐng)輸入落子位置(1~9):"); ? ? ? ? ?boolean f=true; ? ? ? ? ?if(tp.length()==1){ ? ? ? ? ? ? k=tp.charAt(0)-'0'; ? ? ? ? ? ? if(k>=1&&k<=9){ ? ? ? ? ? ? ? ?if(s.charAt(k)>='1'&&s.charAt(k)<='9'){ ? ? ? ? ? ? ? ? ? i++; ? ? ? ?//有效下棋 ? ? ? ? ? ? ? ? ? f=false; ? ? ? ? ? ? ? ?} ? ? ? ? ? ? } ? ? ? ? ?} ? ? ? ? ?while(f){ ? ? ? ? ? ? tp=JOptionPane.showInputDialog("---------------------------\n| ? ?"+s.charAt(1)+" ? ?| ? ?"+s.charAt(2)+" ? ?| ? ?"+s.charAt(3)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(4)+" ? ?| ? ?"+s.charAt(5)+" ? ?| ? ?"+s.charAt(6)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(7)+" ? ?| ? ?"+s.charAt(8)+" ? ?| ? ?"+s.charAt(9)+" ? ?|\n---------------------------\n"+"輸入錯(cuò)誤,請(qǐng)重新輸入落子的位置:"); ? ? ? ? ? ? if(tp.length()==1){ ? ? ? ? ? ? ? ?k=tp.charAt(0)-'0'; ? ? ? ? ? ? ? ?if(k>=1&&k<=9){ ? ? ? ? ? ? ? ? ? if(s.charAt(k)>='1'&&s.charAt(k)<='9'){ ? ? ? ? ? ? ? ? ? ? ?i++; ? ? ? ?//有效下棋 ? ? ? ? ? ? ? ? ? ? ?f=false; ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ?} ? ? ? ? ? ? } ? ? ? ? ?} ? ? ? ? ?//在k處落子 ? ? ? ? ?s.replace(k,k+1,"O"); ? ? ? ? ?if(check(s,k)){ ? ? ? ? ? ? //獲勝 ? ? ? ? ? ? JOptionPane.showMessageDialog(null,"---------------------------\n| ? ?"+s.charAt(1)+" ? ?| ? ?"+s.charAt(2)+" ? ?| ? ?"+s.charAt(3)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(4)+" ? ?| ? ?"+s.charAt(5)+" ? ?| ? ?"+s.charAt(6)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(7)+" ? ?| ? ?"+s.charAt(8)+" ? ?| ? ?"+s.charAt(9)+" ? ?|\n---------------------------\n"+"恭喜你,你贏了!"); ? ? ? ? ? ? break; ? ? ? ? ?} ? ? ? ? ?//電腦隨機(jī)落子 ? ? ? ? ?if(i==5) { ? ? ? ? ? ? JOptionPane.showMessageDialog(null,"---------------------------\n| ? ?"+s.charAt(1)+" ? ?| ? ?"+s.charAt(2)+" ? ?| ? ?"+s.charAt(3)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(4)+" ? ?| ? ?"+s.charAt(5)+" ? ?| ? ?"+s.charAt(6)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(7)+" ? ?| ? ?"+s.charAt(8)+" ? ?| ? ?"+s.charAt(9)+" ? ?|\n---------------------------\n"+"平局!"); ? ? ? ? ? ? break; ? ? ? ? ?} ? ? ? ? ?Random rs=new Random(); ? ? ? ? ?k=rs.nextInt(9)+1; ? ? ? ? ?while(k<1||k>9||s.charAt(k)=='*'||s.charAt(k)=='O') k=rs.nextInt(9)+1; ? ? ? ? ?s.replace(k,k+1,"*"); ? ? ? ? ?if(check(s,k)){ ? ? ? ? ? ? //電腦勝 ? ? ? ? ? ? JOptionPane.showMessageDialog(null,"---------------------------\n| ? ?"+s.charAt(1)+" ? ?| ? ?"+s.charAt(2)+" ? ?| ? ?"+s.charAt(3)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(4)+" ? ?| ? ?"+s.charAt(5)+" ? ?| ? ?"+s.charAt(6)+" ? ?|\n---------------------------\n| ? ?"+s.charAt(7)+" ? ?| ? ?"+s.charAt(8)+" ? ?| ? ?"+s.charAt(9)+" ? ?|\n---------------------------\n"+"你輸了,再接再厲吧!"); ? ? ? ? ? ? break; ? ? ? ? ?} ? ? ? } ? ?} }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺談java中為什么重寫equals后需要重寫hashCode
今天帶各位學(xué)習(xí)一下java中為什么重寫equals后需要重寫hashCode,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05Java聊天室之實(shí)現(xiàn)使用Socket傳遞音頻
這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)易聊天室之使用Socket實(shí)現(xiàn)傳遞音頻功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下2022-10-10解讀CommandLineRunner和@PostConstruct區(qū)別與應(yīng)用場(chǎng)景
這篇文章主要介紹了解讀CommandLineRunner和@PostConstruct區(qū)別與應(yīng)用場(chǎng)景,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter
這篇文章主要介紹了dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03深入學(xué)習(xí)Java 動(dòng)態(tài)代理
Java 動(dòng)態(tài)代理機(jī)制的出現(xiàn),使得 Java 開(kāi)發(fā)人員不用手工編寫代理類,只要簡(jiǎn)單地指定一組接口及委托類對(duì)象,便能動(dòng)態(tài)地獲得代理類。下面小編和大家來(lái)一起學(xué)習(xí)一下吧2019-05-05