面向?qū)ο蠹埮朴螒驅(qū)嶒?yàn)報(bào)告_第1頁(yè)
面向?qū)ο蠹埮朴螒驅(qū)嶒?yàn)報(bào)告_第2頁(yè)
面向?qū)ο蠹埮朴螒驅(qū)嶒?yàn)報(bào)告_第3頁(yè)
面向?qū)ο蠹埮朴螒驅(qū)嶒?yàn)報(bào)告_第4頁(yè)
面向?qū)ο蠹埮朴螒驅(qū)嶒?yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、面向?qū)ο蠹埮朴螒驅(qū)嶒?yàn)報(bào)告實(shí)驗(yàn)題目solitaire紙牌游戲?qū)嶒?yàn)?zāi)康脑O(shè)計(jì)一個(gè)簡(jiǎn)單的CardGames程序,運(yùn)用面向?qū)ο蠓庋b、繼承、抽象類(lèi)、抽象方法、多態(tài)、動(dòng)態(tài)綁定等概念。實(shí)驗(yàn)?zāi)繕?biāo)就要求參考windows的紙牌游戲使用Java語(yǔ)音實(shí)驗(yàn)內(nèi)容 單人紙牌游戲,牌桌上有7個(gè)堆共28張牌,第一堆1張牌,第二堆2張,。第7堆7張,每一堆的第一張牌朝上,其他朝下。牌桌上還有4個(gè)suitpiles,一個(gè)deck card堆和一個(gè)discard card堆,布局如下程序總體設(shè)計(jì)紙牌游戲中對(duì)于類(lèi)的設(shè)計(jì)共有Card,CardPile,DeckPail,DiscardPail,SuitPile,TablePail,Sol

2、itare七個(gè)類(lèi)。簡(jiǎn)單地UML圖如下:CardPileCardSuitPileTablePailDiscardPailDeckPailSolitare1,Card類(lèi): Card類(lèi)主要用于建立紙牌,共有以下幾個(gè)屬性, 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它主要定義了一個(gè)紙牌的屬性,如顏色,長(zhǎng)度,寬度,花色,是否背面朝上等。2,CardPile類(lèi): 這是個(gè)牌堆類(lèi),主要是作為基類(lèi),供各個(gè)堆來(lái)繼承使用,它含有以下幾個(gè)函數(shù) CardPile(int, int) top() empty() pop() includes(int, int) select(int, int) addCard(Card) display(Graphics) canTake(Card)3,Solitare類(lèi)主要用于圖形界面的顯示 x : int y : int firstCard : Card它的每個(gè)屬性和操作在子類(lèi)中都會(huì)有重新定義

4、。其中x,y表示每個(gè)堆左上角的坐標(biāo)位置。top(),pop(),isEmpty(),這三個(gè)類(lèi)函數(shù)通過(guò)stack類(lèi)所提供的成員函數(shù)來(lái)操縱紙牌列表。另外還定義了5中虛擬函數(shù): 1,includes 看給定的坐標(biāo)位置是否在派對(duì)邊界之內(nèi)。 2,canTake 返回該牌堆是否可以取走特定紙牌。 3,addCard 增加一張紙牌到該牌堆 4,display 顯示整幅牌堆 5,select 執(zhí)行響應(yīng)鼠標(biāo)單擊的行為3,DeckPile,DiscardPile,SuitPile,TablePile分別繼承于CardPile類(lèi),并對(duì)某些函數(shù)進(jìn)行重寫(xiě),以生成自己的牌堆。代碼分析1.發(fā)配算法該算法先創(chuàng)建52張紙牌(C

5、ard)對(duì)象,并放置allCard(ArrayList)中,然后模擬現(xiàn)實(shí)當(dāng)中的洗牌操作,主要是利用java的Random來(lái)打亂allCard里牌的排列順序,然后初始化各個(gè)牌堆類(lèi): deckPile, discardPile, tablePile, suitPile, moveCard。此外還建了一個(gè)數(shù)組allPiles(CardPile),用于存儲(chǔ)所有的牌堆類(lèi)。最后將allCard中的紙牌牌(Card)對(duì)象分發(fā)至各個(gè)堆里。2. select方法傳給該函數(shù)坐標(biāo)用于判斷點(diǎn)中該牌堆中的某張紙牌,其中因?yàn)門(mén)ablePile要支持選中多張紙牌,要改寫(xiě)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+" &qu

7、ot;+cardNum); 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 <=

8、ty && ty <= endY; /System.out.println(beginY+" "+endY); if(flip_include) int c = (ty - beginY)/separation + notFlipNum; if(c >= thePile.size() c = thePile.size() - 1; return c;/從零開(kāi)始 else return -1; else return -1; 3. isCAnAdd方法用于判斷某張紙牌是否可以放于SuitePile或TablePileCardPile類(lèi)Public

9、boolean isCanAdd( Card card) Return falase;SuitePile類(lèi)Public boolean isCanAdd( Card card) / TODO Auto-generated method stub if (isEmpty() return card.getNum() = 0; Card topCard = top(); return (card.getType() = topCard.getType() && (card.getNum() = topCard.getNum() + 1); Tablepile類(lèi):public boo

10、lean 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中的紙牌是剩余紙牌都是背面的時(shí)候?qū)⒆钌厦娴募埮品催^(guò)來(lái)。public static void refreshTablePile() / System.out.println("refreshTablePile"); for(int i=0;i<7;i+) if(tablePilei.top() != null) if(!(tablePilei.top().isFaceup() tablePilei.top().setFaceup(true); tabl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論