java實(shí)現(xiàn)簡(jiǎn)單三子棋游戲
本文實(shí)例為大家分享了java實(shí)現(xiàn)簡(jiǎn)單三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
JOptionPane類(lèi)的使用
編寫(xiě)程序,實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲。在三子棋中,雙方在3×3的棋盤(pán)中輪流下棋,一方用*示,另一方用O表示。如果一方的3個(gè)棋子占據(jù)了同一行,同一列或者對(duì)角線(xiàn),則該方獲勝。如果棋盤(pán)已被棋子占滿(mǎn),但沒(méi)有一方獲勝則出現(xiàn)平局。在程序中,一方為用戶(hù),用戶(hù)在界面上輸入每次下棋的位置;另一方下棋的位置為隨機(jī)自動(dòng)生成。示例界面如圖所示。


提示:(1) 采用Scanner類(lèi)或者JOptionPane類(lèi)中提供的方法輸入,輸出采用System.out中的方法或JOptionPane類(lèi)提供的方法。 (2) 字符串處理可以使用String或StringBuffer類(lèi)。
實(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中為什么重寫(xiě)equals后需要重寫(xiě)hashCode
今天帶各位學(xué)習(xí)一下java中為什么重寫(xiě)equals后需要重寫(xiě)hashCode,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
Java聊天室之實(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-12
dubbo將異常轉(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ā)人員不用手工編寫(xiě)代理類(lèi),只要簡(jiǎn)單地指定一組接口及委托類(lèi)對(duì)象,便能動(dòng)態(tài)地獲得代理類(lèi)。下面小編和大家來(lái)一起學(xué)習(xí)一下吧2019-05-05

