网络编程
位置:首页>> 网络编程>> Python编程>> 用python写扫雷游戏实例代码分享

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

作者:laozhang  发布时间:2023-03-31 05:12:38 

标签:python,扫雷游戏

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


#!/usr/bin/python
#coding:utf-8

#python 写的扫雷游戏

import sys
import random

class 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()

如果大家在测试的时候还有任何疑问,可以在下方的留言区讨论,感谢大家对脚本之家的支持。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com