版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 滾動(dòng)軸承習(xí)題答案
- 山東省煙臺(tái)市開(kāi)發(fā)區(qū)2023-2024學(xué)年六年級(jí)下學(xué)期期末考試英語(yǔ)試卷
- 2024屆河南省濮陽(yáng)市高考語(yǔ)文模擬試題(一)(解析版)
- 2024-2025學(xué)年浙江省溫州市多校聯(lián)考三年級(jí)(上)第一次月考數(shù)學(xué)試卷
- 股權(quán)融資對(duì)企業(yè)社會(huì)責(zé)任行動(dòng)的提升影響研究分析
- 江蘇省南京市六校2024屆中考試題猜想數(shù)學(xué)試卷含解析
- 醫(yī)療器械冷鏈物流行業(yè)的消費(fèi)市場(chǎng)分析
- 2023年浙江鎮(zhèn)洋發(fā)展股份有限公司招聘筆試真題
- 2023年寧波奉化溪巷里商業(yè)運(yùn)營(yíng)管理有限公司招聘考試試題及答案
- 2023年瀘州市江陽(yáng)區(qū)衛(wèi)生事業(yè)單位考核招聘工作人員筆試真題
- 安全文明施工專(zhuān)項(xiàng)方案啟迪協(xié)信
- 《實(shí)用的儲(chǔ)物盒》(教案)小學(xué)五年級(jí)上冊(cè)綜合實(shí)踐活動(dòng)
- 隱蔽工程驗(yàn)收記錄表-真正范本
- 第1課 穿衣我做主(導(dǎo)學(xué)案)-三年級(jí)上冊(cè)勞動(dòng)北京理工大學(xué)出版社
- 小學(xué)校本課程-用心傾聽(tīng)巧用方法陪伴成長(zhǎng)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 3.2 中國(guó)特色社會(huì)主義的創(chuàng)立、發(fā)展和完善 課件-高中政治統(tǒng)編版必修一中國(guó)特色社會(huì)主義
- 新媒體文案教學(xué)大綱教案
- 草坪播種施工方案
- 防爆安全-第3章:危險(xiǎn)場(chǎng)所區(qū)域劃分課件
- JJF(紡織) 027-2010 染色摩擦色牢度儀校準(zhǔn)規(guī)范
- 沒(méi)有穿校服檢討書(shū)500沒(méi)有穿校服檢討書(shū)500字(12篇)
評(píng)論
0/150
提交評(píng)論