Skip to content

AndreiZab/Corewar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

262 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

О проекте

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

В этом проекте нас просят сделать чемпиона, виртуальную машину(арену) для игры и компилятор с ассемблера в байт-код. Доступны были только внешние функции C: write, malloc, free, open, close, read, lseek. Большинство библиотечных функций написаны самостоятельно и находятся в папке libft.

Разделение проекта на части

Компилятор

Это программа, которая будет компилировать написанный на языке ассемблера код чемпиона в байт-код, который будет интерпретироваться виртуальной машиной напрямую.

Этапы:

  • Лексический анализ ассемблер кода, получение токенов(лексем) и построение абстрактного синтаксического дерева
  • Синтаксический анализ кода: парсинг и валидация лексем, а также обработка ошибок. В случае ошибки происходит поиск места, в котором она произошла, и формируется сообщение об ошибке
  • Компиляция полученных команд в байт-код

Виртуальная машина (Интерпретатор)

После того, как мы получили файл с байт-кодом, наступает время работы виртуальной машины. Её задача — выделить участок памяти, разместить на этом участке код чемпионов и каретки, которые будут его исполнять. А затем следить за ходом битвы, чтобы объявить чемпиона-победителя после её завершения.

Этапы:

  • Разбор игроков, записанных в байт-коде, сгенерированном компилятором
  • Настроить среду игры (инициализировать игроков, проверить действующие инструкции байт-кода и т.д.)
  • Выполнить код каждого игрока параллельно
  • Остановить, когда все игроки, кроме одного, мертвы

Визуализация

Отображает текущее состояние вертуальной машины в реальном времени

Установка

git clone https://github.com/AndreiZab/Corewar.git && cd Corewar

Понадобится SDL2 и SDL2_TTF:

  • Debian:
    sudo apt-get install sdl2 sdl2_ttf
  • OSX:
    brew install sdl2 sdl2_ttf

Компиляция: make

Usage

./asm champ.s


./disasm [-cf] file1.cor [file2.cor ...]  
	-c - colored mode  
	-f - file-format mode  


./corewar [-cva] [-dump nbr_cycles] [-dinfo] [[-n champ_number] champ.cor]
Flags:
	-c - colored mode
	-v - visualization mode 
	-a - enable aff output
	
Dump memory:  
	-dump nbr_cycle - output dump memory  
	-dinfo - output additional information on -dump  
Champions:  
	champ.cor - binary file with champions code  

Команда

Larlune

Qclubfoo

Rhealitt

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors