版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
達(dá)內(nèi)學(xué)員:我的俄羅斯方塊項目總結(jié)獲獎學(xué)員:陳啟壯所獲獎項:三等獎內(nèi)容俄羅斯方塊一共三個類中間用等號隔開軟件的開發(fā)過程1明確業(yè)務(wù)需求用自然語言,將業(yè)務(wù)功能描述清楚???2業(yè)務(wù)分析找到有哪些業(yè)務(wù)對象,和圖片的分析teEs(俄羅斯方塊)I score累計分?jǐn)?shù)I一一lines銷毀的行數(shù)I一一Wall(墻20行X10列)I——20row(行)I 10colcell(列)I tetroinino(4格方塊,有7種形態(tài))I 4cellI nextOne卜一?個準(zhǔn)備卜落的方塊I 4cell3數(shù)據(jù)模型,一切業(yè)務(wù)對象轉(zhuǎn)換為數(shù)字表示場地按照行列劃分為20x10格子格子有屬性row,col,color4類設(shè)計Tetiis|-mtscore|-mtlmes|-CeU[20][10]waU|-Tetronunotetronuno| |-Cell[4]ceUs|—row|—col|—color5算法設(shè)計,就是如何利用數(shù)據(jù)的計算實現(xiàn)軟件的功能4格方塊的初始形態(tài):ISZJLTO就在初始數(shù)據(jù)的數(shù)值狀態(tài)設(shè)計四格方塊的下落計算:就是將每個格子的2W+1就是將下落的業(yè)務(wù)功能,轉(zhuǎn)換為數(shù)字計算實現(xiàn)左右移動卜?落流程控制:控制方塊卞落與墻之間的控制關(guān)系1合理的文字流程描述2分析文字描述中的功能(動作)為方法3用流程控制語句連接方法實現(xiàn)功能4嚴(yán)格測試結(jié)果!TestCase左右移動流程控制分?jǐn)?shù)計算界面的繪制鍵盤爭件控制旋轉(zhuǎn)流程控制加速下降流程控制開始流程控制(Timer)暫停流程控制繼續(xù)流程控制結(jié)束流程控制首先是Cell類,最基本的類包含3個私有屬性和get,set方法,重寫Object類的toStrmg輸出方法,并規(guī)定格子所具有的3個移動功能packagecom.tarena.tetiis;〃包:小寫英文字母,域名倒寫.項目名/***最小的格子*/publicclassCell{privateintrow;privateintcol;privateintcolor;publicCell(introw,iiitcol,intcolor){superQ;this.row=row;this.col=col;this.color=color;}publiciiitgetColQ{returncol;}publicvoidsetCol(mtcol){tliis.col=col;}publiciiitgetColoi(){returncolor;}publicvoidsetColor(mtcolor){this.color=color;}publiciiitgetRowQ{returnrow;}publicvoidsetRow(introw){this.row=row;}publicvoidleft(){
col-;}publicvoidlight。{col-H-;}publicvoiddiop(){row++;}publicStimgtoString(){returnrow+H/+col;}}packagecom.tarena.tetiis;miportjava.util.Arrays;miportjava.util.Tiiner;miportjava.util.TiinerTask;miportjavax.swmg.JPanel;//是能夠顯示的矩形面板區(qū)域miportjavax.swing.JFrame;//?I1框miportjavax.swing.boider.LmeBoider;//$f!ilji?miportjava.awt.Color;miportjava.awt.Font;miportjava.awt.Grapliics;miportjava.awt.event.KeyAdapter;miportjava.awt.event.KeyListener;miportjava.awt.event.KeyEvent;嚴(yán)*俄羅斯方塊類*俄羅斯方塊擴(kuò)展了(extends)系統(tǒng)的顯示面板,增加了墻和*正在下落的方塊*?/publicclassTetrisextendsJPaiiel{publicstaticfinalmtROWS=20;publicstaticfinalmtCOLS=10;嚴(yán)代表方塊下落著陸的墻5*7privateCell[][]wall=newCell[ROWS][COLS];/*是正在下落的方塊*/privateTetionunotetionuno;/*下一個進(jìn)入的方塊*/privateTetionunonextOne;privatestaticintscore;privateintlmes;Tunertimer;privatebooleangameOver=false;privatebooleanpause=false;//?f?privatestaticfilialint[]SCORE_LEVEL={0丄4,10,100};privatestaticfilialGraphicsGraphics=null;/*銷毀(destoiy)滿行3// 01234/*在Tetris中添加方法,檢查游戲是否結(jié)束*/publicvoidrotateRightActionQ{tetroniuio.rotateRight();if(outOfBounds()|comcide()){tetroniuio.rotateLeft();}}publicvoidrotateLeftActionQ{tetroniHio.rotateLeftQ;if(outOfBounds()|comcide()){tetronuiio.rotateRight();}}/*在Tetris中添加方法,檢查游戲是否結(jié)束*/privatebooleangameOver(){gameOver=wall[0][4]!=null;retuingameOver;}/*在Tetris中添加方法*/publicvoidhardDiopAction(){while(caiiDiopQ){tetroniuio.softDiop();}tetroniHioLandToWall();destioyQ;if(gameOver()){gameOveiAction();}nextTetroniuio();publicvoiddestroyQ{mtlmes=0;〃統(tǒng)計本次銷毀的行數(shù)fbi(introw=0;row<wall.length;row-H-){Cell[]line=\vall[iow];if(fullCell(lme)){clearLme(row,wall);lines卄;〃每消除一行就累計加1}}score+=SCORE_LEVEL[liiies];this.lines+=liiies;}publicstaticvoidclearLme(intiow,Cell[][]wall){for(inti=row;i>1;i一){System.anaycopv(wall[i-1],0.wall[i],05wall[i].length);}Airavs.fill(wall[0],nu11);}publicstaticbooleanfullCell(Cell[]lme){fbr(intcol=0;col<line.length;col++){if(line[col]==null){retumfalse;//找到空格子,這行沒有滿}}returntine;}_publicSuingtoStringOf//顯示全部的墻Stringstr=””;for(introw=0;row<ROWS;row++){Cell[]line=\vall[iow];for(iiitcol=0;col<COLS;col++){Cellcell=line[col];if(tetiommo.contains(row,col)){str+=row+H/+col+M”;}else{str=sti-+cell+"}}str+=”\n”;}returnstr;}?伴4格方塊下降流程*方塊移動到區(qū)域最下方或是著地到其他方塊上無法移動時,*就會固定到該處,而新的方法快出現(xiàn)在區(qū)域上方開始下落。*如果能下降就繼續(xù)下降,*否則就著陸到墻上,并且生成(隨機(jī))下一個方塊**/publicvoidsoftDropActionQ{if(canDrop()){//如果能下降tetronuiio.softDrop();//方塊繼續(xù)卜?降}else{tetronuiioLandToWall();//著陸到墻上destioyO;//if(gameOver()){gameOverActionQ;}nextTetioniino();//生產(chǎn)(隨機(jī))下一個方塊}}privatevoidstanGameAction(){gameOver=false;pause=false;score=0;lines=0;emptyWallQ;nextTetronmio();repamt();timer=newTiinerQ;time匚sch亡 TiinerTask(){publicvoidiun(){softDiopActionQ;repamtQ;}},500,500);}privatevoidemptyWall(){for(introw=0;iow<ROWS;row++){Airays.fill(wall[row].null);}}/*清理游戲結(jié)束現(xiàn)場,女u:停止定時器等*/privatevoidgaineOverAction(){tuner.cancelQ;//停止定時器}/*檢查方塊是否能夠繼續(xù)下落:到底最低部,或者墻上*的下方有方塊,返回fhlse不能下降,返回tee可以下降**/publicbooleancaiiDropQ{〃檢查到底部Cell[]cells=tetroniiiio.getCells();for(Cellcell:cells){if(cell.getRow()==ROWS-1){returnfalse;}}〃檢查墻上下方是否有方塊for(Cellc亡止cells){mtrow=cell.getRowQ;mtcol=cell.getColQ;Cellblock=wall[iow+l][col];if(block!=null){returnfalse;}}retiimtrue;}/*方塊“著陸”到墻上,*取出每個小cell*找到ceU的行號row和列號col*將cell放置到wall[row][col]位置上**/publicvoidtetronuiioLaiidToW^llQ{Cell[]cells=tetroniiiio.getCells();for(Cellcell:cells){mtrow=cell.getRowQ;mtcol=cell.getColQ;wall[row][col]=cell;}}/*生產(chǎn)(隨機(jī))下一個方塊*]下一個變?yōu)楫?dāng)前的*2隨機(jī)產(chǎn)生下一個**/publicvoidnextTetroniuio(){if(nextOne==null){//第一次nextOne是null時候先生產(chǎn)一個nextOne=Tetroniuio.randomTetionuno();}tetroniiiio=nextOne;//F一個變?yōu)楫?dāng)前的nextOne=Tetioniino.iaiidomTetroniiiio();//隨機(jī)產(chǎn)生卜一個if(tetroniHio=null){//處理第一次使用時候下一個是nulltetroniuio=TetioniHio.randomTetioniHio();}/*以格子為單位左右移動方塊*1)如果遇到左右邊界就不能移動了*2)如呆與墻上的格子相撞就不能移動了*變通為:*1)先將方塊左移動,*2)檢查(移動結(jié)果是否出界),或者(重合)*3)如果檢查失敗,就右移的回來***/publicvoidmoveLeftActionQ{tetronwio.moveLeftQ;if(outOfBounds()|coincide()){tetronuiio.moveRight();}}privatebooleanoutOfBounds(){Cell[]cells=tetroniiiio.getCells();for(mti=0;i<cells.length;i++){Cellcell=cells[i];mtrow=cell.getRowQ;mtcol=cell.getColQ;if(row==ROWS||coKO||col>=COLS){returntme;}}retuinfalse;}privatebooleancoincide(){Cell[]cells=tetroniiiio.getCells();for(mti=0;i<cells.length;i++){Cellcell=cells[i];mtrow=cell.getRowQ;mtcol=cell.getColQ;if([ow>0&&row<ROWS&&col<COLS&&col>0&&wall[tow][col]!=null){returntrue;//重合}}retuinfalse;publicvoidmoveRightAction(){tetroniHio.moveRight();if(outOfBounds()|coincide()){tetroniuio.moveLeft();}}publicstaticfinaliiitCELL_SIZE=25;/*在Tetris.java中添加mam方法作為軟件的啟動方法*/publicstaticvoidniain(Strmg[]aigs){JFrameframe=newJFrame(H俄羅斯方塊”);mtwigtli=(COLS+8)*CELL_SIZE+100;mtheight=ROWS*CELL_SIZE+100;frame.setSize(wigth.height);frame.setLocationRelativeTo(null)^/^中frame.setDefaultCloseOperation(JFiame.EXIT_ON_CLOSE)^/設(shè)置關(guān)閉窗II就關(guān)閉軟件frame.setLayout(null);//取消默認(rèn)布局,取消自動充滿Tetrispanel=newTetrisQ;paiiel.setLocation(45,25);paiiel.setSize((COLS+8)*CELL_SIZE.ROWS*CELL.SIZE);paiiel.setBoider(newLmeBoider(Color.black));fiame.add(panel)^/?II中添加面板frame.setVisible(tme);//顯示窗II時候調(diào)用paint。paiiel.action();}/*動作方法,這里是讓軟件開始動作,*/publicvoidaction(){//wall[18][2]=newCell(l&2,0xff0000);startGameActionQ;〃重繪方法一>盡快調(diào)用paint()//startGameActionQ;//this是當(dāng)前Tetiis面板this.requestFocusQ^/為當(dāng)前面板請求獲得輸入焦點//this對彖就獲得了輸入焦點,以后任何的〃鍵盤輸入(包扌舌左右方向鍵)目標(biāo)就是這個面板對彖了!//addKevLIstener添加鍵盤監(jiān)聽,監(jiān)聽那些按鍵輸入了this.addKeyListener(newKeyAdapter(){publicvoidkeyPressed(KeyEvente){mtkey=e.getKeyCodeQ;//key按鍵if(gaineOvei){if(key=KeyEvent.VK_S){staitGameActionQ;//啟動游戲開始流程return;}if(pause){if(key=KeyEvent.\^K_C){continueAction();}return;}//System.out.prmtli^^Type/^e.getKeyCodeO);switch(key){caseKeyEvent.VK_RIGHT:moveRightAction();bieak;caseKeyEvent.VK_LEFT:moveLeftAction();break;caseKeyEvent.VK_DOWN:softDropActionQ;break:caseKeyEvent.VK_UP:rotateRightActionQ;break;caseKeyEvent.VK_SPACE:hardDropActionQ;break;caseKeyEvent.VK^P:pasueAction();bieak;}〃按鍵一>方塊移動方法一>改變方塊數(shù)據(jù)一>repamt()〃->盡快調(diào)用paint()一>利用新數(shù)據(jù)繪制repamtQ;}privatevoidcontinueActionQ{pause=false;timer=newTiinei();timer.schedule(newTimerTask(){publicvoidmnQ{softDropActionQ;repaintO;}},500,500);}privatevoidpasueAction(){pause=tme;timer.caiicelQ;}});}//JPanel類利用paint(涂畫)方法繪制界面〃子類重寫paint方法可以修改繪圖邏輯publicstaticfinalmtBORDER_COLOR=0x667799;publicstaticfinaliiitEG_COLOR=OxC3D5EA:publicstaticfinaliiitFONT_COLOR=0;publicvoidpamt(Graplucsg){//g代表綁定在當(dāng)前面板上的畫筆〃利用畫筆在當(dāng)前面板上繪制了一串字符!paintBackgiound(g);//填充背景paintWall(g);//繪制墻paintTetroniuio(g);//繪制當(dāng)前方塊paintNextOne(g);//繪制下一個方塊pamtScore(g)#繪制分?jǐn)?shù)paintTetrisBordei(g);〃繪制邊線}privatevoidpaiiitScore(Grapliicsg){mtx=12*CELL_SIZE;mtv=5*CELL.SIZE:Fontfont=newFont(getFont().getNameO,F(xiàn)ont.BOLD,25);Stringstr="分?jǐn)?shù):M+score;g.setColoi(newColor(FONT_COLOR));g.setFont(font);g.drawStimg(sti;x,v);v+=2*CELLSIZE;sti=數(shù):M+luies;g.drawStimg(sti;x,v);if(gameOver){str="(T_T)![s]再來!“;y+=2*CELL_SIZE;g.drawStrmg(str,x,y);}if(pause){str=”[c]繼續(xù)!”;y+=2*CELL_SIZE;g.drawStrmg(str,x,y);}else{str="[p]暫停!”;y+=2*CELL_SIZE;g.drawStrmg(str,x,y);}}privatevoidpamtNextOne(Graphicsg){if(nextOne==mill)//如呆沒有4格方塊就返回,不繪制retuni;for(Cellcell:nextOne.getCellsQ){mtrow=cell.getRowQ+1;mtcol=cell.getCol()-r9;mtx=col*CELL_SIZE;mtv=iow*CELL_SIZE;g.setColor(newColor(cell.getColor()));g.fillRect(x,v,CELLOSIZE.CELL_SIZE);g.setColor(newColor(BORDER_COLOR));g.drawRect(x,v,CELLOSIZE,CELL_SIZE);}}privatevoidpamtTetronuiio(Graphicsg){if(tetroniuio=null)//如果沒有4格方塊就返回,不繪制return;for(Cellcell:tetioniiiio.getCells()){mtrow=cell.getRowQ;mtcol=cell.getColQ;mtx=col*CELL_SIZE;mtv=iow*CELL_SIZE;g.setColor(newColor(cell.getColor()));g.fillRect(x,v,CELLOSIZE.CELL_SIZE);g.setColor(newColor(BORDER_COLOR));g.drawRect(x,v,CELLOSIZE,CELL_SIZE);}}privatevoidpamtWall(Grapliicsg){for(mtrow=0;row<ROWS;row++){for(intcol=0;col<COLS;col++){Cellcell=wall[row][col];iiitx=col*CELL_SIZE;iiity=row*CELL_SIZE:if(cell==null){//g.setColor(newColor(BORDER_COLOR));//g.drawRect(x,y?//CELL_SIZE、CELL_SIZE);}else{g.setColoi(newColor(cell.getColorQ));g.fillRect(x,yCELLOSIZE.CELLOSIZE);g?setColoi(newColor(BORDER_COLOR));g.drawRect(col*CELL_SIZE,iow*CELL_SIZE.CELLOSIZE,CELLOSIZE);privatevoidpamtBackgiound(Graphicsg){g.setColoi(newColor(BG_COLOR));g.fillRect(O.0,getWidth(),getHeightQ);}privatevoidpamtTetrisBordei(Graphicsg){g.setColoi(newColor(BORDER_COLOR));g.drawRect(0.0,CELL_SIZE*COLS.CELLOSIZE*ROWS-1);g?diawRect(CELL_SIZE*COLSQCELL_SIZE*8丄CELL_SIZE*ROWS-1);}}packagecom.taiena.tetiis;unportjava.util.Arrays;unportjava.util.Random;嚴(yán)*四格方塊類,有7種子類:ITSZJLO*?/publicabstractclassTetronuno{publicstaticfinalmtI_COLOR=0xff6600;publicstaticfinalmtT_COLOR=0xffi?D0;publicstaticfinalmtS_COLOR=0x66ccff;publicstaticfinalmtZ_COLOR=OxOOf?DO;publicstaticfinalmtJ_COLOR=OxOOOOff;publicstaticfinalmtL_COLOR=0xcc00ff;publicstaticfinalmtO_COLOR=0xff0000;protectedCell[]cells=newCell[4];/*四格方塊的下落,是四個格子一起下落*/publicvoidsoftDrop(){for(inti=0;i<cells.lengtli;i++){cells[i].diop();}}/*向左移動一步*/publicvoidmoveLeft(){for(inti=0;i<cells.lengtli;i++){Cellcell=ceUs[i];//引用賦值publicvoidmoveRight(){〃增強(qiáng)for循環(huán),是傳統(tǒng)數(shù)組迭代的“簡化版本”,〃也稱為foieach循環(huán)(fbreach迭代)(java5以后)for(Cellcell:ceHs){//底層實現(xiàn)就是經(jīng)典迭代cell.iightO;}}publicCell[]getCellsQ{returncells;}protectedOffset[]states;//旋轉(zhuǎn)的狀態(tài)protectedclassOffset{introwO,colO;introw1,coll;introw2,col2;intiow3,col3;publicOfiset(introwO.intcolO.intlowl,iiitcoll,intiow2,mtcol2,iiitrow3,mtcol3){tliis.rowO=iowO;tliis.colO=colO;tliis.rowl=iowI;tliis.coll=coll;tliis.row2=iow2;tliis.col2=col2;tliis.row3=iow3;tliis.col3=col3;}}privateintindex=10000-1;/*向右轉(zhuǎn)*/publicvoidrotateRight(){index-H-;Offsetoffset=states[index%states.length];Cellaxis=cells[0]〃找到軸(axis)的位置cells[0].setRow(ofiset.io\\^)+axis.getRow());cells[0].setCol(offset.colO+axis.getColO);cells[l].setRow(ofiset.iowl+axis.getRow());cells[l].setCol(offset.coll+axis.getColQ);cells[2].setRow(ofiset.iow2+axis.getRow());cells[2].setCol(offset.col2+axis.getColO);cells[3].setRow(ofiset.iow3+axis.getRow());cells[3].setCol(offset.col3+axis.getCol0);}publicvoidrotateLeft(){index—;Offsetoffset=states[index%states.length];Cellaxis=cells[0];//找到軸(axis)的位置cells[0].setRow(oflset.io\\^)+axis.getRow());cells[O].setCol(offset.colO+axis.getCol0);cells[l].setRow(ofiset.iowl+axis.getRow());cells[l].setCol(offset.coll+axis.getCol0);cells[2].setRow(ofiset.iow2+axis.getRow());cells[2].setCol(offset.col2+axis.getCol0);cells[3].setRow(ofiset.iow3+axis.getRow());cells[3].setCol(offset.col3+axis.getCol0);}/*隨機(jī)生成一個具體方法*/publicstaticTetioniuiorandomTetroniuioQ{Randomrandom=newRandomQ;inttype=random.nextliit(7);//0-6s\vitch(typ亡){case0:returnnew1();case1:returnnewT();case2:returnnewS();case3:returnnewJ();case4:returnnewZQ;case5:returnnewLQ;case6:returnnewOQ;}retuinnull;}publicSuingtoString(){retuinAnays.toSning(cells);}publicbooleancontaiiis(col){fbr(mti=0;i<cells.length;i++){Cellcell=cells[i];if(cell.getRow()==iow&&cell.getCol()=col){returntme;}}retuinfalse;classIextendsTetroinnio{public1(){cells[O]=newC亡11(0,4J_COLOR);cells[l]=newC亡11(0,3J_COLOR);cells[2]=newC亡11(0,5J_COLOR);cells[3]=newCell(0,6J_COLOR);states=newOffset[]{newOffset(0,0r1,0,1,0,2,0),newOffset(0O0,丄0丄0,2),};}}classTextendsTetionuno{publicTQ{cells[0]=newCell(0,4,T_COLOR);cells[l]=newCell(03,T_COLOR);cells[2]=newCell(0,5,T_COLOR);cells[3]=newCell(1,4,T_COLOR);states=newOffset[]{newOffset(
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 托運(yùn)物品活動策劃方案(3篇)
- 燒烤氣氛活動策劃方案(3篇)
- 監(jiān)獄戒毒場所后勤管理制度(3篇)
- 針灸推拿科管理制度目錄(3篇)
- 《GA 2114-2023警用服飾 禮服女皮鞋》專題研究報告
- 獸藥GMP培訓(xùn)課件
- 《GA 425.9-2003指紋自動識別系統(tǒng)基礎(chǔ)技術(shù)規(guī)范 第9部分:指紋圖像數(shù)據(jù)轉(zhuǎn)換的技術(shù)條件》專題研究報告
- 2026河北石家莊城市更新集團(tuán)有限公司勞務(wù)派遣制人員招聘6人參考題庫附答案
- 交通警察執(zhí)法規(guī)范制度
- 2026湖北省定向鄭州大學(xué)選調(diào)生招錄備考題庫附答案
- 廣東省花都亞熱帶型巖溶地區(qū)地基處理與樁基礎(chǔ)施工技術(shù):難題破解與方案優(yōu)化
- 家里辦公制度規(guī)范
- 生鮮乳安全生產(chǎn)培訓(xùn)資料課件
- 基于知識圖譜的高校學(xué)生崗位智能匹配平臺設(shè)計研究
- GB 4053.3-2025固定式金屬梯及平臺安全要求第3部分:工業(yè)防護(hù)欄桿及平臺
- 2026年《必背60題》高校專職輔導(dǎo)員高頻面試題包含詳細(xì)解答
- 2026年八年級生物上冊期末考試試卷及答案
- 工程顧問協(xié)議書
- 2026年沃爾瑪財務(wù)分析師崗位面試題庫含答案
- 廣東省汕頭市金平區(qū)2024-2025學(xué)年九年級上學(xué)期期末化學(xué)試卷(含答案)
- 江蘇省G4(南師大附中、天一、海安、海門)聯(lián)考2026屆高三年級12月份測試(G4聯(lián)考)生物試卷(含答案)
評論
0/150
提交評論