读书人

五子棋总结(人人对战)

发布时间: 2012-12-22 12:05:06 作者: rapoo

五子棋小结(人人对战)

五子棋是我学习Java后写的第二个小游戏,初步实现了五子棋的人人对战。
?下面简单介绍一下我的五子棋及其我在编写过程中遇到的一些问题,但愿大家可以避免我走的一些弯路
?
?我的五子棋经历了如下四个步骤:
?一、将五子棋的界面做出来(? 棋盘? 棋子)
?二、对棋子进行一些设置 ( 如黑白分明? 棋子下在棋盘的交点上??? 已下棋子的位置不能再下等)
?三、判断输赢
?四、悔棋和重新开局


?五子棋的界面????
??主要是重写父类中的paint方法,及其重绘? 由于之前做过画板的重绘,这步没花费太多时间
?对棋子进行基本的设置
??就开始接触最最基本的算法了,也是我第一次写算法,在磕磕碰碰中实现了,主要是根据获取鼠标点击的坐标,判断距离最近的棋盘交点,把棋子放在最近的交点上


?判断输赢
??从这步开始就有点纠结了,总是自己很清楚算法是怎样的,就是无法用Java语言准确的表达出来
??横向纵向判断还好,因为坐标的i j值只有一个变化,用一个for循环就可以解决了
??到斜着的两个方向,i j值则变成了同增同减? 或者? 此消彼长的关系,我以前写的for循环里面只有一个变量,由于对for语句了解的局限性,
??耗费了很多功夫,最后只能一个for循环设置两个变量,这么一试,问题解决了,松了一口气
??判断输赢时还要注意数组越界的问题
??四个方向计算连在一起的最大棋子数时最好分别计数,避免互相干扰

?

//实现悔棋public void stepBack(){ //得到保存棋子种类的数组ch=cl.getChess();//得到保存棋子坐标的数组chi = cl.getChi();chj = cl.getChj();for(int m=0;m<1;m++){//获取已下的棋子数n=cl.getN();i=chi[n][1];j=chj[n][1];//悔棋后将棋子的坐标等参数重置为0ch[i][j]=0; chi[n][1]=0;chj[n][1]=0;n--;}//悔棋后仍下该颜色的棋子count = cl.getCount();if(count==0){cl.setCount(1);}else{cl.setCount(0);}wzq.paint(g);}//重新开局public void restart(){ch=cl.getChess();for(int i=0;i<ch.length;i++){for(int j=0;j<ch[i].length;j++){ch[i][j]=0;}}for(int i=0;i<200;i++){for(int j=0;j<2;j++){//重新开局后将数组清空chi[i][j]=0;chj[i][j]=0;}}//所下棋子数设为0cl.setN(0);cl.setCount(0);wzq.paint(g); choose = cl.isChoose();if(choose == true){//只有输赢结果出来后才加上监听器wzq.addMouseListener(cl);cl.setChoose(false);}}

???
?
?由于之前一直对参数传递不太熟,只要不在一个类里面就手足无措,通过这个小项目,我更好的理解了如何传递参数,
?还有利用source中的Generate Getters and Setters 现成的方法 可以省好多力气的
?总是在不断地发现问题和解决问题中进步,不要害怕遇到问题,写程序中总会遇到问题的
?下一步,该好好想想如何实现人机对战了。

读书人网 >编程

热点推荐