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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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、繼承、抽象類、抽象方法、多態(tài)、動(dòng)態(tài)綁定等概念。實(shí)驗(yàn)?zāi)繕?biāo)就要求參考windows的紙牌游戲使用java語音實(shí)驗(yàn)內(nèi)容 單人紙牌游戲,牌桌上有7個(gè)堆共28張牌,第一堆1張牌,第二堆2張,。第7堆7張,每一堆的第一張牌朝上,其他朝下。牌桌上還有4個(gè)suitpiles,一個(gè)deck card堆和一個(gè)discard card堆,布局如下程序總體設(shè)計(jì)紙牌游戲中對(duì)于類的設(shè)計(jì)共有card,cardpile,deckpail,discardpail,suitpile,tablepail,sol

2、itare七個(gè)類。簡(jiǎn)單地uml圖如下:cardpilecardsuitpiletablepaildiscardpaildeckpailsolitare1,card類: card類主要用于建立紙牌,共有以下幾個(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類: 這是個(gè)牌堆類,主要是作為基類,供各個(gè)堆來繼承使用,它含有以下幾個(gè)函數(shù) 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它的每個(gè)屬性和操作在子類中都會(huì)有重新定義

4、。其中x,y表示每個(gè)堆左上角的坐標(biāo)位置。top(),pop(),isempty(),這三個(gè)類函數(shù)通過stack類所提供的成員函數(shù)來操縱紙牌列表。另外還定義了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類,并對(duì)某些函數(shù)進(jìn)行重寫,以生成自己的牌堆。代碼分析1.發(fā)配算法該算法先創(chuàng)建52張紙牌(c

5、ard)對(duì)象,并放置allcard(arraylist)中,然后模擬現(xiàn)實(shí)當(dāng)中的洗牌操作,主要是利用java的random來打亂allcard里牌的排列順序,然后初始化各個(gè)牌堆類: deckpile, discardpile, tablepile, suitpile, movecard。此外還建了一個(gè)數(shù)組allpiles(cardpile),用于存儲(chǔ)所有的牌堆類。最后將allcard中的紙牌牌(card)對(duì)象分發(fā)至各個(gè)堆里。2. select方法傳給該函數(shù)坐標(biāo)用于判斷點(diǎn)中該牌堆中的某張紙牌,其中因?yàn)閠ablepile要支持選中多張紙牌,要改寫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中的紙牌是剩余紙牌都是背面的時(shí)候?qū)⒆钌厦娴募埮品催^來。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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論