Java Swing井字游戲

大家好! 哇,自從我在這里發布了東西以來已經有一段時間了! 我必須說我真的很想寫東西,而且我保證我不會再陷入“作家的障礙”。 希望 :) ..最近兩個月發生了很多事情,我有很多話要說。 但是在這篇文章中,我只是要發布我之前寫的一個小應用程序。 它是一個TicTacToe游戲應用程序。 從這個特定的程序中學到的東西不多,但是我真的想擺脫這種僵局,因此我今天就發布這個。

我實際上寫了這段代碼是為了向我的一位朋友展示Java的一些非常酷的功能,這些朋友也以“ C ++”風格編寫了相同的應用程序。 而且我的那個朋友甚至為計算機播放器開發了代碼。 但是在完成他的代碼后,他可悲地意識到了一個基本事實,即如果你玩的很好,你將無法在井字游戲中獲勝! 呵呵 :D 所以我沒有冒險進入那個領域。 老實說,我對編寫AI應用程序并不感興趣。 但由于我喜歡網絡編程,因此我想到了向該應用程序添加網絡多人游戲功能。 但是很遺憾,我還沒有時間這樣做。
Anywaiz應用程序的工作方式如下-游戲啟動后即自動啟動,狀態欄指示現在輪到哪個玩家,剩下的只是簡單的玩法! 在游戲結束時,該應用程序將自動重置。 進入代碼。

import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.util.logging.Logger;/**
* TicTacToe Application
* @author Steve Robinson
* @version 1.0
*/class TicTacToeFrame extends JFrame
{JButton [][] buttons= new JButton[3][3];JTextField statusBar;GamePanel panel;Integer turn;GameListener listener=new GameListener();Integer count;public TicTacToeFrame(){setLayout(new BorderLayout());panel=new GamePanel();add(panel,BorderLayout.CENTER);statusBar=new JTextField("Player1's Turn");statusBar.setEditable(false);add(statusBar,BorderLayout.SOUTH);setTitle("Tic Tac Toe!");setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(400,400,300,300);}class GamePanel extends JPanel{public GamePanel(){setLayout(new GridLayout(3,3));turn =1;count=0;for(int i=0;i<3;i++)for(int j=0;j<3;j++)   {buttons[i][j]=new JButton();buttons[i][j].putClientProperty("INDEX", new Integer[]{i,j});buttons[i][j].putClientProperty("OWNER", null);buttons[i][j].addActionListener(listener);add(buttons[i][j]);}}}class GameListener implements ActionListener{public void actionPerformed(ActionEvent e){count++;JButton b=(JButton)e.getSource();Integer[]index=(Integer[]) b.getClientProperty("INDEX");//System.out.println(turn); //turn                  //   //System.out.println("["+index[0]+"]"+"["+index[1]+"]");         //b.putClientProperty("OWNER", turn);Icon ico=new ImageIcon(turn.toString()+".gif");b.setIcon(ico);b.setEnabled(false);boolean result=checkVictoryCondition(index);if(result){JOptionPane.showMessageDialog(null, "Player "+turn.toString()+" Wins");initComponents();}else{if(turn==1){turn=2;statusBar.setText("Player2's Turn");}else{turn=1;statusBar.setText("Player1's Turn");}}if(count==9){JOptionPane.showMessageDialog(null, "Match is a draw!");initComponents();}}Integer getOwner(JButton b){return (Integer)b.getClientProperty("OWNER");}//PrintButtonMap for Diagnosticsvoid printbuttonMap(Integer [][]bMap){for(int i=0;i    for(int j=0;j     System.out.print(bMap[i][j]+" ");System.out.println("");}}boolean checkVictoryCondition(Integer [] index){/*Integer[][]buttonMap=new Integer[][] {{ getOwner(buttons[0][0]),getOwner(buttons[0][1]),getOwner(buttons[0][2])},{ getOwner(buttons[1][0]),getOwner(buttons[1][1]),getOwner(buttons[1][2])},{ getOwner(buttons[2][0]),getOwner(buttons[2][1]),getOwner(buttons[2][2])}};printbuttonMap(buttonMap); */Integer a=index[0];Integer b=index[1];int i;//check rowfor(i=0;i<3;i++)  {if(getOwner(buttons[a][i])!=getOwner(buttons[a][b]))break;}if(i==3)return true;//check columnfor(i=0;i<3;i++)  {if(getOwner(buttons[i][b])!=getOwner(buttons[a][b]))break;}if(i==3)return true;//check diagonalif((a==2&&b==2)||(a==0&&b==0)||(a==1&&b==1)||(a==0&&b==2)||(a==2&&b==0)){//left diagonalfor(i=0;i     if(getOwner(buttons[i][i])!=getOwner(buttons[a][b]))break;if(i==3)return true;//right diagonalif((getOwner(buttons[0][2])==getOwner(buttons[a][b]))&&(getOwner(buttons[1][1])==getOwner(buttons[a][b]))&&(getOwner(buttons[2][0])==getOwner(buttons[a][b])))return true;}return false;}}void initComponents(){for(int i=0;i<3;i++)   for(int j=0;j<3;j++)  {buttons[i][j].putClientProperty("INDEX", new Integer[]{i,j});buttons[i][j].putClientProperty("OWNER",null);buttons[i][j].setIcon(null);buttons[i][j].setEnabled(true);turn=1;count=0;statusBar.setText("Player1's Turn");}}}class TicTacToe {public static void main(String[] args) {EventQueue.invokeLater(new Runnable(){public void run(){TicTacToeFrame frame=new TicTacToeFrame();}});}}

該代碼非常簡單。 香港專業教育學院在按鈕中使用兩個屬性來存儲一些信息,用于檢查獲勝條件。 一個是“ OWNER”屬性,它指示哪個用戶當前擁有該正方形,而“ INDEX”屬性則指示該正方形在網格中的索引(即[1,1],[1,2]…等)一個正方形,將更新OWNER屬性,并使用所有按鈕的OWNER屬性檢查victoryCondition。 其余代碼不言自明。
為第二個播放器添加鍵盤支持是一件非常容易的事。 正如他們所說的…“我把它留作練習”! 哈哈哈 :D 好吧,我真的希望我能花些時間,以便可以為該應用程序添加網絡功能。

干杯,

史蒂夫。
-
我忘記附加將由應用程序使用的圖像圖標文件。 你可以在這里下載 http://www.mediafire.com/?d7d93v2342dxind 只需將內容提取到包含代碼的文件夾中即可。 感謝我的朋友“ Gur Png”告訴我這件事。

參考:來自我們JCG合作伙伴的 Java TicTacToe ? Footy'n'Tech博客上的Steve Robinson。


翻譯自: https://www.javacodegeeks.com/2012/02/java-swing-tic-tac-toe.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java小青蛙跳臺街,算法-青蛙跳臺階詳解

/*[跳臺階][題目]一只青蛙一次可以跳上1級臺階&#xff0c;也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。[解析]與斐波那契數列的求解過程類似。典型的動態規劃問題。對于第 n 級臺階&#xff0c;我們可以從第 n-1 級臺階一步到達&#xff0c;也可以從第 n-2 級…

apache服務器配置Net的實踐

前置&#xff1a; 在xp系統中&#xff0c;打補丁之類或啥子操作引起或多或少的問題&#xff0c;最終導致iis不能使用&#xff1b; 不想裝系統...忍著... 最近突發事件導致&#xff0c;需要摸一下apache服務器處理&#xff0c;好吧&#xff0c;那就搜索下吧..... 目標&#xff1…

TestNG或JUnit

多年以來&#xff0c;無論何時使用Java代碼進行單元測試&#xff0c;我始終會回到TestNG。 每當我拿起TestNG時&#xff0c;人們都問我為什么要繼續使用TestNG&#xff0c;尤其是默認開發環境&#xff08;例如Eclipse或Maven&#xff09;提供的JUnit時。 繼續進行同樣的戰斗&am…

event php,PHP event 事件機制

/** PHP 事件機制*/class baseClass{private $_e;public function __set($name,$value){if( strncasecmp($name,"on",2) 0 ){if(!isset($this->_e[$name]))$this->_e[$name] array();return array_push($this->_e[$name] , $value);}}public function __g…

Android JNI編程(五)——C語言的靜態內存分配、動態內存分配、動態創建數組...

版權聲明&#xff1a;本文出自阿鐘的博客&#xff0c;轉載請注明出處:http://blog.csdn.net/a_zhon/。 目錄(?)[] 一&#xff1a;什么是靜態內存什么又是動態內存呢&#xff1f; 靜態內存&#xff1a;是指在程序開始運行時由編譯器分配的內存&#xff0c;它的分配是在程序開始…

Visual Studio-C#-20160411

函數的四個要素包括&#xff1a;名稱&#xff0c;輸入&#xff0c;輸出&#xff0c;加工 注釋的方式&#xff1a;//只注釋一行&#xff1b;/**/注釋一段區域&#xff1b; namespace ConsoleApplication6 ---------//命名空間{ class Program ---------------------------//類…

配置MyBatis 3

MyBatis是一個非常流行且也是最有效的SQL映射框架。 MyBatis可用于Java和.net語言。 MyBatis并不是Hibernate的真正替代品&#xff0c;但是我們可以使用該框架來減少MyBatis提供的高效和高性能的數據庫相關代碼。 本教程將向您展示使用數據庫配置MyBatis 3的步驟。 MyBatis 3支…

php獲取src,PHP讀取文件

本文概述PHP提供了各種功能來從文件讀取數據。有多種功能允許你讀取所有文件數據, 逐行讀取數據以及逐字符讀取數據。下面提供了可用的PHP文件讀取功能。fread()fgets()fgetc()PHP讀取文件-fread()PHP fread()函數用于讀取文件的數據。它需要兩個參數&#xff1a;文件資源和文件…

HDOJ(HDU) 1406 完數

Problem Description 完數的定義&#xff1a;如果一個大于1的正整數的所有因子之和等于它的本身&#xff0c;則稱這個數是完數&#xff0c;比如6&#xff0c;28都是完數&#xff1a;6123&#xff1b;28124714。 本題的任務是判斷兩個正整數之間完數的個數。 Input 輸入數據包…

Allegro padstack

在ALLEGRO中&#xff0c;建立PCB封裝是一件挺復雜的事&#xff0c;而要建立FOOTPRINT&#xff0c;首先要有一個PAD&#xff0c;所以就要新建PADSTACK。 焊盤可以分兩種&#xff0c;表貼焊盤和通孔焊盤&#xff0c;表貼焊盤結構相對簡單&#xff0c;下面首先分析表貼焊盤的成分&…

java中datetime類型轉換,Java中日期格式和其他類型轉換詳解

涉及的核心類&#xff1a;Date類、SimpleDateFormat類、Calendar類一、Date型與long型Date型轉換為long型Date date new Date();//取得當前時間Date類型long date2long date.getTime();//Date轉longlong型轉換為Date型long cur System.currentTimeMills();//取得當前時間lon…

GWT MVP變得簡單

GWT Model-View-Presenter是用于大規模應用程序開發的設計模式。 它源于MVC&#xff0c;它在視圖和邏輯之間進行劃分&#xff0c;并有助于創建結構良好&#xff0c;易于測試的代碼。 為了幫助像我這樣的懶惰開發人員&#xff0c;我研究了如何減少使用聲明式UI時要編寫的類和接口…

php如何編寫通信協議,定制通訊協議

## 如何定制協議實際上制定自己的協議是比較簡單的事情。簡單的協議一般包含兩部分:* 區分數據邊界的標識* 數據格式定義## 一個例子### 協議定義這里假設區分數據邊界的標識為換行符"\n"(注意請求數據本身內部不能包含換行符)&#xff0c;數據格式為Json&#xff0c…

今年計劃要看的書全部備齊

上個月購買的書《今年計劃看的書其中幾本》 http://www.cnblogs.com/insus/p/5325513.html 昨天購買的書回來了&#xff0c;今年計劃要看的書全部備齊。《MongoDB》&#xff0c;《深入理解Bootstarp》和《ASP.NETSignalR編程實踐》…… 轉載于:https://www.cnblogs.com/in…

Codevs 2756 樹上的路徑

2756 樹上的路徑 時間限制: 3 s    空間限制: 128000 KB    題目等級 : 大師 Master題目描述 Description給出一棵樹&#xff0c;求出最小的k&#xff0c;使得&#xff0c;且在樹中存在路徑P&#xff0c;使得k> S 且 k <E. &#xff08;k為路徑P上的邊的權值和&a…

圖形教程

眾所周知&#xff0c;我們可以借助Java庫制作游戲&#xff0c;這些庫為我們提供制作游戲所需的圖形。 因此&#xff0c;今天我將開始一個關于Java圖形的非常新的部分。 我之前曾發表過有關如何制作所得稅計算器的文章 。 首先要滿足一些先決條件&#xff1a; -您應該對Java語法…

文件上傳預覽

<fieldset><legend>使用readAsDataUrl()方法預覽圖片</legend><input type"file" name"fileUpload" id"fileUpload" onchange"filePrevImg(this.files);" multiple"true" /><ul id"prevUpl…

c++強制類型轉換:dynamic_cast、const_cast 、static_cast、reinterpret_cast

一、介紹 dynamic_cast: 通常在基類和派生類之間轉換時使用const_cast: 主要針對const和volatile的轉換static_cast: 一般的轉換(no run-time check)通常&#xff0c;如果你不知道該用哪個&#xff0c;就用這個。 reinterpret_cast: 用于進行沒有任何關聯之間的轉換&…

K8S Pod Terminating/Unknown故障排查

一、pod異常出現現象 優雅終止周期(Graceful termination period): 當pod被刪除時&#xff0c;會進入"Terminating"狀態&#xff0c;等待容器優雅關閉。如果容器關閉所需時間超過默認期限(默認30秒)&#xff0c;則pod將保持在"Terminating"狀態。 Finalize…

矩陣指數 matlab,矩陣指數 - MATLAB Simulink Example - MathWorks 中國

方法 1&#xff1a;加權平方expmdemo1 是以下著作中算法 11.3.1 的實現&#xff1a;Golub, Gene H. and Charles Van Loan.Matrix Computations, 3rd edition.Baltimore, MD:Johns Hopkins University Press, 1996.% Scale A by power of 2 so that its norm is < 1/2 .[f,e…