Бейсик. Игра Жизнь

Поделиться
HTML-код
  • Опубликовано: 13 сен 2024
  • Изначально эта программа писалась мной в 8-9 классе для Корвета.
    Впоследствии была доработана для IBM PC.
    Поэтому где-то номера строк есть, а где-то нет.
    На Корвете она работала, конечно, очень медленно.
    Кстати, EXE файл компилирую для ускорения выполнения.
    Кому нужен текст для разбора - пишите.

Комментарии • 14

  • @AlexPayneKU
    @AlexPayneKU  Месяц назад

    150 поколений жизни фигуры r-пентамино.
    Изначально эта программа писалась мной в 8-9 классе для Корвета.
    Впоследствии была доработана для IBM PC.
    Поэтому где-то номера строк есть, а где-то нет.
    На Корвете она работала, конечно, очень медленно.
    Кстати, EXE файл компилирую для ускорения выполнения.
    Кому нужен текст для разбора - пишите.

    • @LithiumDeuteride-6
      @LithiumDeuteride-6 Месяц назад +1

      Васик?! Не... хотя 20 лет назад на 486 программировал на квикбейсике, но быстро перешёл на турбопаскаль, всё таки ЯП побыстрей. А потом перешёл на делфи, ещё через какое-то время и от делфи отказался. Изучил С/С++, ассемблер х86-32, Lua когда начал заниматься модингом сталкера. Сейчас бы я быстренько на х86-16 демку написал сом файл. на данный момент васик и трупопаскаль уже начал подзабывать, полностью устаревшие ЯП, хотя object-pascal всё ещё используется.
      Короче, возьми UASM и напиши демку Life, побыстрей будет, и не надо этого противного писка, по мозгам бьёт.

    • @AlexPayneKU
      @AlexPayneKU  Месяц назад

      @@LithiumDeuteride-6 Ах, ох, какой шустрый. Цель видео именно продемонстрировать старинный код. И пиканье оставлено. Изначально, когда программа работала на Корвете, обработка происходила очень долго, поэтому нужно было привлекать внимание пользователя, когда обработка завершалась. Не надо умничать. Остальные не глупее Вас.

    • @LithiumDeuteride-6
      @LithiumDeuteride-6 Месяц назад +1

      @@AlexPayneKU программку Life видел в какой-то книге для васика Апл 2. Автор говорил что эта программа работает ужасно медленно, и рекомендовал переписать на ассемблер. Код на асме естественно не приводил т.к. в те времена 8 и 16 битных машин было очень много, все разные.
      Я потом для Партнёр 01.01 написал, там в принципе ничего сложного, код очень простой даже для простейших 8080.

  • @ink9
    @ink9 Месяц назад +2

    Ох, я тоже "Жизнь" на бейсике в детстве писал, обчитавшись "Математических досугов" Гарднера. Правда, на спектруме и символами, так что поле было всего 32x22.

    • @AlexPayneKU
      @AlexPayneKU  Месяц назад

      Не, меня вдохновила статья из Науки и Жизнь. При чё статья 1976 года или 71. Не помню уже) Надо уточнить) Там рассказывалось как учёные какого-то института моделировали клеточные автоматы и выводили их на ЭЛТ. Интересно - до жути!
      А первоначально я тоже написал символьную версию)

  • @AlexPayneKU
    @AlexPayneKU  Месяц назад

    Текст программы:
    10 SCREEN 13: nompokol% = 1 'Использую 13 экран для увеличения пикселей.====
    PRINT " Панин Алексей."
    PRINT " Лаборатория Панина Алексея."
    PRINT " Игра 'Жизнь'"
    PRINT "--------------------------------------------------"
    PRINT " СПРАВКА:"
    PRINT
    PRINT "Во время работы программы:"
    PRINT "[5] - открытие диалога изменения поля обработки;"
    PRINT "[*] - прекращение работы программы и выход из неё."
    PRINT "--------------------------------------------------"
    PRINT
    30 PRINT "Создаём колонию:"
    40 PRINT "Определите поле ввода:"
    50 INPUT "Xнач,Yнач-"; xn, yn
    60 INPUT "Xкон,Yкон-"; xk, yk
    70 PRINT : PRINT "Определите поле обработки:"
    80 INPUT "Xнач,Yнач-"; xno, yno
    90 INPUT "Xкон,Yкон-"; xko, yko
    100 CLS : GOSUB 1000
    110 FOR x = xn TO xk: FOR y = yn TO yk
    120 PSET (x, y), 4
    130 a$ = INKEY$
    140 IF a$ = "1" THEN PSET (x, y), 15: GOTO 160 ELSE IF a$ = "0" THEN PSET (x, y), 0: GOTO 160
    150 IF a$ = "" THEN PSET (x, y), 3: GOTO 120
    160 NEXT y: NEXT x
    170 FOR x = xno TO xko: FOR y = yno TO yko
    180 GOSUB 350
    190 IF (ks < 2 OR ks > 3) AND POINT(x, y) = 15 THEN PSET (x, y), 9
    200 IF ks = 3 AND POINT(x, y) = 0 THEN PSET (x, y), 10
    210 NEXT y: NEXT x
    220 FOR x = xno TO xko: FOR y = yno TO yko
    230 IF POINT(x, y) = 9 THEN PSET (x, y), 0
    240 IF POINT(x, y) = 10 THEN PSET (x, y), 15
    250 NEXT y: NEXT x
    ko = 0
    260 FOR x = xno TO xko: FOR y = yno TO yko
    270 IF POINT(x, y) = 15 THEN ko = ko + 1
    280 NEXT y: NEXT x
    290 IF ko < 1 THEN 330
    PLAY "c"
    LOCATE 20, 1: PRINT "Поколение: "; nompokol%
    nompokol% = nompokol% + 1
    300 a$ = INKEY$: IF a$ = "" THEN 300
    310 IF a$ = "5" THEN GOSUB 450 ELSE IF a$ = "*" THEN 340
    320 GOTO 170
    330 CLS : BEEP: PRINT "Популяция погибла!": BEEP
    340 PRINT "Конец игры!": BEEP: END
    350 ks = 0
    360 IF POINT(x - 1, y) = 15 OR POINT(x - 1, y) = 9 THEN ks = ks + 1
    370 IF POINT(x - 1, y - 1) = 15 OR POINT(x - 1, y - 1) = 9 THEN ks = ks + 1
    380 IF POINT(x, y - 1) = 15 OR POINT(x, y - 1) = 9 THEN ks = ks + 1
    390 IF POINT(x + 1, y - 1) = 15 OR POINT(x + 1, y - 1) = 9 THEN ks = ks + 1
    400 IF POINT(x + 1, y) = 15 OR POINT(x + 1, y) = 9 THEN ks = ks + 1
    410 IF POINT(x + 1, y + 1) = 15 OR POINT(x + 1, y + 1) = 9 THEN ks = ks + 1
    420 IF POINT(x, y + 1) = 15 OR POINT(x, y + 1) = 9 THEN ks = ks + 1
    430 IF POINT(x - 1, y + 1) = 15 OR POINT(x - 1, y + 1) = 9 THEN ks = ks + 1
    440 RETURN
    450 OPEN "vizn" FOR OUTPUT AS #1
    460 FOR x = xno TO xko: FOR y = xno TO yko
    470 PRINT #1, POINT(x, y)
    480 NEXT y: NEXT x: CLOSE
    490 CLS
    500 PRINT "Определите поле обработки:"
    510 INPUT "Xнач,Yнач-"; xno2, yno2
    520 INPUT "Xкон,Yкон-"; xko2, yko2
    CLS : OPEN "vizn" FOR INPUT AS #1
    530 FOR x = xno TO xko: FOR y = yno TO yko
    540 INPUT #1, c%: PSET (x, y), c%
    550 NEXT y: NEXT x: CLOSE : KILL "vizn"
    xno = xno2: xko = xko2: yno = yno2: yko = yko2
    560 GOSUB 1000: RETURN
    1000 LINE (xno - 1, yno - 1)-(xko + 1, yko + 1), 7, B
    RETURN

  • @ats9713
    @ats9713 Месяц назад +3

    это можно было бы написать на более быстром языке, хотя судя по описанию, этот код как минимум мой ровесник

    • @AlexPayneKU
      @AlexPayneKU  Месяц назад

      О чём и речь) Вот как раньше приходилось изворачиваться, когда у машины 48 Кб ОЗУ.

  • @rageofhero
    @rageofhero Месяц назад +1

    Добрый день. Огромная просьба поделиться всеми программами на БЕЙСИКЕ, что у Вас есть("Кому нужен текст для разбора - пишите"). Напишите как с Вами можно связаться.

    • @AlexPayneKU
      @AlexPayneKU  Месяц назад +1

      Текст опубликовал. Программ у меня не так уж и много) Но, по мере возможности, буду публиковать что-нибудь более-менее интересное. Я есть в контакте, правда, учётка только создана. vk.com/id868546969

  • @Dostoevsky2012
    @Dostoevsky2012 Месяц назад +1

    Я на js делал клеточные автоматы

  • @watchmakerful
    @watchmakerful Месяц назад +1

    Насколько я понимаю, программа держит данные непосредственно на экране, так?

    • @AlexPayneKU
      @AlexPayneKU  Месяц назад +1

      Именно так. Это позволяет не держать их ещё и в массивах и не пересылать с места на место.