Pygame游戏2048

#   _*_ coding:utf-8 _*_
import random
from random import randint
import numpy as np
import pygame
from pygame.locals import *
from sys import exit

__author__ = 'admin'

'''
    游戏2048:
    游戏的开始、进行、结束
    游戏数组的大小可以调控
    游戏的目标数字可以调控
    向屏幕填充数组、为数字所在区域染色、屏幕刷新等这些操作都只在按键事件发生后才执行,无需放在while循环内
    返回指定键的值,如果值不在字典中返回default值:dict.get(key, default=None)
'''

pygame.init()

#   单元格大小
CELL_width = 100
CELL_height = 100

#   数组的大小(几排几列)
index_col = 10
index_row = 3

#   屏幕大小
SCREEN_SIZE = (CELL_width * index_col, CELL_height * index_row)

screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)


class TFZE(object):
    def __init__(self):
        self.bgimage = r'E:\PycharmProjects\PGStudy\resource\wood.jpg'
        self.background = pygame.image.load(self.bgimage).convert()
        screen.blit(self.background, (0, 0))
        self.goimage = r'E:\PycharmProjects\PGStudy\resource\gameover.jpg'
        self.gobg = pygame.image.load(self.goimage).convert()
        self.gobg_width = self.gobg.get_width()
        self.gobg_height = self.gobg.get_height()

        #   颜色
        self.BLACK = (0, 0, 0)
        self.WHITE = (250, 250, 250)
        self.BLUE = (0, 255, 255)
        self.RED = (255, 0, 0)
        self.GREEN = (0, 255, 0)
        self.ORANGE = (255, 128, 64)
        self.DARK_GREEN = (0, 64, 0)

        #   屏幕填充色
        self.screen_color = self.BLACK
        #   网格颜色
        self.grid_color = self.WHITE
        #   数字颜色
        self.font_color = self.DARK_GREEN

        #   初始化数组
        self.array = np.zeros((index_row, index_col), np.int)
        #   初始化游戏状态:1/游戏开始界面 2/游戏进行中 3/游戏结束
        self.status = 1
        #   用于存储每个cell左上角顶点坐标与数组索引的字典
        self.points_dict = {}

        #   设定目标数字
        self.power = 4
        self.targetNUm = 2 ** self.power
        #   数值-->背景颜色集合
        self.color_dict = self.create_color()
        #   按键(LEFT、RIGHT、UP、DOWN)检测事件标识
        self.judge_flag = True

        #   染色区域削角参数
        self.para_conner = 2
        #   染色区域距离边框远近的参数
        self.para_space = 5

    #   存储每个cell左上角顶点坐标与数组索引
    def cell_point(self):
        m = 0
        for i in range(0, SCREEN_SIZE[1], CELL_height):
            n = 0
            for j in range(0, SCREEN_SIZE[0], CELL_height):
                self.points_dict[(m, n)] = (i, j)
                n += 1
            m += 1

    # 精简逻辑,出入列表和指定位置索引
    def judge(self, l, j):
        #   使用while使得循环中的list在不断发生变化(for循环达不到这个效果)
        while j < len(l) - 1:
            #   索引位置数值和索引位置下一个数值都不为0
            if l[j] * l[j + 1] > 0:
                #   索引位置数值 == 索引位置下一个数值
                if l[j] == l[j + 1]:
                    if j == 0:
                        #   累加至索引位置,并剔除索引位置下一个数值
                        l[j] += l[j + 1]
                        del l[j + 1]
                    else:
                        #   累加至索引位置,并剔除索引位置下一个数值
                        l[j] += l[j + 1]
                     
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值