当前位置:   article > 正文

用Python实现《2048》小游戏

用Python实现《2048》小游戏

摘要

本篇论文讨论的是采用Python语言编写一款小游戏,名为《2048》。相信很多人对《2048》这款游戏都有接触过,这款游戏的背景是:该游戏共有16个格子,初始时初始数字由2或者4构成。游戏规则为:1.手指向一个方向滑动,所有格子会向那个方向运动。2.相同数字的两个格子,相撞时数字会相加。3.每次滑动时,空白处会随机刷新一个数字的格子。4.当界面不可运动时(当界面全部被数字填满时),游戏结束;当界面中最大数字是2048时,游戏胜利。程序代码中,通过自定义类来构建游戏背景框架,再通过画图描绘游戏窗口的设计,最后实例化实现基础的游戏界面。在画出的16个方块中,通过每次按下游戏键位,程序内对每个方块进行计算,最后得出每个方块中应该显示的数字,并在上方设置游戏的总分值。

1.引言。

本篇论文的背景是《2048》游戏,通过对该游戏的设计,掌握基本的窗口设计、游戏的基本流程,对类的定义和实例化等有进一步的理解加深。

2.系统结构。

《2048》游戏的系统结构分为三大流程(图1):
在这里插入图片描述 (图1)

游戏界面设计

通过自定义类BackGround()画出游戏界面的背景图形,再进行实例化。通过画图对16个方块的位置进行确定,利用allpos = []列表对16个方块进行设计。在游戏界面的上方有游戏名称的显示、当前分值的显示和最高分值的显示,并实时进行更新。

游戏规则实现

在游戏的开始,为了随机出现一个数字2或者数字4,调用random方法,在16个方块中随机抽出一个空白方块并赋值2或4。游戏过程中,通过对“Up”,“Dowm”,“Left”,“Right”键的控制对数字块进行移动。程序中,对4个键位的功能进行定义,用切片的方法对字典allpos[]进行分列分行。为了使每次移动都能够产生新的数字,在move_move()中对count进行判断。每次移动都会使每行或者每列中相同的数字进行相加获得一个二倍于本身的数(例如4+4=8)。如果在某一方向中每一行或者每一列相邻的两个非空方块中都没有相同的数字,那么就不能再向该方向移动,为了实现这个规则,定义了变量flag,如果flag为True则相加,并加分数,如果为False则增加一个新的数字2。为了判断游戏的胜利或者失败,定义了全局变量falg_win_lose_text,如果为True则表示达成了2048的数字,并定义了judge来判断falg_win_lose_text的值,当无位置可移动时,judge == 0,抛出重新开始的提示,当达成游戏目标2048时,抛出游戏胜利的提示。

实现代码。

1.首先设计游戏窗口界面,对每个图形的位置进行确定(图2)。

在这里插入图片描述(图2)

2.设置主窗口的位置,定义一个类,用来画出除了数字块以外的图形:

import turtle, random


class BackGround(turtle.Turtle):  # 定义一个类,用来画除了数字方块之外的图形
    def __init__(self):
        super().__init__()
        self.penup()
        self.ht()

    def draw_block(self):
        self.shape('bg.gif')  # 画出背景方块
        for i in allpos:
            self.goto(i)
            self.stamp()
        self.color('white', 'white')  # 画出其他背景
        self.goto(-215, 120)
        self.begin_fill()
        self.goto(215, 120)
        self.goto(215, 110)
        self.goto(-215, 110)
        self.end_fill()
        self.shape('title.gif')
        self.goto(-125, 210)
        self.stamp()
        self.shape('score.gif')
        self.goto(125, 245)
        self.stamp()
        self.shape('top_score.gif')
        self.goto(125, 170)
        self.stamp()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
if __name__ == '__main__':
    ms = turtle.Screen()  # 主窗口的设置
    ms.setup(430, 630, 400, 50)
    ms.bgcolor('gray')
    ms.title('2048')
    ms.tracer(0)
    ms.register_shape('bg.gif')
    ms.register_shape('title.gif')
    ms.register_shape('score.gif')
    ms.register_shape('top_score.gif')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
class Game():
    def init(self)
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/191941
推荐阅读
相关标签
  

闽ICP备14008679号