Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I have the following code for a SET card game, I havent imported the images of cards yet because I wanted the setup to work

I have the following code for a SET card game, I havent imported the images of cards yet because I wanted the setup to work first, and I think it does work only its very glitchy and messy and I am stuck on how to clean it up: "import pygame
import sys
import random
from enum import Enum
import time
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 SetCard:
def __init__(self, number, symbol, color, shading):
self.number = number
self.symbol = symbol
self.color = color
self.shading = shading
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
def init_pygame(deck):
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("SET Game")
return 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)
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)
def draw_cards(screen, table_cards):
screen.fill((200,200,200))
font = pygame.font.Font(None,24)
for i, card in enumerate(table_cards):
x =50+(i %3)*150
y =50+(i //3)*200
pygame.draw.rect(screen,(0,0,0),(x, y,100,150),2)
pygame.draw.rect(screen,(150,150,150),(x +2, y +2,96,146))
pygame.draw.polygon(screen,(100,100,100),
[(x +2, y +2),(x +2, y +152),(x +102, y +152),(x +102, y +2)])
text_color =(0,0,0) if card.color == Color.RED else (0,128,0)
text = font.render(f'{card.number.value}{card.symbol.value}', True, text_color)
screen.blit(text,(x +10, y +10))
pygame.display.flip()
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))
def draw_cards_left(screen, deck):
draw_text(screen, f"Cards Left: {len(deck)}",(350,550), font_size=20, color=(255,255,255))
def reset_timer():
return pygame.time.get_ticks()
def is_play_button_clicked(x, y):
return 350= x =450 and 250= y =300
def play_set_game():
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)
table_cards = deck[:12]
deck = deck[12:]
screen = init_pygame(deck)
player_score =0
computer_score =0
computer_name = "Computer"
inactivity_timeout =10000
computer_thinking_time =2
play_button_clicked = False
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)
draw_play_button(screen)
pygame.display.flip()
last_activity_time = reset_timer()
running = True
selected_cards =[]
while running and deck:
draw_cards(screen, table_cards)
draw_text(screen, f"Player Score: {player_score}",(50,10), color=(0,0,255))
draw_text(screen, f"{computer_name} Score: {computer_score}",(600,10), color=(255,0,0))
draw_cards_left(screen, deck)
pygame.display.flip()
current_time = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type == pygame.QUIT:
(the remaining of the code is in the screenshot because it wont paste)
image text in transcribed

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

Rules In Database Systems Third International Workshop Rids 97 Sk Vde Sweden June 26 28 1997 Proceedings Lncs 1312

Authors: Andreas Geppert ,Mikael Berndtsson

1997th Edition

3540635165, 978-3540635161

More Books

Students also viewed these Databases questions