Według mnie sala kinowa to jest dosyć skomplikowany problem ponieważ np w warszawie IMAX czy multikino nie mają miejsc siedzących na planie prostokąta tylko raczej coś co pokazuje niżej na obrazku i osobiście albo robiłbym go na elemencie map w html'u albo na canvasie.
Poniżej przykładowy kod. Pisałem go 15 minut w pracy także wiele pozostawia do życzenia (pomijam fakt ze z JS to ja noga jestem

). Na przykładzie każde miejsce ma 4 stany które decydują o wyświetlonym kwadraciku na ekranie. Stanu czarnego i czerwiobegi nie można zmienić. Później to tylko przy wciśnięciu przycisku pchać do posta i włala.
- Czarny - Tam gdzie ludki chodzą
- Czerwony - Ludki wcześniej zarezerowały
- Biały - Można kupić
- Zielony - Chcesz kupić
Screen:
http://scr.hu/1dwz/8vki2 <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://raw.githubusercontent.com/caleb531/jcanvas/master/jcanvas.min.js"></script> var SQUARE_SIDE = 16;
var SQUARE_COLOR_START = 0;
var SQUARE_COLOR_FINISH = 3;
var SQUARE_COLOR_WHITE = 1;
var SQUARE_COLOR_GREEN = 2;
var SQUARE_COLOR_RED = 3;
var SQUARE_DISABLED = [0, 3];
var places = [
[ 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 1, 1, 1, 0, 1, 1 ],
[ 0, 1, 1, 1, 1, 0, 1, 1 ],
[ 0, 1, 1, 1, 1, 0, 1, 1 ],
[ 0, 1, 1, 1, 1, 0, 1, 1 ],
[ 1, 1, 1, 3, 3, 1, 1, 1 ],
[ 1, 1, 1, 1, 1, 1, 1, 1 ],
[ 1, 3, 1, 1, 1, 1, 1, 1 ]
];
$(document).ready(function(){
$('canvas').attr("width", (places[0].length + 1) * SQUARE_SIDE).attr("height", places.length * SQUARE_SIDE);
drawMap();
$('canvas').click(function(evt){
var y = Math.floor(evt.offsetY / SQUARE_SIDE)
var x = Math.floor(evt.offsetX / SQUARE_SIDE);
if( $.inArray(places[y][x], SQUARE_DISABLED) != -1 )
return;
places[y][x] += 1;
if( places[y][x] == SQUARE_COLOR_RED )
places[y][x] = SQUARE_COLOR_WHITE;
drawMap();
});
});
function drawMap()
{
for( var y = 0; y < places.length; y++ )
for( var x = 0; x < places[y].length; x++ )
{
var color = '#000';
switch(places[y][x])
{
case SQUARE_COLOR_WHITE: color = '#FFF'; break;
case SQUARE_COLOR_GREEN: color = 'green'; break;
case SQUARE_COLOR_RED: color = 'red'; break;
}
$('canvas').drawRect({
fillStyle: color,
x: x * SQUARE_SIDE, y: y * SQUARE_SIDE,
width: SQUARE_SIDE - 1,
height: SQUARE_SIDE - 1,
fromCenter: false
});
}
}
canvas { background: black; }
<canvas width="200" height="200"/>