python扫雷总结与体会,欢迎来到python扫雷

while True:screen.fill(bgcolor) #填充背景色

for event in pygame.event.get(): #获取操作

if event.type == QUIT: #点击右上角的'×'

sys.exit() #退出程序

elif event.type == MOUSEBUTTONDOWN:#鼠标按下

mouse_x, mouse_y = event.pos #获取鼠标位置

x = mouse_x // SIZE

y = mouse_y // SIZE - 2

b1, b2, b3 = pygame.mouse.get_pressed()#鼠标点击的位置,b1对应左键,b3对应右键

elif event.type == MOUSEBUTTONUP: #松开鼠标

if y < 0: #点击方块上方

if face_pos_x <= mouse_x <= face_pos_x + face_size and face_pos_y <= mouse_y <= face_pos_y + face_size: #判断是否点击笑脸

game_dict1=game_dict[0] #重置数据,开始新一局游戏

start_time = time.time()

used_time = 0

for i in list_mine:

for j in i:

pos = (j.x * SIZE, (j.y + 2) * SIZE)

j.surround_count = -1 #把周边雷的数目回归到原始状态

j.condition = Block_Condition.unclicked #所有方块回归为未点击状态

screen.blit(png_blank, pos)

pygame.display.flip()

for i in random.sample(range(BLOCK_WIDTH * BLOCK_HEIGHT), BLOCK_WIDTH * BLOCK_HEIGHT):

list_mine[i // BLOCK_WIDTH][i % BLOCK_WIDTH].value = 0 #把上一轮雷的定义全部清除

block=Mine_Block() #重新定义雷

continue

else:

continue

if game_dict1 == game_dict[0]: #状态为准备就绪

game_dict1 = game_dict[1] #开始

start_time = time.time() #开始计时

if game_dict1 == game_dict[1]:

mine = block.getblock(x, y)

if b1 and not b3: #按鼠标左键

if mine.condition == Block_Condition.unclicked: #未点击的会点开

if not block.open_block(x, y): [PerfectMoney下载](https://www.gendan5.com/wallet/PerfectMoney.html)#中奖了啊,一颗雷

game_dict1 = game_dict[3] #游戏状态为失败

elif not b1 and b3: #按鼠标右键

if mine.condition == Block_Condition.unclicked: #如果未点击,则标记为旗帜(雷)

mine.condition = Block_Condition.flag

elif mine.condition == Block_Condition.flag: #如果之前的标记是旗帜,则改标记为问号

mine.condition = Block_Condition.ask

elif mine.condition == Block_Condition.ask: #如果之前的标记是问号,则改为未点击的状态

mine.condition = Block_Condition.unclicked

flag_count = 0 #旗帜为0

opened_count = 0 #点开的方块为0

for row in block._block:

for mine in row:

pos = (mine.x * SIZE, (mine.y + 2) * SIZE)

if mine.condition == Block_Condition.clicked: #点开了加载图片(数字),点开的方块加一

screen.blit(png_dict[mine.surround_count], pos)

opened_count += 1

elif mine.condition == Block_Condition.bomb: #状态是炸弹

screen.blit(png_blood, pos)

elif mine.condition == Block_Condition.flag: #是旗帜

screen.blit(png_flag, pos)

flag_count += 1

elif mine.condition == Block_Condition.ask: #是问号

screen.blit(png_ask, pos)

elif game_dict1 == game_dict[3] and mine.value:

screen.blit(png_mine, pos) #失败了显示所有地雷

elif mine.condition == Block_Condition.unclicked: #是未打开

screen.blit(png_blank, pos)

if event.type == MOUSEMOTION:#用特定的图像显示鼠标的位置

mouse_x, mouse_y = event.pos

x = mouse_x // SIZE

y = mouse_y // SIZE - 2

mine = block.getblock(x, y)

pos = (mine.x * SIZE, (mine.y + 2) * SIZE)

if y < 0:

continue

else:

if mine.condition == Block_Condition.unclicked:

screen.blit(png_dict[0],pos)

font1 = pygame.font.Font(None, SIZE * 2)

width, height = font1.size('100')

text1=font1.render('%d'%(MINE_COUNT-flag_count),True,(255,0,0))

screen.blit(text1,(30,(SIZE*2-height)//2-2)) #打印剩余雷的数量

if game_dict1 == game_dict[1]:

used_time = int(time.time() - start_time)

text2=font1.render('%d'%used_time,True,(255,0,0))

screen.blit(text2,(SCREEN_WIDTH-width-30,(SIZE*2-height)//2-2)) #打印已用时间

if opened_count + MINE_COUNT == BLOCK_WIDTH * BLOCK_HEIGHT: #点开方块的加上地雷数等于总数

game_dict1 = game_dict[2] #则视为胜利

if game_dict1 == game_dict[2]: #游戏的状态为胜利

screen.blit(png_face_win, (face_pos_x, face_pos_y))

elif game_dict1 == game_dict[3]: #游戏的状态为失败

screen.blit(png_face_lose, (face_pos_x, face_pos_y))

else:

screen.blit(png_face_normal, (face_pos_x, face_pos_y))

pygame.display.update()

if name == '__main__':main()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值