Upload files to "/"
faili
parent
3a2d0bca87
commit
353ae21df2
Binary file not shown.
Binary file not shown.
162
game.py
162
game.py
|
|
@ -1,5 +1,6 @@
|
|||
import pygame
|
||||
import random
|
||||
import sys
|
||||
|
||||
# --- Inicializācija ---
|
||||
pygame.init()
|
||||
|
|
@ -10,11 +11,11 @@ SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
|
|||
pygame.display.set_caption("Pixel Kombat: Ultimate")
|
||||
CLOCK = pygame.time.Clock()
|
||||
|
||||
# --- Krāsas (PIEVIENOTS RED UN BLUE) ---
|
||||
# --- Krāsas ---
|
||||
WHITE = (255, 255, 255)
|
||||
BLACK = (0, 0, 0)
|
||||
RED = (255, 0, 0) # <--- Šis trūka
|
||||
BLUE = (0, 0, 255) # <--- Papildus
|
||||
RED = (255, 0, 0)
|
||||
BLUE = (0, 0, 255)
|
||||
GRAY = (50, 50, 50)
|
||||
DARK_GRAY = (20, 20, 20)
|
||||
YELLOW = (255, 215, 0)
|
||||
|
|
@ -23,7 +24,7 @@ GREEN = (50, 200, 50)
|
|||
CYAN = (0, 255, 255)
|
||||
PURPLE = (160, 32, 240)
|
||||
|
||||
# Pieejamās raksturu krāsas (saraksts)
|
||||
# Pieejamās raksturu krāsas
|
||||
COLORS = [
|
||||
(235, 64, 52), # Red
|
||||
(52, 119, 235), # Blue
|
||||
|
|
@ -33,15 +34,18 @@ COLORS = [
|
|||
(255, 105, 180) # Pink
|
||||
]
|
||||
|
||||
# --- Fonti ---
|
||||
# --- Fonti (ar rezerves variantu) ---
|
||||
def get_font(name, size):
|
||||
try:
|
||||
FONT_BIG = pygame.font.Font(None, 74)
|
||||
FONT_MED = pygame.font.Font(None, 50)
|
||||
FONT_SMALL = pygame.font.Font(None, 32)
|
||||
except:
|
||||
FONT_BIG = pygame.font.SysFont("Arial", 74)
|
||||
FONT_MED = pygame.font.SysFont("Arial", 50)
|
||||
FONT_SMALL = pygame.font.SysFont("Arial", 32)
|
||||
return pygame.font.Font(name, size)
|
||||
except FileNotFoundError:
|
||||
# Ja fonts nav atrasts, izmanto noklusējuma sistēmas fontu
|
||||
return pygame.font.SysFont('arial', size)
|
||||
|
||||
FONT_BIG = get_font("Act_Of_Rejection.ttf", 80)
|
||||
FONT_MED = get_font("PressStart2P-Regular.ttf", 36)
|
||||
FONT_SMALL = get_font("PressStart2P-Regular.ttf", 20)
|
||||
FONT_TINY = get_font("PressStart2P-Regular.ttf", 14)
|
||||
|
||||
# --- Globālie mainīgie (Spēles stāvokļi) ---
|
||||
STATE = "MENU" # MENU, CHAR_SELECT, BG_SELECT, DIALOGUE, GAME, GAMEOVER
|
||||
|
|
@ -49,24 +53,49 @@ SELECTED_BG = "CITY"
|
|||
P1_COLOR = COLORS[0] # Noklusējums
|
||||
P2_COLOR = COLORS[1] # Noklusējums
|
||||
|
||||
# --- Fona Ģenerators (Lai novērstu mirgošanu) ---
|
||||
BG_ELEMENTS = []
|
||||
|
||||
def generate_bg_elements(bg_name):
|
||||
global BG_ELEMENTS
|
||||
BG_ELEMENTS = []
|
||||
if bg_name == "CITY":
|
||||
for i in range(5):
|
||||
w = random.randint(80, 150)
|
||||
h = random.randint(200, 400)
|
||||
x = i * (WIDTH // 5) + 20
|
||||
BG_ELEMENTS.append({'rect': pygame.Rect(x, HEIGHT - 50 - h, w-10, h)})
|
||||
elif bg_name == "FOREST":
|
||||
for i in range(8):
|
||||
x = i * (WIDTH // 8) + 40
|
||||
BG_ELEMENTS.append({'x': x})
|
||||
|
||||
# Inicializējam pirmo reizi
|
||||
generate_bg_elements("CITY")
|
||||
|
||||
# --- UI Klases ---
|
||||
|
||||
class Button:
|
||||
def __init__(self, x, y, w, h, text, color, hover_color, action_code):
|
||||
# Rect tiek izmantots tikai klikšķu noteikšanai (invisible hitbox)
|
||||
self.rect = pygame.Rect(x, y, w, h)
|
||||
self.text = text
|
||||
self.color = color
|
||||
self.hover_color = hover_color
|
||||
self.color = color # Teksta krāsa (normāla)
|
||||
self.hover_color = hover_color # Teksta krāsa (pele virsū)
|
||||
self.action_code = action_code
|
||||
|
||||
def draw(self, surface):
|
||||
mouse_pos = pygame.mouse.get_pos()
|
||||
color = self.hover_color if self.rect.collidepoint(mouse_pos) else self.color
|
||||
is_hovered = self.rect.collidepoint(mouse_pos)
|
||||
|
||||
pygame.draw.rect(surface, color, self.rect)
|
||||
pygame.draw.rect(surface, WHITE, self.rect, 2) # Apmale
|
||||
# Izvēlamies krāsu atkarībā no peles pozīcijas
|
||||
current_color = self.hover_color if is_hovered else self.color
|
||||
|
||||
text_surf = FONT_SMALL.render(self.text, True, WHITE)
|
||||
# Taisnstūrus ZĪMĒT NEVARAM (dzēsts pēc pieprasījuma)
|
||||
# pygame.draw.rect(surface, current_color, self.rect)
|
||||
|
||||
# Zīmējam tikai tekstu, kas ir centrēts rect iekšpusē
|
||||
text_surf = FONT_SMALL.render(self.text, True, current_color)
|
||||
surface.blit(text_surf, (self.rect.centerx - text_surf.get_width()//2, self.rect.centery - text_surf.get_height()//2))
|
||||
|
||||
def is_clicked(self, event):
|
||||
|
|
@ -171,23 +200,26 @@ class Fighter(pygame.sprite.Sprite):
|
|||
def draw_city(surface):
|
||||
surface.fill((20, 30, 50)) # Nakts debesis
|
||||
pygame.draw.circle(surface, (200, 200, 200), (WIDTH//2, 100), 60) # Mēness
|
||||
for i in range(5):
|
||||
w = random.randint(50, 150)
|
||||
h = random.randint(200, 400)
|
||||
x = i * (WIDTH // 5) + 20
|
||||
pygame.draw.rect(surface, (10, 10, 20), (x, HEIGHT - 50 - h, w-10, h)) # Ēkas
|
||||
|
||||
# Zīmējam iepriekš ģenerētās ēkas
|
||||
for elem in BG_ELEMENTS:
|
||||
pygame.draw.rect(surface, (10, 10, 20), elem['rect'])
|
||||
|
||||
pygame.draw.rect(surface, BROWN, (0, HEIGHT - 50, WIDTH, 50)) # Zeme
|
||||
|
||||
def draw_forest(surface):
|
||||
surface.fill((50, 150, 50)) # Gaiši zaļš debesis/ugs
|
||||
pygame.draw.circle(surface, (255, 255, 100), (WIDTH - 100, 80), 50) # Saule
|
||||
for i in range(8):
|
||||
x = i * (WIDTH // 8) + 40
|
||||
|
||||
# Zīmējam iepriekš ģenerētos kokus
|
||||
for elem in BG_ELEMENTS:
|
||||
x = elem['x']
|
||||
# Koku stumbri
|
||||
pygame.draw.rect(surface, (80, 50, 20), (x, HEIGHT - 200, 40, 150))
|
||||
# Koku vainagi (trīsstūri stilā)
|
||||
pygame.draw.polygon(surface, (20, 100, 20), [(x-40, HEIGHT-200), (x+40, HEIGHT-200), (x, HEIGHT-300)])
|
||||
pygame.draw.polygon(surface, (20, 100, 20), [(x-35, HEIGHT-240), (x+35, HEIGHT-240), (x, HEIGHT-340)])
|
||||
|
||||
pygame.draw.rect(surface, (30, 100, 30), (0, HEIGHT - 50, WIDTH, 50)) # Zāle
|
||||
|
||||
def draw_dojo(surface):
|
||||
|
|
@ -243,40 +275,41 @@ class DialogueManager:
|
|||
# --- Galvenā Spēle ---
|
||||
|
||||
def main():
|
||||
global STATE, P1_COLOR, P2_COLOR, SELECTED_BG
|
||||
global STATE, P1_COLOR, P2_COLOR, SELECTED_BG, BG_ELEMENTS
|
||||
|
||||
# Kontroles
|
||||
controls_p1 = {'left': pygame.K_a, 'right': pygame.K_d, 'jump': pygame.K_w, 'attack': pygame.K_SPACE}
|
||||
# P2 uzbrukums tagad ir Enter taustiņš
|
||||
controls_p2 = {'left': pygame.K_LEFT, 'right': pygame.K_RIGHT, 'jump': pygame.K_UP, 'attack': pygame.K_RETURN}
|
||||
|
||||
dialogue_mgr = DialogueManager()
|
||||
|
||||
# Izveidojam pogas
|
||||
# Izveidojam pogas (Bez taisnstūriem, teksta krāsas)
|
||||
# Zila krāsa parasti, Sarkana izceļot (pelei virsū)
|
||||
menu_buttons = [
|
||||
Button(WIDTH//2 - 100, 200, 200, 50, "Sakt Cīnu", GRAY, DARK_GRAY, "START"),
|
||||
Button(WIDTH//2 - 100, 270, 200, 50, "Tēlu Izvēle", GRAY, DARK_GRAY, "CHARS"),
|
||||
Button(WIDTH//2 - 100, 340, 200, 50, "Fona Izvēle", GRAY, DARK_GRAY, "BG"),
|
||||
Button(WIDTH//2 - 100, 410, 200, 50, "Iziet", RED, (150, 0, 0), "QUIT")
|
||||
Button(WIDTH//2 - 100, 250, 200, 50, "Sakt Cinu", BLUE, RED, "START"),
|
||||
Button(WIDTH//2 - 100, 320, 200, 50, "Telu Izvele", BLUE, RED, "CHARS"),
|
||||
Button(WIDTH//2 - 100, 390, 200, 50, "Fona Izvele", BLUE, RED, "BG"),
|
||||
Button(WIDTH//2 - 100, 460, 200, 50, "Iziet", RED, YELLOW, "QUIT") # Iziet ir sarkans, kļūst dzeltens
|
||||
]
|
||||
|
||||
# Šeit arī nomainām krāsas, lai būtu redzams uz fona (jo rect vairs nav)
|
||||
bg_buttons = [
|
||||
Button(200, 300, 150, 100, "CITY", (20, 30, 50), DARK_GRAY, "CITY"),
|
||||
Button(425, 300, 150, 100, "FOREST", (50, 150, 50), DARK_GRAY, "FOREST"),
|
||||
Button(650, 300, 150, 100, "DOJO", (180, 100, 50), DARK_GRAY, "DOJO"),
|
||||
Button(WIDTH//2 - 100, 450, 200, 50, "Atpakaļ", GRAY, DARK_GRAY, "BACK")
|
||||
Button(200, 300, 150, 100, "CITY", WHITE, YELLOW, "CITY"),
|
||||
Button(425, 300, 150, 100, "FOREST", WHITE, YELLOW, "FOREST"),
|
||||
Button(650, 300, 150, 100, "DOJO", WHITE, YELLOW, "DOJO"),
|
||||
Button(WIDTH//2 - 100, 450, 200, 50, "Atpakal", GRAY, WHITE, "BACK")
|
||||
]
|
||||
|
||||
back_btn = Button(20, 20, 100, 40, "Atpakaļ", GRAY, DARK_GRAY, "BACK")
|
||||
back_btn = Button(20, 20, 100, 40, "Atpakal", GRAY, WHITE, "BACK")
|
||||
|
||||
# Spēlētāji (sākotnēji None, tiek veidoti pirms spēles)
|
||||
# Spēlētāji
|
||||
fighter1 = None
|
||||
fighter2 = None
|
||||
winner = "PLAYER 1" # Noklusējuma vērtība
|
||||
|
||||
run = True
|
||||
while run:
|
||||
CLOCK.tick(60)
|
||||
mouse_pos = pygame.mouse.get_pos()
|
||||
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
|
|
@ -297,13 +330,13 @@ def main():
|
|||
run = False
|
||||
|
||||
elif STATE == "CHAR_SELECT":
|
||||
# P1 izvēle (kreisā puse)
|
||||
# P1 izvēle
|
||||
for i, color in enumerate(COLORS):
|
||||
rect = pygame.Rect(150 + i*60, 200, 50, 50)
|
||||
if event.type == pygame.MOUSEBUTTONDOWN and rect.collidepoint(event.pos):
|
||||
P1_COLOR = color
|
||||
|
||||
# P2 izvēle (labā puse)
|
||||
# P2 izvēle
|
||||
for i, color in enumerate(COLORS):
|
||||
rect = pygame.Rect(WIDTH - 450 + i*60, 200, 50, 50)
|
||||
if event.type == pygame.MOUSEBUTTONDOWN and rect.collidepoint(event.pos):
|
||||
|
|
@ -319,6 +352,7 @@ def main():
|
|||
STATE = "MENU"
|
||||
else:
|
||||
SELECTED_BG = btn.action_code
|
||||
generate_bg_elements(SELECTED_BG) # Ģenerējam jaunu fonu
|
||||
|
||||
elif STATE == "DIALOGUE":
|
||||
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
|
||||
|
|
@ -337,21 +371,47 @@ def main():
|
|||
if event.type == pygame.KEYDOWN and event.key == pygame.K_r:
|
||||
STATE = "MENU"
|
||||
|
||||
# --- Zīmēšanas Loģika ---
|
||||
# --- Zīmēšanas Loģika un Update ---
|
||||
|
||||
if STATE == "MENU":
|
||||
SCREEN.fill(BLACK)
|
||||
title = FONT_BIG.render("PIXEL KOMBAT", True, WHITE)
|
||||
SCREEN.blit(title, (WIDTH//2 - title.get_width()//2, 100))
|
||||
for btn in menu_buttons: btn.draw(SCREEN)
|
||||
|
||||
# --- LOGOTIPS (Street Fighter stils) ---
|
||||
title_text = "PIXEL KOMBAT"
|
||||
|
||||
# Ēna (Sarkana)
|
||||
shadow_text = FONT_BIG.render(title_text, True, (180, 0, 0))
|
||||
SCREEN.blit(shadow_text, (WIDTH//2 - shadow_text.get_width()//2 + 3, 53))
|
||||
|
||||
# Galvenais teksts (Dzeltena)
|
||||
main_text = FONT_BIG.render(title_text, True, YELLOW)
|
||||
SCREEN.blit(main_text, (WIDTH//2 - main_text.get_width()//2, 50))
|
||||
|
||||
# Apakšvirsraksts
|
||||
sub_text = "- ULTIMATE EDITION -"
|
||||
sub_surf = FONT_SMALL.render(sub_text, True, WHITE)
|
||||
SCREEN.blit(sub_surf, (WIDTH//2 - sub_surf.get_width()//2, 130))
|
||||
|
||||
# --- POGAS (Tikai teksts) ---
|
||||
for btn in menu_buttons:
|
||||
btn.draw(SCREEN)
|
||||
|
||||
# --- APAKŠĒJĀ INFORMĀCIJA ---
|
||||
# Copyright
|
||||
cp_text = "© PIXEL KOMBAT 2024"
|
||||
cp_surf = FONT_TINY.render(cp_text, True, WHITE)
|
||||
SCREEN.blit(cp_surf, (WIDTH//2 - cp_surf.get_width()//2, HEIGHT - 30))
|
||||
|
||||
# Credits (Labajā pusē)
|
||||
credit_text = "CREDIT 01"
|
||||
credit_surf = FONT_SMALL.render(credit_text, True, YELLOW)
|
||||
SCREEN.blit(credit_surf, (WIDTH - 180, HEIGHT - 30))
|
||||
|
||||
elif STATE == "CHAR_SELECT":
|
||||
SCREEN.fill(DARK_GRAY)
|
||||
|
||||
title = FONT_MED.render("IZVĒLIES TĒLU", True, WHITE)
|
||||
title = FONT_MED.render("IZVELIES TELU", True, WHITE)
|
||||
SCREEN.blit(title, (WIDTH//2 - title.get_width()//2, 50))
|
||||
|
||||
# Zīmējam P1 paneli
|
||||
p1_text = FONT_SMALL.render("PLAYER 1", True, P1_COLOR)
|
||||
SCREEN.blit(p1_text, (200, 150))
|
||||
for i, color in enumerate(COLORS):
|
||||
|
|
@ -371,14 +431,13 @@ def main():
|
|||
|
||||
elif STATE == "BG_SELECT":
|
||||
SCREEN.fill(BLACK)
|
||||
title = FONT_MED.render("IZVĒLIES VIDI", True, WHITE)
|
||||
title = FONT_MED.render("IZVELIES VIDI", True, WHITE)
|
||||
SCREEN.blit(title, (WIDTH//2 - title.get_width()//2, 50))
|
||||
|
||||
for btn in bg_buttons:
|
||||
btn.draw(SCREEN)
|
||||
|
||||
elif STATE == "DIALOGUE":
|
||||
# Rādam fona priekšskatījumu aiz dialoga
|
||||
get_bg_function(SELECTED_BG)(SCREEN)
|
||||
dialogue_mgr.draw(SCREEN)
|
||||
|
||||
|
|
@ -421,7 +480,7 @@ def main():
|
|||
elif STATE == "GAMEOVER":
|
||||
SCREEN.fill(BLACK)
|
||||
txt = FONT_BIG.render(f"{winner} WINS!", True, YELLOW)
|
||||
restart = FONT_SMALL.render("Nospied [R] atgriezties uz izvēlni", True, WHITE)
|
||||
restart = FONT_SMALL.render("Nospied [R] atgriezties uz izvelni", True, WHITE)
|
||||
|
||||
SCREEN.blit(txt, (WIDTH//2 - txt.get_width()//2, HEIGHT//2 - 50))
|
||||
SCREEN.blit(restart, (WIDTH//2 - restart.get_width()//2, HEIGHT//2 + 50))
|
||||
|
|
@ -429,6 +488,7 @@ def main():
|
|||
pygame.display.update()
|
||||
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue