Min feta by-simulator!
Här ska ni få se på grejer. Igår började jag med en liten by-simulator i stil med Settlers-spelen och idag har jag gjort så att den faktiskt är värd sitt namn.
Vad menar jag då med by-simulator? Jo, programmet börjar med att generera tre olika sorters jobb/arbeten. För närvarande finns bara kock, bonde och mekaniker. Varje yrke har en lista på saker det behöver och en lista på saker det producerar. Kocken producerar mat och behöver råvaror (grain), bonden gör råvaror och behöver verktyg. Mekanikern gör verktyg. Alla personer behöver mat, vare sig de har ett yrke eller inte. (De arbetar mellan att de är 20 och 65).
Sedan genereras ett tjugotal personer med en slumpad ålder. Är de tillräckligt gamla (20 år) väljer de ett jobb. Vilket? Jo, det som byn är i behov av! När de valt sitt arbete, letar de automatiskt igenom listan på yrken och undersöker var de får sitt material ifrån. Hmm, som det är nu tror jag inte dom använder den informationen till något speciellt men den finns där iaf.
Sedan simulerar programmet byn under 150 år. Varje år skapas en ny person, och alla åldras. Är de för gamla pensioneras dom eller till och med dör.
Och trot eller ej, men efter ett par år så stabiliseras faktiskt byn och de har faktiskt hela tiden över noll i alla resurser (mat, råvaror och verktyg).
Så jävla snyggt.
Men det finns sjukt mycket mer att implementera, som till exempel att personer faktiskt föder barn så att man får en exponentiell invånarkurva, och att det finns riktiga relationer mellan föräldrar och barn. Och att folk är dåliga i början och slutet av sin karriär. Och en himla massa mer slumpfaktorer (som att alla inte dör när dom är hundra år t.ex.)
Lite kuriosa: Programmet är skrivet i Python och är på 150 rader. (Skulle inte vilja skrivit det i Java ) Det är på 684 ord, och som jämförelse är det här inlägget just NU på 332 ord. Hur ofta är ett program bara dubbelt så stort som dess beskrivning?
Om man skulle vilja lägga till ett yrke till, till exempel en vedhuggare som behöver verktyg och som producerar trä (och samtidigt ändra mekanikern så att den behöver trä) skulle man behöva lägga till en rad kod för vedhuggaren och ändra i raden som definierar mekanikern.
Vill ni testa det finns det här:
http://www.dtek.chalmers.se/~srekel/files/python/villagesim/
Källkoden medföljer Tyvärr är den inte speciellt kommenterad, men Python är ganska lätt att läsa (dock har jag använt mig av en massa list comprehensions så vet man inte vad det är kan ju det vara lite jobbigt. )
Min hemsida: http://www.srekel.net
Pocket Task Force: http://ptf.srekel.net
Kaka e gott! http://kaka.srekel.net