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"+"恭喜你,你贏(yíng)了!");
? ? ? ? ? ? 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)文章
20秒教你學(xué)會(huì)java?List函數(shù)排序操作示例
這篇文章主要為大家介紹了20秒教你學(xué)會(huì)List函數(shù)排序操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
java.util.ArrayDeque類(lèi)使用方法詳解
這篇文章主要介紹了java.util.ArrayDeque類(lèi)使用方法,java.util.ArrayDeque類(lèi)提供了可調(diào)整大小的陣列,并實(shí)現(xiàn)了Deque接口,感興趣的小伙伴們可以參考一下2016-03-03
基于Java實(shí)現(xiàn)緩存Cache的深入分析
本篇文章是對(duì)Java實(shí)現(xiàn)緩存Cache進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
在Spring boot的項(xiàng)目中使用Junit進(jìn)行單體測(cè)試
今天小編就為大家分享一篇關(guān)于spring boot使用Junit進(jìn)行測(cè)試,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
詳解Spring Cloud Gateway 數(shù)據(jù)庫(kù)存儲(chǔ)路由信息的擴(kuò)展方案
這篇文章主要介紹了詳解Spring Cloud Gateway 數(shù)據(jù)庫(kù)存儲(chǔ)路由信息的擴(kuò)展方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
mybatis批量插入,批量更新以及null值問(wèn)題的解決
這篇文章主要介紹了mybatis批量插入,批量更新以及null值問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Java實(shí)現(xiàn)WebSocket客戶(hù)端詳細(xì)步驟
這篇文章主要介紹了如何使用Java實(shí)現(xiàn)一個(gè)功能全面的WebSocket客戶(hù)端,包括引入依賴(lài)、創(chuàng)建客戶(hù)端類(lèi)、實(shí)現(xiàn)連接、發(fā)送和接收消息、處理復(fù)雜消息、實(shí)現(xiàn)心跳機(jī)制、重連策略、異常處理、線(xiàn)程安全的隊(duì)列以及測(cè)試和調(diào)試,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
springmvc不進(jìn)入Controller導(dǎo)致404的問(wèn)題
這篇文章主要介紹了springmvc不進(jìn)入Controller導(dǎo)致404的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

