• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Тетрис на Java

  • Автор темы Digit
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

Digit

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

procedure

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

1 Рисуете на плоскости сетку.
2 Каждую ячейку которой представляете как графический объект.
3 Каждая ячейка имеет класс, что то типа:
синтаксис C#:
Код:
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. Остальное дело алгоритмизации процесса.

Дополнения:

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

Emme

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

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

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

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

Zato

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

Zato

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

European

Если тебе эта идея нравится, то зайди на тот же codeproject и посмотри как делают подобные игры
 
E

Emme

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

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

Вот: Если фигура "куб" То:
Код:
//зарисовка занятых клеток
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;}//} 

}}
 
S

slashvlz

ООП это кнопочки Лабелы,комбобоксы и все такое.И при чем тут тетрис,какая связь с ООП.
ахахахахахахахххаа :) :)
зарегился тока чтоб это написать, надеюсь автор поста выше уже разобрался с ООП, спасибо повеселил ))))))))
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!