{"id":13792095,"url":"https://github.com/mfelleisen/Evolution","last_synced_at":"2025-05-12T14:31:41.076Z","repository":{"id":145721782,"uuid":"57412050","full_name":"mfelleisen/Evolution","owner":"mfelleisen","description":"an implementation of Evolution for a course on Sw Dev ","archived":false,"fork":false,"pushed_at":"2016-05-09T00:36:42.000Z","size":108,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-11-18T06:48:12.784Z","etag":null,"topics":["education","racket"],"latest_commit_sha":null,"homepage":"","language":"Racket","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mfelleisen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-04-29T20:47:22.000Z","updated_at":"2022-09-16T03:40:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"bc4f48af-45db-42d8-9884-6e9c098673cf","html_url":"https://github.com/mfelleisen/Evolution","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfelleisen%2FEvolution","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfelleisen%2FEvolution/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfelleisen%2FEvolution/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfelleisen%2FEvolution/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mfelleisen","download_url":"https://codeload.github.com/mfelleisen/Evolution/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253754967,"owners_count":21958934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["education","racket"],"created_at":"2024-08-03T22:01:08.136Z","updated_at":"2025-05-12T14:31:40.752Z","avatar_url":"https://github.com/mfelleisen.png","language":"Racket","funding_links":[],"categories":["Racket"],"sub_categories":["game"],"readme":"# Evolution\n\nThis repo is the core of my implementation of the Evolution game for [Software Development @\nNU CCIS S'2016](http://www.ccs.neu.edu/home/matthias/4500-s16/). It does not include the\ntest harnesses and the test-generating pieces. \n\nThe course did not use the official rules of the game but a [simplified and modified\nversion](http://www.ccs.neu.edu/home/matthias/4500-s16/evolution.html) [also see the\nstudents' frequently asked question and my\nanswers](http://www.ccs.neu.edu/home/matthias/4500-s16/faq.html).\n\nThe Evolution game is run as a series of turns, with almost no setup\nrequired. Each turn proceeds in four stages:\n1. the dealer ensures that every player has one species board and cards to play with \n2. the players pick one card to contribute to the common food supply \n3. they use (some of) their other cards to perform actions on their species boards\n4. finally they feed their species. \nThe clean-up phase consolidates the players' gains and awards cards for\nlost species boards. \n\nThe dealer communicates with the players and enforces the rules. The\nimplementation of a turn consists of three steps: the dealer starts each\nplayer, then asks for card actions, and finally runs a feeding cycle,\nasking each player what to feed next. \n\nThis implementation supports both a sequential implementation that integrates Racket-based\nplayer implementations statically and a distributed implementation for interacting with\nplayers implemented in other languages.\n\nFor simple, deterministic runs, use xmain on the command line and supply a number\nbetween 3 and 8. \n\nFiles, Modules and Dependencies \n-------------------------------\n\n| name              | purpose                                                            |\n| ----------------- | ------------------------------------------------------------------ |\n|\n[doc-relations](https://github.com/mfelleisen/Evolution/blob/master/doc-relations.txt) | what kind of objects exist and how are they related and how they interact|\n|           \t    | \t     \t\t       \t\t     \t  \t\t\t |\n| dealer\t    | dealer data representation and functionality\t\t\t |\n| [doc-players](https://github.com/mfelleisen/Evolution/blob/master/doc-players.txt) | a diagram ow how the following three files are related     |\n| player-base       | basic player data and functionality\t\t\t\t |\n| player-external   | a representation of a specific \"silly\" external player\t\t |\n| player-internal   | a representation of the internal player with index-based API  \t |\n| internal-external | functions \u0026 syntax for communicating between X and I players  \t |\n| next    \t    | a representation of dealer-player dialogues \t\t\t |\n| board \t    | a data representation of species boards          \t\t\t |\n| traits  \t    | a data representation of traits         \t\t\t\t |\n| cards   \t    | a data representation of cards          \t\t\t\t |\n| basics     \t    | functions, contracts, syntax that could come from Racket\t\t |\n| common     \t    | some project-cross-cutting things\t\t\t\t\t |\n| \t\t    | \t       \t   \t      \t\t\t\t\t\t |\n| xmain \t    | an executable for running a sequential game for n players\t\t |\n\n\nThe Distributed Version\n-----------------------\n\n| name              | purpose                                                            |\n| ----------------- | ------------------------------------------------------------------ |\n| [Xternal](https://github.com/mfelleisen/Evolution/tree/master/Xternal) | directory for playing in distributed mode \t\t\t |\n\nFiles to Migrate (into the Racket repo)\n---------------------------------------\n\n| name              | purpose                                                            |\n| ----------------- | ------------------------------------------------------------------ |\n| ToRacket/json-pretty | this must go to json library\t\t\t\t\t |\n\nReading the Code (in General)\n-----------------------------\n\nAll code files consist of three segments: \n\n1. an interface, which specifies the exported services;\n2. require dependencies for the code proper and the unit tests;\n3. an implementation, which may consist of subsections. \n\nMost module come with a fourth section: \n\n4. some test suites; section 2 indicates whether this section exits\n   with a require for rackunit. \n\nTo read any file, open it in DrRacket. We strongly recommend reading the\nprogram from the top down, starting with the provide specs. \n\nReading this Code (Specifically)\n--------------------------------\n\nMake sure to read the rules of Evolution and the FAQ. \n\nStart with doc-relations.txt. The file provides an overview of the key\npieces: the dealer, its representation of players, the external players\n(mostly strategies), and the communication layer between them. \n\nNow scan sections 1 of next.rkt, dealer.rkt, and player-external.rkt. \nThese interfaces explain the communication layer. \n\nThe doc-players.txt files comes next. The file lays out how the player\ninfrastructure is arranged.\n\nCompiling \n---------\n\nUse raco to compile the clients:\n\n\u003e raco make xmain\n\nCompiling is optional in Racket. It reduces the start-up cost.\n\nTesting\n-------\n\nUse raco to run the unit tests, e.g., \n\n\u003e raco test *.rkt \n\n\u003e ./xmain 8\n\nSee all 1s. \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfelleisen%2FEvolution","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmfelleisen%2FEvolution","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfelleisen%2FEvolution/lists"}