联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> Python编程Python编程

日期:2021-04-05 09:43

CS246 WINTER 2021 PROJECT – STRAIGHTS CS246, WINTER 2021

CS246 Winter 2021 Project – Straights

? DO NOT EVER SUBMIT TO MARMOSET WITHOUT COMPILING AND TESTING FIRST. If your final

submission doesn’t compile, or otherwise doesn’t work, you will have nothing to show during your demo. Resist

the temptation to make last-minute changes. They probably aren’t worth it.

? This project is intended to be doable by one person in two weeks. Because the breadth of students’ abilities in

this course is quite wide, exactly what constitutes two weeks’ worth of work is difficult to nail down. Some

students may finish quickly; others won’t finish at all. We will attempt to grade this assignment in a way that

addresses both ends of the spectrum. You should be able to pass the assignment with only a modest portion of

your program working. Then, if you want a higher mark, it will take more than a proportionally higher effort

to achieve, the higher you go. A perfect score will require a complete implementation. If you finish the entire

program early, you can add extra features for a few extra marks.

? Above all, MAKE SURE YOUR SUBMITTED PROGRAM RUNS. The markers do not have time to examine

source code and give partial correctness marks for non-working programs. So, no matter what, even if your

program doesn’t work properly, make sure it at least does something.

In this project, you will implement a card game, Straights. This document will first describe the card game as it is played

with cards, and then how it is to be computerized.

1 Objectives

Straights is a four-player game. The objective is to get the fewest number of points among the players. The game ends when

one player accumulates 80 points or more, and the player with the lowest score is declared the winner. If the lowest score is a

tie, then all players with that score win.

2 The Deck

Straights uses a standard 52-card deck, without the jokers. Each player is dealt 13 cards at the beginning of each round. In

this game, the Ace is considered to be the lowest card in each suit (rank of 1), while the King is the highest (rank of 13).1

3 Gameplay

3.1 Legal Plays

Immediately following the deal, the player with the 7 of spades goes first. This player must play the 7 of spades in the centre

of the table. After the 7 of spades, the players take turns to play cards on the table. At this point, the players must play cards

that constitute legal plays. The following cards are legal:

? A 7 of any suit. This card starts a new pile on the table.

? A card with the same suit and adjacent rank2

as another card that has already been played. It must be played on the pile

of the appropriate suit. (Note that the “pile” is spread across the table, so that play can proceed at either end.)

1A Jack has a rank of 11, while the Queen has a rank of 12. The rank of all other cards is their numeric value e.g. 2 has a rank of 2.

2A card has adjacent rank if its face value is one more or one less than the rank of card under consideration. The King and Ace of a suit are not considered

to be adjacent ranks to each other.

Page 1 of 7

Due Date 1: Friday, April 9, 2021, 5:00 pm

Due Date 2: Monday, April 19, 2021, 11:59 pm

CS246 WINTER 2021 PROJECT – STRAIGHTS CS246, WINTER 2021

For example, if the 7 of spades is the only card on the table, then the legal plays are: the 7 of diamonds, the 7 of hearts,

the 7 of clubs, the 8 of spades, and the 6 of spades. Once the 8 of spades is played, the next legal plays are: the 9 of spades,

the 6 of spades, the 7 of diamonds, the 7 of hearts, and the 7 of clubs. In this way, you can add cards to either end of the suit

“pile” so long as there are no gaps.

3.2 Discards

When a player has no legal plays, they must then choose a card in their hand, and place it face down in front of them. This is a

discard. Note that if a player has at least one legal play in their hand, then they must make a legal play; they may not discard

in this case.

4 Scoring

The round ends when all the cards have either been played or discarded. For each player, their score for the round is the sum

of all the ranks of the player’s discards. Jacks, Queens, and Kings count as 11, 12, and 13 points, respectively. For example,

if a player discarded an Ace, a Six, and a King, the number of points would be 1 + 6 + 13 = 20.

Each player’s game score is of the sum of their scores in each round. If no player has accumulated 80 or more points at

the end of a round, then the deck is reshuffled and another round begins.

5 Computer Straights

Question: What sort of class design or design pattern should you use to structure your game classes so that changing the user

interface or changing the game rules would have as little impact on the code as possible? Explain how your classes fit this

framework.

5.1 Command-Line Parameters

The user can provide an optional integer argument seed, used to initialize the random number generator when starting the

program:

./straights 44

This allows for pseudo-random shuffling. See the provided shuffle.cc for an example of declaring a random number

generator that is used to randomly shuffle cards in the deck. The random number generator is seeded once with the (possibly

global variable) seed, and then used in std::shuffle. Games that are started with the same seed value have the same

sequences of deals, so long as the deck of cards is restored between rounds to its previous state before being shuffled again.

5.2 Invite Players

At the beginning of the program, prompt the user with the following message:

Is Player<x> a human (h) or a computer (c)?

>

where <x> is the id number representing the player being initialized. The user then types either h or c to set the desired

player type. Repeat this step for each of the four players.

5.3 Shuffling and Dealing

Initially, the cards in the deck must be in the following order3

:

AC 2C 3C ... TC JC QC KC AD 2D ... QD KD AH 2H ... QH KH AS 2S ... QS KS

3

In this notation, cards are displayed as <rank><suit> (e.g. 7S). For the ranks, T=10, J=Jack, Q=Queen, K=King. The suits are: C=Clubs,

D=Diamonds, H=Hearts. S=Spades

Page 2 of 7

CS246 WINTER 2021 PROJECT – STRAIGHTS CS246, WINTER 2021

At the beginning of every round, shuffle the deck once. Then, deal out the cards such that the first 13 cards belong to

Player 1, the next 13 cards belong to Player 2, the next 13 belong to Player 3, and the last 13 cards belong to Player 4.

When the round is over, the deck is restored to the state it was in just after shuffling at the beginning of the round, but

before the players play the round. This ensures that subsequent shuffles (i.e., at the beginning of each round but before any

cards are played) produces a repeatable shuffling. For example, if after shuffling the deck has the order 6S 2S 4C 2H 6C AD

JD 8D 2D AS JH 7S AH 2C 3H 3S KD 5C 5H 9C 3D JC 6H AC TH 4D 5D TD 7D 4S 7H 4H TC 9D JS KC 8S KS TS QC 9H

7C 9S QS 5S 8C 8H KH 6D QD QH 3C, then before it is shuffled for the next round, the cards are returned to their previous

order of 6S 2S 4C 2H 6C AD JD 8D 2D AS JH 7S AH 2C 3H 3S KD 5C 5H 9C 3D JC 6H AC TH 4D 5D TD 7D 4S 7H 4H

TC 9D JS KC 8S KS TS QC 9H 7C 9S QS 5S 8C 8H KH 6D QD QH 3C (note that these two sequences are identical). This

way, the results will be repeatable, which will make your testing and demonstrations easier.

5.4 Gameplay

5.4.1 Start

The game starts after the shuffle and the deal. The four players take turns to play their cards. The play order is 1 → 2 → 3 →

4 → back to 1. But remember that the player with the 7 of spades begins. First, print the following line (regardless of whether

the first player is a human or computer):

A new round begins. It’s Player<x>’s turn to play.

where <x> depends on who has the 7 of spades.

5.5 Players

Question: If you want to allow computer players, in addition to human players, how might you structure your classes?

Consider that different types of computer players might also have differing play strategies, and that strategies might change as

the game progresses i.e. dynamically during the play of the game. How would that affect your structure?

Question: If a human player wanted to stop playing, but the other players wished to continue, it would be reasonable

to replace them with a computer player. How might you structure your classes to allow an easy transfer of the information

associated with the human player to the computer player?

5.5.1 Human Player

Whenever it is a human player’s turn, print the following 8 lines:

Cards on the table:

Clubs:<list of clubs>

Diamonds:<list of diamonds>

Hearts:<list of hearts>

Spades:<list of spades>

Your hand:<cards in your hand>

Legal plays:<legal plays in your hand>

>

Each of list of cards in a specific suit is an ordered sequence of all the ranks in that suit (e.g., 6 7 8 9 T J Q) that have

already been played.

<cards in your hand> and <legal plays in your hand> are lists of cards in the player’s hand, where

each card is in the form <rank><suit> (e.g. 7S). Print the cards in the same order that they appear in the deck. Do not

rearrange the cards. Every list of cards, except for that produced by the deck command, starts with a space character, and a

single space separates each card from the next. There is no space after the final card in the list. If there are no legal plays, then

the list of cards consists of an empty string i.e. print Legal plays:\n.

The program then waits for the user to enter a command.

Page 3 of 7

CS246 WINTER 2021 PROJECT – STRAIGHTS CS246, WINTER 2021

5.5.2 Commands

There are 5 valid commands for the human player in this game:

Command Description

play <card> Play the specified card. You may assume that the <card> has valid syntax (i.e., <rank><suit>, such as 7C), and that

the specified card is in the player’s hand. However, it might not be a legal play.

If the play is legal, print:

Player<x> plays <card>.

and proceed to the next player. Otherwise, print:

This is not a legal play.

>

and do not proceed to the next player until a legal play is made.

discard <card> If the player has no legal plays, discard the specified card from the player’s hand into the player’s discard pile. Again, assume that

the <card> has valid syntax and that the <card> is in the player’s hand. For test purposes, the value of the card is printed even

though that deviates from the normal straights game play.

Player <x> discards <card>.

Otherwise, print the following error message:

You have a legal play. You may not discard.

>

deck Print the contents of the deck in order, 13 cards per line. For example:

TS 2D 3S KH 3H 2C 5D TC 8S TD AC KC QH

4D JH 6H JC KD 8C 7D TH 4H 9S 6S 4S KS

7S 7C QD 6C 2H 6D 3C 9C 5H 3D AD 5S 8H

QC 2S 8D JS QS AS JD 4C 7H 9D 5C AH 9H

>

(This command is not part of the straights game. It is provided to help both you and us with the testing and debugging of your

program.)

quit Terminate the program immediately.

ragequit Filled with anger, a human player decides to leave! Print the following message:

Player <x> ragequits. A computer will now take over.

Replace the current human player with a computer player, and resume the game.

While your handling of the commands is not required to be robust, you will find it in your best interest to make it at least

somewhat robust so that a game doesn’t have to be started over from the beginning if a player enters an invalid command or

card value.

5.5.3 Computer Player

If it is a computer player’s turn to play, print either one of the two lines, as appropriate:

Player<x> plays <card>.

or

Player<x> discards <card>.

Proceed to the next player.

The computer player that you will implement is very simple. It always makes the first legal play in its hand. If there are

no legal plays, the first card in its hand is discarded.

Page 4 of 7

CS246 WINTER 2021 PROJECT – STRAIGHTS CS246, WINTER 2021

5.6 Scoring

When all of the cards have been played, the round ends. At this point, print the following lines for each of the players:

Player<x>’s discards:<list of discards>

Player<x>’s score: <old score> + <score gained> = <new score>

<list of discards> is a list of the cards the player discarded in the current round. Print the cards in the same order

that they were discarded.

If at least one player has accumulated 80 points or more, the game ends. (Note that there is no prompt to replay again.

Instead, you would just run the executable again.) The player with the lowest score wins. Print the following victory message

for the winning player(s):

Player<x> wins!

If multiple players tie for the win, print the above message for each winner.

If no one exceeded the score limit, then reshuffle the deck and begin another round.

6 Example

This is an example game of Straights, including only a few interesting snippets. The [...] indicates where the rest of the game

has been excluded.

Is Player1 a human (h) or a computer (c)?

>h

Is Player2 a human (h) or a computer (c)?

>c

Is Player3 a human (h) or a computer (c)?

>c

Is Player4 a human (h) or a computer (c)?

>c

A new round begins. It’s Player4’s turn to play.

Cards on the table:

Clubs:

Diamonds:

Hearts:

Spades:

Your hand: 7C QS KH 5S 6S JD AD 7S 8D TD 6D TC KD

Legal plays: 7S

>Player4 plays 7S.

Cards on the table:

Clubs:

Diamonds:

Hearts:

Spades: 7

Your hand: 4H 5D 2D JC 8H QH 2H 6C 9H 9D 9C AS 2C

Legal plays:

>deck

4H 5D 2D JC 8H QH 2H 6C 9H 9D 9C AS 2C

JS QD 5C 8C 4D 5H KC 7D KS AC JH 6H 7H

3H 4C 3S 3D AH QC 3C TH 4S 9S 2S 8S TS

7C QS KH 5S 6S JD AD 7S 8D TD 6D TC KD

>discard AS

Player1 discards AS.

Cards on the table:

Clubs:

Diamonds:

Page 5 of 7

CS246 WINTER 2021 PROJECT – STRAIGHTS CS246, WINTER 2021

Hearts:

Spades: 7

Your hand: JS QD 5C 8C 4D 5H KC 7D KS AC JH 6H 7H

Legal plays: 7D 7H

...

Cards on the table:

Clubs: 7

Diamonds: 7

Hearts:

Spades: 7 8

Your hand: 4H 5D 2D JC 8H QH 2H 6C 9H 9D 9C 2C

Legal plays: 6C

>play 6C

Player1 plays 6C.

...

>ragequit

Player1 ragequits. A computer will now take over.

Player1 discards 4H.

...

Cards on the table:

Clubs: 6 7 8 9

Diamonds: 5 6 7 8

Hearts: A 2 3 4 5 6 7 8 9 T J

Spades: A 2 3 4 5 6 7 8 9 T J Q

Your hand: 3C

Legal plays:

>Player3 discards 3C.

Player1’s discards: 9D QD KH KD 2D

Player1’s score: 16 + 49 = 65

Player2’s discards: 5C JD QH AD 3D KC

Player2’s score: 40 + 45 = 85

Player3’s discards: AC 4C 3C

Player3’s score: 15 + 8 = 23

Player4’s discards: KS QC 2C 4D TD TC JC

Player4’s score: 53 + 62 = 115

Player3 wins!

7 Testing Mode

You may find it useful to implement another optional command-line argument that represents the name of a file containing

the saved state of a game so that you can demonstrate specific scenarios more easily to the grader and for your own testing

purposes.

Grading

Your project will be graded as follows:

Correctness and Completeness 60% Does it work? Does it implement all of the requirements?

Documentation 20% Plan of attack; Final design document.

Design 20% UML; good use of separate compilation, good object-oriented practice;

is it well-structured, or is it one giant function?

Even if your program doesn’t work, you can still earn marks associated with the Documentation and Design components

of the project.

Page 6 of 7

CS246 WINTER 2021 PROJECT – STRAIGHTS CS246, WINTER 2021

If Things Go Well

If you complete the entire project, you can earn up to 10% extra credit for implementing extra features. You should provide

some way of playing the game with and without enhancements, as this will allow project assessors to accurately determine

that you met all of the base requirements. Recompiling is not permitted.

The following is a list of possible enhancements that you could develop. However, don’t attempt to implement this

until you’ve got the base game working.

? House rules. You could invent your own house rules.

? Smarter computer players. Right now, the computer player makes the first choice of legal moves, and the first choice of

discards. There is, however, quite a bit of strategy possible in terms of what is played and what is discarded.

? Better display. Even with just ASCII, the “table” could be drawn more nicely than a list of cards and moves. Or if

you’re feeling bold, you could implement a GUI (graphical user interface).

To earn significant credit, enhancements must be algorithmically difficult, or solve an interesting problem in objectoriented

design. Trivial enhancements will not earn a significant fraction of the available marks.

Due Dates

Due Date 1: Due on due date 1 is your plan of attack, plan.pdf, and initial UML diagram, uml.pdf, for your implementation

of Straights on Marmoset, CS246_PROJECT.

Due Date 2: Due on due date 2 is your actual implementation of Straights. All .h, .cc and any other files needed for your

project to compile and run should be included in straights.zip. The ZIP file must contain a suitable Makefile such

that typing make will compile your code and produce an executable named straights. In addition, your straights.zip

must also contain demo.pdf and all necessary files to run your demo (such as saved input, either with a fixed seed or

loaded game files, but not the program executable, which will be compiled from the files submitted in straights.zip),

uml-final.pdf and design.pdf to the appropriate place on Marmoset, CS246_PROJECT.

If you have implemented any bonus features, make sure that your submitted demo plan includes a list of all of the described

bonus features, and how to run the game to see the effect of the bonus features.

See project guidelines-online.pdf for instructions about what should be included in your plan of attack and final design

document.

Page 7 of 7


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp