From: Erik V. <eri...@hc...> - 2005-04-23 14:00:39
|
Although there is still a lot of work to to on the classes developed so far (more features, Javadoc, toString(), save/restore) I can't resist the temptation to look forward to what I think will be the next major step in adding functionality: the rounds. We have three round types: - initial round (buying privates), - stock round, - operation round. (for now leaving aside specialties like the 18EU "Minor Company Final Exchange Round"). For now I suppose that the Stock and Operation rounds can be handled by a single class each (stubs are already available), but the great variety of initial round types may call for a whole range of different classes: - 1830 auction - 1835 standard (each time a limited set available at fixed price) - 1835 Clemens (all available at a fixed price) - 1837 (like 1835 standard, but with price reductions) - 1841 standard (secret bids, revealed simultaneously) - 1825/51 (shuffle and deal) - 18EU (complex auction - IMO the most interesting subgame of them all) and no doubt there are more different varieties. The question I would like to discuss here is, if we can define a common interface to all these classes, so that one common UI can possibly handle all of these. My proposal would be to create an interface (tentatively named Auction) which defines the following method sets: 1. Methods that tell the UI what next moves are possible: - which player has the turn - what privates are available for immediate buying, and at what price, - what privates are available for bidding, and at what minimum price, - whether passing is allowed or not, - which privates are available to select for the next auction (18EU). The UI should call these methods to find how to reconfigure the screen for the next player action. 2. Methods that tell the Auction-implementing class what action the player has performed. This action will then be executed, after which a next set of options is prepared. This way I think we can handle all of the above cases. About the more esoteric ones: - Shuffle and deal: each player is offered only one option, and may not pass. - Secret bidding: players can enter bids in any sequence, when all have passed all the bids are processed and the results made available. Questions: 1. Does this make sense? 2. Did I overlook important initial round mechanisms that should also be considered? 3. Is anybody able to define not-overly-long descriptive class names for all these varieties? If not, I would simply call them AuctionLike1830, AuctionLike1841 etc. Erik. |
From: Brett <wak...@ea...> - 2005-04-23 18:02:21
|
On Sat, 2005-04-23 at 16:00 +0200, Erik Vos wrote: > My proposal would be to create an interface (tentatively named Auction) > which defines the following method sets: I haven't played many of these games enough to know the auction structure very well, so I'll need to defer most of this to you and anyone else that wishes to contribute. > Questions: > 1. Does this make sense? Yes. This is the right way to go, IMO. > 3. Is anybody able to define not-overly-long descriptive class names > for all these varieties? If not, I would simply call them AuctionLike1830, > AuctionLike1841 etc. You could simply go with Auction1830 or 1830Auction and omit the 'Like'. That seems adequate to me. ---Brett. A conference is a gathering of important people who singly can do nothing but together can decide that nothing can be done. -- Fred Allen |
From: John D. G. <jd...@di...> - 2005-04-24 06:42:39
|
Erik Vos wrote: > We have three round types: > - initial round (buying privates), > - stock round, > - operation round. > (for now leaving aside specialties like the 18EU > "Minor Company Final Exchange Round"). For most 18xx games, the initial auction (or starting packet purchases) is not a separate kind of round, but happens during the first stock round; and in fact, most games allow an operating round to occur with some of the "starting packet" still unsold. This will create several problems if the initial round is a separate type of round: * You need to determine whether the next round is an operating round or a stock round. * If the next round is an operating round, then after it you have to determine whether to go to another initial round or a stock round. On the other hand, if the game starts with secretly written bids (as 1841 or 1853) these objections don't arise, and you do need a separate initial round. So I say, yes, go ahead and define these three types of rounds; but don't do anything in the "initial round" of games like 1830 or 1835 except to assign the seating order. Instead, 1830 and 1835 start-packet turns take place in a stock round, and a global variable (perhaps game_phase) should determine what actions are allowed during a stock-round turn. For games like 1830 or 18EU, you'll want a fourth round type, an "auction round", to handle the auction of a particular private/minor. This can be nested within a stock round, or you can start a new stock round after it; but in either case the auction round doesn't move the Priority Deal. (I prefer the nested model because it makes the rounds in the program agree with those in the rule book.) |
From: Erik V. <eri...@hc...> - 2005-04-24 14:16:26
|
> Erik Vos wrote: > > We have three round types: > > - initial round (buying privates), > > - stock round, > > - operation round. > > (for now leaving aside specialties like the 18EU > > "Minor Company Final Exchange Round"). > > For most 18xx games, the initial auction (or starting packet > purchases) is > not a separate kind of round, but happens during the first > stock round; > and in fact, most games allow an operating round to occur > with some of the > "starting packet" still unsold. This will create several > problems if the > initial round is a separate type of round: > > * You need to determine whether the next round is an > operating round or a > stock round. > > * If the next round is an operating round, then after it you have to > determine whether to go to another initial round or a stock round. No big deal: just two flags. I agree, that from a structural point of view it looks better to classify auctions as subrounds of the stock round, as well as nationalisations, the 18EU final exchange round, and the 1841 4-train events can be seen subrounds of the operating round. I was mainly concerned about how the code that builds the UI will know that it has to prepare for an Auction. It looked easier to have it start an auction right away, rather than let it start a Stock Round, which then needs to tell the UI "no, we'll have an Auction first." But we may end up like this anyway, so your approach may be right (see my other post, in which I adhere to your approach). Brett, do you have a vision on the UI interfacing aspect? > On the other hand, if the game starts with secretly written > bids (as 1841 > or 1853) these objections don't arise, and you do need a > separate initial > round. This is generally the case if the start packet must be sold out in the initial round, for instance also in 18EU. But I would consider that just a boolean condition, rather than that it would lead to a separate type of (sub)round. It is not even a separate variable, as the "mandatory completion" of this type of round directly follows from the procedure it embodies. So I'd say: if some auctions go inside a SR, then all of them. > So I say, yes, go ahead and define these three types of > rounds; but don't > do anything in the "initial round" of games like 1830 or 1835 > except to > assign the seating order. Instead, 1830 and 1835 > start-packet turns take > place in a stock round, and a global variable (perhaps > game_phase) should > determine what actions are allowed during a stock-round turn. I spoke about "buying privates", but many games sell minor companies in the initial round, so "start packet" is the correct term indeed. > For games like 1830 or 18EU, you'll want a fourth round type, > an "auction > round", to handle the auction of a particular private/minor. > This can be > nested within a stock round, or you can start a new stock > round after it; > but in either case the auction round doesn't move the > Priority Deal. (I > prefer the nested model because it makes the rounds in the > program agree > with those in the rule book.) I don't think 1830 is a good example, as all unsold privates are auctioned at the same time. But indeed in 18EU each minor is auctioned separately, so, following your hierarchical approach, we might call that a sub-subround. Erik. |
From: John D. G. <jd...@di...> - 2005-04-25 19:58:18
|
Erik Vos wrote: > No big deal: just two flags. I agree, that from a structural point of > view it looks better to classify auctions as subrounds of the stock round, > as well as nationalisations, the 18EU final exchange round, and > the 1841 4-train events can be seen subrounds of the operating round. As I see it, not all of these are "rounds" at all. A round is, or should be, a sequence of player turns in each of which that player can, or must, make one or more decisions. The 1830 start-packet sequence (which I do not call an "auction" because it does not consist entirely of bids and passes, and because it may contain single-item auctions) takes place during multiple stock turns, which may be completed in the first stock round or may span more than one stock round with operating rounds in between. (But each single-item auction, if it happens, is a round.) Nationalization (as in 1835) is a simple, single action. (But the sequence of giving each player in turn the option to merge privates/ minors into the Prussian is a round, and it can happen multiple times. When this is triggered by the Prussian forming upon the purchase of the first 4 or first 4+4 train, it is a round within a round.) The 18EU MCFER and the 1841 Ferdinandea Succession are rounds. Events such as one company buying a train from another, and mergers in games like 1841, should not be considered rounds (in my opinion) because once the phasing player or company has begun the event, the event contains at most one "turn". This includes 1841's forced Tuscan merger. > I was mainly concerned about how the code that builds the UI will > know that it has to prepare for an Auction. It looked easier to have it > start an auction right away, rather than let it start a Stock Round, > which then needs to tell the UI "no, we'll have an Auction first." > But we may end up like this anyway, so your approach may be right > (see my other post, in which I adhere to your approach). The variety of examples above has convinced me that each game should be allowed to define its own private kinds of rounds, and that the game entity should be generic enough to allow for them. [snip] > I don't think 1830 is a good example, as all unsold privates are > auctioned at the same time. Not even! There is a specific turn sequence, and the turns within each auction do not alter the turn sequence in the stock round which continues after the auction from where it was before that auction. If you need details of this, consult the 18AL/18GA rules, which exactly follow the entire 1830 starting-packet procedure. |
From: Erik V. <eri...@hc...> - 2005-04-26 19:23:24
|
> Erik Vos wrote: > > No big deal: just two flags. I agree, that from a > structural point of > > view it looks better to classify auctions as subrounds of > the stock round, > > as well as nationalisations, the 18EU final exchange round, and > > the 1841 4-train events can be seen subrounds of the > operating round. > > As I see it, not all of these are "rounds" at all. A round is, or > should be, a sequence of player turns in each of which that > player can, > or must, make one or more decisions. I have been using "round" in a very loose way, rather like an abbreviation for "a procedure complex enough to warrant implementation in a (often game-specific) special class". Sorry for the confusion. Is "procedure" a better term? Or "process"? > The 1830 start-packet sequence (which I do not call an > "auction" because > it does not consist entirely of bids and passes, and because it may > contain single-item auctions) takes place during multiple stock turns, > which may be completed in the first stock round or may span more than > one stock round with operating rounds in between. (But each > single-item > auction, if it happens, is a round.) Yes, this more or less precludes the simple setup that Brett and I worked out last Sunday. So we're back at the "start-packet procedure" being a subprocess of the stock round...!? > Nationalization (as in 1835) is a simple, single action. (But the > sequence of giving each player in turn the option to merge privates/ > minors into the Prussian is a round, and it can happen multiple times. > When this is triggered by the Prussian forming upon the > purchase of the > first 4 or first 4+4 train, it is a round within a round.) The Prussian formation is what I was referring to as "nationalisation" as a subround (I know 1835 uses the term for a different purpose). Other examples occur in 1826 (Etat, SNCF), 1856 (CGR). > The 18EU MCFER and the 1841 Ferdinandea Succession are rounds. > > Events such as one company buying a train from another, and mergers in > games like 1841, should not be considered rounds (in my opinion) > because once the phasing player or company has begun the event, the > event contains at most one "turn". Right. > This includes 1841's forced Tuscan merger. OK, so in your definition a "round" is something that has "turns". That makes sense, but I'm not sure if this definition will help us much. We'll see. > The variety of examples above has convinced me that each game should > be allowed to define its own private kinds of rounds, and that the > game entity should be generic enough to allow for them. Yes, we aren't there yet. > [snip] > > I don't think 1830 is a good example, as all unsold privates are > > auctioned at the same time. > Not even! There is a specific turn sequence, and the turns within > each auction do not alter the turn sequence in the stock round which > continues after the auction from where it was before that auction. > If you need details of this, consult the 18AL/18GA rules, which > exactly follow the entire 1830 starting-packet procedure. What I meant is: all privates are open for bidding (except the cheapest one). Whereas in 18EU, only one private is open for bidding or buying at any one point in time, except when a player has the turn to select one. So there, in your definition, we have rounds within turns. Erik. |