




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、«面向對象程序設計課程設計報告題 目:貪吃蛇游戲設計與實現院(系): 信息科學與工程學院專業班級:計科1302班學生姓名:毛慧劍學 號:20131101057指導教師:蘇瑩2015年8月31日至2015年9月25日華中科技大學武昌分校制面向對象程序設計課程設計任務書、設計(調查報告/論文)題目貪吃蛇游戲設計與實現 二、設計(調查報告/論文)主要內容內容:玩家可以通過鍵盤或鼠標控制游戲區。游戲設定不同級別,級別越高難度越大,玩 家可以根據自己的需要自由設定初始游戲級別,當玩家取得的分數到達一定水平時游戲 自動進入下一個級別。游戲以最終玩家獲得的分數來判斷玩家水平的高低。使用Eclips
2、e 和JDK1.6工具,操作系統為 WINDOWS,采用面向對象方法完成,包括總體設計、詳 細設計、編碼實現、測試。設計要求如下:游戲由模塊組成:游戲區模塊,游戲控制模塊,級別設置模塊和幫助模塊。游戲區模塊,為玩家提供主體游戲功能,能夠處理玩家的各種游戲操作, 顯示得分情況,并最終顯示游戲結果。游戲控制模塊,該模塊為玩家提供游戲控制功能,應包括開始游戲,暫停游戲和退出 游戲三部分功能。級別設置模塊為玩家提供自行設置游戲的初始級別功能,主要提供初級,中級和高級 三個游戲初始級別設置。三、原始資料1 .面向對象程序設計課程設計指導書2 .耿祥義.JAVA大學實用教程.北京:清華大學出版社,2009
3、.四、要求的設計(調查/論文)成果1 .課程設計報告2 .課程設計軟件五、進程安排布置任務,查找資料、需求分析 2天總體設計1天詳細設計2天編制源程序實現4天測試與修改1天撰寫課設報告2天六、主要參考資料1張廣彬.Java課程設計案例精編(第二版).北京:清華大學出版社,2011.2耿祥義.Java課程設計(第二版).北京:清華大學出版社,2008.3耿祥義.JAVA大學實用教程.北京:清華大學出版社,2009.4鄒林達.陳國君Java2程序設計基礎.北京:清華大學出版社,2010.指導教師(簽名)目錄1 需求與總體設計112錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書簽。錯誤!未定義書
4、簽。1.1 總體設計思路1.2 系統主要功能圖 1.3 系統主要類圖 2 詳細設計 2.1 Login 類 2.2 SnakeFrame 類 2.3 SnakeModel 類 2.4 SnakePanel 類 32 . 5 LocationRO 類 錯誤!未定義書簽。2.6 Location 類 錯誤!未定義書簽。3 . 編碼實現 43.1 Login 類的詳細代碼 43.2 SnakeFrame 類的詳細代碼 73.3 SnakeModel 類的詳細代碼 123.4 SnakePanel 類的詳細代碼 173.5 LocationRO 類的詳細代碼 223.6 Location 類 的詳細代
5、碼 234 系統運行與測試 254.1 程序主界面 254.2 游戲開始界面 254.3 游戲操作界面 254.4 游戲難度設置界面 264.5 游戲窗口大小設置 274.6 游戲軟件開發人員介紹 275 系統使用步驟 28總結 .291需求與總體設計1.1 總體設計思路本系統要進行的是貪吃蛇游戲的開發。這個游戲是在窗口的平臺上進行相關操作 的。為了滿足大部分用戶的要求,本游戲必須實現的功能有如下要求:(1)貪吃蛇游戲是大家很常見的小游戲,在生活工作之余大家可以玩它,已達到 放松各種壓力的目的。(2)游戲可以進行升級,也就是增加吃食物的難度,以便使大家更有挑戰性,不 覺得太無趣。(3)游戲界面
6、大小可以任意指定,數據從文件讀入。(4)利用swing實現良好的GUI界面。(5)基本功能與要求:給出1條小蛇和隨機出一個食物當小蛇吃到食物時就加分 .良好的用戶界面,有分數顯 示,并且可調節小蛇運動速度。良好的方塊形狀設計,繪制小蛇和食物,小蛇有六個方 塊組成,食物由1個方塊組成。小蛇可通過鍵盤方向鍵(上、下、左、右鍵)進行向上、 向下、向左、向右移動。當小蛇吃掉一個食物后會變長,并且吃完食物時食物會消失, 并立即隨即生成一個新的食物1.2 系統主要功能圖貪吃蛇實現的基本功能:生成登錄窗口界面,登錄進入游戲,可以設置游戲的窗口 大小和難度等級游戲途中有暫停 繼續 開始等基本功能。同時還設有游
7、戲幫助等具體 游戲操作指示、在加入了軟件開發人員的相關信息介紹 結束游戲之后得分在窗口下自 動統計得出圖1-1系統功能圖1.3 系統主要類圖(ogbnF用戶名>czancel*&rrt=rO-U 10360SnakeFrame第 Color 叁 Container 金FIqwL剪out /GridLayout .Action Eent SAction Listener0口 tionMenu。 setJMenuBar()set Layout。 setEnabled()18SnakeM odel命rows 備 cols 鼠5naKeHe2d ijuningDi notion 令 Iq
8、g RO jsnake jJ; play Blacks 第 5ndMFood games core皂Adds 8 re*LocationRO()*getSnakeHead()LocationROO*getSnakeTailQLocation。g&t Runing Diriction() LinkedListj) *getSnake() LinkedListQ getOthers。gctSco的 0*moeTo()*opname()SnakePand電ri#Pa側 品;d %.S nak eBody otherBlocks 為 Mt eHead snakeFood g am eScore
9、 = 0 電speed '%'AddScofe麻End 職 dtExit*newGame() *stopGameO retumGamefl getGarneScore() %pdateTextFiledO updateCdors() *runQkey Pressed。keyRel 瞄刈 /eyTyp 剜 ,change。Location圖1-2備,vLocationf)getK)*getv()setX)setY()eqgQrR的)equals。re呢e()2詳細設計Go和Cancel兩個登陸2.1 Login 類Login屬性:用戶名Go (進入游戲)Cancel密碼(取消)操
10、作:Enter ()Close()Login類,登陸界面要求輸入登陸者輸入用戶名和密碼,分別設選項。 SnakeFrame 類創建游戲窗口主界面。采用圖形界面設計,有窗體,菜單欄和游戲操作界面。2.3 SnakeModel 類此類為蛇的初始化狀態及模型,所有的游戲的開始都通過此類初始化及對蛇的操作SnakeModel屬性:rows,cols , snakeHead,runingDiriction , locRO, snake,playBlocks snakeFood , gameScore, AddScore操作:LocationRO getSnakeHead() , Loca
11、tionRO getSnakeTail(),Location getRuningDiriction(), LinkedList getSnake() ,LinkedList getOthers() , getScore() , getAddScore(), setSnakeHead(Location snakeHead) , LocationRO getSnakeFood(), setSnakeFood() , moveTo(Object a,LinkedList fromlist,LinkedList tolist) , init() , SnakeModel(int rows1,int c
12、ols1) , move(Location direction)2.4 SnakePanel 類此類為游戲界面創建蛇的面板和蛇的移動控制實現SnakePanel屬性:gridsPanel , row; col; gridsPanel;direction;snake; snakeBody; otherBlocks;snakeHead; snakeFood; gameScore=0; speed;AddScore; t; isEnd; notExit;操作:SnakePanel(SnakeFrame parent,int row,int col) , newGame(long speed) sto
13、pGame(), returnGame() , getGameScore(), updateTextFiled(String str)updateC010rs() , run() , keyPressed(KeyEvent event) keyReleased(KeyEvent event) , keyTyped(KeyEvent event) change(SnakeFrame parent,int row2, int col2)2.5 LocationRO 類隨機生成的食物位置。用來隨機生成食物。引導蛇的移動方向。2.6 Location 類對蛇的位置的描述類Location屬性:x y操
14、作:Location(int x,int y) , getX() , getY() , setX(int x), setY(int y) , equalOrRev(Location e), equals(Location e), reverse(Location e)I.Login 類/登陸界面public class LoginprivateTextFieldprivateTextFieldprivateJButtonprivateJButtonpublicLogin() 3編碼實現extends JFrame f1 ; /創建文本框f2 ;b1 ; /創建按鈕b2;/登陸界面Contain
15、er cp=getContentPane();/獲取容器cp.setLayout(new GridLayout(4,1);/設置布局管理為網格四行一列Label l1 =newLabel("用戶名");/創建標簽了 l1 , l2Label l2=newLabel("密 碼");Panel p1 =newPanel();/創建面板,p1,p2,p3, p4Panel p2=newPanel();Panel p3=newPanel();MyPanel1 p4= new MyPanel1(); / 創建插入圖片平面 p4f1 =new TextField(1
16、0);f2 =new TextField(10);f2 .setEchoChar();/回顯字符為*用于輸入密碼,設置為不可見b1 =new JButton("確定");/新建按鈕b1 , b2b2 = new JButton("取消");p1.add(l1);/第一行添加label 1p1.add( f1);p2.add(l2);p2.add(f2);p3.add(b1);p3.add(b2);cp.add(p4); /面板p4p1 , p2 , p3分別加入容器cp_cp.add(p1);cp.add(p2);cp.add(p3);b1 .addAc
17、tionListener(new Enter();/添加按鈕事件響應b2 .addActionListener(new Close();JFrame. setDefaultLookAndFeelDecorated(true );SnakeFrame frame= new SnakeFrame(); / 創建游戲主界面 frame.setSize(frame.col *11+11,frame. row *11+100);frame.setResizable( false ); frame.setLocation(500,200);/ 設置窗體位置frame.setTitle("瘋狂貪吃
18、蛇");frame.setVisible( true ); else JOptionPane. showMessageDialog (null ,"用戶名或密碼錯誤,請重新 登錄! "); /錯誤用戶提示 class Close implements ActionListener / 關閉登陸按鈕響應public void actionPerformed(ActionEvent e) JButton bt=(JButton)e.getSource(); if (bt= b2) System. exit (0); / 退出 /主函數程序開始 public stati
19、c void main(String口 args) Login log= new Login(); log.setTitle("瘋狂貪吃蛇界面登陸 ");log.setBounds(500, 200, 300, 300); log.setBackground(Color.blue );log.setVisible(true ); class MyPanel1 extends JPanel / 插入登陸界面圖片Image img =Toolkit. getDefaultToolkit ().getImage( "imgs/201.jpg" ); / 添加圖
20、片 public void paint(Graphics g) g.drawImage( img ,0,0, this );2.SnakeFrame 類public class SnakeFrame extends JFrame implements ActionListener introw =30;intcol =45;SnakePanelp = new SnakePanel( this , row , col );JMenuBar menubar =new JMenuBar(); / 菜單條JMenu fileMenu =new JMenu("文件");/ 菜單&qu
21、ot;開始");/菜單條目JMenuItem newgameitem =new JMenuItem(JMenuItemstopitem=new JMenuItem(" 暫停 " );JMenuItem runitem =new JMenuItem( " 繼續 " );JMenuItemexititem=new JMenuItem(" 退出 " );/" 設置 " 菜單JMenu optionMenu =new JMenu( " 設置 " );/* 等級選項* ButtonGroup創建
22、一組按鈕選項* JRadioButtonMenuItem是屬于一組菜單項中的一個菜單項,該組中只能選擇一個項。* 被選擇的項顯示其選擇狀態。選擇此項的同時,其他任何以前被選擇的項都切換到未選擇狀態。* Panel 是最簡單的容器類。應用程序可以將其他組件放在面板提供的空間內,這些組件包括其他面板。*/JMenu degreeMenu =new JMenu( " 等級 " );ButtonGroupgroupDegree = new ButtonGroup();JRadioButtonMenuItemoneItem = new JRadioButtonMenuItem(&qu
23、ot; 初級 " );JRadioButtonMenuItemtwoItem = new JRadioButtonMenuItem(" 中級 " );JRadioButtonMenuItemthreeItem = new JRadioButtonMenuItem(" 高級 "/ 設置“窗口大小” 菜單JMenuwindowsMenu =new JMenu( " 窗口大小" );JMenuwindowsMenu1 =new JMenu( " 視圖 " );ButtonGroupgroupDegree1 =
24、new ButtonGroup();JRadioButtonMenuItemminItem = new JRadioButtonMenuItem("小");JRadioButtonMenuItemmidItem = new JRadioButtonMenuItem("中");JRadioButtonMenuItemmaxItem = new JRadioButtonMenuItem("大");/ 設置 “作者信息 ” 菜單JMenu XinXi =new JMenu( " 關于開發者" );JMenuItem Xi
25、nXiItem =new JMenuItem( " 軟件相關 " );/ 設置 “幫助 ” 菜單JMenu helpMenu =new JMenu( " 幫助 " );JMenuItem helpItem =new JMenuItem( " 操作指南 " );/ 可以被選定或取消選定的菜單項.final JCheckBoxMenuItem showGridItem = new JCheckBoxMenuItem( " 顯示網格 " );JLabel scorelabel ; / 為分數創建標簽public JTex
26、tField scoreField ; / 顯示分數的文本框private long speedtime =200;private String helpstr = " 游戲說明: n1 :方向鍵控制蛇移動的方向 ." +"n2:單擊菜單' 文件-> 開始' 開始游戲."+"n3 :單擊菜單' 文件 -> 暫停 ' 或者單擊鍵盤空格鍵暫停游戲." +"n4:單擊菜單' 文件-> 繼續' 繼續游戲."+"n5 :單擊菜單' 設置 -&
27、gt; 等級 ' 可以設置難度等級." +"n6 :單擊菜單' 設置 -> 顯示網格 ' 可以設置是否顯示網格 ." +"n7 :紅色為食物, 吃一個得 30 分同時蛇身加長." +"n8 :蛇不可以出界或自身相交,否則結束游戲." ;SnakeFrame() scoreField .setHorizontalAlignment(0);/ 設置圖標和文本的水平對齊方式JPanel toolPanel= new JPanel();toolPanel.add(scorelabel);toolPane
28、l.add(scoreField);contentpane.add(toolPanel);/ 事件監聽 使得按鈕可以響應showGridItem .addActionListener(this );public void actionPerformed(ActionEvent e)/ 事件響應從接口 ActionListener 復制的描述 ,發生操作時調用。try / 異常捕獲if (e.getSource()= helpItem )JOptionPane. showConfirmDialog ( p, helpstr , " 操縱說明" ,JOptionPane. PL
29、AIN_MESSAGE );else if (e.getSource()= exititem )JOptionPane. showConfirmDialog ( null ," 你確定退出游戲嗎? " , " " ,JOptionPane.showMessageDialog ( this , " 瘋狂貪吃蛇nn 武昌首義學院n 信息科學與工程學院 n 計算機科學與技術 " + "n 學號: 20131101057"+ "n 姓名: 毛慧劍 n 指導老師:蘇瑩n2015 年9月 " ,"
30、 軟件相關 " ,JOptionPane. INFORMATION_MESSAGE );else if (e.getSource()= midItem )row =40; col =60;p.change( this , row , col );this .setSize( col *11+11, row *11+100); else if (e.getSource()= maxItem ) row =50; col =70;p.change( this , row , col );this .setSize( col *11+11, row *11+100); catch (Exc
31、eption ee)ee.printStackTrace();/ 異常處理3.SnakeModelimport java.util.LinkedList;import javax.swing.JOptionPane;public class SnakeModel private int rows,cols;/行列數運行方向類數組蛇及其它區域塊目標食物分數加分private Location snakeHead,runingDiriction;/private LocationRO locRO;/LocationROprivate LinkedList snake,playBlocks;/pri
32、vate LocationRO snakeFood;/private int gameScore=0; /private boolean AddScore=false;/ 獲得蛇頭public LocationRO getSnakeHead()return (LocationRO)(snake.getLast();/ 蛇尾public LocationRO getSnakeTail()return (LocationRO)(snake.getFirst();/ 運行路線public Location getRuningDiriction()return runingDiriction;/ 獲得
33、蛇實體區域public LinkedList getSnake()return snake;private void setSnakeHead(Location snakeHead) this.snakeHead=snakeHead;獲得目標食物public LocationRO getSnakeFood()return snakeFood;隨機設置目標食物private void moveTo(Object a,LinkedList fromlist,LinkedList tolist) fromlist.remove(a);tolist.add(a);public void init()p
34、layBlocks.clear();snake.clear();gameScore=0;for(int i=0;i<rows;i+)for(int j=0;j<cols;j+)playBlocks.add(locROij);初始化蛇的形狀for(int i=4;i<6;i+)moveTo(locRO4i,playBlocks,snake);蛇頭位置snakeHead=new Location(4,6);設置隨機塊snakeFood=new LocationRO(0,0);setSnakeFood();初始化運動方向init();false* 定義布爾型move 方法,如果運行
35、成功則返回 true, 否則返回* 參數 direction 是 Location 類型,* direction 的值 :(-1,0) 表示向上; (1,0) 表示向下;* (0,-1) 表示向左; (0,1) 表示向右;* *public boolean move(Location direction)判斷設定的方向跟運行方向是不是相反if (direction.reverse(runingDiriction)snakeHead.setX(snakeHead.getX()+runingDiriction.getX();snakeHead.setY(snakeHead.getY()+runin
36、gDiriction.getY();elsesnakeHead.setX(snakeHead.getX()+direction.getX();snakeHead.setY(snakeHead.getY()+direction.getY();/ 如果蛇吃到了目標食物tryif (snakeHead.getX()=snakeFood.getX()&&(snakeHead.getY()=snakeFood.getY()moveTo(locROsnakeHead.getX()snakeHead.getY(),playBlocks,snake);setSnakeFood();gameSc
37、ore+=30;AddScore=true;elseAddScore=false;/ 是否出界if(snakeHead.getX()<rows)&&(snakeHead.getY()<cols)&&(snakeHead.getX()>=0&&(snakeHead.getY()>=0)/ 如果不出界,判斷是否與自身相交if(snake.contains(locROsnakeHead.getX()snakeHead.getY()/ 如果相交 , 結束游戲JOptionPane.showMessageDialog(null, &
38、quot;Game Over!", "游戲結束 ", JOptionPane.INFORMATION_MESSAGE);return false;else/ 如果不相交,就把snakeHead 加到 snake 里面,并且把尾巴移出moveTo(locROsnakeHead.getX()snakeHead.getY(),playBlocks,snake);moveTo(snake.getFirst(),snake,playBlocks);elsereturn true;4. SnakePanel 類public class SnakePanel extends J
39、Panel implements Runnable,KeyListenerJFrame parent=new JFrame();網格行數列數private int row; /private int col; /private JPanel gridsPanel; /private Location direction;/private SnakeModel snake; /private LinkedList snakeBody; / private LinkedList otherBlocks; /private LocationRO snakeHead; / private Locati
40、onRO snakeFood; / private Color bodyColor=Color.blue;/ private Color headColor=Color.red; / private Color foodColor=Color.pink; / private Color othersColor=Color.white;/ private int gameScore=0; / private long speed;/private boolean AddScore;private Thread t;/private boolean isEnd; /private static b
41、oolean notExit;/ 構造器,初始化操作30-341 60-671 40-451面板網格方向定位貪吃蛇蛇的身體其他區域蛇的頭部目標食物蛇的身體顏色蛇的頭部顏色目標食物顏色其他區域顏色總分速度(難度設置)/ 加分線程暫停public SnakePanel(SnakeFrame parent,int row,int col) change(parent,row,col);/開始游戲public void newGame(long speed)this.speed=speed;if (notExit) snake.init();/初始化elserequestFocus();directi
42、on.setX(0);direction.setY(1);gameScore=0;updateTextFiled(""+gameScore);isEnd=false;/暫停游戲public void stopGame()requestFocus();isEnd=true;/ 繼續public void returnGame()requestFocus();isEnd=false;/ 獲得總分public int getGameScore()return gameScore;/ 更新總分private void updateTextFiled(String str)(Snak
43、eFrame)parent).scoreField.setText(str);/ 更新各相關單元顏色private void updateColors()/ 設定蛇身顏色snakeBody=snake.getSnake();Iterator i =snakeBody.iterator();while(i.hasNext()LocationRO t=(LocationRO)(i.next();gridsPanelt.getX()t.getY().setBackground(bodyColor);/ 設定蛇頭顏色snakeHead=snake.getSnakeHead();gridsPanelsn
44、akeHead.getX()snakeHead.getY().setBackground(headColor);/ 設定背景顏色otherBlocks=snake.getOthers();i =otherBlocks.iterator();while(i.hasNext()LocationRO t=(LocationRO)(i.next();gridsPanelt.getX()t.getY().setBackground(othersColor);/ 設定臨時塊的顏色/ 實現 Runnable 接口public void run()while(true) tryThread.sleep(spe
45、ed);catch (InterruptedException e)if(!isEnd)isEnd=!snake.move(direction);updateColors();if(snake.getAddScore()gameScore+=10;updateTextFiled(""+gameScore);/ 實現 KeyListener 接口public void keyPressed(KeyEvent event)int keyCode = event.getKeyCode();if(notExit)if (keyCode = KeyEvent.VK_LEFT) /向左
46、direction.setX(0);direction.setY(-1);向右else if (keyCode = KeyEvent.VK_RIGHT) / direction.setX(0);direction.setY(1);else if (keyCode = KeyEvent.VK_UP) / 向上direction.setX(-1);direction.setY(0);else if (keyCode = KeyEvent.VK_DOWN) / 向下 direction.setX(1);direction.setY(0);else if (keyCode = KeyEvent.VK_
47、SPACE) / 空格鍵 isEnd=!isEnd;public void keyReleased(KeyEvent event)public void keyTyped(KeyEvent event)public void change(SnakeFrame parent,int row2, int col2) this.row=row2;this.col=col2;this.parent=parent;gridsPanel=new JPanelrowcol;5. LocationRO 類public class LocationRO privateintx ;privateinty ;Lo
48、cationRO( int x, int y) this . x =x;this . y=y;int getX() return x ;int getY() return y ;public boolean equalOrRev(LocationRO e) return (e.getX()=getX()&&(e.getY()=getY()|(e.getX()=getX()&&(e.getY()=-1*getY() |(e.getX()=-1*getX()&&(e.getY()=getY();public boolean equals(LocationRO e) return (e.getX()=getX()&&(e.getY()=getY();public boolean reverse(Locatio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年石英纖維及制品項目建議書
- 高效節能電機項目規劃設計方案(參考)
- 2025年Α-乙酰乳酸脫羧酶項目合作計劃書
- 2025年文物遺址保護服務項目合作計劃書
- 2025年聚砜PSF項目建議書
- 2025年智能垃圾分類運營模式在垃圾分類行業技術創新動態報告
- 農村金融服務創新模式研究-2025年農村金融信用體系建設與評價報告
- 醫院信息化2025年電子病歷系統優化與醫療信息化標準對接報告
- 2025年能源互聯網分布式能源交易與分布式熱力網的融合創新報告
- 金融衍生品市場創新與風險防范:2025年政策法規與監管體系改革探討與實踐001
- GB/T 26427-2010飼料中蠟樣芽孢桿菌的檢測
- GB/T 23776-2018茶葉感官審評方法
- 新滬科版數學八年級上冊同步練習(全冊分章節)含答案
- 沙迪克操作手冊
- 《肌肉力量訓練》課件
- 小學升初中入學測試寧外入學試卷2
- 桶裝水領用表
- 營運客車等級劃分及評定重點標準
- 小學五年級英語學情分析
- 最新交管b2學法減分題庫及答案
- 人教版八年級數學上冊 《三角形的高、中線與角平分線》三角形教學課件
評論
0/150
提交評論