Гонки c тетриса JS, JQuery
Доброго дня.
Все помнят знаменитый "Тетрис" (Brick Game), с которым не было скучно. И естественно игру "Гонки", в которой надо было ехать и ехать, объезная препятствия. Решил сделать эмулятор этого самого тетриса. С самой игрой тетрис проблем не возникло, а вот с гонками имеет место быть проблема, не могу придумать алгоритм по-которому на экране будет не одно препятствие, а хотя бы 2 или 2 (естественно, чтобы была возможность их объехать). Ниже привожу код, где есть "управляемая машинка", и с "неба" падает препятствие, которое нужно объехать. (ненужный код, для этой задачи удален...). Помогите сделать, можно словами, главное, чтобы понятно. З.Ы. Также, если найдете какие-то косяки, просьба на них указать. З.Ы.Ы. Спасибо заранее. $(window).load(function() { race.init(); $('#game_race').click(race.start); }); //Гоночки var race = { colors: ['none','URL(img/pixel-active.png)'], car: [[0,1,0], [1,1,1], [0,1,0], [1,1,1] ], init: function() { var i, j, k; race.cells = []; for (i = -3; i < 22; ++i) { race.cells[i] = []; for (j = 1; j < 11; ++j) { k = String.fromCharCode(i + 97); race.cells[i][j] = $(['#', k, j].join('')); } } }, start: function() { race.duration = 200; race.grid = [ [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,0,0,0,0,0,0,0,0,0,1,1], [1,1,1,1,1,1,1,1,1,1,1,1] ]; $(race.bound).keypress(race.key); for (var i = 0; i < 20; ++i) { for (var j = 1; j < 11; ++j) { if (race.grid[i][j]) race.cells[i][j].css('backgroundImage', race.colors[1]); } } race.createCar(); race.createBar(); race.timer = window.setInterval(race.moveDown, race.duration); }, key: function(event) { switch(event.charCode || event.keyCode) { case 97: case 1092: case 52: case 37: race.moveLeft(); break; //Налево case 100: case 1074: case 54: case 39: race.moveRight(); break; //Направо } return false; }, moveLeft: function() { if (race.canGo(race.curCar, race.x, race.y - 3)) { race.y = race.y-3; race.refreshCar(); } }, moveRight: function() { if (race.canGo(race.curCar, race.x, race.y + 3)) { race.y = race.y+3; race.refreshCar(); } }, moveDown: function() { if (race.canGo(race.curBar, race.barx+1, race.bary)) { ++race.barx; race.refreshBar(); } else { if (race.barx == 19) { race.curBar = 0; for (var i = 0; i < 20; i++) { for (var j = 2; j < 10; j++) { if (!race.grid[i][j]) race.cells[i][j].css('backgroundImage', 'none'); } } race.createBar(); } else race.gameOver(); } }, gameOver: function() { if (race.timer) { $(race.bound).unkeypress(race.key); window.clearInterval(race.timer); race.timer = null; } for (var i = 0; i < 20; ++i) { for (var j = 1; j < 11; ++j) { race.cells[i][j].css('backgroundImage', 'none'); } } for (var i = 0; i < 4; i++) { for (var j = 0; j < 3; j++) { if (race.curCar[i][j] && race.grid[race.x0+i]) race.grid[race.x0+i][race.y0+j] = 0; } } race.curCar = 0; race.curBar = 0; }, createCar: function() { race.x0 = race.x = 16; race.y0 = race.y = 1; race.curCar = race.car; for (var i=0; i<4; i++) { for (var j=0; j<3; j++) { if (race.curCar[i][j]) race.cells[race.x0+i][race.y0+j].css('backgroundImage', race.colors[1]); } } race.marking(); }, refreshCar: function() { race.draw(race.curCar, race.x0, race.y0, race.colors[0]); race.draw(race.curCar, race.x, race.y, race.colors[1]); race.marking(); race.x0 = race.x; race.y0 = race.y; }, refreshBar: function() { race.draw(race.curBar, race.barx0, race.bary0, race.colors[0]); race.draw(race.curBar, race.barx, race.bary, race.colors[1]); race.barx0 = race.barx; race.bary0 = race.bary; }, draw: function(obj, x, y, color) { for (var i=0; i<4; i++) { for (var j=0; j<3; j++) { if (obj[i][j]) race.cells[x+i][y+j].css('backgroundImage', color); } } }, canGo: function(obj, x, y) { for (var i = 0; i < 4; i++) { for (var j = 0; j < 3; j++) { if (obj[i][j] && race.grid[x+i] && race.grid[x+i][y+j]) return false; } } return true; }, createBar: function() { race.meter++; var rand = Math.floor(Math.random()*(2 + 1))+1; if (rand == 1) race.bary0 = race.bary = 1; else if (rand == 2) race.bary0 = race.bary = 4; else race.bary0 = race.bary = 7; race.barx0 = race.barx = -3; race.curBar = race.car; for (var i=0; i<4; i++) { for (var j=0; j<3; j++) { if (race.curBar[i][j]) race.cells[race.barx0+i][race.bary0+j].css('backgroundImage', race.colors[1]); } } }, marking: function() { for (var i = 0; i < 4; i++) { for (var j = 0; j < 3; j++) { if (race.curCar[i][j] && race.grid[race.x0+i]) race.grid[race.x0+i][race.y0+j] = 0; if (race.curCar[i][j] && race.grid[race.x+i]) race.grid[race.x+i][race.y+j] = 1; } } } }; |
неужели никто мне не поможет?
|
bpystep,
Хаккер спец по игрулькам - ждите |
Deff,
Это ник человека? А можете ему написать в ЛС, чтобы заглянул в эту тему, целый день голову ломаю. |
bpystep,
По собственному опыту - насильно мил не бушь, тема коли заинтересует - то ответят... Собственно я б попробовал валить препятствия в массив вместе с трассой, который периодически - считывал и перерисовывал(массив) и дополнял А из массива уже функция отображалка в экран (код не смотрел |
ЭТО НЕМО НЕ ВЕДИТЕСЬ
|
Сделал, но корявым образом. Очень печально что на этом форуме мало кто имеет желание помогать.
//Создание заграждения 1 createBar: function() { //создаем координату игрик var rand = Math.floor(Math.random()*(2 + 1))+1; if (rand == 1) race.bary0 = race.bary = 1; else if (rand == 2) race.bary0 = race.bary = 4; else race.bary0 = race.bary = 7; race.line = rand; race.barx0 = race.barx = -3; //задаем координату икс //рандомим заграждение rand = Math.floor(Math.random()*(7 - 1 + 1))+1; race.curBar = race.barricades[rand]; for (var i=0; i<4; i++) { for (var j=0; j<3; j++) { if (race.curBar[i][j]) race.cells[race.barx0+i][race.bary0+j].css('backgroundImage', race.colors[1]); } } }, //Создание заграждения 2 createBar2: function() { var rand = Math.floor(Math.random()*(2 + 1))+1; if (rand == 1) race.bary0_2 = race.bary_2 = 1; else if (rand == 2) race.bary0_2 = race.bary_2 = 4; else race.bary0_2 = race.bary_2 = 7; race.line_2 = rand; race.barx0_2 = race.barx_2 = -3; rand = Math.floor(Math.random()*(7 - 1 + 1))+1; race.curBar_2 = race.barricades[rand]; for (var i=0; i<4; i++) { for (var j=0; j<3; j++) { if (race.curBar_2[i][j]) race.cells[race.barx0_2+i][race.bary0_2+j].css('backgroundImage', race.colors[1]); } } }, //Создание заграждения 3 createBar3: function() { //здесь тоже самое, что и в race.createBar3(); }, //Обновление поля (для заграждения 1) refreshBar: function() { race.draw(race.curBar, race.barx0, race.bary0, race.colors[0]); race.draw(race.curBar, race.barx, race.bary, race.colors[1]); race.barx0 = race.barx; race.bary0 = race.bary; }, //Обновление поля (для заграждения 2) refreshBar2: function() { race.draw(race.curBar_2, race.barx0_2, race.bary0_2, race.colors[0]); race.draw(race.curBar_2, race.barx_2, race.bary_2, race.colors[1]); race.barx0_2 = race.barx_2; race.bary0_2 = race.bary_2; }, //Обновление поля (для заграждения 3) refreshBar3: function() { //здесь тоже самое что и в race.refreshBar2(); }, moveDown: function() { if (race.curBar_2) { //обновление заграждения 2 if (race.canGo(race.curBar_2, race.barx_2+1, race.bary_2)) { ++race.barx_2; race.refreshBar2(); } else race.gameOver(); } if (race.curBar_3) { //обновление заграждения 3 if (race.canGo(race.curBar_3, race.barx_3+1, race.bary_3)) { ++race.barx_3; race.refreshBar3(); } else race.gameOver(); } //обновление заграждения 1 if (race.canGo(race.curBar, race.barx+1, race.bary)) { if (race.barx == 5) race.createBar2(); //создание заграждения 2 if (race.barx == 10) race.createBar3(); //создание заграждения 3 ++race.barx; race.refreshBar(); } else { if (race.barx == 19) { //если заграждение достигло низа экрана //2 заграждение теперь 1 race.curBar = race.curBar_2; race.line = race.line_2; race.barx0 = race.barx0_2; race.bary0 = race.bary0_2; race.barx = race.barx_2; race.bary = race.bary_2; //3 заграждение теперь 2 race.curBar_2 = race.curBar_3; race.line_2 = race.line_3; race.barx0_2 = race.barx0_3; race.bary0_2 = race.bary0_3; race.barx_2 = race.barx_3; race.bary_2 = race.bary_3; race.createBar3(); // создание нового заграждения } else race.gameOver(); //иначе смерть xD (конец игры) } }, |
megaupload,
уважаемый, укажите русским языком, что вы имели в виду. |
bpystep,
megaupload, птица странная,(по большей части флудер высоких материй Основа ответов интересно изложенный материал, примеры рабочих кодов, скриншоты идей... У многих сейчас послепраздничное затишье и способность думать в простых вариациях. Основа ответов - читательский интерес к топику, (не смотря на всё лично волнующее) |
Зы - длиннокод тяжел для восприятия, - интересно выдавать материал минимально необходимым, либо бить на части и скрывать малонужные куски под спойлером
[HTML run hide][/html] |
Часовой пояс GMT +3, время: 16:03. |