掃雷Python版_第1頁
掃雷Python版_第2頁
掃雷Python版_第3頁
掃雷Python版_第4頁
掃雷Python版_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、import randomimport osimport msvcrtimport easyguifrom colorama import init,Foreinit(autoreset=False)class Fangkuai: def _init_(self,x=0,y=0,neirong=0,zhuangtai=0): self.x=x self.y=y self.neirong=neirong#0,9,1,2,3,4,5,6,7,8分別為 空,雷,數(shù)字1-8 self.zhuangtai=zhuangtai#0,1,2,3,4分別為 未點擊,插旗,問號,被點擊,錯誤 def getFa

2、ngkuai(self): return self.x,self.y,self.neirong,self.zhuangtaiclass Mymap: def _init_(self,xMax=10,yMax=10): self.xMax=xMax self.yMax=yMax self.fk= self.new_fk=Fangkuai() self.lei_xy= def found_map(self): for x in range(self.xMax): self.fk.append() for y in range(self.yMax): new_fk = Fangkuai(x,y) s

3、elf.fkx.append(new_fk.getFangkuai()2,new_fk.getFangkuai()3) def bulei(self): for i in range(lei_sum): while True: self.x = random.randint(0, map_xy_max0 - 1) self.y = random.randint(0, map_xy_max1 - 1) if self.x,self.y not in self.lei_xy: self.fkself.xself.y0=9# 這一位的9代表雷 self.lei_xy.append(self.x,se

4、lf.y) break def bushu(self): for j in self.lei_xy: # print('j=',j) #為雷周圍布數(shù)字 for lei_x in j0-1,j0,j0+1: for lei_y in j1-1,j1,j1+1: #超出地圖不處理 if 0<=lei_x<map_xy_max0 and 0<=lei_y<map_xy_max1: #如果是雷不處理 if self.fklei_xlei_y0=9: # print(lei_x,lei_y,'我是雷',end='') pass el

5、se: # print(lei_x,lei_y,'我加一',end='') self.fklei_xlei_y0 += 1 else: # print(lei_x,lei_y,'我不在',end='') pass # print() def getfk(self): return self.fkclass State: def _init_(self,fk,x,y): self.fk=fk self.x=x self.y=y #點擊 def click(self): if self.fkself.xself.y1=0: self.

6、fkself.xself.y1=3 State.click_judge(self,self.x,self.y) over=State.game_over(self) return over # 判定點擊效果 def click_judge(self,x1,y1): if self.fkx1y10 = 0: for lei_x in x1 - 1, x1, x1 + 1: for lei_y in y1 - 1,y1,y1 + 1: # 超出地圖不處理 if 0 <= lei_x < map_xy_max0 and 0 <= lei_y < map_xy_max1: #

7、如果已被點擊不處理 if self.fklei_xlei_y1 = 3: pass else: self.fklei_xlei_y1 = 3 State.click_judge(self,lei_x,lei_y) else: pass else: pass #插旗 def set_flag(self): if self.fkself.xself.y1=3: pass elif self.fkself.xself.y1=2: self.fkself.xself.y1=0 elif self.fkself.xself.y1=0 or self.fkself.xself.y1=1: self.fks

8、elf.xself.y1+=1 else: pass #游戲結(jié)束判定 def game_over(self): # 判定是否點到了雷 if self.fkself.xself.y0 = 9: for fk_x in range(len(self.fk): for fk_y in range(len(self.fkfk_x): if self.fkfk_xfk_y1 = 1: if self.fkfk_xfk_y0 != 9: self.fkfk_xfk_y1 = 4 else: pass else: self.fkfk_xfk_y1 = 3 return 3 #游戲獲勝判定 def game_

9、win(self): # 判定所有的雷是不是都插了旗- for fk_x in range(len(self.fk): for fk_y in range(len(self.fkfk_x): # 如果有雷沒插旗,繼續(xù)游戲 if self.fkfk_xfk_y0 = 9 and self.fkfk_xfk_y1 != 1: return 1 # 如果有不是雷的插著旗,繼續(xù)游戲 elif self.fkfk_xfk_y0 != 9 and self.fkfk_xfk_y1 = 1: return 1 # 此項是為防止通過插旗測試正確答案,必須點開所有的空地 # 如果有沒點開的磚塊,繼續(xù)游戲 eli

10、f self.fkfk_xfk_y1 = 0: return 1 else: pass return 2 def setfk(self): return self.fkclass Model: def _init_(self,fk,start_x,start_y): self.fk=fk self.start_x=start_x self.start_y=start_y self.qishu=lei_sum def dayin(self): os.system('cls') print()#打印開頭空行 print('xy',end=' ') f

11、or top in range(len(self.fk0): print('%2d'%top,end='') print('n') for x in range(len(self.fk): print('%2d'%x,end=' ') for y in range(len(self.fkx): # self.fkxy0 0,9,1,2,3,4,5,6,7,8分別為 空,雷,數(shù)字1-8 # self.fkxy1 0,1,2,3分別為 未點擊,插旗,問號,被點擊 if x=self.start_x and y=self

12、.start_y: print(Fore.GREEN,end='') if self.fkxy1=0: print('',end='') elif self.fkxy1=1: print(Fore.RED+''+Fore.RESET,end='') self.qishu-=1 elif self.fkxy1=2: print('?',end='') elif self.fkxy1=3: if self.fkxy0=0: print('',end='')

13、 elif self.fkxy0=9: print('¤',end='') elif self.fkxy0=1: print('',end='') elif self.fkxy0=2: print('',end='') elif self.fkxy0=3: print('',end='') elif self.fkxy0=4: print('',end='') elif self.fkxy0=5: print('

14、9;,end='') elif self.fkxy0=6: print('',end='') elif self.fkxy0=7: print('',end='') elif self.fkxy0=8: print('',end='') #數(shù)字 # else: # print('%2d'%self.fkxy0,end='') elif self.fkxy1=4: print('×',end='') else:

15、pass if x = self.start_x and y = self.start_y and self.fkxy1!=1: print(Fore.RESET,end='') # autoreset = True print()#打印一行后回車 print()#打印結(jié)尾空行 print('你還有%d面旗子'%self.qishu)class Control: def _init_(self,key,x=0,y=0): self.key=key self.x=x self.y=y #Up, Down, Left,Right def fk_move(self):

16、 if ord(self.key) =119: self.x-=1 elif ord(self.key) =115: self.x+=1 elif ord(self.key) =97: self.y-=1 elif ord(self.key) =100: self.y+=1 elif ord(self.key) =106: return 'j' elif ord(self.key) =107: return 'k' elif ord(self.key) = 27: # key nr 27 is escape if easygui.ccbox('是否退出游

17、戲','退出',choices=('是','否'): return 'esc' else: pass #邊緣判定 if self.x<0: self.x=map_xy_max0-1 if self.x>=map_xy_max0: self.x=0 if self.y<0: self.y=map_xy_max1-1 if self.y>=map_xy_max1: self.y=0 def get_all(self): return self.x,self.ymap_xy_max=lei_sum=0de

18、f cli(): global map_xy_max,lei_sum choices='簡單','普通','困難','自定義' xuanguan=easygui.buttonbox('選擇您要玩的難度','選關(guān)',choices) if xuanguan=choices3: fields = '雷區(qū)長度:', '雷區(qū)寬度:', '雷數(shù):' xuan=easygui.multenterbox('請輸入您要挑戰(zhàn)的難度','自定義難度',fields) for xuan_key in range(len(xuan:): xuanxuan_key=int(xuanxuan_key) map_xy_max=xuan:2 lei_sum=xuan2 else: guan=choices0:10,10,10, choices1:15,15,30, choices2:20,20,60, map_xy_max=guanxuanguan:2#地圖大小 lei_sum=guanxuanguan2 mymap=Mymap(map_xy_max0,map_xy_max1) mymap.found_map

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論