Sin descripción

Zoadian 0337ffedd0 added execution model notes hace 10 años
.gitignore 1cba6fefd4 Initial commit hace 10 años
LICENSE 1cba6fefd4 Initial commit hace 10 años
README.md 0337ffedd0 added execution model notes hace 10 años
ccsim.pro f70f83bd0a variable documentation hace 10 años
ccsim.pro.user f70f83bd0a variable documentation hace 10 años
debugwidget.cpp d1119ad649 ui improvements hace 10 años
debugwidget.h d1119ad649 ui improvements hace 10 años
debugwidget.ui d1119ad649 ui improvements hace 10 años
main.cpp b69ce42a7b program code added hace 10 años
mainwindow.cpp d1119ad649 ui improvements hace 10 años
mainwindow.h d1119ad649 ui improvements hace 10 años
mainwindow.ui d1119ad649 ui improvements hace 10 años
playfield.cpp d1119ad649 ui improvements hace 10 años
playfield.h d1119ad649 ui improvements hace 10 años
simulator.h d1119ad649 ui improvements hace 10 años

README.md

Code Contest Simulator - ccsim

A programming game based on RoboCom.

Instructions

Command Cycles InstSet Mobile Description Failures
CREATE a, b 100+50*a+25*b+120*c 2 0 Create a new pogram with:
instSet a; b banks; c mobile
IS, IP
MOVE 20 0 1 Move the program one field
DIE 1 0 0 Destroy the program DI
TRANS a, b 14+1*numOfInst 1 0 Transfers bank a to bank b in the program in front IS, IB
RTRANS a, b 14+1*numOfInst 1 0 Transfers bank afrom program in front to bank b IS, IB
TURN a 8 0 0 Turn by 90°;
Turn right if a >= 0 else left
JUMP a 1 0 0 Realtive jump for a instructions
AJUMP a 1 0 0 Jump to instruction a in current bank
BJUMP a, b 2 0 0 Jump to instruction b in bank a IB
SCAN #a 8 1 0 Scan 1 field in front.
Set a to:
0 if empty;
1 if enemy;
2 if friend
FARSCAN #a, #b, c 10+3*c 1 0 Scan n fields in front.
Set a to:
0 if empty;
1 if enemy;
2 if friend;
Set b to distance
IS, IP
SET #a, b 2 0 0 #a = b
ADD #a, b 2 0 0 #a = #a + b
SUB #a, b 2 0 0 #a = #a - b
MUL #a, b 2 0 0 #a = #a * b
DIV #a, b 2 0 0 #a = #a / b DZ
MOD #a, b 2 0 0 #a = #a % b DZ
MIN #a, b 2 0 0 #a = min(#a, b)
MAX #a, b 2 0 0 #a = max(#a, b)
RANDOM #a, b, c 1 0 0 #a = b + (rand() % (c - b + 1)) IP
IF a, b 2 0 0 Execute next instruction if a == b else skip it
IFN a, b 2 0 0 Execute next instruction if a != b else skip it
IFG a, b 2 0 0 Execute next instruction if a > b else skip it
IFL a, b 2 0 0 Execute next instruction if a < b else skip it
IFGE a, b 2 0 0 Execute next instruction if a >= b else skip it
IFLE a, b 2 0 0 Execute next instruction if a <= b else skip it
INIT a, b 2 0 0 Start a new task at bank a instruction b IB
BREAK 1 0 0 Stops other tasks, gives current task 100%
RESUME 1 0 0 Resume all other tasks suspended by SEIZE
SEIZE 1 0 0 Stops other tasks, gives current task 100% until RESUME
SLEEP a 1 0 0 Suspend current task a cycles
QUIT 1 0 0 Stops current task UE

Failure codes

Code Description
DH Data Hunger: Bank 1 empty and executed
DZ Division by zero
IB Invalid bank number
IS Higher Instruction Set required
MO Mobility required
DI DIE executed
IP Invalid parameter
UE Unemployment: No more tasks left in a program

Variables

Variable / Constant Description
#1 .. #20 The twenty all-purpose standard integers. They cannot be accessed by remote programs
#Pub Public variable which is accessible from all programs on the field
#Team Public variable which is accessible from all own programs on the field
#Active Determines if a current program is active (positive values) or not (zero or negative)
%Active Determines if a remote program is active (positive values) or not (zero or negative)
$Banks The number of banks which the current program has
%Banks The number of banks which the remote program has
$InstrSet The instruction set which the current program has
%InstrSet The instruction set which the remote program has
$Mobile Tells if the current program is mobile
%Mobile Tells if the remote program is mobile
$Age The current program's age in cycles
%Age The remote program's age in cycles
$Own The number of friendly programs on the board
$Others The number of enemy programs on the board
$Fields The size of the board
$ElimTrigger The elimination trigger setting
$Generation The generation of the current program
$ID Identifier which is equal for each program of the same team
and initialized to random when the game is started
$InstrPos The number of the current instruction (in its bank)
$Time The game time in cycles
$Timeout The automatic simulation timeout in cycles
$Tasks The number of tasks in the current program, incl. sleeping or seized tasks

Execution Model

Programs are evaluated oldest to newest. Order of the first program is random. Each cycle only one task is executed per program. Tasks are organized in a ring like structure. At the beginning of each cycle the next non paused task is made the active one.