Тетрис на Java

Тема в разделе "Разработка игр и приложений к ним", создана пользователем Digit, 1 май 2009.

Статус темы:
Закрыта.
  1. Digit

    Digit Гость

    Помогите пожалуйста с написанием тетриса. Так как мои знания в ООП ограничены, я даже не знаю с чего начать решение этой задачи. Буду рад и исходникам игры, и советам по реализации.
     
  2. procedure

    procedure Гость

    Ну если не учесть многого, предполагаю так:

    1 Рисуете на плоскости сетку.
    2 Каждую ячейку которой представляете как графический объект.
    3 Каждая ячейка имеет класс, что то типа:
    синтаксис C#:
    Код (Text):
    public class Cell
    {
    public Cell()
    {
    status = false;
    }

    private bool _status;
    public bool status
    {
    get { return this._status; }
    set
    {
    _status = value;
    if (value)
    _deactivate();
    else
    _activate();
    }
    }

    private void _deactivate()
    {
    Console.WriteLine("deactive");
    // задание стандартного фона для ячейки
    }

    private void _activate()
    {
    Console.WriteLine("active");
    // задание нужного фона
    }


    }
    4. Далее, нужно создать двумерный массив cells, типа Cell. Или создать класс Cells, что в общем-то правильней.
    5. Остальное дело алгоритмизации процесса.

    Дополнения:

    + нужно подписаться на обработчики событий нажатия клавиш стрелок.
    вроде все. Похоже на олимпиадную задачку)
     
  3. Emme

    Emme Гость

    не надо никаких классов.Надо массив клеток.Например рядов вверх 30 и рядов 20 по горизонтали ..Итак
    int а[30][20]; ....

    Для начала обнуляем массив,То есть клетки чистые

    for(int i=1;i<30;i++) {
    for(int u=1;u<20;u++) {
    a=0;
    }}

    Я написал три дня назад Тетрис.Есть исходник.Делал на опенгл.Могу выслать
     
  4. Zato

    Zato Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Господа, вы хотя бы одну книгу по ООП прочитали прежде чем давать такие советы
     
  6. Zato

    Zato Гость

    Чем тебе не нравится идея создания через массив?
     
  7. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Если тебе эта идея нравится, то зайди на тот же codeproject и посмотри как делают подобные игры
     
  8. etc

    etc Гость

    как в яве без класов?
     
  9. Emme

    Emme Гость

    я сделал через массив.Там было a[28][20]....28 клеток вверх и 20 по горизонтали.Очень удобно оперировать такиими данными.А если создавать для каждой клетки класс то тяжеловато будет.И уложился я в мегабайт кода.

    (ООП это кнопочки Лабелы,комбобоксы и все такое.И при чем тут тетрис,какая связь с ООП.Вопрос я завел про изначальное сохранение закрашенных клеток)

    Вот: Если фигура "куб" То:
    Код (Text):
    //зарисовка занятых клеток
    pausa++;
    pausa_vk_left_right++;


    //22222222222222222
    //ряд 2 по оси z 2222222222222222222222222222222222222222
    if(figura_z_a1==2) {

    //движение фигуры сверху
    //glPushMatrix();
    //glTranslatef(figura_x,figura_y,figura_z-1);


    if(figura[figura_schetchik]==1) {
    if(pausa>pausa_dlya_pausa ) {
    //отредактировано на а1
    if(a2[figura_x_a1-1][figura_x_a2]==0 & a2[figura_x_a1-1][figura_x_a2+1]==0 & figura_x_a1>1 ){
    //if(figura_x_a1>1) {
    figura_x_a1-=1;
    figura_y-=0.5;
    pausa=0;}
    else {
    a2[figura_x_a1+1][figura_x_a2]=1;
    a2[figura_x_a1+1][figura_x_a2+1]=1;
    a2[figura_x_a1][figura_x_a2]=1;
    a2[figura_x_a1][figura_x_a2+1]=1;


    figura_schetchik+=1;
    glTranslatef((28-figura_x_a1)/0.5,(20-figura_y)/0.5,0);
    figura_x=5;
    figura_y=13;
    figura_x_a1=27;
    if(figura[figura_schetchik]==2 & b_povorota==0) figura_x_a2=11;
    if(figura[figura_schetchik]==2 & b_povorota==1) figura_x_a2=9;
    if(figura[figura_schetchik]==6 & b_povorota6==1) figura_x_a2=9;
    if(figura[figura_schetchik]==6 & b_povorota6==2) figura_x_a2=10;
    if(figura[figura_schetchik]==6 & b_povorota6==3) {figura_x_a2=9;figura_x_a1=26;}
    if(figura[figura_schetchik]==6 & b_povorota6==4) figura_x_a2=10;
    if(figura[figura_schetchik]==7 & b_povorota6==3) {figura_x_a2=9;figura_x_a1=28;}
    if(figura[figura_schetchik]==7 & b_povorota6==1) {figura_x_a2=9;figura_x_a1=27;}
    if(figura[figura_schetchik]==7 & b_povorota6==2) {figura_x_a2=10;figura_x_a1=28;}
    if(figura[figura_schetchik]==7 & b_povorota6==4) {figura_x_a2=10;figura_x_a1=28;}
    if(figura[figura_schetchik]==8 | figura[figura_schetchik]==9 ) {figura_x_a2=10;figura_x_a1=27;}

    if(figura[figura_schetchik]==3) figura_x_a2=11;
    if(figura[figura_schetchik]==1 ) figura_x_a2=11;
    if(figura[figura_schetchik]==4 | figura[figura_schetchik]==5) figura_x_a2=11;
    pausa=0;
    pausa_dlya_pausa=20;}//}

    }}
     
  10. slashvlz

    slashvlz Гость

    ахахахахахахахххаа :) :)
    зарегился тока чтоб это написать, надеюсь автор поста выше уже разобрался с ООП, спасибо повеселил ))))))))
     
  11. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Почетная цель.
    Заходите еще, у нас всякое бывает..
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей