Exemplo n.º 1
0
def main_menu(device: AbstractIO):
    while True:
        #  50 GO SUB CLS: RANDOMIZE USR VAL "51304"
        device.cls()
        device.show_image("castle")

        #  53 PRINT AT VAL "9",VAL "7";"\{i6}korolewstwo zerna"
        #  55 PRINT AT VAL "12",VAL "9";"\{i5}1 sTART IGRY"
        #  56 PRINT AT VAL "14",VAL "9";"\{i5}2 iNSTRUKCII"
        #  57 PRINT AT VAL "16",VAL "9";"\{i5}3 aWTORY"
        #  59 PRINT AT VAL "21",VAL "9";"\{i4}1992  mOSKWA"
        device.at(9, 7).ink(6).print("КОРОЛЕВСТВО ЗЕРНА")
        device.at(12, 9).ink(5).print("1 Старт игры")
        device.at(14, 9).ink(5).print("2 Инструкции")
        device.at(16, 9).ink(5).print("3 Авторы")
        device.at(21, 9).ink(4).print("1992 Москва")

        #  60 GO SUB KEY: IF INKEY$="1" THEN GO TO VAL "80"
        #  62 IF INKEY$="2" THEN GO SUB INSTR: GO SUB KEY: GO TO VAL "50"
        #  64 IF INKEY$="3" THEN RANDOMIZE USR VAL "48541": GO SUB KEY: GO TO VAL "50"
        #  66 GO TO VAL "60"

        inkey = device.wait_key()
        if inkey == '1':
            break
        elif inkey == '2':
            instr(device)
        elif inkey == '3':
            device.show_image("credits")
Exemplo n.º 2
0
def defeat(device: AbstractIO, model: GameModel):
    # 1240 REM \#017\#001PORAVENIE\#017\#000
    # 1245 GO SUB CLS: RANDOMIZE USR VAL "54778"
    device.cls()
    device.show_image("enemies")

    # 1250 PRINT AT VAL "11",VAL "5";"\{i3}poravenie w hAMONII!!!"
    device.at(11, 5).ink(3).print("ПОРАЖЕНИЕ В Хамонии!!!")

    # 1260 LET UBITO=INT (ZAHW*(0.8+RND/5)):
    #   LET NAS=NAS+ZAHW-UBITO:
    #   LET POGIB=POGIB+UBITO
    ubito = int(model.warriors * (0.8 + random() / 5))
    model.population += model.warriors - ubito
    model.dead_in_battles += ubito

    # 1270 PRINT AT VAL "13",SGN PI;"pOGIBLO - ";UBITO;" WOINOW"
    device.at(13, 1).print(f"Погибло - {ubito} воинов")

    # 1280 LET ZAHW=BIN :
    #   LET OST=NAS-Z-INT (ZAS/PROIZ)
    model.warriors = 0
    model.ost = model.population - model.defenders - model.zas // model.sower_productivity

    # 1285 GO SUB KEY: GO SUB CLS
    device.wait_key()
    device.cls()
Exemplo n.º 3
0
def game_results(device: AbstractIO, model: GameModel, result):
    # 1980 REM \#017\#001OITOG\#017\#000
    # 1985 GO SUB CLS
    device.cls()

    # 1987 RANDOMIZE USR VAL "64042"
    device.show_image("game_end")

    # 1990 IF OI=SGN PI THEN
    #   PRINT AT VAL "8",INT PI;"\{i5}wA[E PRAWLENIE OKON^ENO!!!\{i7}";
    #       AT VAL "10",VAL "2";"wY UPRAWLQLI STRANOJ ";TIME;" LET":
    #   PRINT " zA \\TO WREMQ UMERLO OT GOLODA";
    #       AT VAL "12",VAL "8";UMERWSEGO;" ^ELOWEK"
    if result:
        device.at(8, 3).ink(5).print("Ваше правление окончено!!!").ink(7)
        device.at(10, 2).print(f"Вы управляли страной {model.time} лет")
        device.print(" За это время умерло от голода ")
        device.at(12, 8).print(f"{model.dead_total} человек")

    # 2000 LET BOG=ZEML*CENA+ZERNO
    wealth = model.wealth()

    # 2010 IF (BOG>NBOG) AND (OI=1) THEN
    #   PRINT AT VAL "14",BIN ;"wY UWELI^ILI BOGATSTWO W ";INT (BOG/NBOG);" RAZ!":
    #       GO TO VAL "2030"
    if result:
        if wealth > model.initial_wealth:
            device.at(14, 0).print(f"Вы увеличили богатство в {wealth // model.initial_wealth} раз!")
        # 2020 IF OI=SGN PI THEN
        #   PRINT AT VAL "14",VAL "5";"wY RAZORILI STRANU!!!"
        else:
            device.at(14, 5).print("Вы разорили страну!!!")

    # 2030 IF OI=SGN PI THEN
    #   PRINT AT VAL "17",VAL "7";"\{i4}do swidaniq!!!":
    #   GO TO VAL "2045"
    if result:
        device.at(17, 7).ink(4).print("До свидания!!!")

    # 2040 IF OI=BIN THEN
    #   PRINT AT VAL "9",BIN ;"\{i2}tAKIH NADO GNATX IZ PRAWITELEJ!!";
    #       AT VAL "11",SGN PI;"wY EDWA PRODERVALISX U WLASTI";
    #       AT VAL "12",VAL "10";TIME;" LET":
    #   PRINT AT VAL "14",BIN ;"\{i2}I UMORILI GOLODOM ";UMERWSEGO;" ^ELOWEK":
    #   PRINT AT VAL "16",VAL "5";"\{i2}kUDA \\TO GODITSQ?!"
    else:
        device.at(9, 0).ink(2).print("Таких надо гнать из правителей!!")
        device.at(12, 1).print("Вы едва продержались у власти")
        device.at(12, 10).print(f"{model.time} лет")
        if model.dead_total > 0:
            device.at(14, 0).ink(2).print(f"и уморили голодом {model.dead_total} человек")
        device.at(16, 5).ink(2).print("Куда это годится?!")

    # 2045 GO SUB KEY
    device.wait_key()
Exemplo n.º 4
0
def victory(device: AbstractIO, model: GameModel):
    # 1150 REM \#017\#001POBEDA\#017\#000
    # 1155 GO SUB CLS: RANDOMIZE USR VAL "54778"
    device.cls()
    device.show_image("enemies")

    # 1160 PRINT AT VAL "11",VAL "2";"\{i6}w hAMONII ODERVANA pobeda!!!"
    device.at(11, 2).ink(6).print("В Хамонии одержана победа!!!")

    # 1170 LET T(INT PI)=INT (NAS*(RND/3+0.3)):
    #   LET T(SGN PI)=INT (ZAHW*(FN S(VAL "10")+VAL "4")):
    #   LET T(VAL "2")=INT (ZEML*(RND/VAL "2"+0.3)):
    #   LET NAS=NAS+T(INT PI):
    #   LET ZEML=ZEML+T(VAL "2"):
    #   LET ZERNO=ZERNO+T(SGN PI)

    captured_people = int(model.population * (random() / 3 + 0.3))
    taken_grain: int = model.warriors * randint(1, 10) + 4
    annexed_territory = int(model.land * (random() / 2 + 0.3))

    model.population += captured_people
    model.land += annexed_territory
    model.grain += taken_grain

    # 1180 LET UBITO=INT (ZAHW*(RND/5+0.3)):
    #   LET POGIB=POGIB+UBITO:
    #   LET NAS=NAS+ZAHW-UBITO
    ubito = int(model.warriors * (random() / 5 + 0.3))
    model.dead_in_battles += ubito
    model.population += model.warriors - ubito

    # 1190 PRINT AT VAL "13",BIN ;"u WRAGA ZAHWA^ENO:"
    device.at(13, 0).print("У врага захвачено:")

    # 1200 PRINT AT VAL "14",SGN PI;"zERNA - ";T(1);" BU[ELEJ":
    #   PRINT " zEMLI - ";T(2);" AKROW": PRINT " pLENNYH - ";T(3);" ^ELOWEK"
    device.at(14, 1).print(f"Зерна - {taken_grain} бушелей")
    device.print(f"Земли - {annexed_territory} акров")
    device.print(f"Пленных - {captured_people} человек")

    # 1210 PRINT AT VAL "18",VAL "6";"iZ ";ZAHW;" WOINOW ";UBITO;AT VAL "19",VAL "10";"PALO SMERTX\@ HRABRYH!"
    device.at(
        18,
        6).print(f"Из {model.warriors} воинов {ubito} пало сметрью храбрых!")

    # 1220 LET ZAHW=BIN :
    #   LET OST=NAS-Z-INT (ZAS/PROIZ)
    model.warriors = 0
    model.ost = model.population - model.defenders - int(
        model.zas / model.sower_productivity)

    # 1225 GO SUB KEY:
    #   GO SUB CLS
    device.wait_key()
    device.cls()
Exemplo n.º 5
0
def attack_by_enemies(device: AbstractIO, model: GameModel):
    # 1910 REM \#017\#001ATAKA\#017\#000
    # 1920 RANDOMIZE USR VAL "54778":
    #   PRINT AT VAL "11",VAL "7";"\{i3}gorod atakowan!!!":
    #   GO SUB KEY:
    #   LET I=INT (INT (10*RND)*0.1)+0.5:
    #   LET J=I+INT (INT (10*RND)*0.15)+0.5
    device.show_image("enemies")
    device.at(11, 7).ink(3).print("ГОРОД АТАКОВАН!!!")
    device.wait_key()

    i = int(int(10 * random()) * 0.1) + 0.5
    j = i + int(int(10 * random()) * 0.15) + 0.5

    # 1930 IF WRAGI>Z*J THEN
    #   PRINT AT VAL "13",BIN ;"gOROD PAL,WEDX EGO ZA]I]ALO MALO":
    #   PRINT AT VAL "14",VAL "13";"SOLDAT":
    #   GO SUB KEY:
    #   GO SUB CLS:
    #   LET U=SGN PI:
    #   LET OI=BIN :
    #   GO SUB OITOG:
    #   RETURN
    if model.enemies > model.defenders * j:
        device.at(13, 0).print("Город пал, ведь его защищало мало")
        device.at(14, 13).print("солдат")
        device.wait_key()
        device.cls()
        raise EndGameException(True)
    else:
        # 1940 IF Z*J>WRAGI THEN
        #   PRINT AT VAL "13",INT PI;"NO ATAKA OTBITA! uRA-A-A!!!"
        device.at(13, 1).print("Но атака отбита! Ура-а-а!!!")

        # 1950 IF FN S(3)=SGN PI THEN
        #   PRINT AT VAL "15",INT PI;"pROIZO[LA RE[A\@]AQ BITWA!!!"
        if randint(1, 3) == 1:
            device.at(15, 1).print("Произошла решающая битва!!!")

        # 1960 LET POGIBZ=INT (WRAGI/3)+INT (RND*Z/6):
        #   LET POGIB=POGIB+POGIBZ:
        #   LET NAS=NAS-POGIB:
        #   LET RASST=25+FN S(20):
        #   LET WRAGI=INT (NAS/4)+INT (RND*NAS/5)
        pogibz = model.enemies // 3 + int(random() * model.defenders / 6)
        model.dead_in_battles += pogibz
        model.population -= model.dead_in_battles
        model.distance_to_enemies = randint(26, 45)
        model.enemies = int(model.population / 4) + int(
            random() * model.population / 5)

        # 1965 GO TO KEY:
        #   GO SUB CLS
        device.wait_key()
        device.cls()
Exemplo n.º 6
0
def events(device: AbstractIO, model: GameModel):
    # 1550 REM \#017\#001NN\#017\#000
    # 1555 GO SUB CLS
    device.cls()

    # 1560 LET BEV=INT (RND*INT (NAS/4))
    model.refugees = int(random() * (model.population // 4))

    # 1570 IF (RASST<20) AND (RND>.5) THEN
    #   LET BEV=BEV+INT (RND*BEV):
    #   PRINT AT VAL "11",INT PI;"pRITOK BEVENCEW SPASA\@]IHSQ";AT VAL "12",VAL "7";"OT ZAHWAT^IKOW!!!":
    #   GO SUB KEY:
    #   GO SUB CLS
    if model.distance_to_enemies < 20 and random() > 0.5:
        model.refugees += int(random() * model.refugees)
        device.at(11, 3).print("Приток беженцев, спасающихся").at(12, 7).print("от захватчиков!!!")
        device.wait_key()
        device.cls()

    # 1580 LET NAS=NAS+BEV
    model.population += model.refugees

    # 1590 IF (K<10) OR (UMERWSEGO>NAS*10) THEN
    #   RANDOMIZE USR VAL "55936": PRINT AT VAL "11",SGN PI;"nAROD WOSSTAL PROTIW TIRANA!!!":
    #   GO SUB KEY:
    #   GO SUB CLS:
    #   GO TO VAL "1610"
    if model.feeding_per_worker < 10 or model.dead_total > model.population * 10:
        device.show_image("riot")
        device.at(11, 1).print("Народ восстал против тирана!!!")
        device.wait_key()
        device.cls()

        # 1610 IF (Z>(NAS-Z)/3) AND (Z<UMERGOL) THEN
        #   RANDOMIZE USR "54778":
        #   PRINT AT VAL "11",SGN PI;"nO WOJSKA PODAWILI WOSSTANIE!":
        #   LET WOSST=(NAS-Z)*INT (RND/5+0.1):
        #   LET POGIB=POGIB+WOSST:
        #   LET NAS=NAS-WOSST:
        #   PRINT AT VAL "12",VAL "5";"w ULI^NYH BOQH POLEGLO";AT VAL "13",VAL "8";WOSST;" VITELEJ":
        #   GO SUB KEY:
        #   GO SUB CLS:
        #   GO TO VAL "1630"
        if (model.population - model.defenders) / 3 < model.defenders < model.dead_starvation:
            device.show_image("enemies")
            device.at(11, 1).print("Но войска подавили восстание!")
            rebels = (model.population - model.defenders) * int(random() / 5 + 0.1)
            model.dead_in_battles += rebels
            model.population -= rebels

            device.at(12, 5).print(f"В уличных боях полегло {rebels} жителей")
            device.wait_key()
            device.cls()
        else:
            # 1620 PRINT AT VAL "11",VAL "4";"wOJSKA PERE[LI NA STORONU";AT VAL "12",VAL "6";"WOSSTAW[EGO NARODA":
            #   PRINT AT VAL "14",VAL "5";"\{i4}monarhiq swergnuta!!!":
            #   GO SUB KEY:
            #   GO SUB CLS:
            #   LET U=SGN PI:
            #   LET OI=BIN :
            #   GO SUB OITOG:
            #   RETURN
            device.at(11, 4).print("Войска перешли на сторону").at(12, 6).print("восставшего народа")
            device.at(14, 5).ink(4).print("МОНАРХИЯ СВЕРГНУТА!!!")
            device.wait_key()
            device.cls()
            raise EndGameException(False)

    # 1600 GO TO VAL "1630"
    # 1630 LET UMER=UMER+INT (RND*2.5/100*NAS):
    #   LET ROD=INT (RND*(4+K/20)/100*NAS)
    model.dead_natural_cases += int(random() * 2.5 / 100 * model.population)
    model.born = int(random() * (4 + model.feeding_per_worker / 20) / 100 * model.population)

    # 1640 IF FN S(VAL "12")=SGN PI THEN
    #   LET CHUMA=INT (RND*50+VAL "5"):
    #   RANDOMIZE USR VAL "53620":
    #   PRINT AT VAL "11",INT PI;"~UMA UNESLA ";CHUMA;"% NASELENIQ!":
    #   LET UMER=UMER+INT (NAS*CHUMA/100):
    #   GO SUB KEY:
    #   GO SUB CLS
    if randint(1, 12) == 1:
        plague = int(random() * 50 + 5)
        device.show_image("graveyard")
        device.at(11, 3).print(f"Чума унесла {plague}% населения!")
        model.dead_natural_cases += model.population * plague // 100
        device.wait_key()
        device.cls()

    # 1650 IF FN S(VAL "100")<VAL "5" THEN
    #   RANDOMIZE USR VAL "46225":
    #   PRINT AT VAL "11",VAL "4";"dEMOGRAFI^ESKIJ WZRYW!!!":
    #   LET DEM=INT ((RND/VAL "2"+0.5)*NAS):
    #   LET ROD=ROD+DEM:
    #   GO SUB KEY:
    #   GO SUB CLS
    if randint(1, 100) < 5:
        device.show_image("baby_boom")
        device.at(11, 4).print("Демографический взрыв!!!")
        dem = int((random() / 2 + 0.5) * model.population)
        model.born += dem
        device.wait_key()
        device.cls()

    # 1660 IF (FN S(VAL "20"))=VAL "5" THEN
    #   RANDOMIZE USR VAL "52462":
    #   PRINT AT VAL "11",VAL "6";"\{i2}pova - a - a - ar!!!":
    #   LET SGOR=INT (NAS*(RND/3+0.3)):
    #   LET SGORZER=INT (ZERNO*(RND/4+0.1)):
    #   GO SUB KEY:
    #   GO SUB CLS:
    #   GO TO VAL "1666"
    if randint(1, 20) == 5:
        device.show_image("fire")
        device.at(11, 6).ink(2).print("ПОЖА - А - А - АР!!!")
        dead_in_fire = int(model.population * (random() / 3 + 0.3))
        burnt_down_grain = int(model.grain * (random() / 4 + 0.1))
        device.wait_key()
        device.cls()

        # 1666 LET UMER=UMER+SGOR:
        #   LET ZERNO=ZERNO-SGORZER:
        #   RANDOMIZE USR VAL "53620":
        #   PRINT AT VAL "11",BIN ;"w OGNE POGIBLO ";SGOR;" ^ELOWEK":
        #   PRINT AT VAL "13",BIN ;"sGORELO NA SKLADAH ";SGORZER;AT VAL "14",VAL "11";"BU[.ZERNA":
        #   GO SUB KEY:
        #   GO SUB CLS
        model.dead_natural_cases += dead_in_fire
        model.grain -= burnt_down_grain
        device.show_image("graveyard")
        device.at(11, 0).print(f"В огне погибло {dead_in_fire} человек")
        device.at(13, 0).print(f"Сгорело на складах {burnt_down_grain}").at(14, 11).print("буш. зерна")
        device.wait_key()
        device.cls()

    # 1663 GO TO VAL "1670"
    # 1670 IF FN S(VAL "10")=VAL "2" THEN
    #   LET AGENT=AGENT+SGN PI:
    #   RANDOMIZE USR VAL "45067":
    #   PRINT AT VAL "11",SGN PI;"w GOROD PROBRALSQ DIWERSANT":
    #   GO SUB KEY:
    #   GO SUB CLS:
    if randint(1, 10) == 2:
        model.agent += 1
        device.show_image("saboteur")
        device.at(11, 1).print("В город пробрался диверсант")
        device.wait_key()
        device.cls()

    # 1680 IF (AGENT<=BIN ) OR (Z>=NAS/VAL "10") THEN GO TO VAL "1720"
    if model.agent > 0 and model.defenders < model.population / 10:
        # 1690 RANDOMIZE USR VAL "52462":
        #   PRINT AT VAL "11",VAL "2";"dIWERSIQ!!!pODOVVENY HLEBNYE";AT VAL "12",VAL "13";"SKLADY.":
        #   LET SGORZER=INT (ZERNO*(RND/3+0.3)):
        #   LET ZERNO=ZERNO-SGORZER:
        #   PRINT AT VAL "14",VAL "2";"sGORELO ";SGORZER;" BU[.ZERNA":
        #   GO SUB KEY:
        #   GO SUB CLS
        device.show_image("fire")
        device.at(11, 2).print("Диверсия!!! Подожжены хлебные").at(12, 13).print("склады.")
        burnt_down_grain = int(model.grain * (random() / 3 + 0.3))
        model.grain -= burnt_down_grain
        device.at(14, 2).print(f"Сгорело {burnt_down_grain} буш. зерна")
        device.wait_key()
        device.cls()

        # 1700 IF Z>NAS/VAL "20" THEN
        #   PRINT AT VAL "11",VAL "6";"dIWERSANT SHWA^EN!!!":
        #   LET AGENT=AGENT-SGN PI:
        #   GO SUB KEY:
        #   GO SUB CLS:
        #   GO TO VAL "1720"
        if model.defenders > model.population / 20:
            device.at(11, 6).print("Диверсант схвачен!!!")
            model.agent -= 1
            device.wait_key()
            device.cls()
        else:
            # 1710 RANDOMIZE USR VAL "45067":
            #   PRINT AT VAL "11",VAL "6";"dIWERSANT SKRYLSQ!!!":
            #   GO SUB KEY:
            #   GO SUB CLS
            device.show_image("saboteur")
            device.at(11, 6).print("Диверсант скрылся!!!")
            device.wait_key()
            device.cls()

    # 1720 IF (AGENT<=BIN ) OR (Z<=NAS/VAL "2") THEN GO TO VAL "1740"
    if model.agent > 0 and model.defenders > model.population / 2:
        # 1730 IF RND<0.5 THEN
        #   PRINT AT VAL "11",VAL "4";"pOJMAN WRAVESKIJ AGENT!!!":
        #   LET AGENT=AGENT-SGN PI:
        #   GO SUB KEY:
        #   GO SUB CLS
        if random() < 0.5:
            device.at(11, 4).print("Пойман вражеский агент!!!")
            model.agent -= 1
            device.wait_key()
            device.cls()

    # 1740 IF (K>=VAL "60") AND (NAS-Z-INT (ZAS/PROIZ)>=NAS/VAL "5") THEN
    #   RANDOMIZE USR VAL "47383":
    #   PRINT AT VAL "11",BIN ;"tUNEQDSTWU\@]IE \\LEMENTY ZANQLISX  SAMOGONOWARENIEM IZ HLEBNYH";
    #       AT VAL "13",VAL "12";"IZLI[KOW";AT VAL "14",SGN PI;"pONIVAETSQ PROIZWODITELXNOSTX!":
    #   LET PROIZ=PROIZ-VAL "2":
    #   GO SUB KEY:
    #   GO SUB CLS
    if (model.feeding_per_worker >= 60 and
            model.population - model.defenders - model.zas // model.sower_productivity >= model.population / 5):
        device.show_image("parasites")
        device.at(11, 0).print("Тунеядствующие элементы занялись самогоноварением из хлебных")
        device.at(13, 12).print("излишков")
        device.at(14, 1).print("Понижается производительность!")
        model.sower_productivity -= 2
        device.wait_key()
        device.cls()

    # 1750 IF FN S(VAL "15")=VAL "8" THEN
    #   RANDOMIZE USR VAL "43909":
    #   PRINT AT VAL "11",VAL "2";"wNEDRENIE NOWYH ORUDIJ TRUDA    PODNQLO PROIZWODITELXNOSTX!":
    #   LET PROIZ=PROIZ+VAL "2":
    #   LET PREDEL=PREDEL+VAL "5":
    #   GO SUB KEY:
    #   GO SUB CLS
    if randint(1, 15) == 8:
        device.show_image("tools")
        device.at(11, 2).print("Внедрение новых орудий труда    подняло производительность!")
        model.sower_productivity += 2
        model.max_sower_productivity += 5
        device.wait_key()
        device.cls()

    # 1760 IF FN S(VAL "50")<>VAL "50" THEN GO TO VAL "1800"
    if randint(1, 50) == 50:
        # 1770 PRINT AT VAL "11",VAL "5";"\{i6}dworcowyj pereworot!!!"
        device.at(11, 5).ink(6).print("ДВОРЦОВЫЙ ПЕРВОРОТ!!!")

        # 1780 IF (FN S(VAL "2")=SGN PI) OR (Z<NAS/VAL "10") THEN
        #   PRINT AT VAL "13",VAL "2";"wY SWERGNUTY S PRESTOLA!!!":
        #   LET U=SGN PI:
        #   LET OI=SGN PI:
        #   GO SUB KEY:
        #   GO SUB CLS:
        #   GO SUB OITOG:
        #   RETURN
        if randint(1, 2) == 1 or model.defenders < model.population / 10:
            device.at(13, 2).print("Вы свергнуты с престола!!!")
            device.wait_key()
            device.cls()
            raise EndGameException(True)
        else:
            # 1790 PRINT AT VAL "13",VAL "2";"NO WERNYE wAM WOJSKA RAZBILI";AT VAL "14",VAL "11";"MQTEVNIKOW":
            #   GO SUB KEY:
            #   GO SUB CLS
            device.at(13, 2).print("но верные Вам войска разбили").at(14, 11).print("мятежников")
            device.wait_key()
            device.cls()

    # 1800 IF (TIME<=10) OR (ZAS<>ZEML) THEN GO TO VAL "1820"
    if model.time > 10 and model.zas == model.land:
        # 1810 IF IST<VAL "4" THEN
        #   LET IST=IST+SGN PI:
        #   RANDOMIZE USR VAL "62884":
        #   PRINT AT VAL "11",VAL "4";"iSTO]ENIE ZEMELX SNIVAET";AT VAL "12",VAL "10";"UROVAJNOSTX":
        #   GO SUB KEY:
        #   GO SUB CLS:
        #   GO TO VAL "1830"
        if model.ist < 4:
            model.ist += 1
            device.show_image("bad_harvest")
            device.at(11, 4).print("Истощение земель снижает").at(12, 10).print("урожайность")
            device.wait_key()
            device.cls()
    else:
        # 1820 IF (ZAS<ZEML/VAL "2") AND (IST> -VAL "2") THEN
        #   LET IST=IST-SGN PI:
        #   RANDOMIZE USR VAL "58252":
        #   PRINT AT VAL "11",INT PI;"oTWEDENIE BOLX[IH PLO]ADEJ";AT VAL "12",VAL "4";"POD PARY POWY[AET UROVAJ":
        #   GO SUB KEY:
        #   GO SUB CLS
        if model.zas < model.land / 2 and model.ist > -2:
            model.ist -= 1
            device.show_image("excellent_harvest")
            device.at(11, 3).print("Отведение больших площадей").at(12, 4).print("под пары повышает урожай")
            device.wait_key()
            device.cls()

    # 1830 IF (FN S(VAL "15")=SGN PI) AND (AGENT>BIN ) THEN
    #   LET PROPALO=INT ((RND/VAL "5"+0.1)*ZERNO):
    #   RANDOMIZE USR VAL "47383":
    #   PRINT AT VAL "11",INT PI;"gRUPPOJ RASHITITELEJ POD";AT VAL "12",VAL "2";"PREDWODITELXSTWOM DIWERSANTA";
    #       AT VAL "13",INT PI;"POHI]ENO ";PROPALO;" BU[.ZERNA":
    #   LET ZERNO=ZERNO-PROPALO:
    #   GO SUB KEY:
    #   GO SUB CLS
    if randint(1, 15) == 1 and model.agent > 0:
        stolen = int((random() / 5 + 0.1) * model.grain)
        device.show_image("parasites")
        device.at(11, 3).print("Группой расхитителей под")
        device.at(12, 2).print(f"предводительством диверсанта похищено {stolen} буш. зерна")
        model.grain -= stolen
        device.wait_key()
        device.cls()

    # 1840 LET NAS=NAS-UMER+ROD
    model.population += model.born - model.dead_natural_cases
Exemplo n.º 7
0
def harvest(device: AbstractIO, model: GameModel):
    # 1300 REM \#017\#001UBORKA\#017\#000
    # 1305 GO SUB CLS
    device.cls()

    # 1320 IF OST>INT (ZAS/PROIZ) THEN
    #   RANDOMIZE USR VAL "47383":
    #   PRINT AT VAL "11",VAL "5";"bOLX[OE ^ISLO TUNEQDCEW":
    #   PRINT AT VAL "12",VAL "6";"RAZWRA]AET HLEBOROBOW":
    #   LET PROIZ=PROIZ-SGN PI:
    #   GO SUB KEY:
    #   GO SUB CLS
    if model.ost > model.zas // model.sower_productivity:
        device.show_image("parasites")
        device.at(11, 5).print("Большое число тунеядцев")
        device.at(12, 6).print("развращает хлеборобов")
        model.sower_productivity -= 1
        device.wait_key()
        device.cls()

    # 1330 IF (OST<NAS/VAL "15") AND (PROIZ<PREDEL) THEN
    #   RANDOMIZE USR VAL "43909":
    #   PRINT AT VAL "11",SGN PI;"pOSTOQNNYJ TRUD WYRABATYWAET";AT VAL "12",VAL "10";"SNOROWKU":
    #   LET PROIZ=PROIZ+SGN PI:
    #   GO SUB KEY:
    #   GO SUB CLS
    if model.ost * 15 < model.population and model.sower_productivity < model.max_sower_productivity:
        device.show_image("tools")
        device.at(11, 1).print("Постоянный труд вырабатывает сноровку")
        model.sower_productivity += 1
        device.wait_key()
        device.cls()

    # 1340 IF K<VAL "20" THEN
    #   PRINT AT VAL "11",VAL "4";"pLOHOE PITANIE SNIVAET":
    #   PRINT AT VAL "12",VAL "5";" PROIZWODITELXNOSTX!":
    #   LET PROIZ=PROIZ-INT (30/K):
    #   GO SUB KEY:
    #   GO SUB CLS
    if model.feeding_per_worker < 20:
        device.at(11, 4).print("Плохое питание снижает")
        device.at(12, 5).print(" производительность!")
        model.sower_productivity -= 30 // model.feeding_per_worker
        device.wait_key()
        device.cls()

    # 1350 IF PROIZ<=BIN THEN LET PROIZ=INT PI
    if model.sower_productivity <= 0:
        model.sower_productivity = 1

    # 1360 IF (K>VAL "30") AND (PROIZ<PREDEL) THEN
    #   PRINT AT VAL "11",SGN PI;"nA HORO[IH HAR^AH I RABOTAETSQ";
    #       AT VAL "12",VAL "13";"LU^[E":
    #   LET PROIZ=PROIZ+SGN PI:
    #   GO SUB KEY:
    #   GO SUB CLS
    if model.feeding_per_worker > 30 and model.sower_productivity < model.max_sower_productivity:
        device.at(11, 1).print("На хороших харчах и работается")
        device.at(12, 13).print("лучше")
        model.sower_productivity += 1
        device.wait_key()
        device.cls()

    # 1370 LET UROV=SGN PI+FN S(VAL "6")-IST:
    #   LET J=FN S(VAL "21")
    model.grain_yield = randint(2, 7)
    j = randint(1, 21)

    # 1380 IF J>=VAL "18" THEN LET UROV=VAL "10"
    if j >= 18:
        model.grain_yield = 10

    # 1390 IF J<=INT PI THEN LET UROV=SGN PI
    if j <= 3:
        model.grain_yield = 1

    # 1400 IF UROV<SGN PI THEN LET UROV=SGN PI
    if model.grain_yield < 1:
        model.grain_yield = 1

    # 1410 IF UROV>VAL "5" THEN
    #   RANDOMIZE USR VAL "58252":
    #   PRINT AT VAL "11",VAL "7";"oTLI^NYJ UROVAJ!!!":
    #   GO SUB KEY:
    #   GO SUB CLS
    if model.grain_yield > 5:
        device.show_image("excellent_harvest")
        device.at(11, 7).print("Отличный урожай!!!")
        device.wait_key()
        device.cls()

    # 1420 LET I=BIN :
    #   IF UROV<VAL "2" THEN
    #       LET I=FN S(INT PI)
    i = 0
    if model.grain_yield < 2:
        i = randint(1, 3)

    # 1430 IF I=SGN PI THEN
    #   RANDOMIZE USR VAL "62884":
    #   PRINT AT VAL "11",INT PI;"zASUHA POGUBILA UROVAJ!!!":
    #   GO SUB KEY:
    #   GO SUB CLS
    if i == 1:
        device.show_image("bad_harvest")
        device.at(11, 3).print("Засуха погубила урожай!!!")
        device.wait_key()
        device.cls()

    # 1440 IF I=VAL "2" THEN
    #   RANDOMIZE USR VAL "60568":
    #   PRINT AT VAL "11",BIN ;"pYLEWYE BURI POGUBILI UROVAJ!!!":
    #   GO SUB KEY:
    #   GO SUB CLS
    if i == 2:
        device.show_image("dust_storms")
        device.at(11, 0).print("Пылевые бури погубили урожай!!!")
        device.wait_key()
        device.cls()

    # 1450 IF I=INT PI THEN
    #   RANDOMIZE USR VAL "59410":
    #   PRINT AT VAL "11",BIN ;"lIWNEWYE DOVDI POGUBILI UROVAJ!!":
    #   GO SUB KEY:
    #   GO SUB CLS
    if i == 3:
        device.show_image("rains")
        device.at(11, 0).print("Ливневые дожди погубили урожай!!")
        device.wait_key()
        device.cls()

    # 1460 LET SBOR=ZAS*UROV
    model.harvest = model.zas * model.grain_yield

    # 1470 IF RND>0.7 THEN
    #   LET SAR=4+FN S(8):
    #   LET SBOR=SBOR-INT (SBOR/SAR):
    #   RANDOMIZE USR VAL "61726":
    #   PRINT AT VAL "11",SGN PI;"sARAN^A POGUBILA 1/";SAR;" UROVAQ!":
    #   GO SUB KEY:
    #   GO SUB CLS
    if random() > 0.7:
        sar = randint(5, 12)
        model.harvest -= model.harvest // sar
        device.show_image("locrust")
        device.at(11, 1).print(f"Саранча погубила 1/{sar} урожая!")
        device.wait_key()
        device.cls()

    # 1480 LET ZERNO=ZERNO+SBOR:
    #   LET J=FN S(5)
    model.grain += model.harvest
    j = randint(1, 5)

    # 1490 IF J=SGN PI THEN
    #   LET KRYS=INT (ZERNO/(FN S(10)+7)):
    #   RANDOMIZE USR VAL "57094":
    #   PRINT AT VAL "11",VAL "4";"nA GOROD NAPALI KRYSY!!!":
    #   LET ZERNO=ZERNO-KRYS:
    #   GO SUB KEY:
    #   GO SUB CLS
    if j == 1:
        model.rats = model.grain // randint(7, 17)
        device.show_image("rats")
        device.at(11, 4).print("На город напали крысы!!!")
        model.grain -= model.rats
        device.wait_key()
        device.cls()
Exemplo n.º 8
0
def feeding(device: AbstractIO, model: GameModel):
    # 700 REM \#017\#001KORMEVKA\#017\#000
    # 710 LET K=-1: IF OST<=NOT PI THEN RETURN
    if model.ost <= 0:
        return

    while True:
        # 720 PRINT AT VAL "20",SGN PI;"mOVNO DATX ";INT (ZERNO/OST);" BU[ NA ^ELOWEKA":
        #   PRINT AT VAL "21",VAL "6";"sKOLXKO DA[X?"
        device.at(
            20,
            1).print(f"Можно дать {model.grain // model.ost} буш на человека")
        device.at(21, 6).print("Сколько дать?")

        # 730 GO SUB INPUT:
        #   LET K=VAL F$:
        #   GO SUB PUS:
        #   IF K<BIN THEN :
        #       GO TO VAL "720"
        try:
            model.feeding_per_worker = int(sub_input(device, model))
        except ValueError:
            continue

        # 740 IF K*OST>ZERNO THEN
        #   PRINT AT VAL "20",INT PI;"u NAS NET STOLXKO ZERNA!!!":
        #   GO SUB KEY:
        #   GO SUB PUS:
        #   GO TO VAL "720"
        if model.feeding_per_worker * model.ost > model.grain:
            device.print("У нас нет столько зерна!!!")
            device.wait_key()
            continue

        break

    # 750 LET ZERNO=ZERNO-K*OST
    model.grain -= model.feeding_per_worker * model.ost

    # 760 IF K<VAL "20" THEN
    #   LET UMERGOL=OST*INT (SGN PI-K/VAL "20"):
    #   LET UMERWSEGO=UMERWSEGO+UMERGOL:
    #   LET NAS=NAS-UMERGOL
    if model.feeding_per_worker < 20:
        model.dead_starvation = model.ost * (1 -
                                             model.feeding_per_worker // 20)
        model.dead_total += model.dead_starvation
        model.population -= model.dead_starvation

    # 770 IF NAS<=NOT PI OR K=NOT PI THEN
    #   GO SUB CLS:
    #   RANDOMIZE USR VAL "53620":
    #   PRINT AT VAL "11",INT PI;"\{i2}ty UMORIL WSEH GOLODOM!!!":
    #   GO SUB KEY:
    #   LET OI=BIN :
    #   LET U=SGN PI:
    #   GO SUB OITOG:
    #   RETURN
    if model.population <= 0 or model.feeding_per_worker == 0:
        device.cls()
        device.show_image("graveyard")
        device.at(11, 3).ink(2).print("Ты уморил всех голодом!!!")
        device.wait_key()
        raise EndGameException(False)

    # 780 IF K<=VAL "10" THEN
    #   PRINT AT VAL "20",VAL "10";"\{i3}du{egub!!!":
    #   GO SUB KEY:
    #   GO SUB PUS:
    #   GO TO VAL "800"
    if model.feeding_per_worker <= 10:
        device.at(10, 20).ink(3).print("ДУШЕГУБ!!!")
        device.wait_key()
        empty_lines(device)

    # 790 IF K<=VAL "21" THEN
    #   PRINT AT VAL "20",VAL "10";"\{i5}vadina!!!":
    #   GO SUB KEY:
    #   GO SUB PUS
    elif model.feeding_per_worker <= 21:
        device.at(20, 10).ink(5).print("ЖАДИНА!!!")
        device.wait_key()
        empty_lines(device)

    # 800 IF K>VAL "20" THEN
    #   LET UMERGOL=BIN
    elif model.feeding_per_worker > 20:
        model.dead_starvation = 0

    # 810 IF K>VAL "70" THEN
    #   PRINT AT VAL "20",BIN ;"\{i6}w..WY...wypx..pxem!!!za tebq!!!":
    #   GO SUB KEY:
    #   GO SUB PUS:
    #   GO TO VAL "830"
    elif model.feeding_per_worker > 70:
        device.at(20, 0).ink(6).print("В..вы...ВЫПЬ..ПЬЕМ!!!ЗА ТЕБЯ!!!")
        device.wait_key()
        empty_lines(device)

    # 820 IF K>VAL "50" THEN
    #   PRINT AT VAL "20",VAL "5";"\{i4}bLAGODETELX ty NA[!!!":
    #   GO SUB KEY:
    #   GO SUB PUS
    elif model.feeding_per_worker > 50:
        device.at(20, 5).ink(4).print("Благодетель ты НАШ!!!")
        device.wait_key()
        empty_lines(device)