Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Could you please help make the following set card code run more smoothly in pygame. Right now the basics work I rhibk but it glitches

Could you please help make the following set card code run more smoothly in pygame. Right now the basics work I rhibk but it glitches alot and the turns dont transition smoothly. Please if able make it more visually beautiful, thank you in advance : import pygame
import sys
import random
from enum import Enum
import time
import os
# Enums for card properties
class Number(Enum):
ONE =1
TWO =2
THREE =3
class Symbol(Enum):
DIAMOND = 'diamond'
SQUIGGLE = 'squiggle'
OVAL = 'oval'
class Color(Enum):
RED = 'red'
GREEN = 'green'
PURPLE = 'purple'
class Shading(Enum):
FILLED = 'filled'
SHADED = 'shaded'
EMPTY = 'empty'
# Class representing a SET card
class SetCard:
def __init__(self, number, symbol, color, shading):
self.number = number
self.symbol = symbol
self.color = color
self.shading = shading
self.highlighted = False
def __repr__(self):
return f'{self.number.value}{self.symbol.value}{self.color.value}{self.shading.value}'
@staticmethod
def is_set(card1, card2, card3):
properties =['symbol', 'color', 'shading', 'number']
for prop in properties:
if len(set([getattr(card1, prop), getattr(card2, prop), getattr(card3, prop)]))!=2:
return False
return True
@staticmethod
def find_all_sets(cards):
n = len(cards)
sets =[]
for i in range(n -2):
for j in range(i +1, n -1):
for k in range(j +1, n):
if SetCard.is_set(cards[i], cards[j], cards[k]):
sets.append((cards[i], cards[j], cards[k]))
return sets
# Pygame initialization function
def init_pygame():
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("SET Game")
return screen
# Function to draw text on the screen
def draw_text(screen, text, position, font_size=36, color=(255,255,255)):
font = pygame.font.Font(None, font_size)
text_surface = font.render(text, True, color)
screen.blit(text_surface, position)
# Function to draw confetti on the screen
def draw_confetti(screen):
for _ in range(100):
x = random.randint(0,800)
y = random.randint(0,600)
pygame.draw.circle(screen,(255,255,0),(x, y),5)
# Function to draw cards on the screen
def draw_cards(screen, table_cards, selected_cards):
screen.fill((200,200,200))
for i, card in enumerate(table_cards):
x =50+(i %3)*150
y =50+(i //3)*200
if card in selected_cards:
pygame.draw.rect(screen,(0,0,255),(x, y,100,150),3)
if card.highlighted:
y -=20 # Adjust the y-coordinate to bring the card forward
image_path = os.path.join("C:\\Users\\Gebruiker\\OneDrive - HvA\\Desktop\\cards", f"{card.color.value}{card.symbol.value}{card.shading.value}{card.number.value}.gif")
card_image = pygame.image.load(image_path)
card_image = pygame.transform.scale(card_image, (100,150))
screen.blit(card_image, (x, y))
pygame.display.flip()
# Function to draw the play button on the screen
def draw_play_button(screen):
pygame.draw.rect(screen,(0,200,0),(350,250,100,50), border_radius=5)
draw_text(screen, "Play", (370,265), font_size=20, color=(255,255,255))
# Function to draw the number of cards left on the screen
def draw_cards_left(screen, deck):
draw_text(screen, f"Cards Left: {len(deck)}",(350,550), font_size=20, color=(255,255,255))
# Function to draw the turn indicator on the screen
def draw_turn_indicator(screen, turn, timer):
draw_text(screen, f"Turn: {turn}",(600,100), font_size=20, color=(0,0,255))
draw_text(screen, f"Timer: {timer:.1f}",(600,150), font_size=20, color=(0,0,255))
# Function to reset the timer
def reset_timer():
return pygame.time.get_ticks()
# Function to check if the play button is clicked
def is_play_button_clicked(x, y):
return 350<= x <=450 and 250<= y <=300
# Function to check if a card is clicked
def is_card_clicked(x, y, card_index):
card_x =50+(card_index %3)*150
card_y =50+(card_index //3)*200
return card_x <= x <= card_x +100 and card_y <= y <= card_y +150
# Function to play the SET game
def play_set_game():
SCREEN_WIDTH, SCREEN_HEIGHT =800,600
CARD_SPACING_X, CARD_SPACING_Y =150,200
deck_size =81
table_size =12
inactivity_timeout =10000
computer_thinking_time =2
# Initialize Pygame
screen = init_pygame()
# Load deck and shuffle
deck =[SetCard(Number(num), Symbol(sym), Color(col), Shading(shade)) for num in Number
for sym in Symbol for col in Color for shade in Shading]
random.shuffle(deck)
# Initialize table cards
table_cards = deck[:table_size]
deck = deck[table_size:]
# Initialize scores
player_score =0
computer_score =0
# Computer details
computer_name = "Computer"
# Set initial conditions
play_button_clicked = False
last_activity_time = reset_timer()
player_turn = True
turn_start_time = reset_timer()
turn_duration =5 # seconds
selected_cards =[]
while not play_button_clicked:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN and event.button ==1:
x, y = event.pos
if is_play_button_clicked(x, y):
play_button_clicked = True
draw_cards(screen, table_cards, selected_cards)
draw_play_button(screen)
pygame.display.flip()
last_activity_time = reset_timer()
running = True
while running and deck:
draw_cards(screen, table

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Current Trends In Database Technology Edbt 2004 Workshops Edbt 2004 Workshops Phd Datax Pim P2panddb And Clustweb Heraklion Crete Greece March 2004 Revised Selected Papers Lncs 3268

Authors: Wolfgang Lindner ,Marco Mesiti ,Can Turker ,Yannis Tzitzikas ,Athena Vakali

2005th Edition

3540233059, 978-3540233053

More Books

Students also viewed these Databases questions

Question

5. If yes, then why?

Answered: 1 week ago

Question

3. What changes should I be making?

Answered: 1 week ago