五子棋算是我学习java一个月以来第一次做的一个项目,也算是小游戏。开始觉得五子棋遥不可及,后来在老师的指导下也一步步攻克难关,做了出来。
首先是最初的界面实现。用一个再寻常不过的JFrame窗体,并常规的设置属性。
不过在勾画棋盘时,我们第一次用到了对界面的重绘。代码是public void paint (Graphics g){}这个方法是重写原来默认的JFrame自带paint方法,在此方法中用循环的方式,画出一条条线,并需要精确计算,以保证能画出15*15的棋盘。当然重绘的不仅只有棋盘而已,在后来每下一个棋子,在最小化JFrame窗体界面后又会这些下的棋子会自动消失,这时就需要我们用重绘的方法将它们一一画出来。这个代码实现就相对难一些,后面再讨论。
接下来是画棋子,这里自然免不了添加MouseListener监听器。在Released操作中,在每次释放鼠标后便要在释放的位置最近的那个点画出一个棋子。我起初觉得这是一件很困难的事,并尝试用取余的方法分了四种情况一一讨论,也实现了目标。不过,在老师的指导下,我引入了行和列的关系,巧妙的给坐标加上20以后不用取余,得到我需要的行数和列数,进而画出想要的位置的棋子。而引入行数和列数,自然需要构建对接下来的事件很有必要的数组。因为棋盘和行列之分。所以只要构建两个变量相组合便能方便地记录棋盘上的每一个位置,而再没有比二维数组更有效的方式。
有了数组,除了实现画棋子,在前面提到了重绘方法上,也变得容易了,只要把画的棋子所对应的数组的位置传到前面,那么就能简单地画出每一个画过的棋子,并保存。除此以外,给画过黑棋和白棋的位置所对应的数组分别赋上一个值,这样也方便能在画过的地方不再重画。然后,采用计数器或者时间真假的方法,用循环的方式,来规定一次下黑棋一次下白棋。
最后,也是最难的地方,便是五子棋判断输赢的部分。起初觉得好像这部分的实现遥不可及。可仔细想想,五子棋判断输赢的方式也很简单啊。无非是有没有五个相同颜色的棋子横向或竖向或斜向连在一起。于是,在定义数组后这显得很简单了,我单独定义一个类用以判断输赢,每下一个棋子,就判断这个棋子在横向、竖向和两个斜向上是否有五子连在一起,然后调用这四个方向的判断方法,最终完成了判断输赢方法的编写。然后,在继承MouseListener的类中,下完棋子后,调用这个方法,以此判断输赢。最后,人人版的五子棋便大功告成了。
分享到:
相关推荐
本人亲自编写,经老师检查,成绩A+ 由于老师要求交程序实验报告手写板,所以没有做电子版。
帮同学做的,没有第一次发的功能强 由于老师要求交程序实验报告手写板,所以没有做电子版。
五子棋,人人对战,可重置游戏, 代码是相当的简单,适合初学者阅读吧
本程序是用java语言开发的,功能有开始,重开,悔棋等,有计时功能,并且可以设置计时的时间限制。界面美观,按钮排列整齐
java五子棋的实现,适合学生的课程设计,希望能够帮到大家,实现人机对战,和人人对战功能模式,有时间统计
很好玩的小游戏,代码清晰明了,希望对大家能够有所帮助
这是一个五子棋小代码,只有人人对战,没有智能.
java写的五子棋小程序,界面优美,人机对战,人人对战。
用java开发的五子棋,使用了java的awt和swing,其中没有AI,粗略的看了网上的AI算法,看的头都大了。
用Java实现的五子棋的对战小游戏,实现了人人网络对战,人机对战,拥有界面,在使用的时候记得将src下面的所有素材放到bin目录下方可正常运行,导入Eclipse即可运行。
java做的五子棋,非常不错!总共三个还有算法!
NULL 博文链接:https://hafuokas.iteye.com/blog/1836195
人人对战的五子棋,比较简单的程序。希望大家看看
五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。 棋具与围棋通用,...
主要介绍了Java编程实现五子棋人人对战代码示例,具有一定借鉴价值,需要的朋友可以参考下。
主要是一个五子棋游戏,利用java swing技术编写,总共只有一个类,两个内部类。人机对战
本人也是初学者,仅实现了五子棋人人对战的简单功能,有再来一局的功能。相应的代码有注释,帮助理解,目前仍然在继续完善
用java写的可视化五子棋,背景和棋子都是一张图片,用到了java1.5以后的双缓冲技术,实现人人对战,最简单的实现算法!
带网络功能的,用mfc编写的,很强大的比较全面的五子棋。带网络功能的,用mfc编写的,很强大的比较全面的五子棋。带网络功能的,用mfc编写的,很强大的比较全面的五子棋。带网络功能的,用mfc编写的,很强大的比较...
Java编写的五子棋程序,支持人人对战,包含5个文件,比较简单。