下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、學(xué)號xxxx面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計報告題目:下拉列表運算器設(shè)計 專 業(yè) : xxxxx班 級 :xxx姓名:xx 指導(dǎo)教師:xxxxxxxx 年 x 月 xx 日計算機學(xué)院面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計報告目錄1設(shè)計內(nèi)容及要求 21.1 設(shè)計內(nèi)容 21.2 設(shè)計要求 22概要設(shè)計 22.1 代碼功能功能模塊設(shè)計: 22.2 程序的總體設(shè)計流程圖: 32.3 模塊一的詳細介紹: 32.3.1 主要的類: 32.3.2 主要的變量: 42.3.3 主要的方法: 42.4 模塊二的詳細介紹: 52.4.1 主要的類: 52.4.2 主要的變量: 52.4.3 主要的方法: 52.5 模塊三的詳細介紹:
2、62.5.1 主要類介紹: 62.5.2 主要變量: 62.5.3 主要方法: 72.6 模塊四的詳細介紹: 72.6.1 主要的類: 82.6.2 主要的變量: 82.6.3 主要的方法: 83設(shè)計過程或程序代碼 93.1 需要實現(xiàn)的主要功能: 93.2 功能設(shè)計流程圖: 103.3 主要功能的代碼實現(xiàn): 103.3.1 游戲菜單欄內(nèi)游戲菜單及幫助菜單功能展示: 103.3.2 主界面的設(shè)計: 113.3.3 紙牌的初始化以及發(fā)牌操作 133.3.4 紙牌的移動以及放置 183.3.5 顯示當前紙牌可行的操作: 193.3.6 回收紙牌: 214設(shè)計結(jié)果與分析 224.1 運行程序: 224
3、.2 發(fā)布程序: 234.3 總結(jié): 245參考文獻 241設(shè)計內(nèi)容及要求1.1 設(shè)計內(nèi)容相信很多人都玩過蜘蛛紙牌這款休閑游戲,現(xiàn)在隨著生活水平的提高,人們 擁有充分的時間來享受休閑游戲帶來的快樂,越來越多的人親睞蜘蛛紙牌游戲。 談起這款游戲,大家并不陌生。從WINDOWS2000統(tǒng)開始,就嵌入了蜘蛛紙牌游 戲,可是隨著微軟系統(tǒng)的不段升級,蜘蛛紙牌游戲的功能業(yè)變得越來越強大,游戲的界面也更加美觀。用戶的體驗感受也更加美好。所以,蜘蛛紙牌游戲的開發(fā) 對于人類的生活娛樂更加有意義。了解蜘蛛紙牌的開發(fā)過程也是作為一名學(xué)習(xí)計 算機專業(yè)大學(xué)生所應(yīng)該嘗試的過程。游戲的目標是以最少的移動次數(shù)將牌面中的 十疊
4、牌以及待發(fā)的五組,共計八副牌整理移除。當所有牌被移除整理到界面的左 下方,游戲獲勝。1.2 設(shè)計要求需要做的工作有學(xué)習(xí)掌握開發(fā)程序的方法,開了解發(fā)工具,進行需求分析, 根據(jù)得到的需求規(guī)格說明書設(shè)計具體的程序流程圖,編寫程序,修改程序,運行程序,系統(tǒng)調(diào)試程序、測試程序,發(fā)布程序。2概要設(shè)計2.1 代碼功能功能模塊設(shè)計:蜘蛛紙牌游戲共由4個部分組成,分別是:Spider.java,SpiderMenuBar.java , PKCard.java , AboutDialog.java 。SpiderMenuBar.java包含名為SpiderMenuBar的public類,其主要功能為生成蜘蛛紙牌游
5、戲的 菜單欄,實現(xiàn)菜單欄中各個組件的事件偵聽。主要包括3個模塊:圖形用戶界面 的構(gòu)建;組件監(jiān)聽接口的實現(xiàn):顯示可執(zhí)行操作的線程。PKCard.java包含名為PKCard的public類,其主要功能為:定義紙牌的屬性,包括名稱, 位置等相關(guān)信息。并通過相關(guān)方法實現(xiàn)紙牌的移動等。AboutDialog.java包含名為AboutDialog的public類,其主要功能為生成蜘蛛紙牌游戲的幫 助欄。Spider.java包含名為Spider的public類,其主要功能為生成蜘蛛紙牌游戲的框架,實 現(xiàn)游戲中的方法,包括:紙牌的隨機生成,位置的擺放等。2.2 程序的總體設(shè)計流程圖:2.3 模塊一的詳細
6、介紹:SpiderMenuBar.java的功能是生成蜘蛛紙牌游戲的菜單欄。實現(xiàn)菜單欄中的 各個組件的事件。2.3.1 主要的類:JMenuBar類、JMenu類、JMenuItem類、JRadioButton 類都是設(shè)計 GUI (圖 形用戶界面)的包javax.swing 中的類??梢杂胕mport引用這些類。JMenuBar 類是JComponent類的子類負責(zé)創(chuàng)建菜單條的。即JMenuBar類的一個實例就是一 個菜單條。JMenu類是JComponent類的子類負責(zé)創(chuàng)建菜單組的。即JMenu類的一個實例 化就是一個菜單。JMenuItem類是JMenu類的父類負責(zé)創(chuàng)建菜單項。即 JMe
7、nuItem類的一個實 例化就是一個菜單項。JRadioButtonMenuItem 類負責(zé)一個單選按鈕菜單項的實現(xiàn)。 JRadioButtonMenuItem 是屬于一組菜單項中的一個菜單項,該組中只能選擇一 個項。ButtonGroup類用于為一組按鈕創(chuàng)建一個多斥作用域。使用相同的 ButtonGroup對象創(chuàng)建一組按鈕意味著“開啟”其中一個按鈕時,將關(guān)閉組中的 其他所有按鈕。SpiderMenuBar類是此文件的一個主類是 JMenuBar的子類。Show類是Thread的子類用于創(chuàng)建線程。2.3.2 主要的變量:jNewGame jHelp變量分別是JMenu類創(chuàng)建的“游戲”、“幫助”
8、菜單。jItemAbout、jItemOpen、jItemPlayAgain 、jItemExit 、jItemValid 變量分 別是JMenuItem類創(chuàng)建的“關(guān)于”、“開局”、“重新發(fā)牌”、“退出”、”顯 示可行操作”菜單項。jRMItemEasy、 jRMItemNormal 、 jRMItemHard 變量分別是 JRadioButtonMenuItem類創(chuàng)建的“簡單:單一花色”、“中級:雙花色”、“高 級:四花色”的單選按鈕菜單項。group變量是ButtonGroup類創(chuàng)建的一組按鈕選擇對象。spider變量是Spider類創(chuàng)建的對象用于主界面窗口的實現(xiàn)。將在 Spider.ja
9、va 文件中介紹。2.3.3 主要的方法:public JMenuBar()創(chuàng)建新的菜單欄。public JMenu(String text)構(gòu)造一個新菜單,用提供的字符串作為其文本。public JMenuItem(String text)創(chuàng)建帶有指定文本的菜單項。public JRadioButtonMenuItem(String text)創(chuàng)建一個帶文本的單選按鈕菜單項。public ButtonGroup()創(chuàng)建一個新的單選按鈕對象組。public void add(MenuItem item)向菜單增加由參數(shù)item 指定的菜單項對public void add(AbstractBu
10、tton b)將單選按鈕添菜單項加到組中。public void add(JMenu c)將指定的菜單添加加到菜單欄中。public void addSeparator()將新分隔符追加到菜單的末尾所需要添加的夠產(chǎn)生的事件處理。事件源通這個方法是addActionListen(ActionListener listen) 類型的接口。因此必須用 ActionListener參數(shù),使得該對象成為事件源的的監(jiān)視器。該方法中的參數(shù)是 ActionListener接口的類創(chuàng)建的對象傳遞給該方法的 監(jiān)視器負責(zé)調(diào)用特定的方法處理事件,事件處理的接口方法將在后來的模塊中進行介紹。事件源即能 的對象。監(jiān)視器用
11、于對事件源進行監(jiān)視以便對發(fā)生的事件做出 過調(diào)用相應(yīng)的方法將某個對象作為自己的監(jiān)視器創(chuàng)建監(jiān)視器的類必須提供處理事件的特定的方法,即實現(xiàn)接口方法。public void addMenuListener(MenuListener l)添加菜單事件的偵聽器。void menuSelected(MenuEvent e)選擇某個菜單時調(diào)用。void menuDeselected(MenuEvent e)取消選擇某個菜單時調(diào)用。void menuCanceled(MenuEvent e)取消菜單時調(diào)用。2.4 模塊二的詳細介紹:PKCard的功能是定義紙牌的屬性,包括名稱,位置等相關(guān)信息。并通過相關(guān)方 法實
12、現(xiàn)了紙牌的移動等。2.4.1 主要的類:JDialog類是創(chuàng)建對話框窗口的主要類。可以使用此類創(chuàng)建自定義的對話框, 或者調(diào)用JOptionPane中的多個類方法來創(chuàng)建各種標準對話框。Jpanel類是一個面板類負責(zé)創(chuàng)建一個面板容器,再向這個面板添加組件,然后將面板添加到底層容器中。JTabbedPane類負責(zé)創(chuàng)建一個組件,它允許用戶通過單擊具有給定標題和/或圖標的選項卡,在一組組件之間進行切換。JTextArea類負責(zé)創(chuàng)建一個顯示純文本的多行區(qū)域。它作為一個輕量級組件Container類負責(zé)創(chuàng)建一個容器對象,此容器可以包含其它組件。AboutDialog類是JDialog類的子類,負責(zé)創(chuàng)建一個顯
13、示對話框。2.4.2 主要的變量:jMainPane、jPanel1、jPanel2、變量是 JPane1 創(chuàng)建的面板容器。jt1、jt2 是JTextArea類創(chuàng)建的文本區(qū)對象。jTabbedPane是JTabbedPane類倉建的選項卡窗格對象。c變量是Container類創(chuàng)建的容器。2.4.3 主要的方法:public JTabbedPane()創(chuàng)建一個具有默認的 JTabbedPane.TOP選項卡布局 的空 TabbedPane.public JDialog()創(chuàng)建一個沒有標題并且沒有指定Frame所有者的無模式對話框。一個共享的、隱藏的窗體將被設(shè)置為該對話框的所有者。public
14、JPanel() 創(chuàng)建具有雙緩沖和流布局的新面板容器。public JTextArea(String text) 構(gòu)造顯示指定文本為text的新的文本區(qū)。public void setTittle(String s)設(shè)置一個標題為 s 的對話框。public void setSize(int width , int heigth)創(chuàng)建寬為 width ,高位 heigth 大小的對話框。public void setResizable(boolean b)設(shè)置對話框是否可調(diào)整大小。b為true時,對話框可調(diào)整大小。public void setDefaultCloseOperation(int
15、 operation)該方法用來設(shè)置單機窗體右上角的關(guān)閉圖標后,程序會做出怎樣的處理。operation 取DISPOSE_ON_CLOSE/隱藏當前窗口,并釋放窗體所占有的其他資源。 public void setVisible(boolean b) 設(shè)置框口是可見還是不可見。 b取true是為可見。public Container getContentPane()方法可得到窗口的內(nèi)容面板容器。public void JTextArea.setSize(int width , int heigth)設(shè)置文本區(qū)的大b)設(shè)置文本區(qū)是否可以編輯。)設(shè)置文本區(qū)中輸入的文public void JTe
16、xtArea.setEditable(boolean public void JTextArea.setLineWrap(boolean b本是否可以實現(xiàn)在右邊界自動換行。public void JTextArea.setFont(Font f)設(shè)置文本區(qū)內(nèi)的字體。public void JTextArea.setForeground(Colorc)設(shè)置文本區(qū)組件的前景色。public void addTab(String title,Icon icon,Component component,String tip)添加由title 和/或icon 表示的component和tip ,其中任意
17、一個都可 以為nul參數(shù):title - 此選項卡中要顯示的標題,icon -此選項卡中要顯示 的圖標,component -單擊此選項卡時要顯示的組件,tip -此選項卡要顯示的public void pack()調(diào)整此窗口的大小,以適合其子組件的首選大小和布局。2.5 模塊三的詳細介紹:PKCard的作用是定義紙牌的屬性,包括名稱、位置等相關(guān)信息。并通過相關(guān) 方法實現(xiàn)紙牌的移動。2.5.1 主要類介紹:JLable類負責(zé)創(chuàng)建標簽對象。標簽用于短文本字符串或圖像或二者的顯示 區(qū)。Thread類負責(zé)創(chuàng)建線程對象。MouseListener接口、MouseMotionListener 接口負責(zé)處
18、理事件源所觸發(fā)的 鼠標事件,包括處理鼠標按下、釋放、進入、退出、單擊、連擊、拖動、移動所 觸發(fā)鼠標事件。Point類負責(zé)創(chuàng)建表示(x,y) 坐標空間中的位置的點對象,以整數(shù)精度指MouseEvent類負責(zé)創(chuàng)建鼠標所發(fā)生的事件對象。Flash類負責(zé)創(chuàng)建線程對象,不斷的獲取下一張紙牌。PKCard類是文件的主類,實現(xiàn) MouseListener接口的JLable的子類。負責(zé) 創(chuàng)建紙牌對象。2.5.2 主要變量:Point point變量表示紙牌的位置對象。Point initPoint表示紙牌的初始化位置對象。int value 變量表示紙牌的內(nèi)容值。int type 變量表示紙牌的類型。Stri
19、ng name變量表示紙牌的名稱。Container pane變量表示標簽內(nèi)主容器。boolean canMove變量表示紙牌是否可以移動,值為 true時,可以移動。boolean isFront變量表示紙牌是否正面顯示,值為true時,則為正面顯示。PKCard previousCard變量表示上面一張紙牌2.5.3 主要方法:public void flashCard(PKCard card) 方法啟動Flash線程不停的獲取下 張紙牌直至完成。public void run()方法為紙牌的正面設(shè)置白色圖片。card.updateUI()方法將UI屬性重置為當前外觀的值方法按下鼠標時事件
20、的處理方方法釋放鼠標時事件處理的方方法放置鼠標時事件處理方法為判斷可用列。方法鼠標拖動紙牌時事件處public void mousePressed(MouseEvent mp)法。public void mouseReleased(MouseEvent mr)public void setNextCardLocation(Point point)public int whichColumnAvailable(Point point)public void mouseDragged(MouseEvent argO)理方法。public void moving(int x,int y)方法將紙牌移
21、動(x , y)個位置。pane.setComponentZOrder(this,1)方法將主件移動到容器中指定的順序索public PKCard(String name , Spider spider) 方法紙牌的構(gòu)造函數(shù)。public void turnFront()方法令紙牌顯示正面。public void turnRear()方法令紙牌顯示背面。public void moveto(Point point( )方法將紙牌移動到點 pointpublic void setCanMove(boolean can)方法判斷紙牌是否能夠移動。public boolean isCardFront
22、()方法判斷紙牌是否正面顯示。public boolean isCardCanMove()方法判斷紙是否能夠移動。public int getCardValue()方法獲得紙牌的內(nèi)容值。public int getCardType()方法獲得紙牌的類型。2.6 模塊四的詳細介紹:Spider.java 文件是蜘蛛紙牌游戲的主類文件,其主要功能是生成蜘蛛紙牌 游戲的框架,實現(xiàn)游戲中的方法,包括紙牌的隨機生成、位置的擺放等。2.6.1 主要的類:JFrame類及其子類負責(zé)創(chuàng)建的對象稱為窗體。JLable類負責(zé)創(chuàng)建標簽對象。標簽用于短文本字符串或圖像或二者的顯示 區(qū)。Container類負責(zé)創(chuàng)建一個
23、容器對象,此容器可以包含其它組件。PKCard類負責(zé)創(chuàng)建紙牌對象。Hashtable類實現(xiàn)一個哈希表,該哈希表將鍵映射到相應(yīng)的值。2.6.2 主要的變量:代表“簡單”等級。代表“普通”等級。代表“難”等級。設(shè)定初始等級為簡單等級;Container類創(chuàng)建的面板容器。PKCard類創(chuàng)建的紙牌數(shù)組口 。£量為JLable類創(chuàng)建的右下角發(fā)牌區(qū)的鼠標public static final int EASY=1;public static finalint NATURAL=2 public static finalint HARD=3 private int grade=Spider.EASY
24、 private Container pane 變量: private PKCard card口變量為private JLable clickLable1 !點擊響應(yīng)區(qū)域。private JLable groudLable口變量為JLable類創(chuàng)建的背景框數(shù)組。Hshtable table變量為Hashtable類創(chuàng)建的一個哈希表對象,用于存儲鍵值數(shù)據(jù)對。private int c變量為紙牌的數(shù)量。private int n變量為紙牌的等級。private int a變量為紙牌所在的列號。private int finish變量為紙牌從小到大排列成功的次數(shù)。2.6.3 主要的方法:public
25、 void setTittle(String s)設(shè)置一個標題為 s 的窗體。public void setVisible(booleanb)設(shè)置框體是可見還是不可見。b取true是為可見。public void setSize(int width , int heigth)創(chuàng)建寬為 width ,高位 heigth 大小的窗體。public void setDefaultCloseOperation(int operation)該方法用來設(shè)置單機窗體右上角的關(guān)閉圖標后,程序會做出怎樣的處理。operation 取 EXIT_ON_CLOSE結(jié)束窗體所在的應(yīng)用程序。public void se
26、tMenuBar(MenuBar mb) 將此窗體的菜單欄設(shè)置為指定的菜單public void pane.setBackground(Color c)設(shè)置面板的背景顏色。public void pane.setLayout(布局對象)設(shè)置面板的布局。public Container getContentPane()方法可得到窗口的內(nèi)容面板容器。public void setBounds(int a,int b,int weidth, int heigth)設(shè)置出現(xiàn)在屏幕中的組件距離屏幕的左面 a個像素,距屏幕上面 b個像素,組件寬為 weidth ,高為 heigth。public void
27、 newGame()方法開始新游戲。public int getC()方法返回紙牌的數(shù)量。public void setGrade(int grade)方法設(shè)置紙牌游戲的等級。public void initCards()方法進行初始化紙牌public void randomCards()方法令紙牌隨機分配。public void setNA()方6設(shè)置還原紙牌游戲。public void setCardsLocation()方法設(shè)置待展開紙牌級表面初始化紙牌的位置。public void showEnableOperator()方法進行顯示是否有可以移動的紙牌。public void dea
28、l()方法開始運行游戲。public PKCard getPreviousCard(PKCard card)方法獲取當前紙牌上面的那一張紙牌。public PKCard getNextCard(PKCard card)方法獲取當前紙牌的下面的那一張紙牌。public Point getLastCardLocation(int n)方法獲取第 n 列紙牌最后一張紙牌的位置。public Point getGroundLabelLocation(int n)方法獲取第 n 列紙牌的背景框架的位置。public void setGroundLabelZOrder() 放置 groundLable 組
29、件。將組件 groundLable移動到容器中指定的順序索引。順序(105+i)確定了繪制組件的順 序;具有最高順序的組件將第一個繪制,具有最低順序的組建將最后一個繪制。在組建重疊的地方,具有較低順序的組建將覆蓋具有較高順序的組件。public void haveFinish(int column)判斷紙牌的擺放是否成功。3設(shè)計過程或程序代碼3.1 需要實現(xiàn)的主要功能:(1)游戲主界面的設(shè)計包括背景顏色、框架大小、玩牌區(qū)域、發(fā)牌區(qū)域、 回收紙牌的區(qū)域組件的設(shè)置。(2)點擊鼠標、釋放鼠標、拖動鼠標時紙牌需要實現(xiàn)的事件處理程序。(3)移動放置一組或者單個紙牌時。需要紙牌按照由小到大的順序排列, 并
30、列類型相同。(4)當某列的紙牌按照從 A到K得順序排列時,程序會自動回收這組紙牌 到回收紙牌的區(qū)域。(5)當用鼠標單擊發(fā)牌區(qū)域的紙牌時,如果 10列紙牌中沒有空白列,則順 序把紙牌發(fā)到每列紙牌的最下面。否則,彈出有空位不能發(fā)牌對話框。(6)當玩家不知道當前游戲如何進行時,可以點擊菜單項顯示可行的操作 提示玩家下一步該移動哪一張紙牌。(7)等級設(shè)置,玩家通過單擊游戲菜單里相應(yīng)的等級菜單項來設(shè)置游戲的 難度等級。游戲的默認等級是簡單等級。3.2 功能設(shè)計流程圖:3.3 主要功能的代碼實現(xiàn):3.3.1 游戲菜單欄內(nèi)游戲菜單及幫助菜單功能展示:3.3.2 主界面的設(shè)計:代碼實現(xiàn)如下:public Sp
31、ider()setTitle("蜘蛛牌)setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);/ 設(shè)置框架的大小setSize(1024, 742);/生成SpiderMenuBar對象,并放置在框架之上setJMenuBar(new SpiderMenuBar(this);pane = this.getContentPane();/設(shè)置背景顏色pane.setBackground(new Color(0, 139, 69);/將布局管理器設(shè)置成為nullpane.setLayout(null);設(shè)置發(fā)牌區(qū)組件的位置cl
32、ickLabel = new JLabel();clickLabel.setBounds(883,606, 121,pane.add(clickLabel);clickLabel.addMouseListener(new MouseAdapter()public void mouseReleased(MouseEvent me)if (c < 60)Spider.this.deal(););this.initCards();this.randomCards();為紙牌設(shè)置位置創(chuàng)建背景框組件數(shù)組int x = 20;for (int i = 0; i < 10; i+)創(chuàng)建背景框組件
33、groundLabeli.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.Et chedBorder.RAISED);設(shè)置組件的大小x += 101;向容器添加組件this.setVisible(true);運行程序,從發(fā)牌去發(fā)出一組紙牌3.3.3 紙牌的初始化以及發(fā)牌操作代碼實現(xiàn)如下:public void initCards()/如果紙牌已被賦值,即將其從框架的面板中移去if (cards0 != null)for (int i = 0; i < 104; i+) pane.remov
34、e(cardsi);int n = 0;/通過難度等級,為n賦值if (this.grade = Spider.EASY)n = 1;else if (this.grade = Spider.NATURAL)n = 2;elsen = 4;/ 為card賦值for (int i = 1; i <= 8; i+)for (int j = 1; j <= 13; j+)cards(i - 1) * 13 + j - 1 = new PKCard(i % n + 1)+ "-" + j,this);假設(shè)n=1,此時i%n的值為0,則1%n+1的值為1,所以創(chuàng)建的圖片應(yīng)
35、該是1-1到1-13全是黑桃,為同一花色,n等于其它 值時類似。如圖所示:簡單,單一花色:24中級,雙高級,四花色:/隨機紙牌初始化將紙牌的順序打亂/*紙牌隨機分配*/public void randomCards() PKCard temp = null;/隨機生成牌號for (int i = 0; i < 52; i+)int a = (int) (Math.random() * 104);int b = (int) (Math.random() * 104); temp = cardsa;cardsa = cardsb;cardsb = temp;設(shè)置紙牌的位置public voi
36、d setCardsLocation()table = new Hashtable();c = 0;finish = 0;n = 0;a = 0;int x = 883;坐標位于界面的右下角區(qū)域/初始化待展開的紙牌for (int i = 0; i < 6; i+)for (int j = 0; j < 10; j+)int n = i * 10 + j;pane.add(cardsn);/將card轉(zhuǎn)向背面cardsn.turnRear();/將card放在固定的位置上cardsn.moveto(new Point(x, y);/將card的位置及相關(guān)信息存入table.put(
37、new Point(x, y), cardsn);x += 10;x的值循環(huán)一次增10,表示下一疊紙牌的位置x = 20;y=4 :坐標位于上方的玩牌區(qū)域最左邊一個背景框的位置。初始在表面顯示的紙牌for (int i = 10; i > 5; i-)for (int j = 0; j < 10; j+)生成索引值值超過104則退出本次循環(huán) 將索引信所指的紙牌添加到面板容器 將紙牌轉(zhuǎn)到背面去將紙牌移動的固定的位置上去將紙牌及其對應(yīng)的位置存入到哈希表中x += 101;x = 20;Xy -= 5;Y背景框間隔的X值為101坐標回到原先的位置處坐標會向下移動5個單位,表示第二行紙牌的
38、初始化開方法:游戲運行public void deal()this.setNA();/ 判斷10列中是否空列for (int i = 0; i < 10; i+)if (this.getLastCardLocation(i) = null)有空位不能發(fā)JOptionPane.showMessageDialog(this,”牌!","提示",JOptionPane.WARNING_MESSAGE); return;int x = 20;for (int i = 0; i < 10; i+)Point lastPoint = this.getLastCar
39、dLocation(i);/ 這張牌應(yīng)“背面向上”if (c = 0)當還沒有發(fā)過牌時,每列的紙牌中y坐標相差5個單位。/ 這張牌應(yīng)“正面向上”elselastPoint.y += 20;否則是兩張正面顯示紙牌差值table.remove(cardsc + i.getLocation();cardsc + i.moveto(lastPoint);table.put(new Point(lastPoint), cardsc + i);cardsc + i.turnFront();cardsc + i.setCanMove(true);/將組件card移動到容器中指定的順序索引。this.pane
40、.setComponentZOrder(cardsc + i, 1);Point point = new Point(lastPoint);if (cardsc + i.getCardValue() = 1)int n = cardsc + i.whichColumnAvailable(point);point.y -= 240;PKCard card = (PKCard) this.table.get(point);if (card != null && card.isCardCanMove()判斷紙牌是否可以回收以及 回收的總次數(shù)x += 101;c += 10;3.3.4
41、 紙牌的移動以及放置代碼實現(xiàn)如下:用鼠標拖動紙牌public void mouseDragged(MouseEvent arg0) if (canMove)int x = 0;int y = 0;Point p = arg0.getPoint();x = p.x - point.x;y = p.y - point.y; this.moving(x, y);方法:放置紙牌public void setNextCardLocation(Point point) PKCard card = main.getNextCard(this); if (card != null)if (point = nu
42、ll)card.setNextCardLocation(null);main.table.remove(card.getLocation();card.setLocation(card.initPoint);main.table.put(card.initPoint, card);elsepoint = new Point(point);point.y += 20;card.setNextCardLocation(point);point.y -= 20;main.table.remove(card.getLocation();card.setLocation(point);main.tabl
43、e.put(card.getLocation(), card); card.initPoint = card.getLocation();3.3.5 顯示當前紙牌可行的操作:代碼實現(xiàn)如下:返回值:void方法:顯示可移動的操作public void showEnableOperator()int x = 0;out: while (true)Point point = null;PKCard card = null;doif (point != null) n+;point = this.getLastCardLocation(n);while (point = null)point = th
44、is.getLastCardLocation(+n);if (n = 10) n = 0;x+;if (x = 10) break out;card = (PKCard) this.table.get(point);while (!card.isCardCanMove();while (this.getPreviousCard(card) != null&& this.getPreviousCard(card).isCardCanMove() card = this.getPreviousCard(card);if (a = 10)a = 0;for (; a < 10;
45、 a+)if (a != n)Point p = null;PKCard c = null;doif (p != null)a+;p = this.getLastCardLocation(a);int z = 0;while (p = null)p = this.getLastCardLocation(+a);if (a = 10) a = 0;if (a = n) a+;z+;if (z = 10) break out;c = (PKCard) this.table.get(p);while (!c.isCardCanMove();if (c.getCardValue() = card.ge
46、tCardValue() + 1) card.flashCard(card);tryThread.sleep(800);catch (InterruptedException e) e.printStackTrace();c.flashCard(c);a+;if (a = 10)n+;break out;n+;if (n = 10)n = 0;x+;if (x = 10)break out;3.3.6 回收紙牌:代碼實現(xiàn)如下:返回值:void方法:判斷紙牌的擺放是否完成public void haveFinish(int column)Point point = this.getLastCardLocation(column);PKCard card = (PKCard) this.table.get(point);dothis.table.remove(point);card.moveto(new Point(20 + finish * 10, 580);/將組件移動到容器中指定的順序索引。pane.setComponentZOrder(card, 1);/將紙牌新的相關(guān)信息存入Hashtablethis.table.put(card.getLocation(), card);card.setCan
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廈門軟件職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案詳解一套
- 2026年江蘇城鄉(xiāng)建設(shè)職業(yè)學(xué)院單招職業(yè)技能考試題庫含答案詳解
- 2026年鄭州醫(yī)藥健康職業(yè)學(xué)院單招職業(yè)技能考試題庫及完整答案詳解1套
- 2026年重慶經(jīng)貿(mào)職業(yè)學(xué)院單招職業(yè)適應(yīng)性考試題庫及完整答案詳解1套
- 2026年上海建橋?qū)W院單招職業(yè)適應(yīng)性測試題庫及完整答案詳解1套
- 2026年上海第二工業(yè)大學(xué)單招職業(yè)適應(yīng)性考試題庫及完整答案詳解1套
- 2026年渭南職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫帶答案詳解
- 2026年嵩山少林武術(shù)職業(yè)學(xué)院單招職業(yè)適應(yīng)性考試題庫附答案詳解
- 2026年萬博科技職業(yè)學(xué)院單招職業(yè)技能考試題庫及答案詳解一套
- 2026年阜新高等??茖W(xué)校單招職業(yè)傾向性考試題庫含答案詳解
- 大窯校本教材合唱的魅力
- 2025字節(jié)跳動智能廣告發(fā)布服務(wù)合同(模板)
- 《建筑測繪》課件
- 《健康體檢報告解讀》課件
- 前臺電話禮儀培訓(xùn)
- T-CET 402-2024 金屬結(jié)構(gòu)曲面屋頂晶硅組件建筑光伏一體化技術(shù)規(guī)范
- 智慧健康養(yǎng)老管理基礎(chǔ)知識單選題100道及答案解析
- 車床設(shè)備大修計劃方案
- 《法律職業(yè)倫理(第三版)》課件全套 王進喜 第1-21章 法律職業(yè)-司法鑒定職業(yè)倫理
- 遼寧省地質(zhì)勘探礦業(yè)集團有限責(zé)任公司招聘筆試題庫2024
- 《山區(qū)公路橋梁典型病害手冊(試行)》
評論
0/150
提交評論