finished revisions for project 2

This commit is contained in:
2026-04-01 21:05:49 -04:00
parent 33e75d0529
commit 6949336bbe
8 changed files with 95 additions and 25 deletions

View File

@@ -1,19 +1,28 @@
from Deck import Deck ######################################
""" # DCS 229 -- Unfair Solitaire
Defines the Solitaire game logic. Contains methods to play the game by dealing cards, removing cards based on game rules, and checking for a win condition. # Defines the Solitaire game logic. Contains methods to play the game by dealing cards, removing cards based on game rules, and checking for a win condition.
# Name: Benjamin Adovasio
# Resources Used: Fran
##########################################
from Deck import Deck
Important Note: The prints in this file only run when this file is ececuted directly. This file should not be executed directly normally.
"""
class Solitaire: class Solitaire:
def __init__(self): def __init__(self):
self.deck = Deck() self.deck = Deck()
self.face_up = [] #List to hold face-up cards. self.face_up = [] #List to hold face-up cards.
'''
deals cards until there are four face-up cards or the deck is empty.
'''
def deal_until_four(self): def deal_until_four(self):
while len(self.face_up) < 4 and self.deck.number_of_cards() > 0: while len(self.face_up) < 4 and self.deck.number_of_cards() > 0:
self.face_up.append(self.deck.deal()) #Deals cards until there are four face-up cards. self.face_up.append(self.deck.deal()) #Deals cards until there are four face-up cards.
'''
removes the last four cards if they are all the same suit. Returns True if cards were removed, False otherwise.
'''
def remove_four_same_suit(self) -> bool: def remove_four_same_suit(self) -> bool:
if len(self.face_up) < 4: if len(self.face_up) < 4:
return False #Not enough cards to remove four of the same suit. return False #Not enough cards to remove four of the same suit.
@@ -27,6 +36,9 @@ class Solitaire:
return False return False
'''
removes the inner two cards if the first and last card of the last four cards are the same suit. Returns True if cards were removed, False otherwise.
'''
def remove_inner_two(self) -> bool: def remove_inner_two(self) -> bool:
if len(self.face_up) < 4: if len(self.face_up) < 4:
return False #Not enough cards to remove inner two cards. return False #Not enough cards to remove inner two cards.
@@ -38,13 +50,20 @@ class Solitaire:
return False return False
'''
Attempts to remove cards based on game rules.
'''
def remove_all_possible(self): def remove_all_possible(self):
removed = True removed = True
while removed and len(self.face_up) >= 4: while removed and len(self.face_up) >= 4:
removed = self.remove_four_same_suit() removed = self.remove_four_same_suit()
if not removed: if not removed:
removed = self.remove_inner_two() # Attempts to remove cards based on game rules. removed = self.remove_inner_two() # Attempts to remove cards based on game rules.
'''
plays the game by shuffling the deck, dealing cards, removing cards based on game rules, and checking for a win condition.
'''
def playGame(self) -> bool: def playGame(self) -> bool:
self.deck.shuffle() self.deck.shuffle()
self.face_up = [] self.face_up = []

View File

@@ -1,3 +1,11 @@
######################################
# DCS 229 -- Project 2
# This is the Card.py file, which defines the Card class used in the Solitaire game. The Card class represents a playing card with a suit and value, and includes methods to retrieve the suit and value, as well as a string representation of the card.
# Date: 04/01/2026
# Name: Benjamin Adovasio
# Resources Used: Fran
##########################################
class Card: class Card:
""" """
Represents a playing card with a suit and value. Represents a playing card with a suit and value.

View File

@@ -1,3 +1,11 @@
######################################
# DCS 229 -- Project 2
# This is the Deck.py file, which defines the Deck class used in the Solitaire game. The Deck class represents a standard 52-card deck, and includes methods to shuffle the deck, deal cards, and check the number of remaining cards.
# Date: 04/01/2026
# Name: Benjamin Adovasio
# Resources Used: Fran
##########################################
import random import random
from Card import Card from Card import Card
""" """

View File

@@ -1,19 +1,28 @@
from Deck import Deck ######################################
""" # DCS 229 -- Project 2
Defines the Solitaire game logic. Contains methods to play the game by dealing cards, removing cards based on game rules, and checking for a win condition. # Defines the Solitaire game logic. Contains methods to play the game by dealing cards, removing cards based on game rules, and checking for a win condition.
# Name: Benjamin Adovasio
# Resources Used: Fran
##########################################
from Deck import Deck
Important Note: The prints in this file only run when this file is ececuted directly. This file should not be executed directly normally.
"""
class Solitaire: class Solitaire:
def __init__(self): def __init__(self):
self.deck = Deck() self.deck = Deck()
self.face_up = [] #List to hold face-up cards. self.face_up = [] #List to hold face-up cards.
'''
deals cards until there are four face-up cards or the deck is empty.
'''
def deal_until_four(self): def deal_until_four(self):
while len(self.face_up) < 4 and self.deck.number_of_cards() > 0: while len(self.face_up) < 4 and self.deck.number_of_cards() > 0:
self.face_up.append(self.deck.deal()) #Deals cards until there are four face-up cards. self.face_up.append(self.deck.deal()) #Deals cards until there are four face-up cards.
'''
removes the last four cards if they are all the same suit. Returns True if cards were removed, False otherwise.
'''
def remove_four_same_suit(self) -> bool: def remove_four_same_suit(self) -> bool:
if len(self.face_up) < 4: if len(self.face_up) < 4:
return False #Not enough cards to remove four of the same suit. return False #Not enough cards to remove four of the same suit.
@@ -27,6 +36,9 @@ class Solitaire:
return False return False
'''
removes the inner two cards if the first and last card of the last four cards are the same suit. Returns True if cards were removed, False otherwise.
'''
def remove_inner_two(self) -> bool: def remove_inner_two(self) -> bool:
if len(self.face_up) < 4: if len(self.face_up) < 4:
return False #Not enough cards to remove inner two cards. return False #Not enough cards to remove inner two cards.
@@ -38,6 +50,9 @@ class Solitaire:
return False return False
'''
Attempts to remove cards based on game rules.
'''
def remove_all_possible(self): def remove_all_possible(self):
removed = True removed = True
while removed and len(self.face_up) >= 4: while removed and len(self.face_up) >= 4:
@@ -45,6 +60,9 @@ class Solitaire:
if not removed: if not removed:
removed = self.remove_inner_two() # Attempts to remove cards based on game rules. removed = self.remove_inner_two() # Attempts to remove cards based on game rules.
'''
plays the game by shuffling the deck, dealing cards, removing cards based on game rules, and checking for a win condition.
'''
def playGame(self) -> bool: def playGame(self) -> bool:
self.deck.shuffle() self.deck.shuffle()
self.face_up = [] self.face_up = []

View File

@@ -1,6 +1,11 @@
""" ######################################
This is the main file that should be called to run the simulation. # DCS 229 -- Unfair Solitaire
""" # This is the main.py file, which contains the main function to run the simulation.
# Date: 04/01/2026
# Name: Benjamin Adovasio
# Resources Used: Fran
##########################################
from Solitaire import Solitaire from Solitaire import Solitaire

View File

@@ -1,24 +1,37 @@
""" ######################################
Reo # DCS 229 -- Project 2
""" # This is the utilities.py file, which contains utility functions for the Solitaire game.
# Date: 04/01/2026
# Name: Benjamin Adovasio
# Resources Used: Fran
##########################################
from __future__ import annotations from __future__ import annotations
from Card import Card from Card import Card
def sum_cards_iter(cards: list[Card]) -> int: '''
Added for project 2: Created a function to sum a list of Card objects using iteration.
'''
def sum_cards_iter(cards: list[Card]) -> int: #start total at 0
total = 0 #start total at 0 total = 0 #start total at 0
for card in cards: for card in cards:
total = total + card total = total + card #Adds the value of each card to the total using iteration.
return total return total
#Added for project 2: Created a function to sum a list of Card objects using iteration.
def sum_cards_recursive(cards: list[Card]) -> int: '''
Added for project 2: Created a function to sum a list of Card objects using recursion.
'''
def sum_cards_recursive(cards: list[Card]) -> int: #start total at 0
if cards == []: if cards == []:
#Base case #Base case
return 0 return 0 #If the list of cards is empty, return 0.
return cards[0] + sum_cards_recursive(cards[1:]) return cards[0] + sum_cards_recursive(cards[1:]) #Adds the value of the first card to the sum of the remaining cards using recursion.
#Recursive case #Recursive case
#Added for project 2: Created a function to sum a list of Card objects using recursion.
'''
Added for project 2: Example tests given
'''
def test_sum_cards(): def test_sum_cards():
cards = [ cards = [
Card("diamond", 5), Card("diamond", 5),
@@ -28,4 +41,3 @@ def test_sum_cards():
] ]
assert sum_cards_iter(cards) == 21 assert sum_cards_iter(cards) == 21
assert sum_cards_recursive(cards) == 21 assert sum_cards_recursive(cards) == 21
#Added for project 2: Example tests given