java swing游戏_Java Swing井字游戏

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

java swing游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

恭喜孙叫兽在CSDN年度之“战”中脱颖而出——喜提一等奖(小米手环+定制勋章)

导读&#xff1a;在这个多灾多难又充满惊喜注定不平凡的2020年&#xff0c;大家一起与CSDN共同跨过了艰难的疫情&#xff0c;共同经历烦躁的远程办公&#xff0c;一起为科比的逝世而难过&#xff0c;共同度过2020那所谓世界末日&#xff0c;充满青春&#xff0c;充满活力&#…

Block(Closure) Tips

使用 Block 的时候谨记以下几点&#xff1a; 1.Block类型&#xff1a;全局块&#xff08;Global Block&#xff09;和堆块&#xff08;Heap Block&#xff09;&#xff0c;以及栈块&#xff08;Stack Block&#xff09;。2.变量捕获: 默认无法修改变量&#xff0c;需要添加 __b…

【APICloud系列|33】通过程序循环数据集合的时候闭包加入imageCache方法

导读:一般实现的两种思路 1、通过程序循环数据集合的时候闭包加入imageCache方法。 2、通过递归数据集合实现 发现都不是我理想的效果,数据集合量较大的时候imageCache处理的时间比不用imageCache展示的时间要慢很多,展示会有明显延迟,最终采取以下方法 还是for循环将html拼…

Linux最危险的几个命令

Linux最危险的几个命令 Linux最危险的几个命令危险命令介绍删除文件和目录命令rmLinux 的 dd 命令mkfs 格式化硬盘分区shutdown> fileMore Linux最危险的几个命令 仅个人想法&#xff0c;会持续不间断更新和改进。 Linux系统中的命令最美妙也最危险。 如果几个操作系统&…

Java无处不在:使用DukeScript在任何地方运行一次编写

在相当长一段时间内&#xff0c;Java都未能兑现“一次编写&#xff0c;随处运行”的承诺。 DukeScript希望通过在跨平台应用程序中实现视图和逻辑的清晰分离来改变这种状况。 在本文中&#xff0c;一个简单的场景用于介绍DukeScript的基础。 多年来&#xff0c;Java Swing使开…

数据仓库建设中的数据建模方法(转)

简介&#xff1a; 本文的主要内容不是介绍现有的比较流行的主要行业的一些数据模型&#xff0c;而是将笔者在数据仓库建设项目中的一些经验&#xff0c;在这里分享给大家。希望帮助大家在数据仓库项目建设中总结出一套能够合乎目前业界规范的&#xff0c;满足大部分行业数据仓库…

PAT 1065 A+B and C (64bit) (20)

1065. AB and C (64bit) (20) 时间限制 100 ms内存限制 65536 kB代码长度限制 16000 B判题程序 Standard作者 HOU, QimingGiven three integers A, B and C in [-263, 263], you are supposed to tell whether AB > C. Input Specification: The first line of the input gi…

十大有用但又偏执的Java编程技术

经过一段时间的编码&#xff08;以我为例&#xff0c;大约20年左右&#xff0c;当您玩得开心时光飞逝&#xff09;&#xff0c;人们开始接受这些习惯。 因为&#xff0c;你知道... 任何可能出错的事情都会发生。 这就是为什么人们会采用“防御性编程”的原因&#xff0c;即偏执…

NGUI 3.5教程(二)Label 标签 (Hello world)、多行文本

写在前面&#xff1a; 本文将创建NGUI的第一个样例。依照编程传统&#xff0c;第一个样例&#xff0c;就是做一个Hello world 显示出来。NGUI。我们用Label来实现 。欢迎大家纠错、拍砖&#xff01;原创非常辛苦&#xff0c;如有转载&#xff0c;请注明出处&#xff1a;htt…

linux下php可以实现哪些功能,基于Linux的远程管理系统的设计与实现(PHP)

基于Linux的远程管理系统的设计与实现(PHP)来源&#xff1a;2BYSJ.cn 资料编号&#xff1a;2SJ260700 资料等级&#xff1a;★★★★★ %D7%CA%C1%CF%B1%E0%BA%C5%A3%BA2SJ260700以下是资料介绍,如需要完整的请充值下载. 本资料已审核过,确保内容和网页里介绍一致. 密 惠1.无需…

tostring 16进制_ToString:身份哈希码的十六进制表示形式

tostring 16进制我以前在方便的Apache Commons ToStringBuilder上写过博客&#xff0c;最近有人问我&#xff0c;在生成的String输出中出现的看似神秘的文本是什么构成的。 询问该问题的同事正确地推测出他正在查看的是哈希码&#xff0c;但与他的实例的哈希码不匹配。 我解释说…

前端工程师应该掌握哪些技能才方便找工作?

作为前端工程师,必须掌握到一定的技能才方便找工作,找高薪工作,你需要掌握这些技能。 高清思维导图下载:https://download.csdn.net/download/weixin_41937552/14752706 目录 HTML5+CSS3 移动Web网页开发

延迟分析中的案例研究:锁定与同步

特别是在这篇文章中&#xff0c;我们将讨论&#xff1a; java.concurrent.Lock创建的垃圾 比较锁与同步 如何以编程方式测量延迟 争用对锁和同步的影响 协调遗漏对延迟测试的影响 回到我最喜欢的主题之一&#xff0c;垃圾创建/分配。 有关此主题的更多详细信息&#xff0…

思维脑图——数据分析实战(最新版)

导读:数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。 在统计学领域,将数据分析划分为描述性统计分析、探索性数据分析以及验证性数据分析,探索性数据分析侧重于在数据之中发现新的特征,而验证…

java实现一个旅游网站

导读:采用JSP和Java语言以及html脚本语言,同时采用B/S模式,进行各个界面和每个功能的设计与实现,后台管理与设计选用了SQL Server 2005数据库,前台设计与后台管理相结合,共同完成各功能模块的功能。 目录 基本功能 项目结构 项目截图

【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)

来源&#xff1a;http://blog.csdn.net/zhaokaiqiang1992 更多&#xff1a;Android AutoLayout全新的适配方式&#xff0c; 堪称适配终结者 Android的屏幕适配一直以来都在折磨着我们这些开发者&#xff0c;本篇文章以Google的官方文档为基础&#xff0c;全面而深入的讲解了And…

精通推荐算法1:为什么需要推荐系统(系列文章,建议收藏)

作者简介&#xff1a; 腾讯算法研究员。硕士毕业于中国科学院大学。在阿里和腾讯工作多年&#xff0c;拥有丰富的搜索和推荐算法经验。CSDN博客专家&#xff0c;原创文章100篇。发表专利15个&#xff0c;其中已授权6个。 系列文章&#xff0c;欢迎关注 精通推荐算法1&#x…

spring 开发环境_设置Spring 3开发环境

spring 开发环境本教程简要说明了如何设置典型的环境来开发基于Spring的应用程序。 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外&#xff0c;本教程没有其他先决条件。 在教程中&#xff0c;我们将需要安装以下组件&#xff1a; Java 6 JDK更新26 适用于Jav…

Java+SSM+Oracle+Navicat+Eclipse+Microsoft Visio实现网上招聘系统

导读:整体基于B/S架构,采用MyBatis框架,运用Java中的Servlet、Jsp等关键技术,并结合Oracle数据库的使用,为招聘者和求职者搭建了一个高效、便利的网络平台。本系统分别为求职者和招聘者提供了信息注册功能,登录功能和信息维护功能。除此之外,求职者可以选择发布、撤销或…

友盟U-share sdk 分享的接入(支持Android及IOS)

导读:公司的原生开发的APP有块功能原来需要分享小程序到微信,现在改成分享成H5的形式,携带的参数不讨论,这里记录一下。 官方文档:https://developer.umeng.com/docs/128606/detail/129137 安卓分享H5:https://developer.umeng.com/docs/128606/detail/193883#h2-u5206u4E…