python小游戏----2048小游戏

本文介绍如何使用Python编程实现经典2048小游戏,玩家通过键盘箭头键进行操作。
摘要由CSDN通过智能技术生成

具体代码在下面:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 作者:魏明泽
# 参考网址: http://2048game.com/
 
 
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
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值