-
Notifications
You must be signed in to change notification settings - Fork 4
Design Patterns
Desing Patterns
The definitions of how to code the FSMDriver will be built over the premise that the pilot is programmed in the C++ language, so, it goes without saying that the commands and pieces of code provided in this Design Patterns section are valid for C++ arquives of extension ".cpp" and ".h" inside this repository.
- Structural Design Patterns
This sections defines the format in which the variables, constants, methods and other parameters of the codes should be created and referred to.
1.1. Variables and Methods/Functions declarations
Variables and Methods/Functions will start with lower case letters and from the second word and on, capital letters at the beginning of every word, as follows:
type_T nameOfVariable;
type_T nameOfMethod (type_T nameOfParameter1, type_T nameOfParameter2);
1.2. Constants declarations
Constants will have their names in capital letter, to their full extent, as follows:
const type_T NAMEOFCONSTANT = value;
1.3. Indentation style
The size of a tab inside the codes will be defined as 4, that is, an indentation is what could be replaced as 4 spaces, in a visual matter. Further on, indentation style will be defined as K&R style[3], which consists of: the command (header), followed by the opening brace in the same line, then the statements within the command (inside the braces, beginning in the line after the header) are indented (+1 tab difference related to the header of the command), and finally the closing brace in the same indentation level as the header, one separate line further, as follows:
int main (int argc, char *argv[])
{
...
while (x == y) {
...
doSomething ();
if (error) {
correctError ();
} else {
continueNormally ();
}
}
}
Observations: The main
method will have the opening brace in the following line instead of the same line. Any else
conditions will be inserted in the same line of their corresponding if
's closing brace. Also, instructions will have spaces between parenthesis, braces, mathematical operations, etc, with the exception of the first and last letters inside of them, as follows:
if (x + y == 15) {
callMethod1 (parameter1, parameter2);
callMethod2 (parameter);
} else {
x = (y + 15) / 15;
callMethod3 (x);
}
Conditions that have only one or no statements will be allowed to omit their braces within, as follows:
for (i = 0; i < n; i++)
if (i = x) // Note that if is only 1 statement, even if it has 2 lines
callMethod (x);
1.3. Pointers
Pointers will have their symbols immediately before variables, NOT TYPES OF VARIABLES, as follows:
type_T *variable1, *variable2, *variable3;
The same definition goes for the situations where a pointer argument is passed, the reference sign will be attached to the variable name, as follows:
type_T callMethod (typeAddress &address)
[to be continued...]
References:
[1] TORCS Official Website
[2] Simulation Car Racing Championship Manual
[3] The 2009 Car Racing Simulation Championship
[4] Computer Inteligence in Games, SimpleDriver
[5] Mat Buckland, Programming Game AI by Example. State Drive Agent Design
[6] AI-Junkie, Genetic Algorithm
[7] Finite State Machine (FSM) Overview
[8] K&R Indentation Style