java swing游戏

大家好! 哇,自从我在这里发布了东西以来已经有一段时间了! 我必须说我真的很想写东西,我保证我不会再陷入“作家的障碍”。 希望 ..最近两个月发生了很多事情,我有很多话要说。 但是在这篇文章中,我只是要发布我之前写的一个小应用程序。 它是一个TicTacToe游戏应用程序。 从这个特定的程序中学到的东西不多,但是我真的想摆脱这种僵局,因此我今天就发布这个。

我实际上写了这段代码是为了向我的一位朋友展示Java的一些非常酷的功能,这些朋友也以“ C ++”风格编写了相同的应用程序。 而且我的那个朋友甚至为计算机播放器开发了代码。 但是在完成他的代码后,他可悲地意识到了一个基本事实,即如果你玩的很好,你将无法在井字游戏中获胜! 呵呵 所以我没有冒险进入那个领域。 老实说,我对编写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。 其余代码不言自明。
为第二个播放器添加键盘支持是一件非常容易的事。 正如他们所说的…“我把它留作练习”! 哈哈哈 好吧,我真的希望我能花些时间,以便可以为该应用程序添加网络功能。

干杯,

史蒂夫。
-
我忘记附加将由应用程序使用的图像图标文件。 你可以在这里下载 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

java swing游戏

java swing游戏_Java Swing井字游戏相关推荐

  1. java射击游戏_Java Swing打猎射击游戏源码

    代码如下 package Game; import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; publi ...

  2. java开源游戏下载安装_开源java扫雷游戏,Swing版。

    开源java扫雷游戏,Swing版. xC6JnAIE.zip (60.07 KB) 开源java扫雷游戏,Swing版. 程序文件说明 文件 内容 备注 AboutFrame.java 程序&quo ...

  3. 【源码+教程】Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发

    今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~课程详细讲解了一个桌球游戏的编写思路和流程,即使你刚学Java没多久,也可以跟随该教程视频完成属于你自己的桌球游戏!同时,还可以加深和 ...

  4. java实现弹球游戏_Java swing版弹球游戏源代码下载

    package 弹球; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionL ...

  5. java swing背景_java swing 设置背景图片的方法一

    下面是偶写着玩的下测试的代码:(不好之处,请多多指教,大家共同进步 ) import java.awt.*; import javax.swing.*; public class ImageDemo ...

  6. java jframe教程_Java Swing JFrame窗口的实现

    1. 概述 官方JavaDocsApi: javax.swing.JFrame JFrame,窗口.JFrame 是一个可以独立显示的组件,一个窗口通常包含有标题.图标.操作按钮(关闭.最小化.最大化 ...

  7. java swing 图层_Java swing图层的问题

    我想详细了解swing的多层图层知识,看下面两个代码为什么出来的效果是不一样的?importjavax.swing.*;importjava.awt.*;publicclassMycanvas1{pu ...

  8. java jlabel用法_java swing JLabel详解以及使用示例

    JLabel 对象可以显示文本.图像或同时显示二者.可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐.默认情况下,标签在其显示区内垂直居中对齐.默认情况下,只显示文本的标签是开始边对 ...

  9. java 拼图游戏_Java 拼图游戏

    Java 拼图游戏 2014-07-01·WeaponX 11359 次浏览 ## 效果图 ![pintu.png](https://image.xsoftlab.net/baike/articleI ...

最新文章

  1. Visual Studio 2017 版本 15.5.5
  2. div+css实现表头固定内容滚动表格
  3. 【干货】值得收藏的 14 个 Linux 下 CPU 监控工具
  4. 神策数据CEO桑文锋:精准采集数据,走向智能化分析
  5. nexus 仓库类型_使用Nexus私服代理其他maven仓库(jitpack、jcenter)
  6. SQL2000中@@ERROR的使用提醒
  7. CentOS 7.3镜像挂载搭建本地yum源
  8. Spring Boot基础
  9. Python之数据分析(生成动态图像、示波器效果)
  10. 黑客是怎么攻击网站的
  11. 吃货必备手册,爱辣条就不能错过的零食地图
  12. QML用径向渐变做波纹效果
  13. 常用正则表达式,常用表单验证javascript代码
  14. AForge.NET Framework2.25--图像视觉处理学习(五)---颜色转换
  15. 关联规则挖掘(Apriori算法和FP-Growth算法)
  16. 在mysql中如何建立性别约束_在Access2010数据库中,要在表中建立“性别”字段,并按与要求用逻辑值表示,其数据类型应当是()_学小易找答案...
  17. 回收站清空了能恢复吗?回收站文件恢复的2种方法
  18. 嘿!快跟C菌一起来看看这周都更新了些啥
  19. 刘强东:B2C电商本质在于娇惯消费者
  20. 劳伦杰克逊写给姚明的情书:你的名字

热门文章

  1. 两个map中的数据,按照相同键,将所对应的值相加方法
  2. java实现人脸识别源码【含测试效果图】——ServiceImpl层(UserServiceImpl)
  3. sql server模糊查询、分组
  4. 2020蓝桥杯省赛---java---B---6(分类计数)
  5. 常数除以0的极限是什么_【极限】第四节 极限运算法则
  6. java 单例 生命周期_单例模式--- 声明周期托管方式
  7. 转:使用 Tkprof 分析 ORACLE 跟踪文件
  8. 哈儿小波分解和重构(降维和升维)实现算法
  9. idea资源包下创建资源包_根据谁创建资源授权资源
  10. javaserver_什么是JavaServer Faces(JSF)–(第2部分)