![基于Android的貪吃蛇游戲_第1頁(yè)](http://file4.renrendoc.com/view/42f701d88804d4f0f8f04056839bc7a2/42f701d88804d4f0f8f04056839bc7a21.gif)
![基于Android的貪吃蛇游戲_第2頁(yè)](http://file4.renrendoc.com/view/42f701d88804d4f0f8f04056839bc7a2/42f701d88804d4f0f8f04056839bc7a22.gif)
![基于Android的貪吃蛇游戲_第3頁(yè)](http://file4.renrendoc.com/view/42f701d88804d4f0f8f04056839bc7a2/42f701d88804d4f0f8f04056839bc7a23.gif)
![基于Android的貪吃蛇游戲_第4頁(yè)](http://file4.renrendoc.com/view/42f701d88804d4f0f8f04056839bc7a2/42f701d88804d4f0f8f04056839bc7a24.gif)
![基于Android的貪吃蛇游戲_第5頁(yè)](http://file4.renrendoc.com/view/42f701d88804d4f0f8f04056839bc7a2/42f701d88804d4f0f8f04056839bc7a25.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
東北石油大學(xué)應(yīng)用訓(xùn)練任務(wù)書課程 ___________________________題目專業(yè)姓名學(xué)號(hào)主要內(nèi)容、基本要求、主要參考資料等主要內(nèi)容:本無(wú)線開(kāi)發(fā)應(yīng)用訓(xùn)練利用ADTeclipse開(kāi)發(fā)Android軟件,主要完成貪吃蛇游戲的軟件開(kāi)發(fā)。其中有三大模塊,分別是項(xiàng)目框架、游戲類圖設(shè)計(jì)、界面設(shè)計(jì)。側(cè)重于Java類的編寫和視圖layout的的xml編寫?;疽螅海ㄒ唬┱莆誆clipse集成開(kāi)發(fā)環(huán)境中Android開(kāi)發(fā)的完整開(kāi)發(fā)流程;(二)掌握課題的工作原理,完成系統(tǒng)分析及相應(yīng)的程序設(shè)計(jì)工作,包括:(1)貪吃蛇游戲主界面程序設(shè)計(jì);(2)貪吃蛇游戲類圖的設(shè)計(jì);(3)貪吃蛇Android項(xiàng)目框架的搭建。(三)撰寫無(wú)線開(kāi)發(fā)應(yīng)用訓(xùn)練報(bào)告。主要參考資料:[1]陳煒,張曉蕾,侯燕萍等.Java軟件開(kāi)發(fā)技術(shù)[M].北京:人民郵電出版社,2005.[2]林城.Android2.3應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)[J].機(jī)械工業(yè)出版社,2011:17-321.完成期限2016年2月29日~2016年3月11日指導(dǎo)教師2016年2月29日
目錄一、開(kāi)發(fā)背景和需求分析 1二、開(kāi)發(fā)環(huán)境與準(zhǔn)備工作 2三、系統(tǒng)功能與原型設(shè)計(jì) 3四、詳細(xì)設(shè)計(jì)與編程實(shí)現(xiàn) 44.1項(xiàng)目框架 44.2游戲類圖設(shè)計(jì) 54.3界面設(shè)計(jì) 6五、系統(tǒng)調(diào)試和運(yùn)行 11總結(jié) 11參考文獻(xiàn) 12附錄(源程序代碼) 12一、開(kāi)發(fā)背景和需求分析Android是基于Linux開(kāi)放性內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機(jī)操作系統(tǒng)。早期由原名為"Android"的公司開(kāi)發(fā),谷歌在2005年收購(gòu)"Android.Inc"后,繼續(xù)對(duì)Android系統(tǒng)開(kāi)發(fā)運(yùn)營(yíng),它采用了軟件堆層(softwarestack,又名軟件疊層)的架構(gòu)[1],主要分為三部分。底層Linux內(nèi)核只提供基本功能,其他的應(yīng)用軟件則由各公司自行開(kāi)發(fā),部分程序以Java編寫。針對(duì)當(dāng)今游戲開(kāi)發(fā)的流行趨勢(shì),手機(jī)游戲的設(shè)計(jì)已成為主流,隨著計(jì)算機(jī)技術(shù)及硬件技術(shù)的不斷發(fā)展,用戶的需求量也越來(lái)越多,并且用戶追求的效果也越來(lái)越好,在此形勢(shì)下好的設(shè)計(jì)方法尤為重要,基于android系統(tǒng)的手機(jī)游戲設(shè)計(jì)方法簡(jiǎn)單且效率較高[2]。貪吃蛇游戲也是很多人熱衷的游戲,用戶不僅要求其界面設(shè)計(jì)精美,更希望操作簡(jiǎn)單,程序執(zhí)行速度快。Android支持使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,而Android的Java開(kāi)發(fā)方面從接口到功能,都有層出不窮的變化。考慮到Java虛擬機(jī)的效率和資源占用,谷歌重新設(shè)計(jì)了Android的Java,以便能提高效率和減少資源占用,因而與J2ME等不同[3]。操作系統(tǒng)與應(yīng)用程序的溝通橋梁,應(yīng)用分為兩層:函數(shù)層(Library)和虛擬機(jī)(VirtualMachine)。Android的中間層多以Java實(shí)現(xiàn),并且采用特殊的Dalvik虛擬機(jī)(DalvikVirtualMachine)。Dalvik虛擬機(jī)是一種“暫存器型態(tài)”(RegisterBased)的Java虛擬機(jī),變量皆存放于暫存器中,虛擬機(jī)的指令相對(duì)減少。貪吃蛇游戲是一款老牌的手機(jī)游戲,同時(shí)也是一款比較需要耐心地游戲。貪吃蛇游戲就是一條小蛇,不停地在屏幕上游走,吃各個(gè)方向出現(xiàn)的食物,越吃越長(zhǎng)。只要蛇頭碰到屏幕四周,或者碰到自己的身子,小蛇就立即斃命。玩“貪吃蛇游戲”,難度最大的不是蛇長(zhǎng)得很長(zhǎng)的時(shí)候,而是開(kāi)始的時(shí)候。那時(shí)蛇身很短,看上去難度不大,卻最容易死掉,因?yàn)榘淹嬉粭l小蛇讓人容易走神,失去耐心。二、開(kāi)發(fā)環(huán)境與準(zhǔn)備工作JDK由一個(gè)標(biāo)準(zhǔn)類庫(kù)和一組建立,測(cè)試及建立文檔的Java實(shí)用程序組成。其核心JavaWTK是Sun公司提供的無(wú)線開(kāi)發(fā)工具包,分四種模擬器Defaultcolorphone用于具有彩色顯示屏幕的手機(jī)模擬器Defaultgrayphone用于具有單色灰度屏幕的手機(jī)模擬器Mediacontrolskin用于具有音頻和視頻控制功能的手機(jī)模擬器Qwertydevice用于具有標(biāo)準(zhǔn)打字鍵盤的手機(jī)模擬器Eclipse是一個(gè)開(kāi)放源代碼的軟件開(kāi)發(fā)項(xiàng)目,專注于為高度集成的工具開(kāi)發(fā)提供一個(gè)全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺(tái)。它主要由Eclipse項(xiàng)目、Eclipse工具項(xiàng)目和Eclipse技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,具體包括四個(gè)部分組成——EclipsePlatform、JDT、CDT和PDE。ADT是一個(gè)用來(lái)開(kāi)發(fā)Android應(yīng)用程序的Eclipse插件[4],本次開(kāi)發(fā)也將應(yīng)用的EclipseADT插件來(lái)完成貪吃蛇游戲的編程。Android應(yīng)用越來(lái)越廣泛,開(kāi)發(fā)Android游戲也漸漸成為市場(chǎng)的必須,本游戲的開(kāi)發(fā)是基于Android4.0系統(tǒng),采用eclipse編程實(shí)現(xiàn)[5]。具體實(shí)現(xiàn)過(guò)程分為以下3步:項(xiàng)目框架、游戲類圖設(shè)計(jì)、界面設(shè)計(jì)。1、新建一個(gè)eclipse工程。圖1新建eclipse工程2、導(dǎo)入文件導(dǎo)入相關(guān)的程序包3、編寫程序圖2工程中的相關(guān)文件4、運(yùn)行與調(diào)試,運(yùn)行結(jié)果如下圖。圖3程序調(diào)試三、系統(tǒng)功能與原型設(shè)計(jì)1、功能概述:功能簡(jiǎn)述功能描述主界面包含“開(kāi)始游戲”,“作者信息”,“游戲說(shuō)明”,“退出”“貪吃蛇”游戲首先是用戶的貪吃蛇在每個(gè)格子中只有一個(gè)方向,然后,若“吃”到系統(tǒng)隨機(jī)給出的小點(diǎn),則相應(yīng)的蛇身增加一格,最后,控制蛇頭不能觸到蛇身任何位置,若觸到則游戲結(jié)束。作者信息主要是貼出個(gè)人信息。游戲說(shuō)明對(duì)游戲的玩法做出介紹。2、原型設(shè)計(jì)操作系統(tǒng):Android4.0及以上版本屏幕分辨率:≥320×480手機(jī)型號(hào):適用于裝有Android4.0及以上版本并且屏幕分辨率≥320×480的手機(jī)3、系統(tǒng)流程SnakeActivityGameSnakeActivityGameActivityHelpActivityAuthorViewActivity交互界面切換圖4系統(tǒng)流程四、詳細(xì)設(shè)計(jì)與編程實(shí)現(xiàn)4.1項(xiàng)目框架新建一個(gè)Eclipse工程并命名為Snake,工程如下圖所示:圖5Snake工程工程中包括4個(gè)Activity,分別為Snake(主界面)、Game(游戲界面)、Help(游戲說(shuō)明界面)、AuthorView(作者信息界面),通過(guò)不同Activity之間的轉(zhuǎn)換實(shí)現(xiàn)不同界面之間的切換。4.2游戲類圖設(shè)計(jì)Game(Activity)繼承了SnakeView類,SnakeView類繼承了TileView類。TileView類繼承了View,如下圖所示:SnakeViewSnakeViewTileViewGame(Activity)View圖8類圖TiltView的基類是View,包含了貪吃蛇游戲畫面的各個(gè)設(shè)定參數(shù),主要負(fù)責(zé)繪制游戲畫面。TileView類定義如下:publicclassTileViewextendsView{ privatestaticfinalStringtag="yao"; protectedstaticintmTileSize=20;//方格的邊長(zhǎng) protectedstaticintmXTileCount;//X軸上方格的個(gè)數(shù) protectedstaticintmYTileCount;//Y軸上方格的個(gè)數(shù) privatestaticintmXOffset;//繪圖時(shí)X軸上的起始坐標(biāo) privatestaticintmYOffset;//繪圖時(shí)Y軸上的起始坐標(biāo) privateBitmap[]mTileArray;//位圖數(shù)組 privateint[][]mTileGrid;//映射整個(gè)游戲畫面的數(shù)組 privatefinalPaintmPaint=newPaint();//畫筆 publicTileView(Contextcontext,AttributeSetattrs){ super(context,attrs); Log.i(tag,"TileViewConstructor"); Log.i(tag,"mTileSize="+mTileSize); }SnakeView類定義了游戲運(yùn)行時(shí)的畫面改變及蛇體和果子的更新方法。定義SnakeView()函數(shù)初始化游戲,代碼如下:publicSnakeView(Contextcontext,AttributeSetattrs){ super(context,attrs); Log.i(tag,"SnakeViewConstructor"); initSnakeView();//構(gòu)造函數(shù)中,初始化游戲 }定義initSnakeView()初始化SnakeView類,代碼如下:privatevoidinitSnakeView(){ Log.e(tag,"initSnakeView"); //設(shè)置焦點(diǎn),由于存在文字界面和游戲界面的跳轉(zhuǎn)。這個(gè)focus是不可或缺的。 setFocusable(true); //取得資源中的圖片,加載到磚塊字典中。 Resourcesr=this.getContext().getResources(); resetTiles(4); loadTile(RED_STAR,r.getDrawable(R.drawable.redstar)); loadTile(YELLOW_STAR,r.getDrawable(R.drawable.yellowstar)); loadTile(GREEN_STAR,r.getDrawable(R.drawable.greenstar)); }此外還定義了updateWalls()、updateApples()、updateSnake()繪制墻、果子、蛇,以及更新畫面函數(shù)、保存位置坐標(biāo)函數(shù)等,具體代碼請(qǐng)?jiān)斠?jiàn)目錄。4.3界面設(shè)計(jì)界面設(shè)計(jì)包括游戲主界面(Snake)、作者信息界面、游戲說(shuō)明界面、游戲界面的設(shè)計(jì)。界面的設(shè)計(jì)采用的是xml文檔形式,在xml文檔中規(guī)劃好界面布局布局后,分別在java文件中聲明。主界面設(shè)計(jì):主界面包括一個(gè)TextView、一個(gè)imagebutton、三個(gè)button,其main.xml文檔如下:<?xmlversion="1.0"encoding="utf-8"?><AbsoluteLayoutxmlns:android="/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"android:background="@drawable/icon"> <LinearLayout android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"> <TextViewandroid:textColor="#ff3456ff"android:textSize="40sp"android:layout_height="wrap_content"android:visibility="visible"android:text="Snake"android:layout_width="wrap_content"android:id="@+id/text"android:gravity="center_horizontal"></TextView> <ImageButton android:visibility="visible" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ImageButton1"> </ImageButton> <Button android:id="@+id/Button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible"> </Button><Button android:id="@+id/Button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible"> </Button><Button android:id="@+id/Button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible"> </Button> </LinearLayout></AbsoluteLayout>游戲主界面如下圖所示:圖6游戲主界面游戲界面設(shè)計(jì):游戲界面包括一個(gè)button,一個(gè)game.snake.SnakeView,其game.xml文檔相對(duì)應(yīng)的為Game.java文件。運(yùn)行界面圖如下所示:圖7游戲開(kāi)始界面圖8游戲運(yùn)行界面圖9游戲結(jié)束界面作者信息界面設(shè)計(jì):此界面包括一個(gè)TextView、一個(gè)button,其author.xml文檔相對(duì)應(yīng)的為AuthorView.java文件,設(shè)計(jì)界面如圖10所示。圖10作者信息界面游戲說(shuō)明界面設(shè)計(jì):此界面包括一個(gè)TextView、一個(gè)button,其help.xml文檔相對(duì)應(yīng)的為Help.java文件。游戲說(shuō)明如圖11所示。圖11游戲說(shuō)明界面至此,全部界面設(shè)計(jì)完成,但還有最重要的一步,就是將所有的Activity注冊(cè)到AndroidManifest.xml中。AndroidManifest.xml文檔如下:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="my.game.snake"android:versionCode="1"android:versionName="1.0"><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><activityandroid:name=".Snake"android:label="@string/app_name"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity><activityandroid:name=".AuthorView"></activity><activityandroid:name=".Game"></activity><activityandroid:name=".Help"></activity></application><uses-sdkandroid:minSdkVersion="3"/></manifest>另外strings.xml中定義了常量字符,至此,貪吃蛇游戲設(shè)計(jì)完畢。五、系統(tǒng)調(diào)試和運(yùn)行1.要切換空間,重新設(shè)置Eclipse。2.在自定的視圖中添加一個(gè)Button按鈕,通過(guò)此按鈕實(shí)現(xiàn)返回主界面的功能,但是此時(shí)的Button按鈕是顯示不出來(lái)的,上網(wǎng)查資料很多人說(shuō)自定的視圖也是View,Button也是View,View和View是不能嵌套的,解決的辦法是有的,可以在自定義的視圖上畫一個(gè)Button或者繪制某一個(gè)區(qū)域,并將此區(qū)域注冊(cè)到監(jiān)聽(tīng)器上去,如果鼠標(biāo)在此區(qū)域點(diǎn)擊則返回主界面,否則不執(zhí)行。程序調(diào)試運(yùn)行效果圖如下:3.InvalidstarttagLinearLayoutmain.xml放錯(cuò)文件夾,應(yīng)在\res\layout下。4.Activitynotstarted,itscurrenttaskhasbeenbroughttothefront解決方法:在Eclipse中,“project”-->“clean…”。總結(jié)我所做的設(shè)計(jì)功能并不算強(qiáng)大,但是這些結(jié)合了本學(xué)期所學(xué)習(xí)的內(nèi)容,主要是界面的設(shè)計(jì),并改寫了兩個(gè)類。通過(guò)自己寫代碼,我更進(jìn)一步清楚了android工程的框架及設(shè)計(jì)的步驟,以及每個(gè)文件的作用,稍微掌握了一些View類的方法,同時(shí)也學(xué)到了更多的界面設(shè)計(jì)的方法,比如如何實(shí)現(xiàn)一個(gè)TextView里顯示多行數(shù)據(jù),如何自定義視圖等。通過(guò)本次的設(shè)計(jì),我學(xué)到了很多,我會(huì)再接再厲,了解更多,充實(shí)自己。參考文獻(xiàn)[1]陳煒,張曉蕾,侯燕萍等.Java軟件開(kāi)發(fā)技術(shù)[M].北京:人民郵電出版社,2005.[2]林城.Android2.3應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)[J].機(jī)械工業(yè)出版社,2011:17-321.[3]張建源.Android開(kāi)發(fā)技術(shù)的學(xué)習(xí)及應(yīng)用[J].太原:現(xiàn)代工業(yè)經(jīng)濟(jì)及現(xiàn)代化,2014(12):23-26.[4]EdBurnette.Hello,Android:IntroducingGoogle'sMobileDevelpmentPlatform[M].NewYork:PragmaticBookshelf,2013.[5]韓超.Android經(jīng)典應(yīng)用程序開(kāi)發(fā)[J].人力資源出版社,2011:5-18.附錄(源程序代碼)TileView.javapackagemy.game.snake;importandroid.content.Context;importandroid.graphics.Bitmap;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.graphics.drawable.Drawable;importandroid.util.AttributeSet;importandroid.util.Log;importandroid.view.View;publicclassTileViewextendsView{ privatestaticfinalStringtag="yao"; protectedstaticintmTileSize=20;//方格的邊長(zhǎng) protectedstaticintmXTileCount;//X軸上方格的個(gè)數(shù) protectedstaticintmYTileCount;//Y軸上方格的個(gè)數(shù) privatestaticintmXOffset;//繪圖時(shí)X軸上的起始坐標(biāo) privatestaticintmYOffset;//繪圖時(shí)Y軸上的起始坐標(biāo) privateBitmap[]mTileArray;//位圖數(shù)組 privateint[][]mTileGrid;//映射整個(gè)游戲畫面的數(shù)組 privatefinalPaintmPaint=newPaint();//畫筆 publicTileView(Contextcontext,AttributeSetattrs){ super(context,attrs); Log.i(tag,"TileViewConstructor"); Log.i(tag,"mTileSize="+mTileSize); } //重置位圖數(shù)組的長(zhǎng)度 publicvoidresetTiles(inttilecount){ mTileArray=newBitmap[tilecount]; } @Override //適應(yīng)各種分辨率的屏幕,當(dāng)改變屏幕大小尺寸時(shí),同時(shí)修改tile的相關(guān)計(jì)數(shù)指標(biāo) protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){ Log.i(tag,"onSizeChanged,"+"w="+w+"h="+h+"oldw="+oldw+"oldh="+oldh); mXTileCount=(int)Math.floor(w/mTileSize); mYTileCount=(int)Math.floor(h/mTileSize); Log.i(tag,"mXTileCount="+mXTileCount); Log.i(tag,"mYTileCount="+mYTileCount); mXOffset=((w-(mTileSize*mXTileCount))/2); mYOffset=((h-(mTileSize*mYTileCount))/2); Log.i(tag,"mXOffset="+mXOffset); Log.i(tag,"mYOffset="+mYOffset); mTileGrid=newint[mXTileCount][mYTileCount]; clearTiles(); } //這里做了一個(gè)Drawable到bitmap的轉(zhuǎn)換 publicvoidloadTile(intkey,Drawabletile){ Bitmapbitmap=Bitmap.createBitmap(mTileSize,mTileSize,Bitmap.Config.ARGB_8888); Canvascanvas=newCanvas(bitmap); tile.setBounds(0,0,mTileSize,mTileSize); tile.draw(canvas); mTileArray[key]=bitmap; }//清空?qǐng)D形顯示 publicvoidclearTiles(){ Log.i(tag,"TileView.clearTiles"); for(intx=0;x<mXTileCount;x++){ for(inty=0;y<mYTileCount;y++){ setTile(0,x,y); } } }//在相應(yīng)的坐標(biāo)位置繪制相應(yīng)的磚塊 publicvoidsetTile(inttileindex,intx,inty){ mTileGrid[x][y]=tileindex; } //onDraw @Override//將直接操作的畫布繪制到手機(jī)界面上 publicvoidonDraw(Canvascanvas){ Log.i(tag,"onDraw"); super.onDraw(canvas); Bitmapbmp; floatleft; floattop; for(intx=0;x<mXTileCount;x++){ for(inty=0;y<mYTileCount;y++){ if(mTileGrid[x][y]>0){ bmp=mTileArray[mTileGrid[x][y]]; left=x*mTileSize+mXOffset; top=y*mTileSize+mYOffset; canvas.drawBitmap(bmp,left,top,mPaint); } } } }}SnakeView.javapackagemy.game.snake;importjava.util.ArrayList;importjava.util.Random;importandroid.content.Context;importandroid.content.res.Resources;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.util.AttributeSet;importandroid.util.Log;importandroid.view.KeyEvent;importandroid.view.View;importandroid.widget.TextView;publicclassSnakeViewextendsTileView{ privatestaticfinalStringtag="yao"; privateintmMode=READY; //游戲的四種狀態(tài) publicstaticfinalintPAUSE=0; publicstaticfinalintREADY=1; publicstaticfinalintRUNNING=2; publicstaticfinalintLOSE=3;//蛇體運(yùn)動(dòng)的方向識(shí)別 privateintmDirection=NORTH; privateintmNextDirection=NORTH; privatestaticfinalintNORTH=1; privatestaticfinalintSOUTH=2; privatestaticfinalintEAST=3; privatestaticfinalintWEST=4; //游戲中僅有的三種磚塊對(duì)應(yīng)的數(shù)值 privatestaticfinalintRED_STAR=1; privatestaticfinalintYELLOW_STAR=2; privatestaticfinalintGREEN_STAR=3; privatelongmScore=0;//記錄獲得的分?jǐn)?shù) privatelongmMoveDelay=600;//每移動(dòng)一步的延時(shí)。初始時(shí)設(shè)置為600ms privatelongmLastMoveTime; privateTextViewmStatusTextView;//用來(lái)顯示游戲狀態(tài)的TextView //兩個(gè)鏈表,分別用來(lái)存儲(chǔ)蛇體和果子的坐標(biāo) privateArrayList<Coordinate>mSnakeTrail=newArrayList<Coordinate>(); privateArrayList<Coordinate>mAppleList=newArrayList<Coordinate>();//隨機(jī)數(shù)生成器 privatestaticfinalRandomRNG=newRandom(); //用Handler機(jī)制實(shí)現(xiàn)定時(shí)刷新 privateRefreshHandlermRedrawHandler=newRefreshHandler(); classRefreshHandlerextendsHandler{//獲取消息并處理 @Override publicvoidhandleMessage(Messagemsg){ SnakeView.this.update(); SnakeView.this.invalidate();//刷新view為基類的界面 Log.i(tag,"handleMessage|ThreadName="+Thread.currentThread().getName()); }//定時(shí)發(fā)送消息給UI線程,以此達(dá)到更新效果 publicvoidsleep(longdelayMillis){ this.removeMessages(0);//清空消息隊(duì)列,Handler進(jìn)入對(duì)新消息的等待 Log.i(tag,"sleep|ThreadName="+Thread.currentThread().getName()); //定時(shí)發(fā)送新消息,激活handler sendMessageDelayed(obtainMessage(0),delayMillis); } }; publicSnakeView(Contextcontext,AttributeSetattrs){ super(context,attrs); Log.i(tag,"SnakeViewConstructor"); initSnakeView();//構(gòu)造函數(shù)中,初始化游戲 } //初始化SnakeView類,注意,這根初始化游戲是不一樣的。 privatevoidinitSnakeView(){ Log.e(tag,"initSnakeView"); //設(shè)置焦點(diǎn),由于存在文字界面和游戲界面的跳轉(zhuǎn)。這個(gè)focus是不可或缺的。 setFocusable(true); //取得資源中的圖片,加載到磚塊字典中。 Resourcesr=this.getContext().getResources(); resetTiles(4); loadTile(RED_STAR,r.getDrawable(R.drawable.redstar)); loadTile(YELLOW_STAR,r.getDrawable(R.drawable.yellowstar)); loadTile(GREEN_STAR,r.getDrawable(R.drawable.greenstar)); } //更新游戲狀態(tài) publicvoidsetMode(intnewMode){ intoldMode=mMode; mMode=newMode; Resourcesres=getContext().getResources(); CharSequencestr=""; if(newMode==RUNNING&oldMode!=RUNNING){ mStatusTextView.setVisibility(View.INVISIBLE); update(); return; } if(newMode==PAUSE){ str=res.getText(R.string.mode_pause); } if(newMode==READY){ str=res.getText(R.string.mode_ready); } if(newMode==LOSE){ str=res.getString(R.string.mode_lose_prefix)+mScore +res.getString(R.string.mode_lose_suffix); } mStatusTextView.setText(str); mStatusTextView.setVisibility(View.VISIBLE); }//綁定到相應(yīng)的textview publicvoidsetStatusTextView(TextViewnewView){ mStatusTextView=newView; }//按鍵的監(jiān)聽(tīng) publicbooleanonKeyDown(intkeyCode,KeyEventmsg){ if(keyCode==KeyEvent.KEYCODE_DPAD_UP){ if(mMode==READY|mMode==LOSE){ initNewGame(); setMode(RUNNING); update(); return(true); } if(mMode==PAUSE){ setMode(RUNNING); update(); return(true); } if(mDirection!=SOUTH){ mNextDirection=NORTH; } return(true); } if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){ if(mDirection!=NORTH){ mNextDirection=SOUTH; } return(true); } if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT){ if(mDirection!=EAST){ mNextDirection=WEST; } return(true); } if(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT){ if(mDirection!=WEST){ mNextDirection=EAST; } return(true); } returnsuper.onKeyDown(keyCode,msg); }//刷新游戲狀態(tài)。每次游戲畫面的更新、游戲數(shù)據(jù)的更新,都是依靠這個(gè)update()來(lái)完成的 publicvoidupdate(){ if(mMode==RUNNING){ longnow=System.currentTimeMillis(); if(now-mLastMoveTime>mMoveDelay){ // clearTiles(); updateWalls(); updateSnake(); updateApples(); mLastMoveTime=now; } mRedrawHandler.sleep(mMoveDelay); } }//用setTile繪制墻壁 privatevoidupdateWalls(){ Log.i(tag,"updateWalls"); for(intx=0;x<mXTileCount;x++){ setTile(GREEN_STAR,x,0); setTile(GREEN_STAR,x,mYTileCount-1); } for(inty=1;y<mYTileCount-1;y++){ setTile(GREEN_STAR,0,y); setTile(GREEN_STAR,mXTileCount-1,y); } }//繪制果子 privatevoidupdateApples(){ Log.i(tag,"updateApples"); for(Coordinatec:mAppleList){ setTile(YELLOW_STAR,c.x,c.y); } }//更新蛇體 privatevoidupdateSnake(){ //吃過(guò)果子的蛇會(huì)長(zhǎng)長(zhǎng)。這個(gè)變量即為它的標(biāo)記。 booleangrowSnake=false; //頭部很重要,只有頭部可能碰到果子。 Coordinatehead=mSnakeTrail.get(0); //蛇下一步一定會(huì)前移,也就試newHead。長(zhǎng)長(zhǎng)只會(huì)從尾部增加。 CoordinatenewHead=newCoordinate(1,1); mDirection=mNextDirection; switch(mDirection){ caseEAST:{ newHead=newCoordinate(head.x+1,head.y); break; } caseWEST:{ newHead=newCoordinate(head.x-1,head.y); break; } caseNORTH:{ newHead=newCoordinate(head.x,head.y-1); break; } caseSOUTH:{ newHead=newCoordinate(head.x,head.y+1); break; } } if((newHead.x<1)||(newHead.y<1)||(newHead.x>mXTileCount-2) ||(newHead.y>mYTileCount-2)){ setMode(LOSE); return; } intsnakelength=mSnakeTrail.size(); for(intsnakeindex=0;snakeindex<snakelength;snakeindex++){ Coordinatec=mSnakeTrail.get(snakeindex); if(c.equals(newHead)){ setMode(LOSE); return; } } intapplecount=mAppleList.size(); for(intappleindex=0;appleindex<applecount;appleindex++){ Coordinatec=mAppleList.get(appleindex); if(c.equals(newHead)){ mAppleList.remove(c); addRandomApple(); mScore++; mMoveDelay*=0.9; growSnake=true; } } mSnakeTrail.add(0,newHead); if(!growSnake){ mSnakeTrail.remove(mSnakeTrail.size()-1); } intindex=0; for(Coordinatec:mSnakeTrail){ if(index==0){ setTile(YELLOW_STAR,c.x,c.y); }else{ setTile(RED_STAR,c.x,c.y); } index++; } }//這是坐標(biāo)點(diǎn)的類,很簡(jiǎn)單的存儲(chǔ)XY坐標(biāo) privateclassCoordinate{ publicintx; publicinty; publicCoordinate(intnewX,intnewY){ x=newX; y=newY; } publicbooleanequals(Coordinateother){ if(x==other.x&&y==other.y){ returntrue; } returnfalse; } @Override publicStringtoString(){ return"Coordinate:["+x+","+y+"]"; } }//在地圖上隨機(jī)的增加果子 privatevoidaddRandomApple(){ CoordinatenewCoord=null; booleanflag=true; while(flag){ intnewX=1+RNG.nextInt(mXTileCount-2); intnewY=1+RNG.nextInt(mYTileCount-2); newCoord=newCoordinate(newX,newY); booleancollision=false; intsnakelength=mSnakeTrail.size(); for(intindex=0;index<snakelength;index++){ if(mSnakeTrail.get(index).equals(newCoord)){ collision=true; } } flag=collision; } if(newCoord==null){ Log.e(tag,"SomehowendedupwithanullnewCoord!"); } mAppleList.add(newCoord); } //如果不是從暫停中回復(fù),就緒要初始化游戲了。 publicvoidinitNewGame(){ Log.e(tag,"initNewGame!"); //清空保存蛇體和果子的數(shù)據(jù)結(jié)構(gòu)。 mSnakeTrail.clear(); mAppleList.clear(); //設(shè)定初始狀態(tài)的蛇體的位置。 mSnakeTrail.add(newCoordinate(7,7)); mSnakeTrail.add(newCoordinate(6,7)); mSnakeTrail.add(newCoordinate(5,7)); mSnakeTrail.add(newCoordinate(4,7)); mSnakeTrail.add(newCoordinate(3,7)); mSnakeTrail.add(newCoordinate(2,7)); mNextDirection=NORTH;//開(kāi)始有兩個(gè)果子 addRandomApple(); addRandomApple(); mMoveDelay=600; mScore=0; }//在意外情況下,暫時(shí)性保存游戲數(shù)據(jù) publicBundlesaveState(){ Bundlebundle=newBundle(); bundle.putIntArray("mAppleList",coordArrayListToArray(mAppleList)); bundle.putIntArray("mSnakeTrail",coordArrayListToArray(mSnakeTrail)); bundle.putInt("mDirection",Integer.valueOf(mDirection)); bundle.putInt("mNextDirection",Integer.valueOf(mNextDirection)); bundle.putLong("mMoveDelay",Long.valueOf(mMoveDelay)); bundle.putLong("mScore",Long.valueOf(mScore)); returnbundle; }//回復(fù)游戲數(shù)據(jù),是saveState()的逆過(guò)程 publicvoidrestoreState(Bundleicicle){ setMode(PAUSE); mAppleList=coordArrayToArrayList(icicle.getIntArray("mAppleList")); mDirection=icicle.getInt("mDirection"); mNextDirection=icicle.getInt("mNextDirection"); mMoveDelay=icicle.getLong("mMoveDelay"); mScore=icicle.getLong("mScore"); mSnakeTrail=coordArrayToArrayList(icicle.getIntArray("mSnakeTrail")); }//coordArrayListToArray()的逆過(guò)程,用來(lái)讀取保存在Bundle中的數(shù)據(jù) privateArrayList<Coordinate>coordArrayToArrayList(int[]rawArray){ ArrayList<Coordinate>coordArrayList=newArrayList<Coordinate>(); intcoordCount=rawArray.length; for(intindex=0;index<coordCount;index+=2){ Coordinatec=newCoordinate(rawArray[index],rawArray[index+1]); coordArrayList.add(c); } returncoordArrayList; }//蛇體和果子位置的數(shù)組轉(zhuǎn)換成簡(jiǎn)單的序列化的int數(shù)組 privateint[]coordArrayListToArray(ArrayList<Coordinate>cvec){ intcount=cvec.size(); int[]rawArray=newint[count*2]; for(intindex=0;index<count;index++){ Coordinatec=cvec.get(index); rawArray[2*index]=c.x; rawArray[2*index+1]=c.y; } returnrawArray; }}
東北石油大學(xué)應(yīng)用訓(xùn)練成績(jī)?cè)u(píng)價(jià)表課程名稱題目名稱基于Android的貪吃蛇游戲?qū)W生姓名學(xué)號(hào)指導(dǎo)教師姓名職稱序號(hào)評(píng)價(jià)項(xiàng)目指標(biāo)滿分評(píng)分1工作量、工作態(tài)度和出勤率按期圓滿的完成了規(guī)定的任務(wù),難易程度和工作量符合教學(xué)要求,工作努力,遵守紀(jì)律,出勤率高,工作作風(fēng)嚴(yán)謹(jǐn),善于與他人合作。302應(yīng)用訓(xùn)練質(zhì)量應(yīng)用訓(xùn)練選題合理,開(kāi)發(fā)過(guò)程簡(jiǎn)練準(zhǔn)確,分析問(wèn)題思路清晰,結(jié)構(gòu)嚴(yán)謹(jǐn),文理通順,撰寫規(guī)范,圖表完備正確。453創(chuàng)新工作中有創(chuàng)新意識(shí),對(duì)前人工作有一些改進(jìn)或有一定應(yīng)用價(jià)值。54答辯能正確回答指導(dǎo)教師所提出的問(wèn)題。20總分評(píng)語(yǔ):指導(dǎo)教師:2016年3月11日附錄資料:不需要的可以自行刪除C語(yǔ)言曲線函數(shù)像素函數(shù)putpixel()畫像素點(diǎn)函數(shù)getpixel()返回像素色函數(shù)直線和線型函數(shù)line()畫線函數(shù)lineto()畫線函數(shù)linerel()相對(duì)畫線函數(shù)setlinestyle()設(shè)置線型函數(shù)getlinesettings()獲取線型設(shè)置函數(shù)setwritemode()設(shè)置畫線模式函數(shù)多邊形函數(shù)rectangle()畫矩形函數(shù)bar()畫條函數(shù)bar3d()畫條塊函數(shù)drawpoly()畫多邊形函數(shù)圓、弧和曲線函數(shù)getaspectratio()獲取縱橫比函數(shù)circle()畫圓函數(shù)arc()畫圓弧函數(shù)ellipse()畫橢圓弧函數(shù)fillellipse()畫橢圓區(qū)函數(shù)pieslice()畫扇區(qū)函數(shù)sector()畫橢圓扇區(qū)函數(shù)getarccoords()獲取圓弧坐標(biāo)函數(shù)填充函數(shù)setfillstyle()設(shè)置填充圖樣和顏色函數(shù)setfillpattern()設(shè)置用戶圖樣函數(shù)floodfill()填充閉域函數(shù)fillpoly()填充多邊形函數(shù)getfillsettings()獲取填充設(shè)置函數(shù)getfillpattern()獲取用戶圖樣設(shè)置函數(shù)圖像函數(shù)imagesize()圖像存儲(chǔ)大小函數(shù)getimage()保存圖像函數(shù)putimage()輸出圖像函數(shù)圖形和圖像函數(shù)對(duì)許多圖形應(yīng)用程序,直線和曲線是非常有用的。但對(duì)有些圖形只能靠操作單個(gè)像素才能畫出。當(dāng)然如果沒(méi)有畫像素的功能,就無(wú)法操作直線和曲線的函數(shù)。而且通過(guò)大規(guī)模使用像素功能,整個(gè)圖形就可以保存、寫、擦除和與屏幕上的原有圖形進(jìn)行疊加。(一)像素函數(shù)putpixel()畫像素點(diǎn)函數(shù)功能:函數(shù)putpixel()在圖形模式下屏幕上畫一個(gè)像素點(diǎn)。用法:函數(shù)調(diào)用方式為voidputpixel(intx,inty,intcolor);說(shuō)明:參數(shù)x,y為像素點(diǎn)的坐標(biāo),color是該像素點(diǎn)的顏色,它可以是顏色符號(hào)名,也可以是整型色彩值。此函數(shù)相應(yīng)的頭文件是graphics.h返回值:無(wú)例:在屏幕上(6,8)處畫一個(gè)紅色像素點(diǎn):putpixel(6,8,RED);getpixel()返回像素色函數(shù)功能:函數(shù)getpixel()返回像素點(diǎn)顏色值。用法:該函數(shù)調(diào)用方式為intgetpixel(intx,inty);說(shuō)明:參數(shù)x,y為像素點(diǎn)坐標(biāo)。函數(shù)的返回值可以不反映實(shí)際彩色值,這取決于調(diào)色板的設(shè)置情況(參見(jiàn)setpalette()函數(shù))。這個(gè)函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回一個(gè)像素點(diǎn)色彩值。例:把屏幕上(8,6)點(diǎn)的像素顏色值賦給變量color。color=getpixel(8,6);(二)直線和線型函數(shù)有三個(gè)畫直線的函數(shù),即line(),lineto(),linerel()。這些直線使用整型坐標(biāo),并相對(duì)于當(dāng)前圖形視口,但不一定受視口限制,如果視口裁剪標(biāo)志clip為真,那么直線將受到視口邊緣截?cái)?;如果clip為假,即使終點(diǎn)坐標(biāo)或新的當(dāng)前位置在圖形視口或屏幕極限之外,直線截?cái)嗟狡聊粯O限。有兩種線寬及幾種線型可供選擇,也可以自己定義線圖樣。下面分別介紹直線和線型函數(shù)。line()畫線函數(shù)功能:函數(shù)line()使用當(dāng)前繪圖色、線型及線寬,在給定的兩點(diǎn)間畫一直線。用法:該函數(shù)調(diào)用方式為voidline(intstartx,intstarty,intendx,intendy);說(shuō)明:參數(shù)startx,starty為起點(diǎn)坐標(biāo),endx,endy為終點(diǎn)坐標(biāo),函數(shù)調(diào)用前后,圖形狀態(tài)下屏幕光標(biāo)(一般不可見(jiàn))當(dāng)前位置不改變。此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無(wú)例:見(jiàn)函數(shù)60.linerel()中的實(shí)例。lineto()畫線函數(shù)功能:函數(shù)lineto()使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置畫一直線到指定位置。用法:此函數(shù)調(diào)用方式為voidlineto(intx,inty);說(shuō)明:參數(shù)x,y為指定點(diǎn)的坐標(biāo),函數(shù)調(diào)用后,當(dāng)前位置改變到指定點(diǎn)(x,y)。該函數(shù)對(duì)應(yīng)的頭文件為graphics.h返回值:無(wú)例:見(jiàn)函數(shù)60.linerel()中的實(shí)例。linerel()相對(duì)畫線函數(shù)功能:函數(shù)linerel()使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置開(kāi)始,按指定的水平和垂直偏移距離畫一直線。用法:這個(gè)函數(shù)調(diào)用方式為voidlinerel(intdx,intdy);說(shuō)明:參數(shù)dx,dy分別是水平偏移距離和垂直偏移距離。函數(shù)調(diào)用后,當(dāng)前位置變?yōu)樵黾悠凭嚯x后的位置,例如,原來(lái)的位置是(8,6),調(diào)用函數(shù)linerel(10,18)后,當(dāng)前位置為(18,24)。返回值:無(wú)例:下面的程序?yàn)楫嬀€函數(shù)調(diào)用實(shí)例:#include<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");setcolor(15);line(66,66,88,88);lineto(100,100);linerel(36,64);getch();restorecrtmode();}setlinestyle()設(shè)置線型函數(shù)功能:setlinestyle()為畫線函數(shù)設(shè)置當(dāng)前線型,包括線型、線圖樣和線寬。用法:setlinestyle()函數(shù)調(diào)用方式為voidsetlinestyle(intstly,unsignedpattern,intwigth);說(shuō)明:參數(shù)style為線型取值,也可以用相應(yīng)名稱表示,如表1-10中所示。參數(shù)pattern用于自定義線圖樣,它是16位(bit)字,只有當(dāng)style=USERBIT_LINE(值為1)時(shí),pattern的值才有意義,使用用戶自定義線圖樣,與圖樣中“1”位對(duì)應(yīng)的像素顯示,因此,pattern=0xFFFF,則畫實(shí)線;pattern=0x9999,則畫每隔兩個(gè)像素交替顯示的虛線,如果要畫長(zhǎng)虛線,那么pattern的值可為0xFF00和0xF00F,當(dāng)style不為USERBIT_LINE值時(shí),雖然pattern的值不起作用,但扔須為它提供一個(gè)值,一般取為0。參數(shù)wigth用來(lái)設(shè)定線寬,其取值見(jiàn)表1-11,表中給出了兩個(gè)值,即1和3,實(shí)際上,線寬取值為2也是可以接受的。若用非法參數(shù)調(diào)用setlinestyle()函數(shù),那么graphresult()會(huì)返回錯(cuò)誤代碼,并且當(dāng)前線型繼續(xù)有效。TurboC提供的線型與線寬定義在頭文件graphics.h中,表1-10和1-11分別列出了參數(shù)的取值與含義。表1-10線型名稱取值含義SOLID_LINE0實(shí)線DOTTED_LINE1點(diǎn)線CENTER_LINE2中心線DASHED_LINE3虛線USERBIT_LINE4用戶自定義線型表1-11線寬名稱取值說(shuō)明NORM_WIDTH(常寬)1一個(gè)像素寬(缺省值)THICK_WIDTH(加寬)3三個(gè)像素寬這個(gè)函數(shù)的頭文件是graphics.h返回值:無(wú)例:下面的程序顯示了BC中所提供的線型圖樣:#include<graphics.h>voidmain(){intdriver,mode;i;driver=DETECT;mode=0;initgraph(&driver,&mode,"");for(i=0;i<4;i++){setlinestyle(i,0,1);line(i*50,200,i*50+60,200);}getch();restorecrtmode();}getlinesettings()獲取線型設(shè)置函數(shù)功能:函數(shù)getlinesettings()用當(dāng)前設(shè)置的線型、線圖樣和線寬填寫linesettingstype型結(jié)構(gòu)。用法:函數(shù)調(diào)用方式為voidgetlinesettings(structlinesettingstype*info);說(shuō)明:此函數(shù)調(diào)用執(zhí)行后,當(dāng)前的線型、線圖樣和線寬值被裝入info指向的結(jié)構(gòu)里,從而可從該結(jié)構(gòu)中獲得線型設(shè)置。linesettingstype型結(jié)構(gòu)定義如下:structlinesettingstype{intlinestyle;unsignedupattern;intthickness;};其中l(wèi)inestyle用于存放線型,線型值為表1-10中的各值之一。upattern用為裝入用戶自定義線圖樣,這是16位字,每一位等于一個(gè)像素,如果哪個(gè)位被設(shè)置,那么該像素打開(kāi),否則關(guān)閉。thickness為線寬值存放的變量,可參見(jiàn)表1-11。getlinesettings()函數(shù)對(duì)應(yīng)的頭文件為graphics.h返回值:返回的線型設(shè)置存放在info指向的結(jié)構(gòu)中。例:把當(dāng)前線型的設(shè)置寫入info結(jié)構(gòu):structlinesettingstypeinfo;getlinesettings(&info);setwritemode()設(shè)置畫線模式函數(shù)功能:函數(shù)setwritemode()設(shè)置畫線模式用法:函數(shù)調(diào)用方式為voidsetwritemode()(intmode);說(shuō)明:參數(shù)mode只有兩個(gè)取值0和1,若mode為0,則新畫的線將覆蓋屏幕上原有的圖形,此為缺省畫線輸出模式。如果mode為1,那么新畫的像素點(diǎn)與原有圖形的像素點(diǎn)先進(jìn)行異或(XOR)運(yùn)算,然后輸出到屏幕上,使用這種畫線輸出模式,第二次畫同一圖形時(shí),將擦除該圖形。調(diào)用setwritemode()設(shè)置的畫線輸出模式只影響函數(shù)line(),lineto(),linerel(),recangle()和drawpoly()。setwritemode()函數(shù)對(duì)應(yīng)的頭文件是graphics.h返回值:無(wú)例:設(shè)置畫線輸出模式為0:setwritemode(0);(三)、多邊形函數(shù)對(duì)多邊形,無(wú)疑可用畫直線函數(shù)來(lái)畫出它,但直接提供畫多邊形的函數(shù)會(huì)給用戶很大方便。最常見(jiàn)的多邊形有矩形、矩形塊(或稱條形)、多邊形和多邊形塊,我們還把長(zhǎng)方形條塊也放到這里一起考慮,雖然它不是多邊形,但它的特例就是矩形(塊)。下面直接介紹畫多邊形的函數(shù)。rectangle()畫矩形函數(shù)功能:函數(shù)rectangle()用當(dāng)前繪圖色、線型及線寬,畫一個(gè)給定左上角與右下角的矩形(正方形或長(zhǎng)方形)。用法:此函數(shù)調(diào)用方式為voidrectangle(intleft,inttop,intright,intbottom);說(shuō)明:參數(shù)left,top是左上角點(diǎn)坐標(biāo),right,bottom是右下角點(diǎn)坐標(biāo)。如果有一個(gè)以上角點(diǎn)不在當(dāng)前圖形視口內(nèi),且裁剪標(biāo)志clip設(shè)置的是真(1),那么調(diào)用該函數(shù)后,只有在圖形視口內(nèi)的矩形部分才被畫出。這個(gè)函數(shù)對(duì)應(yīng)的頭文件為graphics.h返回值:無(wú)例:下面的程序畫一些矩形實(shí)例:#include<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");rectangle(80,80,220,200);rectangle(140,99,180,300);rectangle(6,6,88,88);rectangle(168,72,260,360);getch();restorecrtmode();}bar()畫條函數(shù)功能:函數(shù)bar()用當(dāng)前填充圖樣和填充色(注意不是給圖色)畫出一個(gè)指定上左上角與右下角的實(shí)心長(zhǎng)條形(長(zhǎng)方塊或正方塊),但沒(méi)有四條邊線)。用法:bar()函數(shù)調(diào)用方式為voidbar(intleft,inttop,int
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加工項(xiàng)目分包合同范本
- 市區(qū)精裝修房長(zhǎng)期出租合同范本
- 冷庫(kù)建設(shè)合同范本合集
- 2025年度二零二五新型智能公產(chǎn)房買賣合同示范文本
- 城市綜合辦公樓單層長(zhǎng)期出租合同范本
- 公交運(yùn)輸合同范例
- 個(gè)人租給公司房屋租賃合同范本
- 會(huì)所庭院出租合同范本
- 債權(quán)讓與合同范例
- 加盟購(gòu)車合作合同范本
- VDA6.3 2023過(guò)程審核教材
- 高職應(yīng)用語(yǔ)文教程(第二版)教案 3管晏列傳
- 高中物理《光電效應(yīng)》
- 烹飪實(shí)訓(xùn)室安全隱患分析報(bào)告
- 《金屬加工的基礎(chǔ)》課件
- 運(yùn)輸行業(yè)春節(jié)安全生產(chǎn)培訓(xùn) 文明駕駛保平安
- 體驗(yàn)式沙盤-收獲季節(jié)
- 找人辦事協(xié)議
- 老年護(hù)理陪護(hù)培訓(xùn)課件
- 醬香型白酒工廠設(shè)計(jì)
- 第3章 環(huán)境感知技術(shù)
評(píng)論
0/150
提交評(píng)論