首页 > 编程 > Python > 正文

用python写扫雷游戏实例代码分享

2020-02-15 21:31:38
字体:
来源:转载
供稿:网友

扫雷是一个非常经典的WIN游戏,我们教给大家用python语言来写出这个游戏,以下是全部实例代码:

#!/usr/bin/python#coding:utf-8#python 写的扫雷游戏import sysimport randomclass MineSweeping():  #扫雷主程序  def __init__(self,row = 8 ,line= 8,mineNum = 15):    self.row = row    self.line = line    self.score = 0 #分数    self.mineNum = mineNum    self.xy_list = [[0 for i in range(self.line)] for i in range(self.row)]  def initData(self):    # 初始化状态值    # 游戏开始的时候状态值为清零(再重新设置状态值)    self.xy_list = [[0 for i in range(self.line)] for i in range(self.row)]    # 设置雷的数量    maxMine = self.mineNum    while maxMine > 0 :      num_x = random.randint(0,self.row-1)      num_y = random.randint(0,self.line-1)      if self.xy_list[num_x][num_y] == 0:        self.xy_list[num_x][num_y] = 1        maxMine -= 1  #获取x坐标  def get_pos(self,str_pos):    #获取x坐标    while 1:      try:        num_x = raw_input(str_pos)        if int(num_x) in range(self.line) and num_x :          break        else:          print u'输入无效值'      except:        pass    return int(num_x)  #进行扫雷  def mine_clear(self,x,y):    # 设置显示进行扫过的数目    # 设置数字    # 0 表示扫过的雷    # 1 表示类    # 2 表示扫过的类    #获取坐标的数字    pos = self.xy_list[x][y]    if pos == 0 :      self.xy_list[x][y] = 2      return 0    elif pos == 2 :      return 2    else:      return 1  #界面的显示  def mineFace(self,state):    #显示界面的内容    #设置游戏的状态    #1 表示运行的状态    #2 表示输出的状态    #3 表示游戏结束的状态    #4 表示游戏获得了完胜    if state == 1:      print '+=================+'      print '   Game start  '      print '+=================+'      tt = ' #'      print '**************************'      for i in range(self.line):        str_t = ''        for t in xrange(self.row):          str_t += tt        print "|%s|"%(str_t,)      print '**************************'      print 'Please input values of x,y(0-7):'    #刷新用户界面    if state == 2:      tt = ' #'      print '**************************'      for i in range(self.line):        str_t = ''        for t in xrange(self.row):          if self.xy_list[i][t] == 2:            str_t += str(self.xy_list[i][t]).rjust(2)          else:            str_t += tt        print "|%s|"%(str_t,)      print '**************************'    if state == 3:      print '**************************'      for i in range(self.line):        str_t = ''        for t in xrange(self.row):          if int(self.xy_list[i][t]) != 1:            str_t += ' 2'          else:            str_t += ' *'        print "|%s|"%(str_t,)      print '**************************'    if state == 4:      tt = ' #'      print '**************************'      for i in range(self.line):        str_t = ''        for t in xrange(self.row):          if self.xy_list[i][t] == 2:            str_t += str(self.xy_list[i][t]).rjust(2)          else:            str_t += ' @'        print "|%s|"%(str_t,)      print '**************************'  def MainLoop(self):    #创建游戏主循环    #创建界面的运行    self.mineFace(1)    self.score = 0    self.initData()    #print self.xy_list    # 进入主循环    while 1:      #获取坐标的位置      x = self.get_pos(' X = ')      y = self.get_pos(' Y = ')      num = self.mine_clear(x,y)      #判断是不过的了完胜      win = True      for i in self.xy_list:        if 0 in i:          win = False          break      if win:        num = 4      #执行刷新界面的函数      if num == 0:        self.mineFace(2)        self.score += 10      elif num == 2:        print u'这个位置已经被排过了,证实没有雷'      elif num == 1:        print '+=================+'        print '   Game over  '        print '+=================+'        print u'分数 : ', self.score        self.mineFace(3)        # 是不是进行下一句        next = raw_input(u'是够进行下一局:Y or N ')        if next.upper().startswith('Y'):          print u'下一局开始'          self.nextGame()        else:          print '>>> Game exit'          break      else:        self.score += 10        print u'恭喜您获得的完全的胜利'        print u'分数 : ', self.score        self.mineFace(4)        next = raw_input(u'是够进行下一局:Y or N ')        if next.upper().startswith('Y'):          print u'下一局开始'          self.nextGame()        else:          print '>>> Game exit'          break  # 下一局初始化信息  def nextGame(self):    self.mineFace(1)    self.score = 0    self.initData()if __name__ == '__main__':  mi = MineSweeping(10,10,20)  mi.MainLoop()  sys.exit()            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表