




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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分别为 空,雷,数字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) #为雷周围布数字 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 #游戏结束判定 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): # 如果有雷没插旗,继续游戏 if self.fkfk_xfk_y0 = 9 and self.fkfk_xfk_y1 != 1: return 1 # 如果有不是雷的插着旗,继续游戏 elif self.fkfk_xfk_y0 != 9 and self.fkfk_xfk_y1 = 1: return 1 # 此项是为防止通过插旗测试正确答案,必须点开所有的空地 # 如果有没点开的砖块,继续游戏 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分别为 空,雷,数字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='') #数字 # 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()#打印结尾空行 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('选择您要玩的难度','选关',choices) if xuanguan=choices3: fields = '雷区长度:', '雷区宽度:', '雷数:' xuan=easygui.multenterbox('请输入您要挑战的难度','自定义难度',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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论