2048_game
Table of Contents
2048 game
Step 1: PyGame Framework
- Step 1: Use PyGame Framework.
- Step 2: Create the Player class which is a circle with a number inside.
Step 2. Make a basic 'Player' that can move around.
import pygame
import time
from Color import *
from Screen import *
# Define the Bullet Sprite class
class Player(pygame.sprite.Sprite):
SPEED = 5
SIZE = 40
COLOR = Color.WHITE
def __init__(self):
super().__init__()
# Create a surface for the player with per-pixel alpha (so the circle is smooth)
self.image = pygame.Surface((self.SIZE, self.SIZE), pygame.SRCALPHA)
# Define the position and radius for the circle
pos = (self.SIZE // 2, self.SIZE // 2)
radius = self.SIZE // 2
# Draw the circle on the surface
pygame.draw.circle(self.image, self.COLOR, pos, radius, True)
self.draw_text("2") # Example with the number '2'
# Get the rectangle for positioning
self.rect = self.image.get_rect()
# Set the initial position
self.rect.center = (Screen.WIDTH // 2, Screen.HEIGHT - 50)
def update(self):
# Restrict to screen.
if self.rect.x < 0:
self.rect.x = 0
if self.rect.x > Screen.WIDTH - self.SIZE:
self.rect.x = Screen.WIDTH - self.SIZE
if self.rect.y < 0:
self.rect.y = 0
if self.rect.y > Screen.HEIGHT - self.SIZE:
self.rect.y = Screen.HEIGHT - self.SIZE
# Easier to read, but, slower.
#self.rect.x = max(0, min(self.rect.x, Screen.WIDTH - self.SIZE))
#self.rect.y = max(0, min(self.rect.y, Screen.HEIGHT - self.SIZE))
def move(self, dx, dy):
self.rect.x += dx
self.rect.y += dy
def draw_text(self, text, color = "white"):
# Load the default font, you can also specify your own font here
font = Font(pygame.font.Font(None, 24) # 24 is the font size
# Render the text (True is for anti-aliasing)
text_surface = font.render(text, True, color)
# Get the rectangle of the text surface and center it within the circle
text_rect = text_surface.get_rect(center=(self.SIZE // 2, self.SIZE // 2))
# Blit (draw) the text surface onto the player surface (self.image)
self.image.blit(text_surface, text_rect)
Basic Controls
Add this to Game.py:
def checkEvents(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
return
if event.type == pygame.KEYDOWN:
# key down event, process keys.
if event.key == pygame.K_q:
self.quit_game()
if event.key == pygame.K_ESCAPE:
self.quit_game()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.player.move(-1,0)
if keys[pygame.K_RIGHT]:
self.player.move(1, 0)
if keys[pygame.K_UP]:
self.player.move(0, -1)
if keys[pygame.K_DOWN]:
self.player.move(0, 1)
Font Problems
Notice the Font(None, 24). If you want more control you can copy code from Window or make your own Font class. You could try something like the following:
Font.py
You will notice this is just the “setFont()” from the old Window class.
import pygame
class Font:
def __init__(self, filename, size):
pygame.font.init()
self.font = pygame.font.Font(filename, size)
font_width, font_height = self.font.size("@")
self.fontwidth = font_width
self.fontheight = size - 2
Window.py
Modify setFont() as follows (don't forget 'from Font import *'):
def setFont(self, filename, size):
font = Font(filename, size)
self.fontwidth = font.fontwidth
self.fontheight = font.fontheight
self.font = font.font
return self.font
2048_game.txt · Last modified: 2024/09/21 02:38 by appledog
