Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2013, 18:14   #1
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию Гонки c тетриса JS, JQuery

Доброго дня.
Все помнят знаменитый "Тетрис" (Brick Game), с которым не было скучно. И естественно игру "Гонки", в которой надо было ехать и ехать, объезная препятствия. Решил сделать эмулятор этого самого тетриса. С самой игрой тетрис проблем не возникло, а вот с гонками имеет место быть проблема, не могу придумать алгоритм по-которому на экране будет не одно препятствие, а хотя бы 2 или 2 (естественно, чтобы была возможность их объехать). Ниже привожу код, где есть "управляемая машинка", и с "неба" падает препятствие, которое нужно объехать. (ненужный код, для этой задачи удален...). Помогите сделать, можно словами, главное, чтобы понятно.
З.Ы. Также, если найдете какие-то косяки, просьба на них указать.
З.Ы.Ы. Спасибо заранее.
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 25.01.2013, 18:15   #2
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Код:
$(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;
    },
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 25.01.2013, 18:15   #3
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Код:
    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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Гонки turtles Общие вопросы по Java, Java SE, Kotlin 1 30.11.2011 08:44
написание тетриса! Lexich Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 09.06.2011 14:47
ищу исходник тетриса фыф123 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 28.05.2011 18:11
Написание тетриса Антон Большаков Помощь студентам 3 06.06.2010 16:25