结对项目之小游戏编程(斗地主)

一.题目简介
    本次的项目是编写一个斗地主的小游戏,实现语言:java;主要完成了GUI设计、计时线程、算法。本次项目的主要目的是对算法的学习。算法分析在心得里面。

   技术难点:1.图片的移动    2.计时线程的设定   3.对牌的分割,必须考虑到优先拆分方案,将权值低的拆分方案舍去。 4.在删除的时候遇到问题了,删除不了。

二.结对分工及过程

    本次结对项目的成员有两个,张国伟:负责对GUI界面的设计,完成功能:洗牌功能,发牌功能,打牌功能的图片的位移处理,基本打牌的桌面等等。

                                        我主要负责对算法的设计编写和对计时线程的编写。

三.代码地址

https://github.com/Tsir/DouDiZhu

github最近出问题了,上传不了文件了,还没解决。所以github中只有源码,没有素材图片。

四.结对实践过程
    1.对程序的整体思路,结构进行设计,采用了model2模式,将view层和model层分离,写到不同的类里,使程序的结构更加明了。

    2.对程序界面功能的实现进行了设计和讨论;然后又对算法的进行了分析和讨论,查阅了相关资料,对算法设计进行学习。

    3.分工合作,张国伟主要负责界面的编写,我负责对算法的编写,其中我们就一些难点一起讨论,如  牌面的移动。

    4.对代码的整合与修改,两个人的代码整合一定会出很对问题,我们就问题进行讨论解决,完成代码的整合。

五.测试情况

     程序的结构:

     结对项目之小游戏编程(斗地主)_第1张图片

     运行后的主界面:

     结对项目之小游戏编程(斗地主)_第2张图片

     出牌:

    结对项目之小游戏编程(斗地主)_第3张图片结对项目之小游戏编程(斗地主)_第4张图片

     完成比赛:

     结对项目之小游戏编程(斗地主)_第5张图片

六.问题及心得

      游戏中算法的基本思想是:当我们随机拿到牌时,我们先将牌排序,当然排序也是有算法的,然后对牌按照斗地主的规则(如:单张、对子、三带、飞机、炸弹等)将牌分成不同的组合存放在集合list里,分牌的算法基本思路是对牌组合优先级的设置,即考虑两个方面,手牌的出牌手数(手数少的优先级高)和牌组合权值的设定(如:王炸的权值应该是最大的,单牌的权值应该是最小的),通过这两方面,可以决定如何对牌的拆分组合,舍弃优先级底的情况;对牌拆分完后,将拆分好的牌放入集合中待用。

       这个算法的缺点是:牌在出牌前就拆好了,必须严格按照集合已有对象进行出牌,不能灵活的变更和更接近人的思维模式。

       个人的新思路为:拆牌时,我们可以将牌按单张、对子、三张等先放入不同的集合里(这里可能会有交集,如 34567889,我们要分成3456789和88放入不同的集合内),当我们找到合适的牌打出后,我们对剩下的牌重新拆分,然后对集合更新(因为前面的出牌很可能破坏了牌分好的牌类型),这样就能更全面的考虑情况了,这时候优先级的设计就针对如何找到合适的牌,我们不能有就出,还要考虑合不合适的问题。

      我这里还做了一套类似的游戏------跑得快,按照斗地主的标准,只是对战的是两个人,并且是电脑的智能对战,这个平台可以对算法的学习起到很好的帮助。目前代码还在修改中,修改好了,随后会分享到github中。另外对算法有兴趣的同学可以编写更好的算法进行测试。

                                                                                                                                                                                                                                                                                                                                                                                                                                  

你可能感兴趣的:(编程)