# _*_ 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]
Pygame游戏2048
最新推荐文章于 2024-08-09 20:17:12 发布
本文介绍如何利用Python的Pygame库创建经典的2048游戏。通过讲解关键代码逻辑,深入理解Pygame的事件处理和游戏循环,以及2048游戏的算法实现。
摘要由CSDN通过智能技术生成