Python小游戏2048

这篇博客介绍了如何用Python编程语言实现经典的小游戏2048,包括游戏的界面展示和核心逻辑。读者将能了解到Python在游戏开发中的应用。
摘要由CSDN通过智能技术生成

python game2048
效果图:
在这里插入图片描述

源代码:

import random
import math

__mataclass__ = type  # 使用新式类

# 此类为地图模块封装的类
class map2048():
    # 重新设置游戏数据
    def reset(self):
        self.__row = 4  # 行数
        self.__col = 4  # 列数
        self.data = [
            [0 for x in range(self.__col)]
            for y in range(self.__row)
        ]
        # self.data = [[x + 4 * y for x in range(self.__col)]
        #              for y in range(self.__row)]
        # self.data = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
        self.fill2()
        self.fill2()

    def __init__(self):
        self.reset()

    # 获取没有数字的位置的个数
    def get_space_count(self):
        #获取没有数字的方格的数量
        count = 0
        for r in self.data:
            count += r.count(0)
        return count

    # 获取游戏的得数。
    def get_score(self):
        s = 0
        for r in self.data:
            for c in r:
                s += 0 if c < 4 else c * int((math.log(c, 2) - 1.0))
        return s

    # 填充2到空位置,如果填度成功返回True,如果已满,则返回False,
    def fill2(self):
        blank_count = self.get_space_count()
        if 0 == blank_count:
            return False
        # 生成随机位置
        pos = random.randrange(0, blank_count)
        offset = 0
        for r in self.data:
            for ci in range(self.__col):
                if 0 == r[ci]:
                    if offset == pos:
                        r[ci] = 2
                        return True
                    offset += 1

    # 判断游戏是否结束
    def is_gameover(self):
        for r in self.data:
            # 如果水平方向还有0,则游戏没有结束
            if r.count(0):
                return False
            # 水平方向如果有两个相邻的元素相同,则没有游戏结束
            for i in range(self.__col - 1):
                if r[i] == r[i + 1]:
                    return False
        for c in range(self.__col - 1):
            # 竖直方向如果有两个相邻的元素相同,则没有游戏结束
            for r in range(self.__row - 1):
                if self.data[r]
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值