From 9cfef991a1b8066bf1227827e07cbf098cee62c3 Mon Sep 17 00:00:00 2001 From: miguel Date: Mon, 19 Sep 2022 18:27:57 +0100 Subject: [PATCH] docs(zappy): fixing the audit and subject --- subjects/zappy/README.md | 262 ++++++++++++++++++--------------- subjects/zappy/audit/README.md | 180 +++++++++++++--------- 2 files changed, 253 insertions(+), 189 deletions(-) diff --git a/subjects/zappy/README.md b/subjects/zappy/README.md index 50a16872a..36ba99937 100644 --- a/subjects/zappy/README.md +++ b/subjects/zappy/README.md @@ -1,87 +1,90 @@ -## Zappy Project +## zappy ### Objectives -Zappy is an automatic video Game where AIs play with each other, The Game is about building a world and managing its population; we are going to call this world Trantor. +You have to create Zappy, which is an entirely automatic game where some AI's play amongst themselves. It is about creating families, surviving by eating food and collecting stones in order to level up. Each level has different requirements for a ritual, which makes the adventure more and more difficult for the AI players, which play on their own, without any help form their creator. The game is over once six members of one family reach the highest possible level (8). ### Instructions ### Game presentation -- Geographically Trantor is made of plains with no height, no carter, no valley, no mountains. -- The game board represents the entire world's surface like a map containing food and stones and the population of Trantor, "the Trantorians." -- The "Trantorions" lives in harmony and peace with everyone, They only eat food so they Can stay alive, look for stones, pick them up to create totems, and have a ritual to get to the next level of the game, it will be all explained later. -- Each level has different requirements for a ritual, making the adventure more and more difficult for the AI players, who play independently without help from their creator. +### The Game Parts -### Players +Here are the different parts of the game: -- If a player (or you call it a client ) Join the game, it does not Join as one character in the game, but as six characters or players play in the form of one team, the game does support Multiplayers, but players cannot share data between them outside the game in any way. -- Teams play the game. -- The game is over once six members of one family reach the highest possible level (8). -- There is no chat room or sharing of data between players. Still, the Player can broadcast a message through a command-line sent to the server, which will be broadcasted to all players; All details are in the sound transmission part. +- The `server` contains the field, the resources, and manages the logic and timing of the game. -### The Game Parts +- One or many `clients` will connect to the server and each will “pilot” one player. The players are spread over teams. -Here are the different parts of the game: +- A `graphic client` that connects to the server and displays the field and what happens there. + +#### Geography -- The `server` contains the field and the resources and manages the logic and timing of the game. -- One of many `clients` will connect to the server, and each will “pilot” one player. The players do spread over teams. -- A graphic client connects to the server and displays the field and what happens there. +- The game consists in managing an entire world and its population. That world, "Trantor" is geographically made of plains that have no height, no crater, no valley or mountains. -### The Game Speed +- The game board represents the entire surface of that world, like a map. If a player exits on the right of the board, he will re-enter on the left. -A time unit defines the game speed. Each action in the game has a duration proportionate to this time unit. -The function 1/t defines the time unit: +- The game is played by teams. The winning team is the first one that will have its 6 players reach the maximum level. -- t is passed as a parameter at the start of the server. -- A time unit lasts 1/t second. +### Resources -### The Game Resources +The location where we are is quite rich in resources, mining and food. All you need to do is to walk around and discover this wonderful food and many stones of various nature on the ground. + +- These stones be of 6 distinct kinds: -The location is exceptionally rich in resources, mining, and food. -Walk around on the game board to discover fantastic food and many stones of varied nature on the ground. -- These stones are of 6 distinct kinds: - linemate - - dreamer + - deraumere - sibur - mendiane - phiras - thystame -- The server must randomly generate these resources. Despite being random, the generation must have some logical rules. -### The Trantorians! +- These resources must be randomly generated by the server, despite being random, the generation must have some logical rules. + +### Rules + +- Each player starts with 10 food (1260 time units) and 0 stones. +- Each player starts on level 1. +- As you level up, your player sight improves. +- You must eat to survive and not starve and die. +- You must collect stones to level up. +- Create a family of (at least) 6 and win the game. +- Hatch an egg if you need a spot in your family. -### The population Activities +### The Trantorians Activities -The population of Trantor has two types of occupation: +The population of Trantor has two type of occupation: - Get food to eat and not die of hunger. -- Look for stones, pick them up to create totems, have an elevation ritual, and get to the next level. +- Look for stones, pick them up to create totems, have an elevation ritual and get to the next level. + +Elevation is an important activity for Trantorians! + +### Player -The elevation is an essential activity for Trantorians! +- The local is pacific, he is neither violent nor aggressive, he is happy just looking for stones and feeding on the way. -### Individuals +- He meets, without issues, other people on the same location and sees as far as the eye can see. -- The local is pacific. It is neither violent nor aggressive and happy, just looking for stones and feeding on the way. -- He meets, without issues, other people in the exact location and sees as far as the eye can see. - It is impossible to guess the Trantorian orientation when crossing him. -- The food the Trantorian picks up is the only resource he needs to live. -- One food unit allows it to survive 126-time units, so 126/t seconds. -- The more he picks, the more he lives. -- The Trantorian must also collect the stones from elevating; each level will require a different combination of stones. -We will explain more later. + +- The food that the Trantorian picks up is the only resource he needs to live. + +- One food unit allows him to survive 126 time units, so 126/t seconds. The more he picks up the more he lives. + +- The Trantorian must also collect the stones in order to elevate, each level will require different combination of stones. ### Elevation ritual -- The goal for everyone is to reach the top of the `Trantorian` hierarchy. -- The ritual that allows increasing the Trantorian physical and mental capacities must be accomplished according to a particular rite. He needs to bring together the same field unit: +- The goal for everyone is to reach the top of the Trantorian hierarchy. + +- The ritual that allows to increase the Trantorian physical and mental capacities must be accomplished according to a particular rite. He needs to bring together on the same field unit (square): + + - A combination of stones + - A certain number of players of the same level + +- The player will start the incantation and the elevation will start. It is not necessary that all the players are on the same team. Only their collective levels matter. All players within the incantation group will reach the higher level. -- A combination of stones -- A certain number of players of the same level -- The player will start the incantation, and the elevation will start. -- Not all the players need to be on the same team. -- Only their collective levels matter. -- All players within the incantation group will reach a higher level. - Passed on from generation to generation, the secret to the elevation goes as such: | Level | Number of Players | linemate | deraumere | sibur | mediane | phiras | thystame | @@ -94,10 +97,9 @@ We will explain more later. | 6-7 | 6 | 1 | 2 | 3 | 0 | 1 | 0 | | 7-8 | 6 | 2 | 2 | 2 | 2 | 2 | 1 | - ### Vision -- For multiple reasons, the player's vision of the field is limited. With each elevation, their vision goes up one unit of measure ahead and one on each side of a new row. Thus we obtain, for example, for the first three levels, the first two elevations, the following vision (our player is on 0): +- For multiple reasons, the vision that the player has of the field is limited. With each elevation their vision goes up one unit of measure ahead and one on each side of a new row. Thus we obtain, for example, for the first 3 levels, the first two elevations, the following vision (our player is on 0): ```console @@ -130,13 +132,13 @@ We will explain more later. ``` -For the player to know his surroundings, the `client` sends the command `SEE,` and the server responds with the following chain of characters (for level 1): +For the player to know his surroundings, the `client` sends the command `SEE` and the server responds the following chain of characters (for level 1): ```console {content-square-0, content-square-1, content-square-2, content-square-3} ``` -Our player does not even see himself, and if there is more than one object in a box, they are all indicated and separated by a space: +Our player doesn't even see himself, and if there is more than 1 object in a box, they are all indicated and separated by a space: ```console -------- -------- -------- @@ -154,26 +156,43 @@ Our player does not even see himself, and if there is more than one object in a {food, player sibur, phiras phiras, } ``` -### Time +### The Time and Game Speed + +The game speed is defined by a time unit. Each action in the game has a duration proportionate to this time unit. + +The time unit is defined by the function 1/t : + +- t is passed as parameter at the start of the server. +- A time unit lasts 1/t seconds. -- No active wait time will be tolerated. There cannot be any blocking when the clients are stopped, or in any phase of the game. -- The Trantorians have adopted an international time unit. The Time unit is a second. If `t=1` “forward” takes 7 seconds. -- We choose by default, t=100. t is an integer. +- No active wait time will be tolerated. +- There cannot be any blocking when the clients are stopped, or in any phase of the game. +- The Trantorians have adopted an international time unit. +- Time unit is a second. If `t=1` “forward” takes 7 seconds. We choose by default, t=100. t is a integer. - The time reference is absolute time. ### Objects denomination Only the classification of an object can be identifiable. It is therefore impossible to distinguish two objects of the same class. For example, two `siburs` will have the same denomination since they belong to the same class. +### Teams + +At the beginning a team is made of n player and only n. Each player is controlled by a client. The clients cannot communicate or exchange amongst each other data outside of the game, in any way. + +At the beginning the client has 10 life units, he can therefore survive 1260 time units, 1260/t seconds. + ### Reproduction -A player can reproduce with the `fork command`. The execution of this command results in the production of an egg. Once the egg is laid, the player that laid the egg can go around until it hatches. +A player can reproduce with the `fork` command. The execution of this command results in the production of an egg. + +Once the egg is laid, the player that laid the egg can go around until it hatches. Once the egg has hatched, a new player comes out, and is given a random direction. +This operation authorizes the connection of a new client. -When the egg hatches a new player pops. He is oriented randomly. This operation authorizes the connection of a new client. The `connect_nbr` command returns the number of authorized and unauthorized connections for this team. +The `connect_nbr` command returns the number of authorized and unauthorized connections for this team. - Time to lay an egg: 42/t -- Time for the egg to hatch at 600/t +- Time for the egg to hatch 600/t ### Inventory @@ -193,17 +212,11 @@ moving \n With K indicating the direction of the square where the player comes from. Basically saying that you are getting out of that square. - -### Teams - -In the beginning, a team is made of n players and only n. A client controls each player. The clients cannot communicate or exchange each other data outside of the game in any way. -In the beginning, the client has ten life units; he can survive 1260 time units, 1260/t seconds. - ### The commands Each player responds to the following actions and only with the following syntax: - +![Example](./actions.png) | Action | Command | Delay/time | Response | | :-----------------------------------------------: | :---------------: | :--------: | :----------------------: | @@ -222,17 +235,18 @@ Each player responds to the following actions and only with the following syntax | know the number of unused connections by the team | connect_nbr | 0/t | value | | death of a player | - | - | death | -All the commands are transmitted via a chain of characters that end with a newline. +All the commands are transmitted through a character string that ends with a newline. +In case of any unknown or bad command the server must respond "ko". ### Sound Transmission Sound is a wave that moves in a linear manner. -All the players hear the broadcasts without knowing who emits them. They perceive only the direction the sound comes from and the message. The number of squares crossed by the sound before it arrives at the player indicates the direction. This numbering is done through the attribution of `1` to the square in front of the player, then a count down of the squares surrounding the player in the trigonometric direction (counter-clock wise). The world is round, therefore we will choose the shortest trajectory for the sound between the transmitter to the player for which we calculate. +All the players hear the broadcasts without knowing who emits them. They perceive only the direction the sound comes from and the message. The number of squares crossed by the sound before it arrives to the player indicates the direction. This numbering is done through the attribution of `1` to the square in front of the player, then a count down of the squares surrounding the player in the trigonometric direction (counter-clock wise). The world is round, therefore we will choose the shortest trajectory for the sound between the transmitter to the player for which we calculate. The following example indicates the sound trajectory that we must choose, as well as the numbers of the squares around the player. The player receives the broadcast through square 3. -![Sounds](./sound.png) +![Example](./Sound.png) In case the broadcast is emitted from the same box as the receiving player, he will get the message from square 0 @@ -254,91 +268,103 @@ With K indicating the square where the sound comes from. ### The Server -The server can be written in one of these languages [C - C++ - Rust - Go]. +The server is the main engine that will interfere between the AI and the GUI. It will exchange all data with the AI and execute these instructions. At the same time, it send the information to the GUI. It can be written in one of these languages [C - C++ - Rust - Go]. -in this part, you must create a TCP server to make a connexion between clients and manage the entire world -- Port of the server -- Number of teams and their names -- Dimension of the world map -- number of clients authorized at the beginning of the game +For this part, you must create a TCP server to make a connection between clients and manage the entire world: -#### Instructions +- The server port. +- The number of teams and their names. +- The dimension of the world map. +- The number of clients authorized at the beginning of the game. -- Your server must generate all resources. The generation must be in a random way. -- Your server must never block, and the client can be appropriately bounced if necessary -- Any request to your server must never hang forever. +#### Server Instructions + +- Your server must generate all the resources. The generation must be in a random way. +- Any request to your server must never hang forever. It must never block, and the `client` can be appropriately bounced if necessary. +- The server executes the requests of the `client` in the order they are received. +- The requests are buffered and the execution time of the command will only block the player concerned. - It's forbidden to use any `exec` functions to run another server. -- Stress tests your server. It must stay available at all costs. -- You are allowed to use Thread but think out of the box. +- It must stay available at all costs. + +You are allowed to use threads but think outside of the box. ```console $ ./server - Usage: ./server -p -w -y -nt [] [] ... -c [-t ] - -p port number - -w world width - -y world height - -nt team_name_1 team_name_2 ... - -c number of clients authorized at the beginning of the game - -t [100] time unit divider (the greater t is, the faster the game will go) + Usage: ./server -p -x -y nt [] [] ... -c [-t ] + -p is the port number + -x is the width of the world + -y is the height of the world + -n is the name of the team + -c is the number of authorized clients per team + -t is the reciprocal of time unit for execution of actions ``` -The server executes the requests of the client in the order they are received. The -requests are buffered and the execution time of the command will only block the player -concerned. - ### The Client -The Client can be written in one of these languages [C - C++ - Rust - Go - Js - Python...] + +The Client can be written in one of these languages: + +- C +- C++ +- Rust +- Go +- Js +- Python ```console $./client Usage: ./client -n -p [-h ] - -n team_name - -p port - -h name of the host , the default is localhost + -n is the name of the team + -p is the port number + -h is the name of the host, the default is localhost ``` -The client is autonomous, after its launch the user won’t influence its operation. He -pilots a drone (player). + +The client is autonomous, after its launch the user won’t influence its operation. He pilots a drone (player). The client must send the command order to the server without any intervention from humans. - ### Client/server communication -The communication between client and server will happen via sockets and TCP. The port used will be indicated in the program's parameters. +The communication between client and server will happen via sockets and tcp. The port used must be indicated in the programs parameters. -The client will send its requests without waiting for their execution, the server sends back a message confirming the successful execution of the requests. +The client will send its requests without waiting for their execution, the server sends back a "welcome" message confirming the successful execution of the requests. The connection client to server will happen as such: -| client’s message | server’s message | -| :--------------: | :--------------: | -| | WELCOME\n | -| \\n | | -| | \\n | -| | \ \\n | +![Example](./server-con.png) + +The `nb-client` indicates the number of clients that can still be accepted by the server for the team `team-name`. If that number is greater than 1 a new client connects. X and Y indicate the world’s dimensions. -The `nb-client` indicates the number of clients that can still be accepted by the server for the team `team-name`. -If that number is greater than 1 a new client connects. If the team name passed by the client doesn't exist the server must print `"Error: the team doesn't exist"` -> The client can send successively up to 10 requests without a response from the server. Beyond 10 the server will no longer take them into account. +> The client can send successively up to 10 requests without response from the server. Beyond 10 the server will no longer take them into account. + +If a player/client join the game, it does not join as one character in the game, but as a family of six members in the form of one team. -The server executes the client requests in the order that they are received. The requests are buffered and the execution time of the command will only block the player concerned. -x and y indicate the dimensions of the world. +There is no chat room or sharing of data between players. Still, the Player can broadcast a message through a command-line sent to the server, which will be broadcasted to all players; All details are in the sound transmission part. + +The server executes the client requests in the order that they are received. The requests are buffered and the execution time of the command will only block the player concerned. `x` and `y` indicates the dimensions of the world. ### Graphic interface -The Graphic part must be done with one of these functions Javascript and Python and C, C++ +To have a better vision of the game, which is simple, clear and ergonomic, the project will need to have a graphic visualization client. That client will propose a real-time representation of the world as it is on the server. + +The Graphic part must be done with one of these languages: -Using any game Engine is forbidden. +- Javascript +- Python +- C +- C++ -The project will have to have a graphic visualization client. That client will propose a real-time representation of the world as it is on the server. +- Using any game Engine is forbidden! -The interface will integrate at least a 2D visualization through icons allowing a representation of the world. You also need to include the visualization of the sounds. +- The interface will integrate at least a 2D visualization through icons allowing a representation of the world. +- You need to make sure that it is possible to visualize the items in the game. +- You need to implement the the possibility of clicking on a square to see the details of it, like how many of each items it has inside. It should look like a floating window, tooltip, or something else. +- You need to include the visualization of the sounds. -This can be developed in C, PHP, Perl, Python, etc. And will communicate within the network with the `server` to retrieve the content of the `map, teams, inventories, etc`. For example, everything needed to see what is going on in the game. +This can be developed in C, PHP, Perl, Python, etc. And will communicate within the network with the `server` to retrieve the content of the `map, teams, inventories, etc`. For example, everything needed to see what is going on in the game. ### BONUS -- A 3D interface or any other type of representation will be an appreciated bonus for this project. +- Create a 3D interface or any other type of representation. - Create the server using only one process (No THREADS) diff --git a/subjects/zappy/audit/README.md b/subjects/zappy/audit/README.md index 83a98438b..bca82b522 100644 --- a/subjects/zappy/audit/README.md +++ b/subjects/zappy/audit/README.md @@ -1,23 +1,18 @@ #### Functional -**_Guildlines_** +**_Guidelines_** -##### Zappy isn't a trivial project to correct. it is also long project to grade. For a full Project you need to spend around: +##### Zappy is a long project to audit, for a full project review we advise you to spend around: -##### - 20 to 30 minutes for the server testing -##### - 10 to 20 minutes for the graphic client testing -##### - 5 to 10 minutes to test the client's AI +##### - 20 to 30 minutes for the server testing. -##### take the necessary time to check out the work of your peer carefully, Between 35 and 60 minutes in total +##### - 10 to 20 minutes for the graphic client testing. -**_resources_** - - -##### Can you confirm that food and stones exist as resources in the game? - -##### Can you confirm that six types of stones are present in the game? (linemate, deraumere, sibur, mendiane, phiras, thystame) +##### - 5 to 10 minutes to test the client's AI. +##### Take the necessary time to check out the work of your peer carefully and ask him for guidance to understand his project. +#### Functional **_The server_** @@ -27,56 +22,60 @@ ```console $ ./server - Usage: ./server -p -w -y -nt [] [] ... -c [-t ] + Usage: ./server -p -x -y -n [] [] ... -c [-t ] -p port number - -w world width + -x world width -y world height - -nt team_name_1 team_name_2 ... + -n team_name_1 team_name_2 ... -c number of clients authorized at the beginning of the game -t [100] time unit divider (the greater t is, the faster the game will go) ``` -##### Does it display the correct result as above? +###### Does it display a result like the one presented above? -##### Try to run `./server -p 8080 -x 10 -y 10 -c 5 -nt "TeamOfVectory" -t 10` then open another terminal and run `telenet 127.0.0.1 8080` +##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -n -t 10"`. Open another terminal and run `"telnet 127.0.0.1 8080"` -```console +```console $ telnet 127.0.0.1 8080 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. WELCOME ``` -##### Does it display the correct result as above? -##### Use Vscode or a simular program and search about any `exec` functions like [`execve`,`execpe`,`execl`,`execlp`,`execle`,...] -##### Did he/she use one of those function ? +###### Does it display result with a welcome message like the one presented above? + +##### Use Vscode or a similar program and search for any `exec` functions like (`execve`,`execpe`,`execl`,`execlp`,`execle`,...). -##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -nt TeamOfVectory TeamOfPower "` +###### Did the student use any of these functions? -```console +##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -n "`. + +```console [ SQ ] : FOOD R0 R1 R2 R3 R4 R5 BOTS ... -[ 0] : 0 1 0 0 0 0 0 -[ 1] : 0 3 2 0 0 0 0 +[ 0] : 2 1 2 1 1 0 0 +[ 1] : 2 2 0 1 0 0 0 +[ 2] : 0 0 1 0 0 0 0 +[ 3] : 1 2 1 0 0 0 0 ... -[ 97] : 1 3 1 0 0 0 0 -[ 98] : 0 1 0 0 0 0 0 -[ 99] : 0 4 0 0 0 0 0 +[ 97] : 3 0 1 3 0 0 0 +[ 98] : 1 1 0 0 0 0 0 +[ 99] : 0 1 0 0 0 0 0 ``` -##### Does it display the correct result as above? check only the first column and the first row of output +###### Can you confirm that the number of columns and rows of the output are the same as the result above? -##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -nt TeamOfVectory -t 10"`, then open another terminal and run `"siege -b 127.0.0.1:8080"` +##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -n -t 10"`. Open another terminal and run `"siege -b 127.0.0.1:8080"`. -##### The program `./server` is still working ? +###### Is the program `./server` is still working? -##### + Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -nt TeamOfVectory"` at 2 terminal separate +##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -n "` in two different terminals. -##### Does it display in the second terminal `error: Address already in use` or something similar? +###### Does it display, in the second terminal, `ERROR : Address already in use` or something similar? **_Client_** -##### Try to run `"./client"` +##### Try to run `"./client"`. ```console $ ./client @@ -86,89 +85,128 @@ Usage: ./client -n -p [-h ] -h name of the host , the default is localhost ``` -##### Does it display the correct result as above? +###### Does it display a result like the one presented above? -##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -nt TeamOfVectory"` then run `"./client -n TeamOfVectory -p 8080"` +##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -n "` then run `"./client -n -p 8080"` on a different terminal. -##### Does the program launch without any errors? +###### Does the program launch without any errors? -##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -nt TeamOfVectory"` then run `"./client -n TeamOfVectory -p 8080 -h 127.0.0.1"` +##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -n "` then run `"./client -n -p 8080 -h 127.0.0.1"` on a different terminal. -##### Do the two programs interact with each other? +###### Do the two programs interact with each other without errors? -##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -nt TeamOfVectory"` then run `"./client -n TeamNotWorking -p 8080 -h 127.0.0.1"` +##### Try to run `"./server -p 8080 -x 10 -y 10 -c 5 -n "` then run `"./client -n -p 8080 -h 127.0.0.1"` -##### Does the program print `" Error: the team TeamNotWorking does not exist"` in the server part, and the client kick out? +###### Does the program print an error message like `"Error: the team TeamNotWorking doesn't exist"` in the server part, and the client is kicked out? **_Graphic Client_** -##### For the square content, Test the possibility of clicking on a square to see details about it like a floating window, tooltip, or something else? +##### Ask the owners of the project for help to connect the Graphic Client to the server. + +###### Does the client properly connect to the server and display the map? + +##### For the square content, test the possibility of clicking on a square to see the details about it. It should look like a floating window, tooltip, or something else. + +###### Can you confirm that the square is showing its content somehow? + +###### Can you confirm that it is possible to distinguish the number of all stones on a square? + +##### Search in the map for the player, stones and food to see if they are visible. + +###### Are the players, stones, and food visible in the map? + +##### Try to click on a player to see his characteristics. + +###### Is it possible to see some kind of floating window, tooltip, or something else with the characteristics of the player? -##### For an Advance client, Is it possible to distinguish the number of similar stones on a square? +###### Can you confirm that it is possible to visualize the sounds? -##### Does the client connects properly to the server and displays the map? +**_PLAYER_** -##### For a graphic client vision, are the players, stones, and food visible? +##### Try to run a game and take a close look at what the players are doing. -##### Can you (as a graphic client) click on a player to see his characteristics in a floating window, tooltip, or something else? +###### Does each player starts with 10 food (1260 time units) and 0 stones? -##### Is it possible to scroll a map? +###### Does each player starts on level 1? -##### Does each player starts on level 1? +###### Is the player able to pick up food? -##### Is the player able to pick up food? +###### Is the player able to pick up stones? -##### Is one food unit equal to 126-time units? +###### Can you confirm that if the player does not eat, he starves and die? -##### Try to run `go run . example00.txt`. +###### Can you confirm that if the player eats, he will survive longer? -##### Is the player able to pick up stones? +###### Can the player perform the elevation ritual and level up? -##### Can you confirm that if the player does not eat, he starves? +###### Does the sight of the players increase with the level rising? -##### Can you confirm that if the player eats, he will survive longer? +###### Can the player hatch an egg if he needs a spot in his family? -##### Can the player level up when it can confirm the requirements to do so? +###### Can you confirm that if the player exits on the right side of the board, he will re-enter on the left side or vice versa? -##### Does the sight of the players increase with the level? +**_resources_** + +###### Can you confirm that food and stones exist as resources in the game? + +###### Can you confirm that six types of stones are present in the game? (linemate, deraumere, sibur, mendiane, phiras, thystame) + +###### Are resources randomly generated? + +**_Food_** -##### Can the player hatch an egg if he needs a spot in his family? +###### Is one food unit equal to 126 time units? -##### Can you confirm that if the player exits on the right side of the board, he will re-enter on the left side or vice versa? -##### Is there sound management for broadcast? +**_Elevation ritual_** -##### Try to confirm that the rules of the elevation ritual are the same given in the subject. +##### Try to confirm that the rules of the elevation ritual are the same given in the subject. (ask the project owners for an explanation if necessary). -##### Are the elevation ritual rules the same? +###### Are the elevation ritual rules exactly the same? -##### Can you confirm that in order to elevate to `level 2`, the player needs the stone `linemate` -##### Can you confirm that to elevate to `level 3`, the player needs a combination of the stones `linemate,` `deraumere,` `sibur,` and two players on the same level? +**_Broadcast_** + +##### Pai attention to the broadcast messages. + +``` +broadcast +``` -##### Can you confirm If the movements left and right commands are working? +###### Can you confirm that in order to send a message, the client must send the command above to the server. + +##### After the client send the command to the server, he will send to all its clients the following line: + +``` +message , +``` + +###### Can you confirm that the server replied the above message with K indicating the square where the sound comes from? **_The AI Client_** -##### Test with a t betwen 50 and 100 . +##### Test with a `-t` between 50 and 100 . ##### Test if the time taken by each movement and action is respected? -##### Try to run `"./server "` + + #### General -##### +Is the visualizer in 3D? +###### +Is the visualizer in 3D? + +###### +Is the server using only one process (no threads)? #### Basic -##### +Does the project run quickly and effectively (favoring recursive, no unnecessary data requests, etc.)? +###### +Does the project run quickly and effectively (favoring recursive, no unnecessary data requests, etc.)? -##### +Does the code obey the [good practices](../../good-practices/README.md)? +###### +Does the code obey the [good practices](../../good-practices/README.md)? #### Social -##### +Did you learn anything from this project? +###### +Did you learn anything from this project? -##### +Would you recommend/nominate this program as an example for the rest of the school? +###### +Would you recommend/nominate this program as an example for the rest of the school?