python 写一个界面小程序

欢迎来到今天的讨论,我们将探讨,用python做一个小程序 python设计一个小程序,让我们开始吧!

大家好,给大家分享一下简单的python有趣小程序,很多人还不知道这一点python期末考试知识点总结。下面详细解释一下。现在让我们来看看!

2048这个游戏当年风靡全球,游戏规则极其简单,玩起来也是相当简单,但是要想最后拼出2048,也绝非是一件容易的事。并且玩起来,也很有意思,总想一把一把的挑战怎样用python画弧形花瓣。

与2048游戏风格相似的是,它的代码实现起来也是非常简洁,代码只有区区不到200行,并且是纯Python,不用任何第三方包的情况下。

一、Python实现的2048游戏界面

我们先来一览最终实现的游戏界面,顺带帮助不了解2048游戏的读者,熟悉下它。

游戏主界面:

游戏基本规则:

1、键盘中上、下、左、右四个箭头,对应4个漂流方向

2、合并。数值相等的两个方格可以合并为1个方格,且值乘以2,如下图左下角,两个2方格可合并为一个4方格

合并后,最左下角就是4方格:

但是为什么它的上方又多了2方格呢?注意,这是第三个规则:

1、随机2方格。发生合并操作时,会从灰色的单元格中随机选择一个,并创建出2方格

2、漂流。再有1个好玩的操作,我称它为漂流,紧邻上图,我如果按下右箭头,两个左下角的4方格根据规则2首先合并为8方格。同时,所有方格整体向右漂流(沿着箭头方向)。因为发生了合并操作,根据规则3,再生成一个2方格。因此得到了如下界面:

这就是游戏的规则,大家下载我的完整代码后,玩耍一下后,理解规应该会更深,玩起来真的贼爽。

二、项目环境

本项目不使用任何第三方包,全都是Python自带的模块,且只用到2个模块,可见2048游戏的魅力,实现的代码都毫不费力。

一个模块是Tkinter,用来做界面,还用到的随机模块random。

三、项目代码讲解

不到200行代码,是个小框架。主要包括2个类:

BoardGame

下面逐一介绍。

1、Board类

主要提供三个能力,分别对应上面的三个规则:

合并规则,对应Board类的方法merge_grid

随机创建2方格,对应Board类的方法random_cell

漂流,对应Board类的方法drifting_left

2、Game类

主要提供Tkinter的键盘消息和事件处理能力,对应方法event_handlers,比较简单,所以主要讲解Board类

merge_grid方法

编写merge_grid方法的逻辑,假定是在按下左箭头时,为什么这样假定,后面我会重点分析,这是理解这套代码的核心。基于此,合并邻近的两个非零相等单元格,实现逻辑很简单:

def merge_grid(self):
    """
    向左移动,合并邻近的两个非零相等单元格
    :return:
    """
    self.merge = False
    for i in range(4):
        for j in range(3):
            if self.grid_cell[i][j] == self.grid_cell[i][j + 1] and self.grid_cell[i][j] != 0:
                self.grid_cell[i][j] *= 2
                self.grid_cell[i][j + 1] = 0
                self.score += self.grid_cell[i][j]
                self.merge = True

random_cell方法

实现random_cell方法就更简单了,随机从灰色(没有数字的方格)方格中,挑选一个,并赋值为2就行:

def random_cell(self):
    """
    从零单元格中随机产生一个2号单元格
    :return:
    """
    i, j = random.choice([(i, j) for i in range(4) for j in range(4) if self.grid_cell[i][j] == 0])
    self.grid_cell[i][j] = 2

drifting_left方法

实现漂流drifting_left方法,使用的是最基本的快慢指针,cnt是慢指针,j是快指针。

 def drifting_left(self):
        """
        向左偏流,消除0方格
        :return:
        """
        self.compress = False
        temp = [[0] * 4 for _ in range(4)]
        for i in range(4):
            # cnt:慢指针,j: 快指针
            cnt = 0
            for j in range(4):
                if self.grid_cell[i][j] != 0:
                    temp[i][cnt] = self.grid_cell[i][j]
                    if cnt != j:
                        self.compress = True
                    cnt += 1
 
        self.grid_cell = temp

3、代码核心

2048游戏会有4个漂流方向,分别为上、下、左、右。

而上面代码,假定漂流是向左,并基于此编写了向左漂流的逻辑。

这正是此套代码实现的高明之处,其他上、下、右三方向的漂流,经过reverse(反转)或transpose(转秩)后,都可以转成向左漂流的逻辑。这两个中间操作也都在Board类里提供了。

比如,实现向右漂流时,先执行一次reverse,然后执行drifting_left,再执行一次reverse,就实现了右漂。

实现上漂时,先转秩,再左漂,再转秩。

这个变化思路,大家纸上画一画,一看便知。

还有更多小游戏:天天酷跑、开心消消乐、植物大战僵尸、愤怒的小鸟、大麦网抢票、淘宝秒杀、WiFi破解 等等所有的源代码都已经打包好了,由于篇幅有限,不方便展示,需要的朋友可以前出塞下方二维码获取~

Python学习资源分享

如果你对Python感兴趣,学好 Python 不论是就业、前出塞前出塞、还是提升学习、工作效率,都是非常不错的选择,但要有一个系统的学习规划。

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

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

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

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

2、学习软件

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

3、精品书籍

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

4、入门学习视频

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

5、实战案例

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

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

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

7、Python前出塞兼职与全职路线

这份完整版的Python前出塞前出塞已经上传至CSDN官方,朋友们如果需要可以前出塞下方二v码前出塞获取【保证100%前出塞】

以上前出塞资料已经为大家打包准备好了,希望对正在学习Python的你有所帮助!


原文地址1:https://blog.csdn.net/gk12336/article/details/135168196
参考资料:python中用turtle画一个圆形 https://blog.csdn.net/SXIAOYAN_/article/details/140061099

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值