oop


Players and deck methods in a card game


I'm programming a card game (of Uno / Mau Mau type) and I have this design problem:
The deck contains two stacks of cards, one of them shows faces, the other shows backs. When a game is in progress and a player throws a card, it should go onto the "faces" stack. However, when the game is finished, the cards of the last player should go back onto the "backs" stack.
1) Should the deck have two methods for adding cards (addToFacesStack and addToBacksStack)
or
2) Should the deck have an addCards method and decide itself which stack the cards should go onto (the deck would have to know the state of the game - in progress/finished)?
Also, when the game is in progress and a player (who knows the rules and selects cards to play accordingly) throws card(s) onto the "faces" stack, should the deck "re-check" whether the player's move is valid?
Thanks in advance for your suggestions!
Caroline
I think you should be asking the question: should the model know about the game logic or just the state of the game?
If YES, then you need to include the game logic inside your model, hence you can have only the addCards method, and the Deck will decide where to add the card(s). But, in this case the game model and game logic are tightly coupled. If you were to use the same model for another variation of the game (with a different logic), this option would not be appropriate.
If NO, then you can follow the Boundary - Control - Entity design pattern. Here, you need to have separate methods for adding cards to the first or second stack. And encode the game logic into your controller objects, which would know the rules of the game. Using this pattern, you can reuse the same model and just employ different controllers based on the game being played.
Regarding your question:
Also, when the game is in progress and a player (who knows the rules and selects cards to play accordingly) throws card(s) onto the "faces" stack, should the deck "re-check" whether the player's move is valid?
In this case, you can have a controller that will check whether the move is valid or not. No need to encode the logic inside the model.

Related Links

MATLAB OOP: Communication between objects of different subclasses
Creating objects with the same arguments across the system
Optimal way to develop a group of methods
Copying an Object in different ways
How should I model pathfinding in the object oriented paradigm
Use decorator and factory together to add properties or specialize an object
What should be allowed inside getters and setters? [closed]
'Process Models' vs 'Data/Object Models' in MVC
What are the correct ways to store additional information about class instances?
Model-Service decoupling: what if my model needs a service?
Is this a sensible object oriented design? [closed]
Is there some way to not to repeat a node in this code flow?
Calling an object dynamically in Matlab
EIEIO Composition (exposing a slot of a contained object through own slot)
Calling the actual class in Matlab
Matlab equivalent to calling inside static class

Categories

HOME
joomla
ssms
msbuild
packet
display
windows-server-2008
phantomjs
mifare
watson-iot
spss
x509certificate
hiveql
esxi
opengl-es
glympse
procmon
clip-path
unreal-engine4
http-status-codes
cakephp-2.0
minimum
openstack-horizon
bookmarklet
multibinding
simd
alert
jq
v4l2
ckeditor4.x
jira-zephyr
tftp
angular2-changedetection
csproj
pushpad
snapkit
imageprocessor
javax
incapsula
asp.net-webhooks
yelp
libconfig
mybatis-generator
ui-grid
glide-image-library
quartz
mtm
flume-ng
php-mongodb
qt-quick
qtwebkit
mef
fluent-nhibernate-mapping
webmatrix
portaudio
objectify
audiorecord
angular-i18n
abstract
commercetools
recode
updating
jain-sip
roslyn-code-analysis
joomla3.3
photogrammetry
tinymce-plugins
firebase-tools
crtdbg.h
report-builder2.0
register-allocation
visual-c#-express-2010
amzi-prolog
banana-pi
power-management
dayofweek
vbaccelerator
netbeans-plugins
mahara
google-oauth-java-client
record-locking
pudb
generator-expression
aspmenu-control
wxperl
copyfile
wdm
n2
jquery-attributes
numerical-computing
dynamic-scope
cross-cutting-concerns
cons

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App