python3-扫雷网页版
目录
- 用到的组件
- 代码
用到的组件
纽扣是最重要的元素,它们接收用户点击,激活大部分程序功能。想要定义自己的按钮,通常可以使用button Element button来实现。
layout = [[sg.Button(‘My Button’)]]
button_text参数:当读取一个窗口时,返回的就是这个文本参数,该参数将告诉您单击了哪个按钮;在按钮调用中更改button_text参数,可更改所有按钮的文本。
也可使用key参数,这样,在如下的layout中,当单击按钮时,从Window.read()调用返回的事件是key的值"BUTTON_KEY"。
layout = [[sg.Button(‘My Button’, key=‘BUTTON_KEY’)]]
用于查找元素的Window方法调用是:FindElement或window[key]
Columns、Frames和Tabs都是“容器元素”,它们的使用方法类似。
能够使用Column Element完成更复杂的布局。可以将Column看作窗口中的窗口。在单个行中指定一个以上的元素时,需要使用Column Element。
代码
# /usr/bin/env python3
# -*- coding: utf-8 -*-
#2-8-6-3.py
import PySimpleGUIWeb as sg
import random MAX_ROWS = MAX_COLS = 10
MAX_MINES_COUNT=20
MINE_TAG='@'
NO_MINE_TAG=0
successTags=set()mineBits=random.sample([(i, j) for i in range(MAX_ROWS) for j in range(MAX_COLS)],k=MAX_MINES_COUNT)def getMineMap():minesInfo=[[0 for i in range(MAX_ROWS)] for j in range(MAX_COLS)] for x,y in mineBits: minesInfo[x][y]=MINE_TAGfor minePos in mineBits:x,y=minePosaroundPos=getAroundPos(x,y)for i,j in aroundPos:if (i,j) not in mineBits:minesInfo[i][j]+=1return minesInfodef getAroundPos(x,y):aroundPosAdd=[(xAdd,yAdd) for xAdd in [-1,0,1] for yAdd in [-1,0,1]]aroundPos=[(x+xAdd,y+yAdd) for xAdd,yAdd in aroundPosAdd if x+xAdd>=0 and y+yAdd>=0 and x+xAdd<MAX_ROWS and y+yAdd<MAX_COLS]return aroundPosdef showAllMines(win):for minePos in mineBits:if win[minePos].get_text()=='*':win[minePos].update(button_color=('green','red')) elif win[minePos].get_text()!=MINE_TAG:win[minePos].update(MINE_TAG) win['gameResult'].update("本局成绩:"+str(int(len(successTags)/len(mineBits)*100)))def main(): isGameRestart=TrueSelBtLayout = [[sg.Button('不是雷',key='noTagMine')], \[sg.Button('标注雷',key='tagMine')],\[sg.Button('点按此格',key='clickCell')],\[sg.Button('结束本局',key='showAll')],\[sg.Text('本局成绩:',key='gameResult')],]MinesLayout =[[sg.Button('?', size=(4, 2), key=(i,j), pad=(0,0),button_color=('white','green')) for j in range(MAX_COLS)] for i in range(MAX_ROWS)]mainLayout=[[sg.Frame('雷区', MinesLayout, font='Any 20', title_color='green'),\sg.Column(SelBtLayout)],\[sg.Button('重新开始游戏',key='restartGame'),\sg.Button('退出游戏',key='exitGame')]]window = sg.Window('扫雷', mainLayout)while isGameRestart:minesInfo =getMineMap()selX=selY=-1oldX=oldY=-1isGameContinue=Truewhile True:event, values = window.read()if event in (sg.WIN_CLOSED, 'Exit') or event=='exitGame':isGameRestart=False#最后从屏幕上移除window.close() breakelif event=='restartGame':showAllMines(window) for i in range(MAX_ROWS):for j in range(MAX_ROWS):window[(i,j)].update("?",button_color=('white','green'))successTags.clear() breakif isGameContinue:if event=='tagMine' and selX>=0 and selY>=0 and minesInfo[selX][selY]==MINE_TAG :successTags.add((selX,selY))elif event=='noTagMine' and selX>=0 and selY>=0 and minesInfo[selX][selY]==MINE_TAG :successTags.discard((selX,selY)) if event=='tagMine' or event=='noTagMine':if selX>=0 and selY>=0:if event=='tagMine':if window[(selX,selY)].get_text()=='?':window[(selX,selY)].update('*')else:if window[(selX,selY)].get_text()=='*':window[(selX,selY)].update('?',button_color=('white','green'))elif event=='clickCell':window[(selX,selY)].update(minesInfo[selX][selY],button_color=('yellow','blue'))if window[(selX,selY)].get_text()==MINE_TAG:window[(selX,selY)].update(minesInfo[selX][selY],button_color=('red','black'))elif event=='showAll':showAllMines(window)isGameContinue=Falseelse:if oldX>=0 and oldY>=0 and window[(selX,selY)].get_text()!=MINE_TAG:window[(oldX,oldY)].update(button_color=('white','green'))selX=event[0]selY=event[1]if window[(selX,selY)].get_text()!=MINE_TAG:window[event].update(button_color=('Green','black')) oldX=selXoldY=selY if __name__ == "__main__":main()exit()
python3-扫雷网页版相关推荐
- 收藏网页版小游戏:蜘蛛纸牌、扫雷、水果忍者、打地鼠、吃豆人
学习之余当然是摸鱼了,这里分享几个不用下载直接在线玩耍的游戏.有蜘蛛纸牌网页版在线玩.在线扫雷小游戏.在线玩的水果忍者.吃豆人.打地鼠.3D模仿. 下面我将一个个列出来.欢迎体验收藏! 蜘蛛纸牌:这是 ...
- Python3.6-Flask:制作一个语音对话问答机器人系统(网页版)
首先,本项目分为制作语音机器人后台部分和利用flask搭建网页部分. 制作语音机器人: 本系统的功能有:与图灵机器人进行对话:设置闹钟(计时器):播放本地音乐:机器写古诗: (1)与图灵机器人对话的部 ...
- python网页版_经典python学习教程:20行代码打造一个微信群聊助手,解放双手
今天的Python学习教程教大家如何用20行Python代码实现微信群聊助手,可以用来活跃群气氛,好多群主创建完群后,拉完一群人,之后就一片寂静,有个群聊助手,就可以帮忙活跃群里气氛,通过今天在自己的 ...
- 中国矿业大学python期末考试_中国矿业大学一体化网络校园网——CUMTDDNet-DrCOM网页版认证教程...
本帖最后由 lazygoat644 于 2020-11-3 20:58 编辑 资料仅供参考学习,请勿用于非法用途或者盈利,违者责任自负! *****该教程作者为Lee.像风一样,首发于github() ...
- 非网页版微信机器人-Wechaty
微信机器人有很多,比如之前的 itchat 是基于网页版实现的,然而现在微信网页版被封的厉害,许多账号都用不了了.找来找去发现 Wechaty 有基于 ipad 协议的实现,下面对其进行简单介绍. 本 ...
- 利用python实现微信自动回复群发等操作(不需要登录网页版微信)
目前微信网页版限制登录,wxpy等模块操作微信的手段都无法使用了,前阵时间发现了WechatPCAPI这个模块,通过dll注入的手段实现操作微信,下面分享一下该模块的使用方法. 运行环境 Wechat ...
- 使用python uiautomation从钉钉网页版提取公司所有联系人信息
之前写了一个提取QQ群里所有人信息的脚本 https://www.cnblogs.com/Yinkaisheng/p/5114932.html 今天写一个从钉钉网页版提取公司所有人通讯录的脚本,,本脚 ...
- python+selenium 爬取微博(网页版)并解决账号密码登录、短信验证
使用python+selenium 爬取微博 前言 为什么爬网页版微博 为什么使用selenium 怎么模拟微博登录 一.事前准备 二.Selenium安装 关于selenium 安装步骤 三.sel ...
- 能做pc网页吗_梦幻西游网页版:如今还能抽金伙伴吗?玩家亲自验证,感觉还行...
说起"金伙伴",相信各位玩家并不陌生.作为梦幻西游网页版中的强力助手,他们的各方面表现相当优秀,因此不少玩家都想抽到.然而,越珍贵的东西就越难抽出来,想要在荟英楼看到金伙伴,并不是 ...
- 如何打印网页版的发票_梦幻西游网页版:陷入瓶颈期,如何快速提升战力?氪金能解决问题...
在梦幻西游网页版中,战力的高低直接影响着玩家的游戏体验,因此大家都将注意力放到了这上面.然而,提升战力并非易事,随着等级越来越高,难度也会逐渐提升.前不久,就有一位玩家遇到了麻烦,据他描述,目前的战力 ...
最新文章
- Android Vector笔记
- Tree 1.5 For Net 2.0
- prototype.js 让你更深入的了解javascript的面向对象特性
- 超适合小白的python新手教程
- 《机器学习实战》学习总结(三)朴素贝叶斯在文本分类的应用
- 计算机在思政专业的应用与探索,课程思政在计算机类课程中的探索与实践
- SSL自签名证书制作方法
- 量子电动力学和量子场论,多体系统的量子场论
- 2019年2月CNNIC第43次《中国互联网络发展状况统计报告》
- 丹佛机场行李系统处理方案
- 【程序员学理财】零和博弈和对股市的一些了解
- JavaScript打开窗口
- C语言10进制转2进制
- 微博php面试,新浪微博php实习生
- Linux互斥锁详细解读,看这一篇就够了
- 消息称聊天宝团队解散 罗永浩已经退出股东行列
- 【转】c# 图片压缩 (非图片大小变化)----使得显示效果差点,但是图片占用空间需要变小
- 数据结构—串的详细解释(含KMP算法)
- Easyui设置easyui-textbox不可编辑
- 为自己搭建一个分布式 IM 系统二【从查找算法聊起】