资源描述:
《面向对象纸牌游戏实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、面向对象纸牌游戏实验报告实验题目solitaire纸牌游戏实验目的设计一个简单的CardGames程序,运用面向对象封装、继承、抽象类、抽象方法、多态、动态绑定等概念。实验目标就要求参考windows的纸牌游戏使用Java语音实验内容单人纸牌游戏,牌桌上有7个堆共28张牌,第一堆1张牌,第二堆2张,。。。第7堆7张,每一堆的第一张牌朝上,其他朝下。牌桌上还有4个suitpiles,一个deckcard堆和一个discardcard堆,布局如下程序总体设计纸牌游戏中对于类的设计共有Card,CardPile,DeckPail,DiscardPail,SuitPile,Ta
2、blePail,Solitare七个类。简单地UML图如下:CardPileCardSuitPileTablePailDiscardPailDeckPailSolitare1,Card类:Card类主要用于建立纸牌,共有以下几个属性,Card(int,int)rank()suit()faceUp()flip()color()draw(Graphics,int,int)width:intheight:intred:intblack:intheart:intspade:intdiamond:intclub:intfaceup:booleanr:ints:intlink:Ca
3、rd它主要定义了一个纸牌的属性,如颜色,长度,宽度,花色,是否背面朝上等。2,CardPile类:这是个牌堆类,主要是作为基类,供各个堆来继承使用,它含有以下几个函数CardPile(int,int)top()empty()pop()includes(int,int)select(int,int)addCard(Card)display(Graphics)canTake(Card)3,Solitare类主要用于图形界面的显示x:inty:intfirstCard:Card它的每个属性和操作在子类中都会有重新定义。其中x,y表示每个堆左上角的坐标位置。top(),pop(
4、),isEmpty(),这三个类函数通过stack类所提供的成员函数来操纵纸牌列表。另外还定义了5中虚拟函数:1,includes看给定的坐标位置是否在派对边界之内。2,canTake返回该牌堆是否可以取走特定纸牌。3,addCard增加一张纸牌到该牌堆4,display显示整幅牌堆5,select执行响应鼠标单击的行为3,DeckPile,DiscardPile,SuitPile,TablePile分别继承于CardPile类,并对某些函数进行重写,以生成自己的牌堆。代码分析1.发配算法该算法先创建52张纸牌(Card)对象,并放置allCard(ArrayList)
5、中,然后模拟现实当中的洗牌操作,主要是利用java的Random来打乱allCard里牌的排列顺序,然后初始化各个牌堆类:deckPile,discardPile,tablePile,suitPile,moveCard。此外还建了一个数组allPiles(CardPile[]),用于存储所有的牌堆类。最后将allCard中的纸牌牌(Card)对象分发至各个堆里。2.select方法传给该函数坐标用于判断点中该牌堆中的某张纸牌,其中因为TablePile要支持选中多张纸牌,要改写CardPile的方法。CardPile的select方法:publicintselect(i
6、nttx,intty){if(includes(tx,ty)){if(isEmpty())return-2;elsereturnthePile.size()-1;}elsereturn-1;}TablePile的select方法:publicintselect(inttx,intty){//TODOAuto-generatedmethodstubif(!(isEmpty())){intbeginX,beginY,endX,endY;//System.out.println(notFlipNum+""+cardNum);beginX=x;beginY=y+unFlipCa
7、rdSeparation*notFlipNum;endX=x+Card.width;endY=beginY+unFlipCardSeparation*notFlipNum+separation*(thePile.size()-1-notFlipNum)+Card.height;booleanflip_include=beginX<=tx&&tx<=endX&&beginY<=ty&&ty<=endY;//System.out.println(beginY+""+endY);if(flip_include){intc=(ty-beginY)