当程序员纠结中午应该吃什么,那就用pygame来解决吧

这篇具有很好参考价值的文章主要介绍了当程序员纠结中午应该吃什么,那就用pygame来解决吧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

前言

写多了kotlin和android,最近想搞点小东西,于是拿出了长期没有宠爱的python,打算搞个小项目

想想应该写什么,对了,该吃饭了,诶,刚好,写一个能随机选择吃什么的小程序吧,只需要点击按钮,就会随机出现菜谱,然后再点一下,就会得出今天吃什么的结论

思路是这样的,读入一个txt文件,文件中写满想吃的东西,做到数据和代码区分,然后开始写UI,UI通过按钮点击随机展示美食即可

麻辣香锅
糖醋排骨
红烧肉
...

    import pygame
    import random
    ​
    class App:
        def __init__(self):
            # 初始化 Pygame
            pygame.init()
    ​
            # 创建窗口和设置标题
            self.window_size = (600, 300)
            self.window = pygame.display.set_mode(self.window_size)
            pygame.display.set_caption("What to Eat Today")
    ​
            # 设置字体对象
            self.font = pygame.font.Font('myfont.ttf', 32)
    ​
            # 加载菜单数据
            self.menu = []
            with open("menu.txt", "r") as f:
                for line in f:
                    line = line.strip()
                    if line != "":
                        self.menu.append(line)
                    print(line) # 打印数据
    ​
    if __name__ == "__main__":
        app = App()
    ​

运行一下

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

nice,文件已经读入

这个时候的UI是一闪而过的,因为程序瞬间就执行完毕了,ok,那么我们就需要用一个循环维持UI窗口,然后设置开始选择按键,以及键盘控制按键,同时设置变量

today_menu表示今天吃的东西,

btn_start_stop表示按键文字,

cur_menu表示正处于随机中的美食,当我们按下开始按键时,cur_menu开始变换,当我们按下关闭按键时,cur_menu的数据就赋值到today_menu中,

show_wheel表示当前正处于随机中,还是已经结束了

只要增加一个无限循环,一切就会好起来的


            # 随机选择一道菜
            self.today_menu = ""
            self.btn_start_stop = "start"
            self.cur_menu = ""
    ​
            # 游戏主循环
            self.running = True
            self.show_wheel = False
    ​
    ​
            # 开关程序
            while self.running:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        self.running = False
                    elif event.type == pygame.MOUSEBUTTONDOWN:
                    ...
    ​
                    # 增加一个elif 按键s,show_wheel为true, 按下q, show_wheel为false
                    elif event.type == pygame.KEYDOWN:
                    ...

运行结果

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

现在已经有了窗口,接下来需要在上面画东西了

所用到的就是draw函数


        def draw(self):
            # 绘制界面
            self.window.fill((255, 255, 255))
    ​
            # 绘制菜单
            menu_surface = self.font.render(f"Today's Menu: {self.today_menu}", True, (0, 0, 0))
            ...
    ​
            # 绘制按钮
            button_size = min(self.window_size[0] // 4, self.window_size[1] // 4)
            ...
    ​
            btn_start = self.font.render(f"{self.btn_start_stop}", True, (0, 0, 0))
             # 缩小start 文字字号 以适应按钮
            btn_start = pygame.transform.scale(btn_start, (button_size // 3 * 2, button_size // 3 * 2))
            self.window.blit(btn_start, (button_x + button_size // 2 - btn_start.get_width() // 2, button_y + button_size // 2 - btn_start.get_height() // 2))
    ​
            # 滚轮动画
            ...
            pygame.display.update()

运行

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

上面的代码仅仅能够展示一个静态的页面,

虽然界面平平无奇,似乎只有两行字?不然,实际上暗藏玄🐔,只要我们加上这段,


            # 绘制滚轮动画
            if self.show_wheel:
                wheel_size = min(self.window_size) // 2
                wheel_x = self.window_size[0] // 2 - wheel_size // 2
                wheel_y = self.window_size[1] // 2 - wheel_size // 2
                wheel_rect = pygame.Rect(wheel_x, wheel_y, wheel_size, wheel_size)
                ...
    ​
                # 随机选择并显示菜谱
                menu_index = random.randint(0, len(self.menu) - 1)
                menu_surface = self.font.render(self.menu[menu_index], True, (0, 0, 0))
                self.window.blit(menu_surface, (wheel_x + wheel_size // 2 - menu_surface.get_width() // 2, wheel_y + wheel_size // 2 - menu_surface.get_height() // 2))
                self.cur_menu = self.menu[menu_index]

当我们点击“start"

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

发现中间的菜谱动了起来,动了起来!都是大家爱吃的,只需要点击右边的stop就可以固定结果!

真正麻烦的在于那个滚轮动画,可以想见,我们需要额外的一个无限循环,每一帧都要修改cur_menu,同时更新动画中的菜谱,然后点击stop后,将cur_menu赋值给到today_menu,最麻烦的不是这些逻辑,而是位置,滚轮动画的位置设置为窗口正中间,然后画了两条线,看起来更好看,有一种,狙击枪瞄准的感觉

最后,进行简单优化,比如设置定时关闭等,全代码如下,如果你也不知道吃什么,就用这段代码 + 在同目录自定义一个txt文件,把自己想吃的写上去吧


    import pygame
    import random
    ​
    class App:
        def __init__(self):
            # 初始化 Pygame
            pygame.init()
    ​
            # 创建窗口和设置标题
            self.window_size = (600, 300)
            self.window = pygame.display.set_mode(self.window_size)
            pygame.display.set_caption("What to Eat Today")
    ​
            # 设置字体对象
            self.font = pygame.font.Font('myfont.ttf', 32)
    ​
            # 加载菜单数据
            self.menu = []
            with open("menu.txt", "r") as f:
                for line in f:
                    line = line.strip()
                    if line != "":
                        self.menu.append(line)
    ​
            # 随机选择一道菜
            self.today_menu = ""
            self.btn_start_stop = "start"
            self.cur_menu = ""
    ​
            # 游戏主循环
            self.running = True
            self.show_wheel = False
            self.wheel_count = 0     # 记录滚轮动画播放的帧数
    ​
    ​
            # 开关程序
            while self.running:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        self.running = False
                    elif event.type == pygame.MOUSEBUTTONDOWN:
                        if not self.show_wheel:
                            self.show_wheel = True
                            self.wheel_count = 0  # 点击按钮后重置计数器为0
                            self.btn_start_stop = "stop"
                        else:
                            self.show_wheel = False
                            self.today_menu = self.cur_menu  # 点击停止赋值
                            self.btn_start_stop = "start"
    ​
                    # 增加一个elif 按键s,show_wheel为true, 按下q, show_wheel为false
                    elif event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_s:  # 按下 s 键
                            self.show_wheel = True
                            self.wheel_count = 0  # 重置计数器为0
                        elif event.key == pygame.K_q:  # 按下 q 键
                            self.show_wheel = False
                            self.today_menu = self.cur_menu  # 停止赋值
    ​
                self.draw()
    ​
        def draw(self):
            # 绘制界面
            self.window.fill((255, 255, 255))
    ​
            # 绘制菜单
            menu_surface = self.font.render(f"Today's Menu: {self.today_menu}", True, (0, 0, 0))
            menu_x = self.window_size[0] // 2 - menu_surface.get_width() // 2
            menu_y = self.window_size[1] // 2 - menu_surface.get_height() // 2
            self.window.blit(menu_surface, (menu_x, menu_y))
    ​
            # 绘制按钮
            button_size = min(self.window_size[0] // 4, self.window_size[1] // 4)
            button_x = self.window_size[0] - button_size - 20
            button_y = self.window_size[1] - button_size - 20
            button_rect = pygame.Rect(button_x, button_y, button_size, button_size)
            pygame.draw.circle(self.window, (255, 0, 0), (button_x + button_size // 2, button_y + button_size // 2), button_size // 2)
            pygame.draw.rect(self.window, (255, 255, 255), button_rect.inflate(-button_size // 8, -button_size // 8))
    ​
            btn_start = self.font.render(f"{self.btn_start_stop}", True, (0, 0, 0))
             # 缩小start 文字字号 以适应按钮
            btn_start = pygame.transform.scale(btn_start, (button_size // 3 * 2, button_size // 3 * 2))
            self.window.blit(btn_start, (button_x + button_size // 2 - btn_start.get_width() // 2, button_y + button_size // 2 - btn_start.get_height() // 2))
    ​
            # 绘制滚轮动画
            if self.show_wheel:
                wheel_size = min(self.window_size) // 2
                wheel_x = self.window_size[0] // 2 - wheel_size // 2
                wheel_y = self.window_size[1] // 2 - wheel_size // 2
                wheel_rect = pygame.Rect(wheel_x, wheel_y, wheel_size, wheel_size)
                pygame.draw.circle(self.window, (0, 0, 0), (wheel_x + wheel_size // 2, wheel_y + wheel_size // 2), wheel_size // 2)
                pygame.draw.circle(self.window, (255, 255, 255), (wheel_x + wheel_size // 2, wheel_y + wheel_size // 2), wheel_size // 2 - 10)
                pygame.draw.line(self.window, (0, 0, 0), (wheel_x + 10, wheel_y + wheel_size // 2), (wheel_x + wheel_size - 10, wheel_y + wheel_size // 2))
                pygame.draw.line(self.window, (0, 0, 0), (wheel_x + wheel_size // 2, wheel_y + 10), (wheel_x + wheel_size // 2, wheel_y + wheel_size - 10))
    ​
                # 随机选择并显示菜谱
                menu_index = random.randint(0, len(self.menu) - 1)
                menu_surface = self.font.render(self.menu[menu_index], True, (0, 0, 0))
                self.window.blit(menu_surface, (wheel_x + wheel_size // 2 - menu_surface.get_width() // 2, wheel_y + wheel_size // 2 - menu_surface.get_height() // 2))
                self.cur_menu = self.menu[menu_index]
                # 播放一定帧数后停止动画
                self.wheel_count += 1
                if self.wheel_count > 500:
                    self.show_wheel = False
                    self.today_menu = self.cur_menu  # 自动停止赋值
            pygame.display.update()
    ​
    if __name__ == "__main__":
        app = App()
    ​


Python技术资源分享

小编是一名Python开发工程师,自己整理了一套 【最新的Python系统学习教程】,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

如果你是准备学习Python或者正在学习,下面这些你应该能用得上:

1、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

2、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

3、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

4、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

5、清华编程大佬出品《漫画看学Python》

用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

6、Python副业兼职与全职路线

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击文章来源地址https://www.toymoban.com/news/detail-794864.html

当程序员纠结中午应该吃什么,那就用pygame来解决吧,pygame,python,开发语言,计算机网络,经验分享,生活,程序人生

到了这里,关于当程序员纠结中午应该吃什么,那就用pygame来解决吧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 当前就业环境下,程序员应该自降薪资应聘吗?

    最近就业环境不好,有些人为了找到工作,主动降低薪资要求,甚至有些人主动提出比企业招聘工资更低的工资以求入职,这样做合适吗? 其实这个问题早些年也经常被人提及,主要针对的是新进入就业市场的培训班学员,对他们而言,能用一个较低的薪资进入行业,以后再

    2024年02月04日
    浏览(43)
  • 这7种UML图的画法每个程序员都应该掌握~

    众所周知,软件开发是一个分阶段进行的过程。不同的开发阶段需要使用不同的模型图来描述业务场景和设计思路。在不同的阶段输出不同的设计文档也是必不可少的,例如,在需求分析阶段需要输出领域模型和业务模型,在架构阶段需要输出物理架构设计,在详细设计阶段

    2024年02月11日
    浏览(130)
  • 五一劳动节程序员应该知道的知识——计算机

    现在AI崛起,计算机已经成为我们不可或缺的一部分, 几乎在所有行业和领域都有广泛应用 。 五一已经快要过去了,程序员们应该都放假了,那我们是不是应该去了解了解我们的伙伴——计算机,了去解计算机是怎样工作的?               下面我会尽量使用通俗的语言去

    2024年02月02日
    浏览(52)
  • 新技术越来越多,作为程序员,我们应该怎么规划职业生涯? | 社区征文

    随着科技的不断进步,新技术不断涌现,对程序员的要求也在不断提高。作为一名程序员,要想在这个竞争激烈的行业中立足,就需要制定一份明确的职业规划,不断学习和掌握新技术,提升自己的职业能力和竞争力。 首先,程序员需要明确自己的职业方向和目标。程序员的

    2024年02月06日
    浏览(62)
  • Android SystemUI源码分析与修改,作为Android程序员应该怎样去规划自己的学习路线

    systemui:keyCode=“4” android:layout_weight=“0” systemui:glowBackground=“@drawable/ic_sysbar_highlight” android:contentDescription=“@string/accessibility_back” / 音量减的布局如下,这里先把Visibility定义为Gone,然后在代码中控制是否显示: com.android.systemui.statusbar.policy.KeyButtonView android:id=“@+id/sub”

    2024年04月15日
    浏览(54)
  • 专科程序员与本科程序员之间有什么区别?

    专科程序员和本科程序员之间最主要的区别在于他们的学历水平以及所接受的教育和培训的深度和广度不同。 本科程序员通常拥有更为全面的计算机技术理论知识,同时也接受了更加系统和广泛的相关课程和实践,比如算法、计算机网络、操作系统、软件工程等等。他们研究

    2024年02月06日
    浏览(62)
  • 程序员一般通过什么途径接私活?怎样做兼职程序员接私活?

    国内众包平台和国外众包平台差不多,只不过国外的工程师来自全球(当然美欧印居多),业务范围比国内的多一点,具体可以看upwork、freelancer上的介绍,不过国外的合作方式多少有些水土不服,如果接单的话还是建议优先选国内。(文末福利) 1、靠同学,朋友,同事介绍.

    2024年02月17日
    浏览(79)
  • 程序员的出路是什么?

    做为一个程序员,工作了一定时间后,一定会有一个想法,那就是程序员能干多久,未来的发展方向是什么,更专业一点的说法是,职业规划到底是什么。 说实话, 我也仔细考虑过这个问题,偶尔也很会 焦虑  。 这个问题, 简而言之就是:  作为程序员, 未来的路在何方?

    2024年02月06日
    浏览(43)
  • 前端程序员和后端程序员有什么不同?我来告诉你薪资待遇差多少

    在过去,前端程序员的工资可能需要几倍于后端程序员才能相当。因为前端程序员需要处理的是看得见的部分,而且需要兼顾不同的浏览器、设备和操作系统,工作量较大。但是,随着H5的盛行和现代浏览器对HTML5、JavaScript和CSS的支持越来越好,前端程序员可以开发一次代码

    2023年04月22日
    浏览(88)
  • 国外的大龄程序员在干什么?

    在Quora有个帖子: 我今年35岁了,是不是太老了,没法加入Google, Facebook, Microsoft 或者 Apple了? 下面的回复让人叹为观止,我摘录几个: 萨特南·辛格  Google软件工程师 (2017–present) 不,我在51岁的时候加入了Google ,我们团队还有几个比我年长的人!他们都是非常卓越的软件

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包