




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《Python語(yǔ)言程序設(shè)計(jì)》實(shí)訓(xùn)指導(dǎo)書(shū)制作2048小游戲任務(wù)背景:Python是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。對(duì)于初學(xué)者和完成普通任務(wù),Python語(yǔ)言是非常簡(jiǎn)單易用的。Python可以幫助我們做日常任務(wù),可以做網(wǎng)站,例如YouTube就是Python寫(xiě)的;可以做網(wǎng)絡(luò)游戲的后臺(tái),很多在線游戲的后臺(tái)都是Python開(kāi)發(fā)的。任務(wù)需求:綜合學(xué)習(xí)利用Python相關(guān)知識(shí)、技巧,制作2048小游戲任務(wù)分析:任務(wù)步驟:1.借用Pycharm工具,建立Python3項(xiàng)目2.設(shè)置游戲相關(guān)參數(shù)等全局變量3.定義游戲的合并規(guī)則UpdateNew類、操作方法類、初始化方法GameInit類4.定義游戲的主行為程序任務(wù)結(jié)果:做一個(gè)可以通過(guò)上下左右控制的2048小游戲任務(wù)實(shí)施過(guò)程:1 制作2048小游戲?qū)嶒?yàn)?zāi)康?)制作2048小游戲2)綜合學(xué)習(xí)利用Python相關(guān)知識(shí)、技巧實(shí)驗(yàn)環(huán)境OracleLinux7.4Python3.6.5Pycharm2017.2實(shí)驗(yàn)步驟1)打開(kāi)IDE,配置解釋器(如已完成解釋器配置,可跳過(guò)解釋器配置步驟)點(diǎn)擊桌面pycharm圖標(biāo)打開(kāi)IDE在打開(kāi)的窗口中選擇Configure選項(xiàng),接著在彈出的下拉菜單中選擇Settings打開(kāi)首選項(xiàng)菜單首選項(xiàng)菜單中選擇左側(cè)的ProjectInterpreter,在右側(cè)下拉菜單中選擇3.6.5版本解釋器,并依次點(diǎn)擊Apply與OK確認(rèn)設(shè)置2)新建Project(如已完成工程創(chuàng)建,可跳過(guò)此步驟)點(diǎn)擊CreateNewProject新建工程在Location文本框中補(bǔ)充輸入project,表示將/root/PycharmProjects/project作為新工程目錄,并點(diǎn)擊create完成創(chuàng)建3)新建python源代碼文件鼠標(biāo)右鍵單擊project工程,在菜單中選擇New->PythonFile創(chuàng)建.py文件在彈出窗口的Name文本框中輸入.py文件的文件名,本次實(shí)驗(yàn)推薦文件名為“getter、setter、deleter“。接著點(diǎn)擊OK按鈕完成python源文件的創(chuàng)建。創(chuàng)建成功后,會(huì)默認(rèn)在右側(cè)編輯區(qū)域打開(kāi)該文件4)編寫(xiě)實(shí)驗(yàn)代碼1.加載python庫(kù),定義游戲相關(guān)的全局變量[Code001]:#_*_coding:UTF-8_*_importnumpy,sys,random,pygamefrompygame.localsimport*Size=4#4*4行列Block_WH=110#每個(gè)塊的長(zhǎng)度寬度BLock_Space=10#兩個(gè)塊之間的間隙Block_Size=Block_WH*Size+(Size+1)*BLock_SpaceMatrix=numpy.zeros([Size,Size])#初始化矩陣4*4的0矩陣Screen_Size=(Block_Size,Block_Size+110)Title_Rect=pygame.Rect(0,0,Block_Size,110)#設(shè)置標(biāo)題矩形的大小Score=0#數(shù)塊顏色Block_Color={0:(150,150,150),2:(255,255,255),4:(255,255,128),8:(255,255,0),16:(255,220,128),32:(255,220,0),64:(255,190,0),128:(255,160,0),256:(255,130,0),512:(255,100,0),1024:(255,70,0),2048:(255,40,0),4096:(255,10,0),}2.定義基礎(chǔ)類包含matrix,score,zerolist3個(gè)屬性。提供一個(gè)操控矩陣的方法,toSequence(matrix),以及游戲的合并策略[Code002]:classUpdateNew(object):"""docstringforUpdateNew"""def__init__(self,matrix):super(UpdateNew,self).__init__()self.matrix=matrixself.score=0self.zerolist=[]#保存的為一個(gè)個(gè)元組,用于存放矩陣中0元素的位置坐標(biāo)#合并相同的數(shù)字defcombineList(self,rowlist):start_num=0end_num=Size-rowlist.count(0)-1whilestart_num<end_num:ifrowlist[start_num]==rowlist[start_num+1]:rowlist[start_num]*=2self.score+=int(rowlist[start_num])#每次返回累加的分?jǐn)?shù)rowlist[start_num+1:]=rowlist[start_num+2:]rowlist.append(0)start_num+=1returnrowlist#刪除列表前面和中間的0,返回合并后的列表defremoveZero(self,rowlist):whileTrue:mid=rowlist[:]#拷貝一份listtry:rowlist.remove(0)#remove,刪除列表中第一個(gè)匹配項(xiàng)rowlist.append(0)#append,在列表末尾添加元素except:#如果沒(méi)有0,拋出異常passifrowlist==mid:break;returnbineList(rowlist)#去除矩陣中每一行前面與中間的0元素,獲得矩陣中0元素位置#合并元素后返回添加一個(gè)2或4元素后的矩陣deftoSequence(self,matrix):lastmatrix=matrix.copy()m,n=matrix.shape#獲得矩陣的行,列#對(duì)于m行,去除前面和中間的0后合并foriinrange(m):newList=self.removeZero(list(matrix[i]))matrix[i]=newList#添加所有0元素的行列號(hào)forkinrange(Size-1,Size-newList.count(0)-1,-1):#添加所有有0的行號(hào)列號(hào)self.zerolist.append((i,k))#矩陣中有最小值0且移動(dòng)后的矩陣不同,才可以添加0位置處添加隨機(jī)數(shù)ifmatrix.min()==0and(matrix!=lastmatrix).any():GameInit.initData(matrix,self.zerolist)returnmatrix3.定義上下左右四個(gè)操作動(dòng)作類[Code003]:#左移,繼承基礎(chǔ)類的屬性和方法,提供一種處理數(shù)據(jù)的方法,handleData()classLeftAction(UpdateNew):#繼承自父類的屬性進(jìn)行初始化。而且是用父類的初始化方法來(lái)初始化繼承的屬性。def__init__(self,matrix):super(LeftAction,self).__init__(matrix)defhandleData(self):matrix=self.matrix.copy()#獲得一份矩陣的復(fù)制newmatrix=self.toSequence(matrix)returnnewmatrix,self.score#右移,同左移+翻轉(zhuǎn)classRightAction(UpdateNew):def__init__(self,matrix):super(RightAction,self).__init__(matrix)defhandleData(self):matrix=self.matrix.copy()[:,::-1]#翻轉(zhuǎn)newmatrix=self.toSequence(matrix)returnnewmatrix[:,::-1],self.score#上移,同左移+轉(zhuǎn)置classUpAction(UpdateNew):def__init__(self,matrix):super(UpAction,self).__init__(matrix)defhandleData(self):matrix=self.matrix.copy().T#轉(zhuǎn)置newmatrix=self.toSequence(matrix)returnnewmatrix.T,self.score#下移,同左移+翻轉(zhuǎn)+轉(zhuǎn)置classDownAction(UpdateNew):def__init__(self,matrix):super(DownAction,self).__init__(matrix)defhandleData(self):matrix=self.matrix.copy()[::-1].T#翻轉(zhuǎn)+轉(zhuǎn)置newmatrix=self.toSequence(matrix)returnnewmatrix.T[::-1],self.score4.定義游戲初始化類,包括游戲界面、數(shù)字出現(xiàn)的隨機(jī)位置等[Code004]:#游戲初始化類classGameInit(object):"""docstringforGameInit"""def__init__(self):super(GameInit,self).__init__()@staticmethod#獲得隨機(jī)位置坐標(biāo)defgetRandomLocal(zerolist=None):ifzerolist==None:a=random.randint(0,Size-1)b=random.randint(0,Size-1)else:a,b=random.sample(zerolist,1)[0]returna,b@staticmethod#隨機(jī)返回2或者4defgetNewNum():#隨機(jī)返回2或者4n=random.random()ifn>0.8:n=4else:n=2returnn@classmethod#將合并后的數(shù)據(jù)在空白地方增加2或4definitData(cls,matrix=None,zerolist=None):ifmatrixisNone:matrix=Matrix.copy()a,b=cls.getRandomLocal(zerolist)#zerolist空任意返回(x,y)位置,否則返回任意一個(gè)0元素位置n=cls.getNewNum()matrix[a][b]=nreturnmatrix#返回初始化任意位置為2或者4的矩陣@classmethod#繪制游戲界面,第一個(gè)參數(shù)是屏幕,第二個(gè)參數(shù)顏色#第三個(gè)參數(shù)rect大小,第四個(gè)默認(rèn)參數(shù)defdrawSurface(cls,screen,matrix,score):#設(shè)置游戲界面的顏色字體pygame.draw.rect(screen,(255,255,255),Title_Rect)font1=pygame.font.SysFont('simsun',48)font2=pygame.font.SysFont(None,32)#font.render第一個(gè)參數(shù)是文本內(nèi)容,第二個(gè)參數(shù)是否抗鋸齒,第三個(gè)參數(shù)字體顏色screen.blit(font1.render('Score:',True,(255,127,0)),(20,25))screen.blit(font1.render('%s'%score,True,(255,127,0)),(170,25))screen.blit(font2.render('up',True,(255,127,0)),(360,20))screen.blit(font2.render('leftdownright',True,(255,127,0)),(300,50))a,b=matrix.shape#按照行列畫(huà)方塊foriinrange(a):forjinrange(b):cls.drawBlock(screen,i,j,Block_Color[matrix[i][j]],matrix[i][j])@staticmethod#繪制方塊defdrawBlock(screen,row,column,color,blocknum):font=pygame.font.SysFont('stxingkai',80)#方塊起始坐標(biāo)w=column*Block_WH+(column+1)*BLock_Spaceh=row*Block_WH+(row+1)*BLock_Space+110pygame.draw.rect(screen,color,(w,h,110,110))ifblocknum!=0:#如果方塊中有數(shù)字,數(shù)字居中fw,fh=font.size(str(int(blocknum)))#獲得數(shù)字的長(zhǎng)度和寬度screen.blit(font.render(str(int(blocknum)),True,(0,0,0)),(w+(110-fw)/2,h+(110-fh)/2))@staticmethod#將鍵盤(pán)方向鍵與函數(shù)對(duì)應(yīng)defkeyDownPressed(keyvalue,matrix):ifkeyvalue==K_LEFT:returnLeftAction(matrix)elifkeyvalue==K_RIGHT:returnRightAction(matrix)elifkeyvalue==K_UP:returnUpAction(matrix)elifkeyvalue==K_DOWN:returnDownAction(matrix)@staticmethod#判斷傳入的矩陣,游戲是否結(jié)束#如果有一行存在相鄰兩個(gè)數(shù)相同,則游戲沒(méi)有結(jié)束defgameOver(matrix):testmatrix=matrix.copy()a,b=testmatrix.shapeforiinrange(a):forjinrange(b-1):iftestmatrix[i][j]==testmatrix[i][j+1]:#如果每行存在相鄰兩個(gè)數(shù)相同,則游戲沒(méi)有結(jié)束print('游戲沒(méi)有結(jié)束')returnFalseforiinrange(b):forjinrange(a-1):iftestmatrix[j][i]==testmatrix[j+1][i]:print('游戲沒(méi)有結(jié)束')returnFalseprint('游戲結(jié)束')returnTrue5.定義游戲的主要?jiǎng)幼魇录Code005]:defmain():pygame.init()#初始化pygame庫(kù)screen=pygame.display.set_mode(Screen_Size,0,32)#屏幕設(shè)置matrix=GameInit.initData()#更新矩陣的值currentscore=0#分?jǐn)?shù)GameIn
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)娃娃魚(yú)養(yǎng)殖項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)假肢、人工器官及植(介)入器械制造項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)鯽魚(yú)項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)科技服務(wù)項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)菊粉項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)光盤(pán)鏡像服務(wù)器項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)骨科器械項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)高端水產(chǎn)養(yǎng)殖項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)電子書(shū)包項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 中國(guó)3D制圖軟件項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 2025-2031年中國(guó)植物多糖市場(chǎng)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 適老化建筑設(shè)計(jì)案例調(diào)研
- 玫琳凱授權(quán)合同協(xié)議
- 羅森便利店培訓(xùn)
- 2025年煙臺(tái)市初中地理學(xué)業(yè)水平考試試題及答案
- 非遺纏花創(chuàng)新創(chuàng)業(yè)
- 物業(yè)品質(zhì)管理制度
- 施工分包商入庫(kù)管理細(xì)則
- 2025-2030中國(guó)胎盤(pán)提取物行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 《中國(guó)肌肉減少癥診療指南(2024版)解讀》
- 人工智能產(chǎn)品的用戶體驗(yàn)優(yōu)化研究
評(píng)論
0/150
提交評(píng)論