




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象纸牌游戏实验报告实验题目solitaire纸牌游戏实验目的设计一个简单的cardgames程序,运用面向对象封装、继承、抽象类、抽象方法、多态、动态绑定等概念。实验目标就要求参考windows的纸牌游戏使用java语音实验内容 单人纸牌游戏,牌桌上有7个堆共28张牌,第一堆1张牌,第二堆2张,。第7堆7张,每一堆的第一张牌朝上,其他朝下。牌桌上还有4个suitpiles,一个deck card堆和一个discard card堆,布局如下程序总体设计纸牌游戏中对于类的设计共有card,cardpile,deckpail,discardpail,suitpile,tablepail,sol
2、itare七个类。简单地uml图如下:cardpilecardsuitpiletablepaildiscardpaildeckpailsolitare1,card类: card类主要用于建立纸牌,共有以下几个属性, card(int, int) rank() suit() faceup() flip() color() draw(graphics, int, int) width : int height : int red : int black : int heart : int spade : int diamond : int club : intfaceup : booleanr :
3、 ints : intlink : card它主要定义了一个纸牌的属性,如颜色,长度,宽度,花色,是否背面朝上等。2,cardpile类: 这是个牌堆类,主要是作为基类,供各个堆来继承使用,它含有以下几个函数 cardpile(int, int) top() empty() pop() includes(int, int) select(int, int) addcard(card) display(graphics) cantake(card)3,solitare类主要用于图形界面的显示 x : int y : int firstcard : card它的每个属性和操作在子类中都会有重新定义
4、。其中x,y表示每个堆左上角的坐标位置。top(),pop(),isempty(),这三个类函数通过stack类所提供的成员函数来操纵纸牌列表。另外还定义了5中虚拟函数: 1,includes 看给定的坐标位置是否在派对边界之内。 2,cantake 返回该牌堆是否可以取走特定纸牌。 3,addcard 增加一张纸牌到该牌堆 4,display 显示整幅牌堆 5,select 执行响应鼠标单击的行为3,deckpile,discardpile,suitpile,tablepile分别继承于cardpile类,并对某些函数进行重写,以生成自己的牌堆。代码分析1.发配算法该算法先创建52张纸牌(c
5、ard)对象,并放置allcard(arraylist)中,然后模拟现实当中的洗牌操作,主要是利用java的random来打乱allcard里牌的排列顺序,然后初始化各个牌堆类: deckpile, discardpile, tablepile, suitpile, movecard。此外还建了一个数组allpiles(cardpile),用于存储所有的牌堆类。最后将allcard中的纸牌牌(card)对象分发至各个堆里。2. select方法传给该函数坐标用于判断点中该牌堆中的某张纸牌,其中因为tablepile要支持选中多张纸牌,要改写cardpile的方法。cardpile的select
6、方法:public int select (int tx, int ty) if(includes(tx,ty) if(isempty() return -2; else return thepile.size() - 1; else return -1;tablepile的select方法:public int select(int tx, int ty) / todo auto-generated method stub if(!(isempty() int beginx,beginy,endx,endy; /system.out.println(notflipnum+ +cardnum)
7、; beginx = x ; beginy = y + unflipcardseparation * notflipnum; endx = x + card.width; endy = beginy + unflipcardseparation * notflipnum + separation * (thepile.size() - 1 - notflipnum) + card.height; boolean flip_include = beginx = tx & tx = endx & beginy = ty & ty = thepile.size() c = thepile.size(
8、) - 1; return c;/从零开始 else return -1; else return -1; 3. iscanadd方法用于判断某张纸牌是否可以放于suitepile或tablepilecardpile类public boolean iscanadd( card card) return falase;suitepile类public boolean iscanadd( card card) / todo auto-generated method stub if (isempty() return card.getnum() = 0; card topcard = top();
9、 return (card.gettype() = topcard.gettype() & (card.getnum() = topcard.getnum() + 1); tablepile类:public boolean iscanadd(card card) / todo auto-generated method stub if ( isempty() return card.getnum() = 12; card topcard = top(); return (card.getcolor() != topcard.getcolor() & (card.getnum() = topcard.getnum()-1 );4. refreshtablepile用于刷新tablepile,主要处理走tablepile中的纸牌是剩余纸牌都是背面的时候将最上面的纸牌反过来。public static void refreshtablepile() / system.out.println(refreshtablepile); for(int i=0;i7;i+) if(tablepilei.top() != null) if(!(tablepilei.top().isfaceup() tablepilei.top().setfaceup(true); tablepilei.setn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论