Moved rematch handling up the hierarchy, made Card constructor public in order to create specific cards for searching, etc.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3474 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -39,6 +39,17 @@ public class Card implements DSet.Entry, Comparable, CardCodes
|
|||||||
public Card ()
|
public Card ()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new card.
|
||||||
|
*
|
||||||
|
* @param number the number of the card
|
||||||
|
* @param suit the suit of the card
|
||||||
|
*/
|
||||||
|
public Card (int number, int suit)
|
||||||
|
{
|
||||||
|
_value = (byte)((suit << 5) | number);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value of the card, either from 2 to 11 or
|
* Returns the value of the card, either from 2 to 11 or
|
||||||
* KING, QUEEN, JACK, ACE, RED_JOKER, or BLACK_JOKER.
|
* KING, QUEEN, JACK, ACE, RED_JOKER, or BLACK_JOKER.
|
||||||
@@ -225,17 +236,6 @@ public class Card implements DSet.Entry, Comparable, CardCodes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Protected constructor for Deck.
|
|
||||||
*
|
|
||||||
* @param number the number of the card
|
|
||||||
* @param suit the suit of the card
|
|
||||||
*/
|
|
||||||
protected Card (int number, int suit)
|
|
||||||
{
|
|
||||||
_value = (byte)((suit << 5) | number);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** The number of the card. */
|
/** The number of the card. */
|
||||||
protected byte _value;
|
protected byte _value;
|
||||||
|
|
||||||
|
|||||||
@@ -29,4 +29,11 @@ public interface TrickCardGameService extends InvocationService
|
|||||||
* @param card the card to play
|
* @param card the card to play
|
||||||
*/
|
*/
|
||||||
public void playCard (Client client, Card card);
|
public void playCard (Client client, Card card);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A request for a rematch.
|
||||||
|
*
|
||||||
|
* @param client the client object
|
||||||
|
*/
|
||||||
|
public void requestRematch (Client client);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,8 +48,19 @@ public class TrickCardGameMarshaller extends InvocationMarshaller
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** The method id used to dispatch {@link #requestRematch} requests. */
|
||||||
|
public static final int REQUEST_REMATCH = 2;
|
||||||
|
|
||||||
|
// documentation inherited from interface
|
||||||
|
public void requestRematch (Client arg1)
|
||||||
|
{
|
||||||
|
sendRequest(arg1, REQUEST_REMATCH, new Object[] {
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/** The method id used to dispatch {@link #sendCardsToPlayer} requests. */
|
/** The method id used to dispatch {@link #sendCardsToPlayer} requests. */
|
||||||
public static final int SEND_CARDS_TO_PLAYER = 2;
|
public static final int SEND_CARDS_TO_PLAYER = 3;
|
||||||
|
|
||||||
// documentation inherited from interface
|
// documentation inherited from interface
|
||||||
public void sendCardsToPlayer (Client arg1, int arg2, Card[] arg3)
|
public void sendCardsToPlayer (Client arg1, int arg2, Card[] arg3)
|
||||||
|
|||||||
@@ -43,6 +43,15 @@ public interface TrickCardGameObject extends TurnGameObject
|
|||||||
/** The number of states defined for the base trick card game object. */
|
/** The number of states defined for the base trick card game object. */
|
||||||
public static final int TRICK_STATE_COUNT = 3;
|
public static final int TRICK_STATE_COUNT = 3;
|
||||||
|
|
||||||
|
/** Indicates that the player has not requested or accepted a rematch. */
|
||||||
|
public static final int NO_REQUEST = 0;
|
||||||
|
|
||||||
|
/** Indicates that the player has requested a rematch. */
|
||||||
|
public static final int REQUESTS_REMATCH = 1;
|
||||||
|
|
||||||
|
/** Indicates that the player has accepted the rematch request. */
|
||||||
|
public static final int ACCEPTS_REMATCH = 2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a reference to the trick card game service used to make
|
* Returns a reference to the trick card game service used to make
|
||||||
* requests to the server.
|
* requests to the server.
|
||||||
@@ -128,6 +137,35 @@ public interface TrickCardGameObject extends TurnGameObject
|
|||||||
*/
|
*/
|
||||||
public void setLastCardsPlayed (PlayerCard[] lastCardsPlayed);
|
public void setLastCardsPlayed (PlayerCard[] lastCardsPlayed);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of the field that contains the rematch requests.
|
||||||
|
*
|
||||||
|
* @return the name of the rematchRequests field
|
||||||
|
*/
|
||||||
|
public String getRematchRequestsFieldName ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the array of rematch requests.
|
||||||
|
*
|
||||||
|
* @return the array of rematch requests
|
||||||
|
*/
|
||||||
|
public int[] getRematchRequests ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the array of rematch requests.
|
||||||
|
*
|
||||||
|
* @param rematchRequests the array of rematch requests
|
||||||
|
*/
|
||||||
|
public void setRematchRequests (int[] rematchRequests);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets an element of the rematch request array.
|
||||||
|
*
|
||||||
|
* @param rematchRequest the rematch request value
|
||||||
|
* @param index the index at which to set the value
|
||||||
|
*/
|
||||||
|
public void setRematchRequestsAt (int rematchRequest, int index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether a user can play the specified card at this time.
|
* Checks whether a user can play the specified card at this time.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ public class TrickCardGameDispatcher extends InvocationDispatcher
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case TrickCardGameMarshaller.REQUEST_REMATCH:
|
||||||
|
((TrickCardGameProvider)provider).requestRematch(
|
||||||
|
source
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
|
||||||
case TrickCardGameMarshaller.SEND_CARDS_TO_PLAYER:
|
case TrickCardGameMarshaller.SEND_CARDS_TO_PLAYER:
|
||||||
((TrickCardGameProvider)provider).sendCardsToPlayer(
|
((TrickCardGameProvider)provider).sendCardsToPlayer(
|
||||||
source,
|
source,
|
||||||
|
|||||||
@@ -116,6 +116,10 @@ public class TrickCardGameManagerDelegate extends TurnGameManagerDelegate
|
|||||||
_trickCardGame.setTrickState(TrickCardGameObject.BETWEEN_HANDS);
|
_trickCardGame.setTrickState(TrickCardGameObject.BETWEEN_HANDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// initialize the array of rematch requests
|
||||||
|
_trickCardGame.setRematchRequests(
|
||||||
|
new int[_cardGame.getPlayerCount()]);
|
||||||
|
|
||||||
super.gameDidEnd();
|
super.gameDidEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,6 +262,56 @@ public class TrickCardGameManagerDelegate extends TurnGameManagerDelegate
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Documentation inherited.
|
||||||
|
public void requestRematch (ClientObject client)
|
||||||
|
throws InvocationException
|
||||||
|
{
|
||||||
|
// make sure the game is over
|
||||||
|
if (_cardGame.state != CardGameObject.GAME_OVER) {
|
||||||
|
throw new InvocationException("m.game_not_over");
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the requester is one of the players
|
||||||
|
int pidx = _cgmgr.getPlayerIndex(client);
|
||||||
|
if (pidx == -1) {
|
||||||
|
throw new InvocationException("m.not_playing");
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the player hasn't already requested
|
||||||
|
if (_trickCardGame.getRematchRequests()[pidx] !=
|
||||||
|
TrickCardGameObject.NO_REQUEST) {
|
||||||
|
throw new InvocationException("m.already_requested");
|
||||||
|
}
|
||||||
|
|
||||||
|
// if player is first requesting, set to request; else set
|
||||||
|
// to accept
|
||||||
|
int req = (getRematchRequestCount() == 0 ?
|
||||||
|
TrickCardGameObject.REQUESTS_REMATCH :
|
||||||
|
TrickCardGameObject.ACCEPTS_REMATCH);
|
||||||
|
_trickCardGame.setRematchRequestsAt(req, pidx);
|
||||||
|
|
||||||
|
// if all players accept the rematch, restart the game
|
||||||
|
if (getRematchRequestCount() == _cardGame.getPlayerCount()) {
|
||||||
|
_cgmgr.startGame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of players currently requesting or accepting
|
||||||
|
* a rematch.
|
||||||
|
*/
|
||||||
|
protected int getRematchRequestCount ()
|
||||||
|
{
|
||||||
|
int[] rematchRequests = _trickCardGame.getRematchRequests();
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; i < rematchRequests.length; i++) {
|
||||||
|
if (rematchRequests[i] != TrickCardGameObject.NO_REQUEST) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the trick is complete--that is, whether each player has
|
* Checks whether the trick is complete--that is, whether each player has
|
||||||
* played a card.
|
* played a card.
|
||||||
|
|||||||
@@ -33,4 +33,12 @@ public interface TrickCardGameProvider extends InvocationProvider
|
|||||||
*/
|
*/
|
||||||
public void playCard (ClientObject client, Card card)
|
public void playCard (ClientObject client, Card card)
|
||||||
throws InvocationException;
|
throws InvocationException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processes a request for a rematch.
|
||||||
|
*
|
||||||
|
* @param client the client object
|
||||||
|
*/
|
||||||
|
public void requestRematch (ClientObject client)
|
||||||
|
throws InvocationException;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user