Skip to main content
posted!
Source Link
Ginger
  • 6k
  • 5
  • 20

King of the Cards

todo: put an intro blurb here

In this King of the Hill challenge, you must write a bot that can play Crazy Eights. This is a card game often played by children, in which the objective is to empty your hand.

How to Play

The game of Crazy Eights is deceptively simple. At the beginning of the game, each player gets dealt a hand of cards (in this case eight), with the remaining cards placed in the middle of the table as the draw pile. The top card is then placed face up and serves as the beginning of the discard pile. Then, each player can discard one card per turn if that card has a matching suit or rank with the top card on the discard pile. They may also play an 8, which allows them to change the effective suit of the 8 and therefore the suit the next player must follow. The played card then becomes the top card. If the player does not have any matching cards, they must draw from the draw pile until they get a matching card and play that. If they exhaust the draw pile, play passes to the next player. Players may draw at any time, even if they have playable cards (which does not count as a turn).

For example, if 6♣ is played, the next player:

  • Can play a 6 of any suit
  • Can play any club
  • Can play an 8 (and then must declare a suit)
  • Can draw and continue their turn.

If the draw pile runs out, then the discard pile (except for the top card) is shuffled and becomes the new draw pile.

The game ends once a player runs out of cards, in which case they are declared the winner. (This differs from normal Crazy Eights, and is included to make this game a bit simpler.)

Bots

Bots must be written in Python. Bots will have access to the kotc module, which supplies these classes:

  • KOTCBot, which bots must extend
  • Card, which represents a card
  • Suit and Rank, enums representing the suit and value of a card

Bots must implement a play method, which takes as input a Card representing the top card on the discard pile. This method must return a Card within that bot's hand. If the returned Card is not in the bot's hand that bot is disqualified. (I will leave a comment on it with information about the state of the game when it happened.) However, if the Card is an Eight then only the rank will be checked against the bot's hand. If the bot has no playable cards in its hand, the play method will NOT be called and the controller will automatically draw cards on behalf of the bot and add them to its hand. The bot should NEVER modify its hand! This will be done by the controller. The play method may also return None or False, which will cause its turn to be skipped.

Bots will compete against each other in matches of two, in an elimination-style tournament bracket. The winner will advance onwards, and the loser will be executed eliminated.

API

KOTCBot

This class is the actual bot.

Methods and properties: (Do NOT override any of these in your bot)

  • draw: When called, this function draws a card from the pile and adds it to the bot's hand. It also returns the card drawn.
  • hand: This property is a list of Cards representing the bot's hand.
  • arena: This property is the KOTCArena instance the bot is playing in.

KOTCArena

This class is accessible through the arena property of the Bot. It has three functions available to the bots:

  • handSizes: Returns a list of the lengths of the hands of the other bots
  • discardSize: Returns the size of the discard pile
  • drawSize: Returns the size of the draw pile

Card

The Card class represents a card, and takes a Suit and Rank when constructed. This class must be returned by the bot's play method. Its suit and rank can be accessed through their respective properties.

Suit

Members of this enum:

  • Clubs
  • Diamonds
  • Spades
  • Hearts

Rank

Members of this enum:

  • Ace
  • King
  • Queen
  • Jack
  • Two through Ten

Example BotKing of the Cards

This bot just plays any available card, without using eights.

import kotc

class ExampleBot(kotc.KOTCBot):
  def play(self, discard):
    for card in self.hand:
      if card.suit == discard.suit or card.rank == discard.rank:
        return card

King of the Cards

todo: put an intro blurb here

In this King of the Hill challenge, you must write a bot that can play Crazy Eights. This is a card game often played by children, in which the objective is to empty your hand.

How to Play

The game of Crazy Eights is deceptively simple. At the beginning of the game, each player gets dealt a hand of cards (in this case eight), with the remaining cards placed in the middle of the table as the draw pile. The top card is then placed face up and serves as the beginning of the discard pile. Then, each player can discard one card per turn if that card has a matching suit or rank with the top card on the discard pile. They may also play an 8, which allows them to change the effective suit of the 8 and therefore the suit the next player must follow. The played card then becomes the top card. If the player does not have any matching cards, they must draw from the draw pile until they get a matching card and play that. If they exhaust the draw pile, play passes to the next player. Players may draw at any time, even if they have playable cards (which does not count as a turn).

For example, if 6♣ is played, the next player:

  • Can play a 6 of any suit
  • Can play any club
  • Can play an 8 (and then must declare a suit)
  • Can draw and continue their turn.

If the draw pile runs out, then the discard pile (except for the top card) is shuffled and becomes the new draw pile.

The game ends once a player runs out of cards, in which case they are declared the winner. (This differs from normal Crazy Eights, and is included to make this game a bit simpler.)

Bots

Bots must be written in Python. Bots will have access to the kotc module, which supplies these classes:

  • KOTCBot, which bots must extend
  • Card, which represents a card
  • Suit and Rank, enums representing the suit and value of a card

Bots must implement a play method, which takes as input a Card representing the top card on the discard pile. This method must return a Card within that bot's hand. If the returned Card is not in the bot's hand that bot is disqualified. (I will leave a comment on it with information about the state of the game when it happened.) However, if the Card is an Eight then only the rank will be checked against the bot's hand. If the bot has no playable cards in its hand, the play method will NOT be called and the controller will automatically draw cards on behalf of the bot and add them to its hand. The bot should NEVER modify its hand! This will be done by the controller. The play method may also return None or False, which will cause its turn to be skipped.

Bots will compete against each other in matches of two, in an elimination-style tournament bracket. The winner will advance onwards, and the loser will be executed eliminated.

API

KOTCBot

This class is the actual bot.

Methods and properties: (Do NOT override any of these in your bot)

  • draw: When called, this function draws a card from the pile and adds it to the bot's hand. It also returns the card drawn.
  • hand: This property is a list of Cards representing the bot's hand.
  • arena: This property is the KOTCArena instance the bot is playing in.

KOTCArena

This class is accessible through the arena property of the Bot. It has three functions available to the bots:

  • handSizes: Returns a list of the lengths of the hands of the other bots
  • discardSize: Returns the size of the discard pile
  • drawSize: Returns the size of the draw pile

Card

The Card class represents a card, and takes a Suit and Rank when constructed. This class must be returned by the bot's play method. Its suit and rank can be accessed through their respective properties.

Suit

Members of this enum:

  • Clubs
  • Diamonds
  • Spades
  • Hearts

Rank

Members of this enum:

  • Ace
  • King
  • Queen
  • Jack
  • Two through Ten

Example Bot

This bot just plays any available card, without using eights.

import kotc

class ExampleBot(kotc.KOTCBot):
  def play(self, discard):
    for card in self.hand:
      if card.suit == discard.suit or card.rank == discard.rank:
        return card
added 94 characters in body
Source Link
Ginger
  • 6k
  • 5
  • 20

Bots must implement a play method, which takes as input a Card representing the top card on the discard pile. This method must return a Card within that bot's hand. If the returned Card is not in the bot's hand that bot is disqualified. (I will leave a comment on it with information about the state of the game when it happened.) However, if the Card is an Eight then only the rank will be checked against the bot's hand. If the bot has no playable cards in its hand, the play method will NOT be called and the controller will automatically draw cards on behalf of the bot and add them to its hand. The bot should NEVER modify its hand! This will be done by the controller. The play method may also return None or False, which will cause its turn to be skipped.

Bots must implement a play method, which takes as input a Card representing the top card on the discard pile. This method must return a Card within that bot's hand. If the returned Card is not in the bot's hand that bot is disqualified. (I will leave a comment on it with information about the state of the game when it happened.) However, if the Card is an Eight then only the rank will be checked against the bot's hand. If the bot has no playable cards in its hand, the play method will NOT be called and the controller will automatically draw cards on behalf of the bot and add them to its hand. The bot should NEVER modify its hand! This will be done by the controller.

Bots must implement a play method, which takes as input a Card representing the top card on the discard pile. This method must return a Card within that bot's hand. If the returned Card is not in the bot's hand that bot is disqualified. (I will leave a comment on it with information about the state of the game when it happened.) However, if the Card is an Eight then only the rank will be checked against the bot's hand. If the bot has no playable cards in its hand, the play method will NOT be called and the controller will automatically draw cards on behalf of the bot and add them to its hand. The bot should NEVER modify its hand! This will be done by the controller. The play method may also return None or False, which will cause its turn to be skipped.

Source Link
Ginger
  • 6k
  • 5
  • 20

King of the Cards

todo: put an intro blurb here

In this King of the Hill challenge, you must write a bot that can play Crazy Eights. This is a card game often played by children, in which the objective is to empty your hand.

How to Play

The game of Crazy Eights is deceptively simple. At the beginning of the game, each player gets dealt a hand of cards (in this case eight), with the remaining cards placed in the middle of the table as the draw pile. The top card is then placed face up and serves as the beginning of the discard pile. Then, each player can discard one card per turn if that card has a matching suit or rank with the top card on the discard pile. They may also play an 8, which allows them to change the effective suit of the 8 and therefore the suit the next player must follow. The played card then becomes the top card. If the player does not have any matching cards, they must draw from the draw pile until they get a matching card and play that. If they exhaust the draw pile, play passes to the next player. Players may draw at any time, even if they have playable cards (which does not count as a turn).

For example, if 6♣ is played, the next player:

  • Can play a 6 of any suit
  • Can play any club
  • Can play an 8 (and then must declare a suit)
  • Can draw and continue their turn.

If the draw pile runs out, then the discard pile (except for the top card) is shuffled and becomes the new draw pile.

The game ends once a player runs out of cards, in which case they are declared the winner. (This differs from normal Crazy Eights, and is included to make this game a bit simpler.)

Bots

Bots must be written in Python. Bots will have access to the kotc module, which supplies these classes:

  • KOTCBot, which bots must extend
  • Card, which represents a card
  • Suit and Rank, enums representing the suit and value of a card

Bots must implement a play method, which takes as input a Card representing the top card on the discard pile. This method must return a Card within that bot's hand. If the returned Card is not in the bot's hand that bot is disqualified. (I will leave a comment on it with information about the state of the game when it happened.) However, if the Card is an Eight then only the rank will be checked against the bot's hand. If the bot has no playable cards in its hand, the play method will NOT be called and the controller will automatically draw cards on behalf of the bot and add them to its hand. The bot should NEVER modify its hand! This will be done by the controller.

Bots will compete against each other in matches of two, in an elimination-style tournament bracket. The winner will advance onwards, and the loser will be executed eliminated.

API

KOTCBot

This class is the actual bot.

Methods and properties: (Do NOT override any of these in your bot)

  • draw: When called, this function draws a card from the pile and adds it to the bot's hand. It also returns the card drawn.
  • hand: This property is a list of Cards representing the bot's hand.
  • arena: This property is the KOTCArena instance the bot is playing in.

KOTCArena

This class is accessible through the arena property of the Bot. It has three functions available to the bots:

  • handSizes: Returns a list of the lengths of the hands of the other bots
  • discardSize: Returns the size of the discard pile
  • drawSize: Returns the size of the draw pile

Card

The Card class represents a card, and takes a Suit and Rank when constructed. This class must be returned by the bot's play method. Its suit and rank can be accessed through their respective properties.

Suit

Members of this enum:

  • Clubs
  • Diamonds
  • Spades
  • Hearts

Rank

Members of this enum:

  • Ace
  • King
  • Queen
  • Jack
  • Two through Ten

Example Bot

This bot just plays any available card, without using eights.

import kotc

class ExampleBot(kotc.KOTCBot):
  def play(self, discard):
    for card in self.hand:
      if card.suit == discard.suit or card.rank == discard.rank:
        return card