用200行python代码3分钟开发扫雷游戏(游戏源和python资料发送)-必威体育下载_betway必威手机版_betway必威app

首要阐明一下,本文的Python代码开发根底Py婺thon3.6版别和Pygame1.9.4版别,所以假如在其它版别中运用游戏代码或许需求改善或许优化。

进入正题,这次给咱们带来本来WindowsXP体系上的扫雷游戏,可是现在由于XP体系运用的比较少,一切我是用的Win7来运转的:如下图所示,感觉比XP上的美观多了。

哦对了手机开不了机怎么办,先阐明一下,我这儿有一套Python编程入门教程,现在免费共享给咱们

获取方法:转发此文,重视并私信小编“02”即可获取


然后翻开我的完成逻辑:玩过扫雷的都知道,在矩形区域内只要两种区域,一种是没有雷只要数字曲蕃蕊提示的区域,还有一种便是有雷的区域,这儿简称为非雷和雷。

刚开端想的是树立二维数组表明区域,0表明非地雷区域,1表明地雷区域,不过后来想想不太好,由于还要符号为地雷,而且假如点的对错雷区域还要想显现周围雷的数字,许多状况的,所以仍是直接做一个新起点楚冠胶囊类吧。

class Bloc李庄kStatus(Enum)寡人之于国也:
normal = 1 # 未点击
opened = 2 # 已点击
mine = 3 # 地雷
flag = 4 # 符号为地雷
ask = 5 # 符号为问号
bomb = 6 # 踩中地雷
hint = 7 # 被双击的周围
double = 8 # 正被鼠标左右键双击
class Mine:
def __init__(self, x, y, value=0):
self._x = x
self._y = y
self._value = 0
self._around_mine_count = -1
self._status = BlockStatus.normal
self.set_value(value)
def __repr__(self):
return str(self.四川省地图_value)
# return f'({self._x},{self._y})={self._value}, status={self.sta用200行python代码3分钟开发扫雷游戏(游戏源和python材料发送)-必威体育下载_betway必威手机版_betway必威app tus}'
def get_x(self):
return self._x
def set_x(self, x):
self._x = x
x = property(fget=get_x, fset=set_x)
def get_y(self):
return self._y
d问酒谢花ef set_y(self, y):
self._y = y
y = property(fget=get_y, fset=set_y)
def get_value(self):
return self._value
def set_value(self, value):
if value:
self._value = 1
else用200行python代码3分钟开发扫雷游戏(游戏源和python材料发送)-必威体育下载_betway必威手机版_betway必威app :
self._value = 用200行python代码3分钟开发扫雷游戏(游戏源和python材料发送)-必威体育下载_betway必威手机版_betway必威app 0
value = property(fget=get_value, fset=set_va对联的贴法lue, doc='0:非地雷 1:雷')
def get_around_mine_count(self):
return self._around_mine_count
def set_around_mine_count(self, around_mine_count):
self._around_mine_count = around_m华海峰ine_count
around_mine_count = property(fget=get_around_mine_count, fset=set_around_mine_count, doc='四周地雷数量')
def get_status(self):
return self._status
def set_status(self, value):
se黄纪莹lf._status = value
status = property(fget=get_status, fset=set_status, doc='BlockStatus')
仿制代码

不止地雷就很简略了,在矩形地图中的区域随机埋下99颗地雷,完成代码如下:

class MineBlock:
d淘车网ef __init__(self):
self._block = [[Mine(i, j) for i in range(BLOCK_WIDTH)] for j in range(BLOCK_HEIGHT)]
# 埋雷
for i in random.sample(ran用200行python代码3分钟开发扫雷游戏(游戏源和python材料发送)-必威体育下载_betway必威手机版_betway必威app ge(BLOCK_WIDTH * BLOCK_HEIGHT), MINE_COUNT):
self._block[i /用200行python代码3分钟开发扫雷游戏(游戏源和python材料发送)-必威体育下载_betway必威手机版_betway必威app / BLOCK_WIDTH][i % BLOCK_WIDTH].value = 1

当咱们开端玩游戏,用鼠标点击一个格子的时分,先找到点击区域的坐标,然后找到坐标关于的mine值,就知道有没有踩中雷,假如没有踩中雷,那么就要核算周围8个方位中雷的数量,然后给出提示在用户点击的区域上。

这儿要留意,假如周边有雷,那么只需求显现数字就行了,这个仍是比较简单完成的,可是假如周边没有雷,那么就要显现周围的一片区域,一直到有雷提示区域的呈现,如图所示:

这个其实也不是很难,运用递归就可以核算,假如在核算的过程中发现周围的雷数量appstore是0,就递归这个雷数量为0的区域周边的雷数,直到呈现雷数不为0的区域。

class MineBlock:
  def open_mine(self, x, y):
# 踩到雷了
if self._block[y][x].value:
self._block[y][x].status = BlockStatus.bomb
return False
# 先把状况改为 opened
self._block[y][x].status = BlockStatus.opened
around = _性爱天堂get_around(x, y)
_sum = 0
for i, j in around:
if self._block[j][i].value:
_sum += 1
self._block[y][x].around_mine_count = _sum
# 假如周围没有雷,那么将周围8个未中未点开的递归算一遍
# 这就能完成一点呈现一大片翻开的作用了
if _sum == 0:
for i, j in around:
if self._block[j][i].around_mine_count == -1:
self.open_mine(i, j)
return True
def _get_around(x, y):
"""回来(x, y)周围的点的坐标"""
# 这儿留意,range 结尾是开区间,所以要加用200行python代码3分钟开发扫雷游戏(游戏源和python材料发送)-必威体育下载_betway必威手机版_betway必威app 1
return [(i, j) for i in range(max(0, x - 1), min(BLOCK_WIDTH - 1, x + 1) + 1)
for j in range(max(0, y - 1), min(BLOCK_HEIGHT - 1, y + 1) + 1) if i != x or j != y]

然后还有一个比较费事的当地,咱们在用鼠标点击的时分,假如鼠标左右键一起按下的话,假如按下区域是有雷的,那么就会一会儿翻开游戏区域中一切的格子,假如其中有红旗符号过错的,那么游戏完毕。

代码如下所示:

class MineBlock:
   def double_mouse_button_down(self, x, y):
if self._block[y][x].around_mine_count == 0:
return True
self._block[y][x].status = BlockStatus.double
around = _get_around(x, y)
sumflag = 0 # 周围被符号的雷数量
f小师弟总在崩坏or i, j in _get_around(x, y):
if self._block[j][i].status == BlockStatus.flag:
sumflag += 1
# 周边的雷现已悉数被符号
result = True
if sumflag == self._block[y][黄色暴力x].around_mine_count:
for i, j in around:
if self._block[j][i].status == BlockStatus.normal:
if not self.open_mine(i, j):
result = False
else:
for i, j in around:
if self._block[j][i].status == BlockStatus.normal:
self._block[j][i].status = BlockSta刘强东性寝tus.hint
return result
def double_mo胰腺use_button_up(self, x, y):
self._block[y][x].status = BlockStatus.opened
for i, j in _ge常石磊t_around(x, y):
if self._block[j][i].status == BlockStatus.hint:
self._block[j][i].status =用200行python代码3分钟开发扫雷游戏(游戏源和python材料发送)-必威体育下载_betway必威手机版_betway必威app BlockStatus.normal

其实扫雷是一个比较根底可是也比较有意思的游戏,首要便是这些逻辑,其他的都比较简略,还有一些其它比方游戏难度,游戏重开之类的功用就没有去完成了,这儿写出来仅仅为了便利咱们学习技能。

评论(0)