Looking for suggestions/advice

Rodney Somerstein rodneys at io.com
Thu Aug 11 20:11:05 EDT 2005


Cubist writes,

>sez rodneys at io.com:
>>It seems to me that as the language grows it will get
>>progressively slower if I'm just continually adding IF-THEN
>>statements or adding to one large CASE statement.
>    Exactly how many language-tokens are you going to *need* for this thing?
>Hmmm... in no particular order:

.
.
.

>    That's twelve different language tokens you'll need, IMAO. Can anyone else
>think of any others?

Well, I could use just 12 or so language tokens as you state. Then, I 
have to provide a lot more functionality to make this work, such as 
ways of chaining those together with various kinds of programmatic 
logic. Otherwise, I have simply created a very specific purpose 
descriptive language that doesn't allow a whole lot to be automated. 
You seem to have a good handle on what kinds of games I want to 
implement and the difficulties involved. If I go this route, rather 
than adding more commands, each command gets more and more complex as 
I want to add features.

For example, DefineThing makes sense to define a game element, such 
as a card. But then, I need to define details of that card, such as 
suit, value, color, etc. And I need to be able to combine that card 
with others to become a deck. And the deck needs to have details such 
as number of cards, number of cards remaining before reshuffle, 
played cards, discarded cards, etc. That is mostly meta-data. What 
happens when I get to the token for DefineRule? These are so broad 
that allowing implementation of auctions and scoring, as just two 
examples, would both be very different rules.

It seems that a better approach as I've been discussing this is to 
create a library of commands (basically scripts) that can be called 
to build a script. Ideally this would be Transcript calling the 
scripts rather than my parsing through a file and calling each script 
myself. That allows easier transition for game developers to move 
from simple implementations to more involved ones.

I suspect that each game component should also have scripts specific 
to those components. For example, a deck of cards can deal to a 
player's hand, play a card face up to a spot on the board, or discard 
a card. There are more behaviors, but this is a few simple examples. 
It seems easier to me that the deck knows how to do this rather than 
have a big command that has to know how to deal with all kinds of 
game components where possible.

>    Naah. Rev is a consideration regardless, because somebody has to do the
>hard work of writing the code which implements all the commands in 
>the library. Rev is way-cool for that hard work.

I agree. That is why I'm asking on the Rev mailing list. ;-)

>    Naah. The command file is just a list of character strings which trigger
>various pre-written handlers. The 10-line limit isn't a factor, becuase *you*
>(the developer) are the only one who ever has to deal with *scripts*.
>Basically, load a command file into a field or variable, and let 
>your handlers massage said file; no problem.

As I've stated, this approach works for very simple implementation of 
a game where the users have to handle all of the rules. As soon as 
people want to get beyond this, either I write a full-fledged 
scripting language or the game developer does this in Transcript (or 
Python or...). Without coding logic of some sort, the game developer 
would be very limited as to what they can do. I can then focus on 
adding common functionality and people designing specific games can 
focus on the one-off rules.

>    German-type games are a *mess*, as far as conversion to a machine-friendly
>form is concerned. There's far too many conditional rules and arbitrary
>thises & thats.

It is pretty hard to generalize, but I have a few pages just listing 
common game mechanisms and meta-data for components that games need. 
This includes random number generation (dice usually, but spinners 
etc. also), card handling, auctions, betting, etc. I'll pick a 
starting point and go from there. I'll probably deal with simple card 
games (Lost Cities) and tile-laying games (Carcassonne) first, then 
proceed from there. Doing this will progressively build up a library 
of functionality which will then be added to on an ongoing basis. Of 
course, there are a lot of infrastructure pieces such as broadcasting 
and receiving moves, matchmaking, chatting,etc. that have to 
implemented as well. I will never implement every possibility, which 
is why I want developers to have access to a full-featured language 
if possible. When the developer wants to go beyond using simple logic 
to hook these pieces together, then they would need a license for 
DreamCard, etc. to go farther.

Thanks for the input and feel free to find problems with what I'm 
saying here. It definitely helps me get this stuff figured out.

-Rodney



More information about the use-livecode mailing list