Core wars сражение между программами


LiveStreet

Игры → Core wars — развлечения программистов

Программисты тоже люди, и иногда они устают. А что хочется поделать, когда нет желания работать? Здесь каждый может написать то, что ему нравится. Но среди этого всего точно будет — поиграть! Так что предлагаю вашему вниманию игру для настоящих программистов — Core wars.
Суть игры проста — имеется циклический участок памяти. Программы игроков разбрасываются по памяти случайным образом и начинают исполняться. Программа выполняет команды до тех пор, пока не выполнит недопустимую операцию. После чего она закроется. Побеждает тот, чья программа осталась в живых.
Программы игроки пишут на языке, похожем на ассемблер. Каждая команда программы занимает одну ячейку памяти. Именно этот факт позволяет заставить программу соперника выполнить недопустимую операцию (DAT).

Программа может выполнять несколько простых операций:
1. Копирование памяти.
2. Арифметические операции.
3. Различного рода jmp.
4. Порождать новый поток.
5. Убиваться, выполняя недопустимую операцию.
Стоит отметить, что чем больше потоков у игрока, тем медленнее они будут работать, т.к. ресурсы ЦП всем выделяются равные;).

За время существования игры (а это более 25 лет), было придумано много различных стратегий войны — от простого расстрела по площади, до настолько хитрого поведения, что кажется, что вот-вот и программа сама себя убьет, но каждый раз она умудряется уйти из под удара.
Вот пример бойца, который просто раскидывает мины по полю:

Он заполняет память некорректными операциями с шагом в 4 ячейки. Соответственно если при борьбе с себеподобным он перезапишет одну из 3-х первых инструкций соперника, то последний будет повержен.
Насколько я понял, у этого языка программирования имеется несколько версий. Так что вполне вероятно, что эта программа сразу не запустится.

Я думаю вы уже догадались, что здесь не только можно писать вирусы, но и нужно! И никто вам ничего плохого за это не сделает)
Здесь есть неплохой guide для начинающих.

Core wars сражение между программами

Просьба не называть тему бояном.ТА вот , нашел на коднете стать про CoreWars http://www.codenet.ru/progr/asm/Core-Wars.php .После прочтения остались положительные впечатления , к сожалению 10 лет назад у меня не было компьютера поэтому про сражение между программами не знал.
А вообще ктонить (кроме яндекса) слышал про Corewars или делал это в живую?

Интересно, это на каком языке?? :
mov.i $3, $7
add.ab #4, $-1
jmp.a $-2, #0
dat.f #0, #0

Все понял — это тестовый язык (я подумал ассемблер) — вообще действительно интересная вещь.

Это есть и сейчас.
На днях был на конференции организованной студентами партнерами Майкрософта в нашем ВУЗе, где присутствовал и представитель Мелкомягкого. Много всякого бреда, в основном про Веб 2.0
Много бреда про то, какие Мелкомягкие молодцы и все такое.
Не суть. Суть в том, что рассказывалось там и про Imaging Cup.
Такой офигенный комплекс разных номинаций, начиная с банальных олимипиад и конкурса проектов, до Проекта Хашими(помоему).
Вот как раз Проект Хашими суть CoreWars в новой оболочке.

В школе у нас такие контесты были. Бой двух AI, написанных учениками, в игре-оболочке, написанной учителем (морской бой, крестики-нолики и т.п.). Было довольно забавно :)

Морской бой — ИИ очень тупой. :))
Крестики нолики — тоже.
А вообще идея реально интересная.
Надо будет что нить такое забацать. предложить своим преподам в ВУзе.
Хоть какое то развлечение будет.

Давайте организуем турнир?


> Морской бой — ИИ очень тупой. :))

Ну да :) Но там пытались использовались теорию вероятности и какие-то знания психологии соперников или их алгоритмов.
> Крестики нолики — тоже.

Там были крестики-нолики, где нужно собрать 5 в ряд на поле 30×30. Хотя по идее, здесь простая оценочная функция.

Core War

Core War is a game played between two or more computer programs in the memory of the Memory Array Redcode Simulator (MARS) virtual computer. The aim is to out survive and attempt to disable all opponents.

Contents

History

In March 1984 A. K. Dewdney and David Jones wrote the Core War Guidelines which suggested how to implement a simple version of Core War. Shortly after, Dewdney published his first Core War article in Scientific American inspiring a number of programmers to implement their own version.

The following year a society was formed to standardise Redcode and organise an annual tournament. The International Core Wars Society (ICWS) issued a standard in May 1986 and organised the first tournament at Boston’s Computer Museum in September 1986.

Redcode

Core War programs are written in a language called Redcode. The original instruction set had 8 opcodes but with the publication of the ’94 standard the number increased to 18.

Each location in memory contains an instruction and two values A and B. A and B are used as address pointers when the instruction is executed. A and B may also be used as data when referenced by another instruction.

Opcodes

Opcodes can be divided into five groups:

  • MOV — copy the contents of A to B
  • STP — copy the contents of A to p-space location B
  • LDP — copy the contents of p-space location A to B
  • ADD — add the contents of A to the contents of B
  • SUB — subtract the contents of A from the contents of B
  • MUL — multiply the contents of A by the contents of B
  • DIV — divide the contents of B by the contents of A
  • MOD — divide the contents of B by the contents of A, taking the remainder
  • JMP — transfer control to A
  • JMZ — transfer control to A if the contents of B are zero
  • JMN — transfer control to A if the contents of B are non-zero
  • DJN — decrement the contents of B then transfer control to A if non-zero
  • SEQ — skip the next instruction if the contents of A and B are equal
  • SNE — skip the next instruction if the contents of A and B are not equal
  • SLT — skip the next instruction if the contents of A is less than B


  • SPL — create a new process at A
  • DAT — the process executing DAT is terminated

Modifiers

Each opcode has a modifier which describes which values should be used from each address:

  • .A — use the A values
  • .B — use the B values
  • .AB — use the A value from the A address and the B value from the B address
  • .BA — use the B value from the A address and the A value from the B address
  • .F — use both values
  • .X — use both values, exchanging the values from A address
  • .I — use the entire instruction

Addresses

Each address has an addressing mode and a pointer. All pointers are relative to where the address is stored. 0 refers to the current location. 1 refers to the next location and -1 to the previous. There are 8 addressing modes:

  • $ — direct — address is the location at pointer ($ is the default addressing mode and can be omitted)
  • # — immediate — address is the current instruction
  • @ — B indirect — the B value of the location at pointer points to the address
  • — post increment B indirect — use B indirect addressing then increment the B value of the location at pointer
  • * — A indirect — the A value of the location at pointer points to the address
  • < - pre decrement A indirect - decrement the A value of the location at pointer then use A indirect addressing
  • > — post increment B indirect — use A indirect addressing then increment the A value of the location at pointer

All values are taken modulo the size of memory (CORESIZE). Values range from 0 to CORESIZE-1. For example if the CORESIZE is 8000, -3 is stored as 7997 (CORESIZE-3).

P-Space

P-space is an area of private non-volatile memory which can only be accessed via LDP and STP. Each program has its own area of private memory. The contents of p-space are preserved between rounds in a multi-round battle.

Location 0 in p-space contains a flag indicating the result of the previous round:

  • -1 — no previous round, the current round is the first
  • 0 — the program lost the previous round
  • 1 — the program won the previous round
  • 2 — the program was part of a two way tie in the previous round
  • N — the program was part of a N way tie in the previous round

P-space is often used by programs to switch between two or more strategies based on the performance in previous rounds.

Example

The imp is one of the simplest Core War programs. MOV.I copies an entire instruction from A to B. A is $ 0 and points directly to the imp in the current location. B is $ 1 and points directly to the next location.

When the imp executes it copies itself from the current location to the next location. When the next location is executed, it contains an exact copy of the imp and so the process repeats.

Core War


A game of Core War running under the pMARS simulator, as seen through the graphical core display.

Core War (or Core Wars) is a Programming game in which two or more battle programs (called warriors) compete for the control of the MARS virtual computer (Memory Array Redcode Simulator). These battle programs are written in an abstract Assembly language called Redcode. The object of the game is to cause all processes of the opposing program(s) to terminate, leaving your program in sole possession of the machine.

History Edit

Core War was in part inspired by a game called Darwin (programming game), written by Victor A. Vyssotsky, Robert Morris Sr., and M. Douglas McIlroy at the Bell Labs in the 1960s. The word «Core» in the name comes from Magnetic core memory, an obsolete Random access memory technology. The same usage may be seen in other Computer jargon terms such as «Core dump».

The first description of the Redcode language was published in March 1984, in Core War Guidelines by D. G. Jones and A. K. Dewdney. The game was introduced to the public in May 1984, in an article written by Dewdney in Scientific American («Computer Recreations» — In the game called Core War hostile programs engage in a battle of bits). Dewdney revisited Core War in his «Computer Recreations» article in March 1985, and again in January 1987.

The International Core Wars Society (ICWS) was founded in 1985, one year after Dewdney’s original article. ICWS published new standards for the Redcode language in 1986 and 1988, and proposed an update in 1994 [1] that was never formally set as the new standard. Nonetheless, the 1994 draft was commonly adopted and extended, and forms the basis for the de facto standard for Redcode today. The ICWS was directed by Mark Clarkson (1985–1987), William R. Buckley (1987–1992), and Jon Newman (1992–); currently the ICWS is defunct.

In 1991, the Newsgroup rec.games.corewar was created. Up to now it remains the most prolific source of Core War related information. Most articles and newsletters on Core War have been published in this newsgroup.

Redcode Edit

Assembled ICWS-94 style Redcode

Both Redcode and the MARS environment are designed to provide a simple and abstract platform without the complexity of actual computers and processors. Although Redcode is meant to resemble an ordinary CISC Assembly language, it differs in many ways from «real» assembly:

  • Redcode has very few operations — 10 in ICWS-88 and 19 in ICWS-94. These instructions are described in separate sub-sections, below.
  • Each assembled instruction is divided into an instruction code and two numeric fields. No numeric value is defined for the instruction code. The code may only be copied as part of an entire instruction, and may only be compared for equality.
  • Besides the opcode and two numeric operands, ICWS-94 allows each Redcode instruction to have a modifier that defines the size (one field, both fields, or entire instruction) of the data that the instruction operates on. Additionally, each of the numeric fields has associated Addressing mode. ICWS-88 defines 4 addressing modes, and ICWS-94 extends this number to 8.
  • Each Redcode instruction has the same length and takes the same time to execute. The memory is addressed in units of one instruction.
  • All numbers are unsigned (i.e. non-negative) integers less than the size of the memory. Therefore there is a one-to-one correspondence between numbers and memory locations. All arithmetic is done modulo the size of the memory.
  • Only Relative addressing is used. That is, address always refers to the currently executing instruction, address 1 to the instruction after it, and so on. Addresses past the end of the memory wrap around to the beginning. This way, a program cannot (and need not) know its absolute location in the memory.
Илон Маск рекомендует:  Что такое код strcat strdup

Each program can also have several active processes, each having its own Instruction pointer. Each program starts with only one process, but others can be created with the SPL instruction. The processes for each program execute alternately, so that the execution speed of each process is inversely proportional to the number of active processes the program has. A process dies when it executes a DAT instruction or performs a division by zero. A program is considered dead when it has no more processes left.

The ICWS-88 Instruction Set Edit

Strategy Edit

Warriors are commonly divided into a number of broad categories, although actual warriors may often combine the behavior of two or more of these. Three of the common strategies (replicator, scanner and bomber) are also known as paper, scissors and stone, since their performance against each other approximates that of their namesakes in the well known playground game.

    A replicator (or paper) makes repeated copies of itself and executes them in parallel, eventually filling the entire core with copies of its code. Replicators are hard to kill, but often have difficulty killing their opponents. Replicators therefore tend to score a lot of ties, particularly against other replicators. The earliest example of a replicator is Mice by Chip Wendell.

      A silk is a special type of very rap > Variants Edit

    Основная войнаCore War

    Основная война
    Разработчики) DG Jones & AK Dewdney
    Релиз Март 1984
    Жанр (ы) игра Программирование

    Ядро война является 1984 программирования игры , созданный Д. Джонсом и К. Dewdney , в которых два или более программах битвы (называемая «воины») конкурируют за контроль над виртуальным компьютером . Эти боевые программы написаны на абстрактном языке ассемблера называется Redcode .

    содержание

    Игровой процесс

    В начале игры, каждая программа битвы загружается в память в случайном месте, после чего каждая программа выполняет одну инструкцию по очереди. Цель игры состоит в том, чтобы вызвать процессы против программ прекратить (что произойдет, если они выполняют недопустимую команду), в результате чего победной программы в единственном владении машины.

    Самая ранняя Опубликованная версия Redcode определяется только восемь инструкций. Стандарт И-86 увеличился число до 10 в то время как стандартные И-88 увеличил его до 11. Используемый в настоящее время стандарта И-94 имеет 16 инструкций. Тем не менее, Redcode поддерживает множество различных режимов адресации и (с И-94) модификаторы команд , которые увеличивают фактическое число операций возможных до 7168. Стандарт Redcode не оставляет лежащее в основе представления команд не определены и предоставляет никаких средств для программы для доступа к нему. Арифметические операции могут осуществляться на два адресных полей , содержащихся в каждой команде, но поддерживаются только операции по кодам команд сами копируют и сравнивающие равенство.

    Постоянная длина и время выполнения команды Каждая команда Redcode занимает ровно один слот памяти и занимает ровно один цикл выполнения. Скорость, с которой процесс выполняет команды, однако, зависит от количества других процессов в очереди, поскольку время обработки разделяется в равной степени. Круговая память Память адресуется в единицах одной инструкции. Пространство памяти (или ядра ) имеет конечный размер, но только относительной адресации используется, то есть адрес всегда относится к текущей выполняемой инструкции, адреса 1 к инструкции после нее, и так далее. Максимальное значение адреса устанавливается равным на единицу меньше , чем число ячеек памяти, и будет обернуть вокруг , если это необходимо. В результате, существует взаимно однозначное соответствие одному между адресами и ячейками памяти, но это невозможно для программы Redcode , чтобы определить , какой — либо абсолютный адрес. Процесс , который не встречает недействительную или прыжковую инструкции будет продолжать выполнение последовательных инструкций бесконечно, в конце концов возвращается к команде , где она началась. Низкий уровень многопроцессорная Вместо одного указателя инструкций Redcode Тренажер имеет очередь процесса для каждой программы , содержащей переменное количество указателей команд , которые циклы имитатора через. Каждая программа начинается только с одним процессом, но могут быть добавлены новые процессы в очередь с помощью SPL команды. Процесс умирает , когда он выполняет DAT инструкцию или выполняет деление на ноль. Программа считается мертвым , когда он не имеет больше процессов осталось. Нет внешнего доступа Redcode и архитектура МАРС не предоставляют входные или выходные функции. Тренажер представляет собой закрытую систему, с той лишь входной быть начальные значения памяти и очередей процесса, и единственный выход которого исход битвы, то есть, какие программы были уцелевшей процессы. Конечно, имитатор может еще разрешить внешний осмотр и модификацию памяти в то время как моделирование работает.

    Версии Redcode

    Ряд версий Redcode существует. Самая ранняя версия описывается АК Dewdney во многих отношениях отличается от более поздних стандартов , установленных Международным обществом основной войны, и можно было бы рассматривать как разные, хотя и связаны между собой , язык. Форма Redcode наиболее часто используемая сегодня на основе проекта стандарта , представленный в И в 1994 году , который не было официально принят, как И стали эффективно несуществующими в то время. Развитие Redcode, однако, по- прежнему в неформальной обстановке, в основном через интернет — форумы , такие как rec.games.corewar телеконференция .

    стратегия

    Воины обычно делятся на несколько основных категорий, хотя реальные воины могут часто комбинируют поведение двух или более из них. Три из общих стратегий ( репликатор , сканер и бомбардировочные ), также известные как бумага, ножницы и камень , так как их производительность друг против друга приблизительно , что их однофамильцев в хорошо известной детской площадке игре.

    Бумага (или репликатор) Репликатор делает повторные копии и выполняет их параллельно, в конце концов, заполняющий все ядро ​​с копиями своего кода. Репликаторы трудно убить, но часто испытывают трудности убивают своих противников. Поэтому репликаторы имеют тенденцию забивать много связей, особенно в отношении других репликаторов. Шелк представляет собой особый тип очень быстрый репликатор, названный в честь шелкового Воина Юха Pohjalainen. Большинство современных репликаторов относятся к этому типу. Шелковые репликаторы использовать параллельное выполнение , чтобы скопировать весь свой код с одной командой, и начать выполнение копии до ее завершения. Ножницы (или сканер) Сканер предназначен бить репликаторы. Сканер не атакует вслепую, но пытается найти свой противник до начала целенаправленной атаки. Это делает его более эффективным против труднодоступных убийств противников , как репликаторы, но и оставляет его уязвимым для приманок. Сканер обычно бомбы памяти с SPL 0 инструкциями. Это приводит к тому противнику , чтобы создать огромное количество процессов , которые ничего не делают , но создать несколько процессов, замедляя полезные процессы. Когда противник становится настолько медленным , что он не в состоянии сделать что — нибудь полезное, память бомбили с ДАТ инструкциями. Сканеры также обычно более сложные, и , следовательно , больше и более хрупкие, чем другие типы воинов. Один выстрел очень простой сканер , который сканирует только ядро до тех пор, пока не найдет первую цель, а затем окончательно переходит к стратегии атаки, как правило , сердечник ясно. Myrmidon Рой ван Рейн является примером ONESHOT. Камень (или бомбардировщик) Бомбардировщик слепо копирует «бомбу» через регулярные промежутки времени в ядре, в надежде поразить противника. Бомба часто DAT инструкция, хотя и другие инструкции, или даже бомбы нескольких команд, может быть использована. Бомбардировщик может быть маленьким и быстрым, и они получают дополнительное преимущество над противниками сканирования , так как бомбы также служат удобное отвлечение. Бомбардировщики часто сочетаются с имп спиралей , чтобы получить дополнительную устойчивость против репликаторов. Вампира (или пит-траппером) Вампир пытается сделать процессы своего противника прыгать в кусок своего собственного кода , который называется «яма». Вампиры могут быть основаны либо на бомбардировщиках или сканерами. Главная слабость вампиров является то , что они легко могут быть атакованы косвенно, так как они должны по необходимости рассеяния указателей на их код по всему ядру. Их атака также медленно, так как он принимает дополнительный раунд для процессов , чтобы достичь ямы. myVamp от Paulsson является примером вампира. чертенок Бесы были названы в честь первого в истории , опубликованной воин, Imp от АК Dewdney , тривиальным один-инструкции мобильного воина , который постоянно копирует его единственной инструкции прямо перед его указателем команд . Бесы трудно убить , но рядом с бесполезным для преступления. Их использование заключается в том , что они могут быть легко порождали в больших количествах, и могут выжить , даже если остальная часть воина погибают. Имп кольцо (или имп спираль ) состоит из чертят , расположенных через равные промежутки вокруг сердечника и исполняющих попеременно. Бесы в каждой руке кольца / спирали скопировать их команду к следующему руке, где она немедленно выполняется снова. Кольца и спирали еще труднее убить , чем просто чертит, и у них даже есть (небольшой) шанс убить воин не защищен от них. Количество оружия в имп кольца или спирали должны быть взаимно просты с размером ядра. Quickscanner (или Q-сканирования) Quickscanner пытается поймать свой противник в начале с помощью очень быстро раскатал цикл сканирования. Quickscanning является стратегия в начале игры, и всегда требует какой-либо другой стратегии в качестве резервного. Добавление quickscanning компонент для воина может улучшить свой показатель против длинных воинов, таких как другие quickscanners. Тем не менее, раскатали сканирование может предназначаться только ограниченное количество мест, и маловероятно, чтобы поймать небольшой противника. ядро ясно Ядро ясно последовательно переписывает все инструкции в ядре, иногда даже в том числе себя. Основные рассеется не очень распространены в качестве самостоятельных воинов, но часто используются в качестве стратегии конца игры с помощью бомбардировщиков и сканеров.


    Основные войны Программирование

    С пониманием основной войной стратегии, программист может создать воин для достижения определенных целей. Революционные идеи приходят раз в то время; Большая часть времени, однако, программисты строят свои программы на уже опубликованные воинах. Использование оптимизаторы , такие как OptiMax или ядро-ступенчатых инструментов оптимизатора, более эффективный воин может быть создан.

    Воины могут также быть получены с помощью генетических алгоритмов или генетического программирования . Программы , которые интегрируют эту эволюционную технику известны как эволюционирует . Несколько эволюционирует были введены в ядре войны сообщества и , как правило, сосредоточено на создание воинов для небольших установок ядра. Последняя Evolver со значительным успехом была μGP который произвел некоторые из наиболее успешных нано- и маленьких воинов. Тем не менее, эволюционная стратегия все еще должна доказать свою эффективность на больших установках ядра.

    развитие

    Ядро война была вдохновлена самореплицирующейся программой под названием Creeper и последующая программа под названием Reaper , который уничтожил копию Creeper. Creeper был создан Бобом Томасом в BBN . Dewdney не было известно о происхождении Creeper и жатки и относится к ним как слух , происходящих из Дарвина и червячных экспериментов Shoch и Hupp. 1984 Scientific American статью о Войне Ядра , тем не менее приводит игру Дарвина , которую играет Виктор А. Высоцкий , Роберт Моррис , и Дуглас Макилрой в Bell Labs в 1961 году слово «Core» в названии происходит от магнитной памяти ядра , устаревшее память с произвольным доступом технологии.

    Первое описание языка Redcode было опубликовано в марте 1984 года, в Руководстве Войны Ядра Д.Г. Джонс и К. Dewdney . Игра была представлена публике в мае 1984 года, в статье , написанной Dewdney в Scientific American . Dewdney вновь Война Ядра в своей колонке «Компьютерный воссозданной» в марте 1985 года, а затем в январе 1987 года.

    Международное Основные войны Общество (И) было основано в 1985 году, один года после оригинальной статьи Dewdney в. В ИВВ опубликованы новые стандарты для языка Redcode в 1986 и 1988 годах, и предложил обновление в 1994 году , который не был официально установлен в качестве нового стандарта. Тем не менее, проект 1994 был принят и широко распространяется, и образует основу де — факто стандартом для Redcode сегодня. ИВВ был направлен Марк Clarkson (1985-1987 годы), William R. Buckley ( В 1987-1992 гг), и Джон Ньюменом (1992-); в настоящее время И являются несуществующими.

    Redcode

    Redcode это язык программирования , используемый в Войне Ядра . Это выполняется с помощью виртуальной машины , известной как массив памяти Redcode Simulator или MARS . Конструкция Redcode свободно основана на реальных CISC языков ассемблера в начале 1980 — х годов, но содержит несколько функций , как правило , не встречаются в реальных компьютерных системах.

    Оба Redcode и окружающая среда MARS предназначены для обеспечения простой и абстрактной платформы без сложности реальных компьютеров и процессоров. Хотя Redcode предназначается, чтобы походить на обычный CISC язык ассемблера, он во многом отличается от «реальной» сборки.

    Реализации

    Разработка реализаций игр продолжалась в течение многих лет несколько авторов. Есть несколько версий игры доступны, портирована на несколько платформ. Например pMARS , который является открытым исходным кодом с исходным кодом на Sourceforge , или SDL на основе SDL pMARS для Windows , .. В последнее время полностью на основе веб — имитатор был создан https://www.corewar.io/ устраняя необходимость загружать любую платформу конкретные инструменты.

    прием

    Общая pMars реализации скачана 30000 раз в период между 2000 и 2020 годами от Sourceforge .

    Бой в памяти

    Core War
    Игра «Core War» под управлением симулятора pMARS
    Тип Игра для программистов
    Автор Д. Г. Джонс и А. К. Дьюдни
    Первый выпуск 1984
    Лицензия BSD и GNU GPL

    Бой в памяти (англ. Core War ) — разновидность компьютерной игры «Дарвин», разработанная Александром К. Дьюдни. Помогал разрабатывать игру Дэвид Джонс, студент кафедры информатики университета Западной Онтарио, где преподавал Дьюдни.

    В данной игре игроки разрабатывают компьютерные программы на специальном языке программирования, похожем на ассемблер — Redcode. Программы размещаются в циклически замкнутом участке памяти (core), состоящей из 8000 ячеек и зацикленной в кольцо. Каждая команда занимает одну ячейку. Redcode-программы работают под управлением MARS (англ. Memory Array Redcode Simulator — Симулятор Массива Памяти Redcode). Программы загружаются по случайным адресам в памяти.

    Каждая программа может иметь несколько активных потоков, причём поток может порождать другие потоки с помощью инструкции SPL . Потоки, принадлежащие одной программе, выполняются по очереди, поэтому скорость их выполнения обратно пропорциональна количеству потоков. Поток завершается, если пытается выполнить некорректную инструкцию. Программа, все потоки которой завершились, считается проигравшей.

    Статьи, посвящённые игре, публиковались в журнале Scientific American в 1984—1987, в колонке Computer Recreations (Занимательный компьютер). Игра вызвала значительный интерес у читателей, и впоследствии было основано международное общество International Core War Society со штаб-квартирой в США и отделениями во многих странах мира, включая СССР. Также было разработано несколько стандартов, описывающих правила игры. Разработать «Бой в памяти» Дьюдни побудила история о двух противоборствующих программах CREEPER и REAPER (см. компьютерный вирус). Обстоятельства разработки CREEPER/REAPER дошли до Дьюдни в несколько искажённом виде, так, по словам Р. Томлинсона, ни заражения ARPANet, ни «поединка» между двумя программами в действительности не было.

    Содержание

    Redcode

    Тут представлен стандарт 94 (последний). Все инструкции имеют 2 аргумента A и B, хотя не все используют их оба. В аргументах хранятся значения и совершаются операции адресации (инкремент/декремент). Предполагается, что A — источник, B — назначение.

    Coding Horror

    programming and human factors

    Core War: Two Programs Enter, One Program Leaves

    Our old pal A. K. Dewdney first introduced the world to Core War in a series of Scientific American articles starting in 1984. (Full page scans of the articles, including the illustrations, are also available.)

    Core War was inspired by a story I heard some years ago about a mischievous programmer at a large corporate research laboratory I shall designate X. The programmer wrote an assembly-language program called Creeper that would duplicate itself every time it was run. It could also spread from one computer to another in the network of the X corporation. The program had no function other than to perpetuate itself. Before long there were so many copies of Creeper that more useful programs and data were being crowded out. The growing infestation was not brought under control until someone thought of fighting fire with fire. A second self-duplicating program called Reaper was written. Its purpose was to destroy copies of Creeper until it could find no more and then to destroy itself. Reaper did its job, and things were soon back to normal at the X lab.

    (The story of Creeper and Reaper seems to be based on a compounding of two actual programs. One program was a computer game called Darwin, invented by M. Douglas McIlroy of AT&T Bell Laboratories. The other was called Worm and was written by John F. Shoch of the Xerox Palo Alto Research Center. Both programs are some years old, allowing ample time for rumors to blossom.)

    Core War, surprisingly, is still around. The current hub appears to be at corewar.co.uk. You can download simulators for a variety of operating systems there. Here’s how a Core War battle works:

    Core War has four main components: a memory array of 8,000 addresses, the assembly language Redcode, an executive program called MARS (an acronym for Memory Array Redcode Simulator) and the set of contending battle programs. Two battle programs are entered into the memory array at randomly chosen positions; neither program knows where the other one is. MARS executes the programs in a simple version of time-sharing, a technique for allocation the resources of a computer among numerous users. The two programs take turns: a single instruction of the first program is executed, then a single instruction of the second, and so on.

    What a battle program does during the execution cycles allotted to it is entirely up to the programmer. The aim, of course, is to destroy the other program by ruining its instructions. A defensive strategy is also possible: a program might undertake to repair any damage it has received or to move out of the way when it comes under attack. The battle ends when MARS comes to an instruction in one of the programs that cannot be executed. The program with the faulty instruction — which presumably is a casualty of war — is declared the loser.


    Let’s see it in action using one of the simulators. What you’re watching here is a round-robin tournament between the Imp [yellow], Mice [blue], Midget [white], and Piper [green] programs.

    The winner is Piper [green], with 2 wins, 0 losses, and 1 tie.

    These programs are written in an assembly-like dialect known as Redcode. Here’s the source code for Midget:

    The Redcode instruction set is deliberately simple. There are two variants, ICWS-88 with 10 instructions and 4 addressing modes, and ICWS-94 with 19 instructions and 8 addressing modes.

    DAT data DJN decrement and jump if not zero
    MOV move / copy SPL split
    ADD add CMP compare
    SUB subtract SEQ skip if equal
    MUL multiply SNE skip if not equal
    DIV divide SLT skip if lower than
    MOD modulus LDP load from private space
    JMP jump STP save to private space
    JMZ jump if zero NOP no operation
    JMN jump if not zero

    It’s structured so that there is no «killer app»; three broad strategies are possible, each with its own strengths and weaknesses.

    Try to fill the core with copies of your program, so you are harder to kill.

    Attack by writing illegal instructions throughout the core— but not on your own program’s memory.

    Scissors or Scanner

    Attempt to identify enemy programs lurking in the core, then target writes to eliminate them.

    Of course, combinations of the above strategies are possible as well. As you might imagine after 25 years of battlefield evolution, some modern Core War programs are quite baroque by now.

    It’s not particularly useful, but it is a programming game, after all. It’s also a fascinating bit of computer science history. If you’re interested in participating in the venerable sport of Core War, it’s still very much alive and kicking. The top 10 links for Core War newbies is a great place to get started.

    UI-First Software Development

    Let That Be a Lesson To You, Son: Never Upgrade.

    Written by Jeff Atwood

    Indoor enthusiast. Co-founder of Stack Overflow and Discourse. Disclaimer: I have no idea what I’m talking about. Find me here: http://twitter.com/codinghorror

    Resources

    Coding Horror has been continuously published since 2004

    Copyright Jeff Atwood © 2020
    Logo image © 1993 Steven C. McConnell
    Proudly published with Ghost

    Core War

    1.1.7 for Android

    Using APKPure App

    Faster, free and saving data!

    The description of Core War

    Core War is a free and addictive arcade game which allows you drive plane and blast the planet balls containing numbers.

    Not only you need to blast as much as the planet ball, it’s very important to dodge them from being attacked that will immediately leads to a game-over.

    During the level up, you need to upgrade your weapons. The higher the level is, the more powerful the weapon becomes. By constant upgrading, you will be experiencing increased amazing fun from creating a fullsrceen explosion.

    What’s more exciting, there are random events to double/triple the gold coin rewards, and weapon enhancement, and reinforcements that helps to a quicker triumph!

    It’s so easy to pick up even by one hand, yet challenging in many way to become the ultimate champion!

    Core War 1.1.7 Update


    Core War Tags

    By adding tag words that describe for Games&Apps, you’re helping to make these Games and Apps be more discoverable by other APKPure users.

    Additional Information

    Publish Date: 2020-07-19

    Latest Version: 1.1.7

    Get it on:

    Requirements: Android 4.1+

    Core wars сражение между программами

    Wikipedia: Core War is a 1984 programming game created by D. G. Jones and A. K. Dewdney in which two or more battle programs (called «warriors») compete for control of a virtual computer. These battle programs are written in an abstract assembly language called Redcode

    Our game in action

    The project is divied in 2 parts :

    • The assembler (asm) : It takes in parameter a champion written in Redcode and generate a binary program that can be interpreted by the virtual machine. Made by ejsouza and dishults.
    • The virtual machine (corewar) : Loads the binary programs (champions) and provide them with a standard execution environment. It offers a lot of features useful to the fight. Made by me and sbeheret.

    Champions are processes that will be loaded in the arena, represented by a virtual Ram, where they fight by executing a list of instructions in the VM.

    How to run the game

    Usage to generate Byte-code Champion

    Usage of the VM

    If you use the viusalizer, for a best result, you should put your terminal in full screen.

    • ‘q’ to quit
    • ‘space’ to start / pause
    • ‘Up key’ to increase the speed of execution
    • ‘Down key’ to decrease the speed of execution

    Details of the project

    Here’s a complete guide to fully understand the project.

    Specifications of the vm

    • The arena has a total of MEM_SIZE (4096) bytes of memory and the memory is circular. When displayed, each bytes are in Hexadecimal on a 64 * 64 grid.
    • Maximum 4 players are loaded into the memmory as independant processes.
    • Each process has 16 registers of 4 bytes (r1 to r16) at disposition, along with a Program Counter (PC) which stores the next opcode address that will be executed.
    • The Virtual Machine can interpret and run these 16 instructions (from Opcode 0x01 to 0x10).
    • The VM has both a verbose mode and a visualizer to help debugging and to follow execution.

    A «cycle» is over when we checked on all the processes (to simulate same-time, parallel, execution).


    Each intruction takes a certain number of cycles to be executed.

    The most important instruction, in this combat to death, is the instruction live (0x01). Live takes in parameter a champion number, writen on 4 bytes. The winner is the last champion that will be called alive.

    Every 1536 (CYCLE_TO_DIE) cycles, the VM checks all the running processes. Each one that didn’t call the instruction live are killed. If after 21 (NBR_LIVE) calls to the instruction live, all proccesses are still alive then decrease the value of CYCLE_TO_DIE by 50 (CYCLE_DELTA).

    The game ends when no champion are said to be alive during a CYCLE_TO_DIE cycles or if CYCLE_TO_DIE equals 0.

    Specification of the Champion and Assembler

    Champions, written in Redcode, has 3 sections :

    • The name : starts with .name and size_max : 128 bytes
    • The comment: starts with .comment and size_max : 2048 bytes
    • The list of instrucitons (one by line)

    example of a simple Champion :

    when we convert it into bytecode

    The champion are converted in byte-code with the following structure:

    • Magic number on 4 bytes => 00 ea 83 f3
    • Name of the champion on 128 bytes => 7a 6f 72 6b
    • Padding of 4 bytes set to 0x00
    • Size of the Champion instructions part on 4 bytes => 00 00 00 17
    • Comment of the champion on 2048 bytes => 49 27 4d 20 41 4c 49 49 49 49 56 45
    • Padding of 4 bytes set to 0x00
    • Champion instructions => 0b 68 01 00 0f 00 01 06 64 01 00 00 00 00 01 01 00 00 00 01 09 ff fb

    The instructions are converted to hexadecimal code. The first byte is the Opcode of the instruction, the second byte (if needed by the instruciton) is the encoding byte that determine the number of parameter, their types (register / direct / indirect ) and their size in the memory (1, 2 or 4 bytes)

    Star Wars: Empire at War — Forces of Corruption: Прохождение

    Star Wars: Empire at War стала одной из лучших игр о вселенной «Звездных войн». Но дополнение превзошло ее на голову. В нем не просто добавили новую расу, ее стиль ведения войны коренным образом отличается от того, что практикуют уже знакомые нам соперники из войск Империи и повстанцев. И пока они бодаются между собой за контроль над планетами, третья сила покупает и запугивает, похищает и пиратствует. Вы не готовы к честным боям? Преступная империя Тайбера Занна ждет вас!

    Начнем с того, что без внимания не осталось ничто. Почти все части игры были как-то перекроены, изменены. Нет, основные правила остались в точности теми же — бой в космосе, бой на поверхности, захваты планет и добыча денег. Но после многочисленных добавлений многое узнать теперь чрезвычайно сложно. Хотя начнем мы все же с новой фракции в игре — Синдиката — и расскажем, кто это такие, а также кого и как они едят.

    Синдикат, конечно же, тоже не прочь захватить всю Галактику, взяв ее под свой контроль. Но он предпочитает править «теневой» жизнью планет, коррумпируя их власти. Причем противник видит, что на планетах идет теневой бизнес, однако иногда пресекать эту деятельность себе дороже. Ведь для того, чтобы коррумпировать планету, Синдикату требуется вложить 1000 монет в «стервятника» (и сделать еще что-то в зависимости от видов коррупции), а для возвращения планеты к законности требуется уже полторы тысячи денежек, и далеко не всякий герой способен сделать это. К примеру, у повстанцев восстановлением закона на планете занимается Йода, а у имперцев — Палпатин (хотя они не одиноки в этом деле). Однако не всегда героя можно оторвать от дел и послать наводить порядок. Вот и приходится наблюдать за желтыми облачками беззакония вокруг планет с ощущением безысходности. Правда, при переходе планеты из рук в руки некоторые виды коррупции (те, что зависят от чиновников, такие как запугивание, похищение, подкуп) пропадают самостоятельно.

    Это интересно: хотя кампания по захвату Галактики и предполагает, что все воюют против всех, однако основной противник Синдиката — Империя. Поэтому воевать Империей сложнее, чем кем бы то ни было, — против нее боевые действия будут вести сразу два противника.

    Синдикат не занимается такой ерундой, как исследование технологий. Он покупает нужные технологии на черном рынке. То есть в цикл технологического развития добавился еще один элемент: Империя исследует, повстанцы воруют у нее, а «теневики» покупают нужное на черном рынке у тех и у других. Главное — провести соответствующую коррупционную акцию против обеих сторон, после чего Тайбер Зан, Ураи Фен или Силри могут ходить за технологиями к «поставщикам». Кстати, эта хитрость дает некоторое преимущество Синдикату на ранних этапах: его заводы могут сразу же строить любую технику. Только использовать способности, которые должны прилагаться к этой самой технике, не получится.

    Что представляют собой акции по вовлечению планеты в преступную сеть? Мы просто посылаем произведенного во дворце Синдиката «стервятника», и тот проводит какое-то действие на планете, после чего исчезает навсегда. Всего на каждой планете может быть произведено не более трех различных акций, причем, однажды поставив планету на тот или иной путь преступности, сменить направление можно только после того, как там вновь будет восстановлен закон. Отметим, что акции мы выбираем не из всего списка, набор для каждой планеты жестко фиксирован. Зато если для внедрения коррупции на планете требуются герой или войска, то они уникальны для каждой планеты. Так, на одной какое-то действие может совершить только Тайбер Зан, а на другой его же должен осуществлять Ураи Фен.

    Это важно: на акцию вылетает только «стервятник». Герой «выдергивается» для своей миссии с совершенно любой планеты и возвращается на нее, как только все закончится. При этом герой не погибнет, если его убьют во время миссии, — он как ни в чем не бывало вернется на родную планету. А вот войска, требуемые для задания, остаются на той планете, где оно проходило.

    Запугивание. Это боевое действие, подразумевающее наземное сражение, поэтому требуются деньги и герой Синдиката. Надо просто добраться до запугиваемого, и тогда на планете будет заблокировано действие ее специальных особенностей до конца игры. Хотя это и начальная миссия, но без хотя бы одного действующего запугивания невозможно провести ни один рэкет.

    Это интересно: хотя для проведения миссий «второго уровня» и необходимо хотя бы одно действие «первого уровня», но для некоторых миссий требуется большее число действующих акций, хотя и не более трех.

    Пиратство. Тоже боевое действие, но уже в космосе. А значит — опять деньги и герой. Линкоры мы на это задание вряд ли получим, но вот крейсера — запросто. Надо что-то уничтожить, и тогда цель будет достигнута. При этом мы сможем строить новый тип корабля (модель заимствуется, конечно, у вражеского судна). Если же противник гоняет свои эскадры через эту планету, то мы будем получать деньги за проход. Да и с торговли будет некоторый навар. Пиратство дает ход таким миссиям, как «черный рынок» и «рабство».

    Похищение. По своим характеристикам похоже на запугивание, только надо прорваться к похищаемому, а там уж его заберет шаттл. При этом мы получаем некоторую сумму денег (обычно просто возвращаем затраченное). Однако без похищения нет подкупа.

    Рэкет. Если у вас где-то действует хотя бы одно запугивание, то можно начинать применять рэкет. Еще для него необходимы штурмовые отряды наемников и деньги на операцию. При этом возрастает приток денег в Синдикат вне зависимости от того, своя планета или чужая. Кроме того, при уничтожении вражеских войск на этих планетах вы будете получать «проценты за уничтожение».

    Подкуп. Требует действующего похищения и денег на проведение миссии, иногда и войска. В итоге мы получаем информацию о состоянии дел на планете (передвижение флотов вокруг нее), а также во время атаки планеты силами Синдиката у нее не будет гарнизонных войск (а в космическом бою против Империи у имперцев не будет еще и истребителей). Также наличие хотя бы одного подкупа дает возможность создавать где-либо «пятую колонну».

    Черный рынок. Если где-то процветает пиратство и у вас есть деньги на операцию, то можно провести эту акцию. После открытия черного рынка герой может залетать на планету с намерением закупиться новой технологией (по пять с Империи и повстанцев). На разных рынках могут быть различные цены на одну и ту же технологию. Вместе с тем никаких прочих благ от него нет, и это та форма коррупции, которую как раз следовало бы потом менять на другую.

    Рабство. Необходимо хотя бы одно действующее пиратство, войска и деньги на операцию. Зато после этого при конфликтах на планете местное население будет выбирать вашу сторону (или бить обоих сражающихся, если обе стороны — ваши противники). Кроме этого, во всех ваших казармах можно будет производить ополчение из населения этих планет. Сразу замечу, что рабы, для которых достаточно всего одного пиратства, — никудышные помощники. А вот те, для которых нужно не менее трех действующих пиратств, часто обладают очень интересными специальными способностями.

    «Пятая колонна». Требует хотя бы одного удачного подкупа, денег и войск. Местное население во всех конфликтах будет воевать за нас. Зато если кто-то догадается снять эту форму коррупции, то произойдет восстание, после которого планета станет нейтральной, а все здания на планете будут уничтожены.

    Еще один плюс от коррумпирования — флоты Синдиката могут проскочить через эти планеты без сражения, лишь заплатив местным чиновникам. Так можно и в какой-нибудь глубокий тыл противника потихоньку выйти. Главное — иметь деньги на проход. Также при любой форме коррупции можно наблюдать план базы на планете и узнать обо всех войсках на земле и в космосе.

    В основной игре нам не слишком-то давали развлекаться строительством. Основные здания были заранее установлены и пересмотру не подлежали. Однако Синдикат и здесь умудрился отличиться, получив несколько оригинальных построек. Во-первых, синдикатовцы явно из той породы зенитчиков, что сами не летают и другим не дают. Поэтому они любят строить глушитель антигравитаторов, и тогда вражеские быстрые корабли еле-еле ползают по полю боя.

    Вторым отличием стали два типа пушек. Первые стреляют по всему, при этом совершенно игнорируя щиты. Вторые стреляют торпедами, и очень далеко, но не стреляют по летающим целям. Но за это все дополнительные постройки обходятся Синдикату крайне дорого.

    С космосом тоже свои примочки — плазменная пушка строится не на земле, как у всех, а на космической станции третьего уровня. Что резко повышает возможности выживания оной станции.

    Космос — место, где произошло наименьшее число изменений. Первое из них — повстанцы и Империя могут строить на спутниках защиты ремонтные станции и восстанавливать свои корабли. Синдикат же вместо этого может ставить постановщики помех дальнего действия, которые будут мешать ракетному огню противника.

    Второе — введение авангарда (есть он и на земле, но там эффект намного меньше). Смысл состоит в том, что в космосе появляется только один заранее назначенный корабль, а все остальные вызываются по списку. Основная польза от этого состоит в том, что ранее в бой легко выбрасывались и шаттлы с десантом, которые занимали место более полезных кораблей, а толку от них не было никакого. Дополнительный вариант применения — поставить в авангард шустрого героя, который рывком окажется у вражеской базы и на месте вызовет линейные корабли, которые еще несколько минут летели бы от стартовой точки. Сюрприз!

    Обновлений у имперцев оказалось не так уж и мало. Основные вливания произошли в списки истребителей и героев, нет ни одного нового корабля среднего класса. Вот их полный список.

    TIE-перехватчик. Улучшенный вариант TIE-истребителя, превосходящий его во всех компонентах. Считается, что он превосходит стандартные истребители повстанцев по всем параметрам. В отряде, как и у предшественников, — 7 единиц. Собственно, они заменяют TIE-истребители на всех кораблях, кроме «Миротворца».

    TIE-фантом. Улучшенный вариант TIE-скаута. Обладают гипердвигателем (могут путешествовать между системами), а также оснащены генераторами щита и маскировки. Одновременно можно включать только один из генераторов, но основное назначение «фантомов» состоит в том, что они незамеченными путешествуют между системами противника и проводят разведку. В звене всего три фантома. На «Молоте» генерала Рома Мохка «фантомы» заменяют бомбардировщики.

    TIE-защитники. Это неизвестные ранее истребители-бомбардировщики. То есть, они могут решать и задачи истребителей (хотя трех для таких целей маловато), но в основном занимаются решением проблем с помощью бомбардировки. Кроме обычного оружия, «защитники» могут переводить защитное поле в подпитку оружия, увеличивая мощь. Еще одно оружие — ионная пушка, которая расстреливает щиты или на некоторое время выводит из строя вражеские корабли. Отличное средство против вражеских линкоров и космических станций.

    «Звезда смерти II». По характеристикам — то же самое, что и первая. Просто первая уже уничтожена и восстановлению не подлежит. Разумеется, работает только в режиме кампании.

    «Палач». Единственный представитель класса суперлинкоров. Естественно, доступен только в кампании. У этого корабля есть целых три точки силовых щитов, то есть, уничтожив одну из них, вы все еще не лишите этот линкор силового поля. Главная его способность (кроме вполне привычного захвата вражеских кораблей силовым лучом) — постоянное производство новых истребителей (надо только постоянно нажимать кнопку их вызова), всего — 4 истребителя, 4 бомбардировщика, 6 перехватчиков и 1 защитник. Вызываются все принудительно, в отличие от других линкоров, на которых новые заменяют погибших. Хотя на нем и без этого оружия — бесчисленное количество. Кроме всего прочего, на этом корабле летает сам Дарт Вейдер.

    «Молот». Еще один корабль только из кампании. Флагманский линкор Рома Мохка. На нем этот адмирал производит темных джедаев. Обычно ни с кем не воюет, хотя по набору оружия соответствует «Миротворцу», а по броне — «Разрушителю». Такой вот вспомогательный корабль.

    «Адмонитор». Флагман гранд-адмирала Трауна, единственный корабль, доступный не только в кампании. По броне и набору вооружения не отличается от «Разрушителя». Однако ближайшие к «Адмонитору» корабли наносят больший урон неприятелю. А сам гранд-адмирал может кратковременно применять способность, при которой его линкор стреляет по одной цели, при этом его скорострельность и урон от попаданий удваиваются.

    Илон Маск рекомендует:  page-break-inside в CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL