本文实例为大家分享了python实现文字版扫雷的具体代码,供大家参考,具体内容如下
python版本:2.7
游戏运行图:
代码已经注释得很清楚,不废话了,直接上代码:
2个算法:1、随机数生成算法,2、广度优先
#coding:utf-8
import sys
import random
import Queue
#保存不同游戏难度数据 格式:难度:(row,line,mine)
DIFFICUL_DATA = {1:(8,8,5),2:(10,10,20),3:(15,15,100)}
#保存不同游戏结果的一些数据
RESULT_DATA = {
0:" 数据统计",
1:" 游戏胜利",
2:" 游戏失败"
}
class Sweep_Mine(object):
def __init__(self):
"""
功能:实例化函数
"""
self.row = 0
self.line = 0
self.mine_num = 0
self.map_list = []
self.clean_count = 0
self.step_count = 0
self.level = 0
self.result = 0 # 保存游戏结果、0:还未结束,1:游戏胜利,2:游戏失败
self.queue = Queue.Queue()
def show_desc(self):
"""
功能:打印游戏说明
"""
print "=============================="
print "| 游戏说明 |"
print "| |"
print "| |"
print "| # 为没扫雷过的位置 |"
print "| * 为地雷的位置 |"
print "| 0 为空白区域 |"
print "| 1-8为周围雷的数目 |"
print "| |"
print "| |"
print "| 输入X/Y: 扫雷的位置 |"
print "| X/Y输入99: 刷新地图 |"
print "| X/Y输入88: 退出游戏 |"
print "| |"
print "=============================="
print "------------------------------"
def show_result(self):
"""
功能:打印信息显示
参数:
select 0 打印数据统计
1 打印游戏胜利
2 打印游戏结束
"""
print "\n============================"
print RESULT_DATA.get(self.result) #从RESULT_DATA中打印结果数据
print "\n 地雷数 : %d 步数 :%d " %(self.mine_num,self.step_count)
print " 已扫雷坑 : %d 剩余雷坑:%d " %(self.clean_count, self.row*self.line - self.clean_count -self.mine_num)
print "============================"
def init_data(self):
"""
功能:难度选择,数据初始化
"""
self.clean_count = 0
self.step_count = 0
self.row = DIFFICUL_DATA[self.level][0] #从全局变量Grade_Data获取难度数据
self.line = DIFFICUL_DATA[self.level][1]
self.mine_num = DIFFICUL_DATA[self.level][2]
self.map_list = [['#' for i in range(self.row)] for i in range(self.line)] #map_list填充'#'
random_list = random.sample(range(self.row*self.line),self.mine_num) #获取mine_num个随机数
for i in random_list:
x = i%self.row #用随机数对横取余
y = i/self.row #用随机数对横取商
self.map_list[y][x] = '*' #随机位置设置雷
def set_level(self,lvl):
"""
功能:设置游戏难度
参数:
lvl 为 1 2 3 不同难度
返回:
True 设置等级成功
False 设置等级失败
"""
if lvl ==1 or lvl == 2 or lvl == 3:
self.level = lvl
self.init_data()
return True
else:
return False
def check_result(self):
"""
功能:判断游戏是否胜利
返回:
self.result
0 未结束
1 胜利
2 失败
"""
if self.row*self.line-self.clean_count <= self.mine_num:
self.result = 1
return self.result
def bfs(self):
"""
BFS广度优先搜索空白区
"""
queue_temp = []
around = [[-1,-1],[0,-1],[1,-1],[-1,0],[1,0],[-1,1],[0,1],[1,1]]
while not self.queue.empty():
self.clean_count += 1
mine = 0
q_x=self.queue.get()
q_y=self.queue.get()
for value in around:
line = q_y + value[0]
row = q_x + value[1]
if line<0 or line>=self.line or row<0 or row>=self.row:
continue
if self.map_list[line][row] == '*':
mine += 1
elif self.map_list[line][row] == '#':
queue_temp.append([line,row]) #暂时保存到queue_temp
if mine > 0:
self.map_list[q_y][q_x] = str(mine) #标注雷的数目
queue_temp = [] #清空queue_temp
else:
self.map_list[q_y][q_x] = '0' #设置为空白区'0'
while len(queue_temp): #将queue_temp里面的值放到queue队列里面
temp = queue_temp.pop(0)
self.map_list[temp[0]][temp[1]] = '0' #防止回头
self.queue.put(temp[1]) #将空白的点加入队列
self.queue.put(temp[0])
def show_game(self,showmine=False):
"""
功能:显示扫雷地图
参数:默认showmine 为 False 普通显示,隐藏地雷的位置
showmine 为 True 特殊显示,显示地图中地雷的位置
"""
output_temp = [] #保存输出字符
num_temp = [] #保存横纵坐标的序号
len = self.row if self.row >= self.line else self.line #保存row或line长的一边
for num in range(len):
if num <10:
num_temp.append(str(num)+' ')
else:
num_temp.append(str(num)+' ')
output_temp.append(" X ")
for x in range(self.row):
output_temp.append(num_temp[x])
output_temp.append('\nY ')
for x in range(self.row):
output_temp.append('---')
for y in range(self.line):
output_temp.append('\n'+num_temp[y]+'| ')
for x in range(self.row):
if self.map_list[y][x] == '*':
if showmine == True:
output_temp.append('* ')
else:
output_temp.append('# ')
else:
output_temp.append(self.map_list[y][x] + ' ')
print ''.join(output_temp)
def input_pos(self,y,x):
"""
功能:输入扫雷位置
参数:输入整型x,y
表示要扫雷的位置,x为横坐标,y为纵坐标
x/y = 99,刷新地图
x/y = 88,结束游戏
返回:
True:扫雷成功
False:扫雷失败
"""
if x in range(self.row) and y in range(self.line):
self.step_count += 1 #步数加一
if self.map_list[y][x] == '*': #踩到地雷
self.result = 2 #游戏结果设置失败
return True
elif self.map_list[y][x] == '#': #扫雷成功
self.queue.put(x)
self.queue.put(y)
self.bfs()
return True
else:
return False
else:
if x == 99 or y == 99: #输入99,刷新地图
self.init_data()
return True
elif x == 88 or y == 88: #输入88,游戏结束
self.result = 2
return True
else:
return False
if __name__ == '__main__':
game = Sweep_Mine()
game.show_desc() #打印游戏说明
while True: #大循环输入游戏难度
level = raw_input("请选择游戏的难度\n输入:1、2、3\n")
if level.isdigit() != True: #如果输入不是数字
print("无效,请输入数字!")
continue
else:
level = int(level)
if game.set_level(level) == True: #选择难度成功推出
break
else:
print("难度选择失败!")
while game.check_result() == 0: #游戏没结束,一直循环输入x/y
game.show_game()
game.show_result()
x = raw_input("Input X:")
y = raw_input("Input Y:")
if x.isdigit() != True or y.isdigit() != True: #如果输入不是数字
print "无效,请输入数字!"
continue
else:
x = int(x)
y = int(y)
if game.input_pos(y,x): #输入扫雷的位置
print "扫雷成功!"
else:
print "输入位置错误!"
game.show_game(True) #游戏结束
game.show_result()
sys.exit(0)
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“python实现文字版扫雷”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2025年11月09日
2025年11月09日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]
