Chronobio编程游戏
项目描述
Chronobio
游戏目标
- 统治世界!成为最佳有机汤生产商,通过种植蔬菜、制造汤和销售来做到这一点。
- 种植多种蔬菜:土豆、芹菜...
- 雇佣工人。
- 与银行谈判。
- 承受市场经济的考验。
- 注意气候意外。
- 不要破产。
世界纪录由Aigrisculteurs团队创下,得分为8,426,796。
通信
交换
在每轮游戏开始时(一轮游戏相当于一天),将发送一个包含游戏信息和所有运营农场的JSON字典。
每个农场每天必须发送至少一个订单(其语法将在后面详细说明)。
游戏开始
一个农场在没有种植的情况下开始,并拥有10万欧元的初始资金。游戏持续5年(模拟时间)。
每天
农场将获得有机农场的补贴:每块种植地5欧元,加上30欧元给农场。
注意,农业生产可以机械化,但每台拖拉机(包括其他玩家的)都会排放温室气体。从游戏开始以来排放的气体量越多,触发气候事件的概率就越高。我们面临以下风险:
- 热浪:田地需要比原计划多浇灌两倍的水,
- 冰雹或霜冻:田地作物被摧毁,
- 洪水:汤的生产停止20天。如果生产已经停止,则这20天加到当前停止时间上,
- 火灾:田地作物被摧毁,汤的生产停止40天。如果生产已经停止,则这40天加到当前停止时间上。
每次发生气候事件时,每个田地或工厂有50%的概率受到影响。
移动
当员工步行时,他可以移动到相邻的位置。如果他想走得更远,他将需要额外一天时间穿越每个经过的位置。
当员工驾驶拖拉机时,他可以从一个位置移动到相邻的位置,下一个位置,甚至是再下一个位置。如果他想走得更远,他将需要额外一天时间穿越每三公里。
要上拖拉机,员工必须走到拖拉机那里。如果他已经在同一位置,他可以直接上车。
农场地图如下:
- 提供拖拉机并雇佣员工的地方的农场
- 田地1
- 田地2
- 田地3
- 田地4
- 田地5
- 汤工厂
可执行操作
每个操作需一行。每位员工每天最多只能执行一个动作。
花括号内的字段需要替换为其值。
{GÉRANT}
:经理编号(0){OUVRIER}
:工人编号(大于或等于1){LÉGUME}
:以下蔬菜之一PATATE
、POIREAU
、TOMATE
、OIGNON
、COURGETTE
{CHAMP}
:田地编号(1至5){SOMME}
:欧元整数金额{TRACTEUR}
:拖拉机编号(大于或等于1)
购买田地
{GÉRANT} ACHETER_CHAMP
购买了一块新田地,10,000欧元从余额中扣除。第一块购买的田地将是最初的田地1。如果田地1已经被购买,则购买尝试将转向下一个可用的田地,按田地编号顺序。
播种
{OUVRIER} SEMER {LÉGUME} {CHAMP}
在已购买的田地上播种将替换田地上现有的作物。
灌溉
{OUVRIER} ARROSER {CHAMP}
通常需要至少灌溉10次田地,才能使其可收获。但请注意气候意外情况。
出售蔬菜
{GÉRANT} VENDRE {CHAMP}
只有在当天开始时田地不再需要灌溉,才能出售田地上的蔬菜。
蔬菜在收获后出售,收获需要两天时间:经理在接下来的两天内无法执行任何操作。
蔬菜按市场价格出售,即收获以3,000欧元减去50倍当天出售相同种类蔬菜的其他田地数量的金额出售,计算所有农场。
在收获的两天内,田地可能会受到气候意外情况的影响。在这种情况下,将忽略/取消销售。
购买拖拉机
{GÉRANT} ACHETER_TRACTEUR
拖拉机价格为30,000欧元。拖拉机每月排放100 kg eqCO₂。
在一局游戏中,不能购买超过50辆拖拉机。
存储蔬菜
{OUVRIER} STOCKER {CHAMP} {TRACTEUR}
田地中的蔬菜只有在当天早上不再需要灌溉时才能储存。
可收获的田地蔬菜储存在汤料加工厂。
运输后,工厂的库存增加了2000个田地蔬菜种类。
制造汤料并出售
{工人} 烹饪
如果原材料充足,工人每天可以制造100份汤。每制作一份汤,工人会从工厂的库存中选取。他会尽量在汤中加入尽可能多的不同蔬菜。
汤料出售
- 1欧元一份的单一蔬菜汤
- 2欧元一份的双蔬菜汤
- 4欧元一份的三蔬菜汤
- 6欧元一份的四蔬菜汤
- 8欧元一份的五蔬菜汤
汤料自动运送到负责所有事务(运输、向最终客户销售)的商店。
雇佣工人
{经理} 雇佣
经理以无固定期限劳动合同(CDI)形式雇佣一名额外工人。员工第一个月的工资是1,000欧元(每月都是30天!)。每月工资增加1%(增加数向上取整)。员工在每月的第一天领取上个月的工作工资(即使员工没有上满一个月,也会支付完整工资)。在一个部分中,不能雇佣超过300人。
不能在一个部分中雇佣超过300人。
解雇工人
{经理} 解雇 {工人}
经理解雇一名工人(这是一项就业保障计划……)。经理必须支付相当于工人下个月工资的解雇赔偿金。这会超过正常工资按比例计算的工资。
借款
{经理} 借款 {金额}
经理从银行借款一定金额。借款期限为2年。要偿还的金额是借款金额乘以1.10,即每年大约5%。这笔金额每月平均偿还。
借款金额必须是正数,且小于10亿。
在一个部分中最多可以进行10次借款。
胜利或失败条件
胜利在5年模拟结束时决定。
- 无效操作会导致玩家锁定:玩家将无法进行任何操作,直到游戏结束。
- 无资金购买将导致玩家锁定。
- 无法支付开销的玩家将被锁定。
- 最终拥有最多可用资金(扣除借款总成本)的玩家获胜。
如何游戏
- 创建一个私有存储库,并给我提供访问权限(至少是读取权限,https://github.com/vpoulailleau)
- 创建一个客户端以连接到游戏服务器
- 根据提供的示例进行启发
- 您的项目必须能够通过命令行启动(使用
argparse
)-a
: 服务器的IP地址-p
: 服务器的端口号- 首先编写一个尽可能简单的代码,连接到服务器(例如,购买一个田地,然后不再进行任何操作),然后按照以下步骤进行,最后改进您的代码。
- 您的项目必须包含至少一个最小化文档,以使用户能够安装和使用您的软件
- 设置持续集成
- 自动测试(《pytest》)和测试覆盖率(应接近100%)(使用《GitHub actions》)
- 质量度量(使用《flake8》和插件,或《ruff》)以制作高质量软件
- 类型注解检查(使用《mypy》)
- 使用覆盖率、质量度量类型注解,确保拒绝降低软件质量级别的拉取请求
- 可能的话,设置预提交钩子(https://pre-commit.git-scm.cn/)
- 编写您的策略
- 首先从简单的策略开始:在一个农场种植蔬菜并出售
- 在整个项目中,确保保持高水平的质量(测试覆盖率接近100%,无错误的安全报告,类型注释已验证)
- 改进您的策略:使用所有字段,优化蔬菜生产,使用拖拉机,制作汤
自我评估
以下是一个评估项目的标准
标准 | 分数 |
---|---|
可以通过命令行启动的项目 | 0,5 |
文档(依赖项安装,启动) | 1 |
购买田地 | 0,5 |
购买拖拉机 | 0,5 |
员工 | 0,5 |
播种 | 1 |
灌溉 | 1 |
出售蔬菜 | 1 |
存储 | 1,5 |
烹饪 | 1 |
许可 | 1 |
借款 | 0,5 |
编写测试(pytest ) |
2 |
测试覆盖率测量 | 1 |
测试覆盖率百分比 | 2 |
质量度量(flake8 和插件) |
1 |
GitHub操作 | 1 |
如果覆盖率或质量下降,拒绝拉取请求/推送 | 1 |
竞赛排名 | 2 |
加分项(预提交,类型注释,类型注释验证) | 3 |
命令
安装
python3.11 -m venv venv
. venv/bin/activate
# pour jouer
pip install --upgrade chronobio
# pour développer
pip install --upgrade chronobio[dev]
启动游戏
# Dans un environnement virtuel activé
# choisir un port non utilisé
PORT=12345
# lancer le serveur
python -m chronobio.game.server -p $PORT &
# lancer le viewer
python -m chronobio.viewer -p $PORT &
# lancer un joueur
python -m mon_code -p $PORT
终止所有启动的程序
# Pour Linux et Mac, dans un environnement virtuel activé
python -m chronobio.killall
发布
python -m build
python -m twine upload dist/*
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
chronobio-0.0.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ca7c146b2557616cca8c1d43582242522aa2b25d042210bcdf8d0e30651c69a0 |
|
MD5 | 9c255d52e18390cf9a5a02a1b987b459 |
|
BLAKE2b-256 | cd965f1080b0daf5f60384ed0548a7d3d3bacb9d22b615dadd5ace12ef9ceae3 |
chronobio-0.0.1-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6c74b8a1ad75e466b10aee6bb3d1189e4614c4b3269aa44266d8d5dc7670d2fe |
|
MD5 | 063396f851e3909264b3c5b7c349a25e |
|
BLAKE2b-256 | c95f8a3359410cf58d98e724791a7de2b04d8569ecd95dc53ddd2937fd840b47 |