Java 五子棋

  来蓝杰以来,自己独立做的第一个小游戏就是五子棋了,可以说花了点功夫,感悟也有一些,借这篇博客分享一下。

  首先,五子棋有许多的参数如startxstartysizevlinehline……所以我们可以创建一个接口来存储这些数据参数,让其他类来实现这一接口。这样做有一好处就是如果以后想修改游戏数据就很方便。只需要在接口中改一次,并不用在类里面一个一个地修改了。

  画棋盘棋子这些东西都很容易,我就不一一赘述了。当时我遇到的第一个问题是:如何把棋子下到交叉点上?这个其实很容易,我的方法是用你获取的xy减去startxstarty,再对size求余数!这样,比较余数与二分之一size的大小来判断这颗棋子是前一个还是后一个交点。

  交点的问题解决了,不过你又会发现,你下的始终是黑棋,要怎么样才能实现黑白交替下子呢?我的话是用了一个countint型参数,作用是计数黑白,每成功下一颗棋子就count++一次,每一次下子之前都判断count是奇数还是偶数来决定下黑子还是白子。

  新的问题又随之而来,黑白交替是实现了,但是在同一个位置却可以下多次棋子,这是不合实际的!于是我们应该一开始就用数组存储下子的情况(这里可以用一维数组也可以用二维数组没下过的地方对应数组存储初始值0,下黑棋存1,下白棋存2(或者你也可以存储boolean类型,用truefalse表示黑棋和白棋)。关于数组,我这里要多说几句。用二维数组的话,就只要用一个二维数组,第一二维分别存入xy坐标,数组内存012,这样的话有利于后面判断输赢的实现;用一维数组的话,这里要用两个一维数组,下标存第几步,数组内分别存xy坐标,而要表示黑子还是白子的话,就还要一个一维数组,之后的判断输赢,又要一个一维数组!总之我是用了4个一维数组,资源上是比较浪费的,但却有个隐藏的好处—便于悔棋和再来一局!总之,万法不离其宗吧,看你怎么选择。

  最后,判断输赢。我有两种思路。第一,一个一个地遍历,从4个方向检查出五子相连;第二,从最后一次下子的地方开始向周围检测(后面做的黑白棋也是如此判断翻棋)。

 对于悔棋,我用一维数组就很容易了,毕竟下标存的是步数,悔一次棋就将对应的步数的下标的数组内容归0即可~

  五子棋是我做的第一个游戏,也是算做得比较认真的一个游戏了,毕竟是初期学习嘛。在做五子棋的过程中,我明白了写程序不要想着一蹴而就一步登天,而是应该一点一点来,问题是一个一个解决的,程序也是一点一点完善的,毕竟我们现在的水平不够,不能做到顾全大局。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值