java的第一个程序——五子棋

今天,终于完成了五子棋之人人大战的大部分设想,真是有点艰辛。虽然,这个程序还有很多可以改进的地方。
一、项目背景、功能说明
五子棋的棋盘规格:15*15,这里的15指的是线的条数。可以两个人对弈。界面未做大量修饰,只有“重新开始”一个按键。默认黑方为先下方。另外加了几个效果,给最后一个下的棋子做十字的标记;当鼠标移到已经下好的棋时,会显示一个不可下棋的标志;鼠标在棋盘上移动,也会有一个框框的显示。
二、项目特点
加了一些画图标记的效果,就是上文功能中介绍的,鼠标移动;最后一个棋子标记;当鼠标移动到已经下的棋时,显示不可下标记。其实,还有许多需要改进的地方。如机器下棋算法,由于本人对五子棋的研究一般般,所以,也没有写人机大战,觉得那个算法有点难。可改进的功能还有对下棋过程做保存,应该可以用队列来做存储。悔棋可用栈来保存。
三、学习总结
此次,五子棋是第一个几百行的java程序。通过这次训练,对java中的swing组件,有了进一步认识;对多个监听器的使用,也有了一点了解,尝试了写成内部类,还有将鼠标类都写在一个新的类内;巩固了值传递和引用传递;也出现了,多个类之间传值,两个类互相之间传对象的错误。
由于,之前写过C语言的五子棋,所以,大致框架都有所了解。不同的是前者由键盘控制,后者用鼠标控制,还有swing组件,监听器等等。
因此,前期,对于下棋和五个子的判断,没有什么大的问题。主要是没有养成将程序分模块写的习惯。几乎所有功能语句,都写在一个类里。这使得程序很长,给修改和阅读带来不便。除了逻辑方面的问题,还有监听器的使用,内部类、非内部类和多个类之间多个属性的传递。目前,对多个类的结构关系,这方面的经验非常匮乏。
另外,这次对数组和棋盘的坐标做了一下研究和比较。两者的横、纵坐标正好相反。完成程序时,选择一种即可,否则会混淆,影响后面的判断。
后半段时间,主要用在前面所说的画图效果上。完成总体的设计框架之后,再完成其中小部分具体的内容,若同时处理,则很容易产生混乱,导致错误。理清各个画图次序之后,就可以实现了。其中也涉及到了两个鼠标监听器的值的先后次序,MouseListener和MouseMotionListener之间的公共值,当在一个监听器内改变后,另一个监听器何时改变。
四、展望
通过这个五子棋程序,对swing组件,动作监听器,鼠标监听器有了一些了解,对java的语法也有了一些巩固。总体来说,这个程序没用什么复杂的数据结构,只使用了最普通的数组。自己的思维和处理很多类的能力,都需要进一步提高。对基础知识的掌握也不是很深刻。


[img]http://dl.iteye.com/upload/attachment/342504/2acfe263-f12c-30e2-abfd-d5fcac5ebb0d.jpg[/img]
不可下棋的标志&&最后一个棋子做标记

[img]http://dl.iteye.com/upload/attachment/342506/df923c0e-99c0-38c5-8d80-d6085d7c733f.jpg[/img]
鼠标移动的符号&&最后一个棋子做标记

[img]http://dl.iteye.com/upload/attachment/342511/6b781cd4-ee3f-3c9b-8b42-e5b37740d630.jpg[/img]
黑方获胜
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值