С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70

Объясните реализацию логики тетриса

27.07.2016, 11:30. Показов 6132. Ответов 65

Студворк — интернет-сервис помощи студентам
Добрый день я учу Java и пробую практиковаться. Собрал свой первый арканойд на JavaFX. Теперь пытаюсь собрать тетрис. Сделал класс поля с массивом нулей и нарисовал его. Для тестирования загнал в этот массив вручную вместо нулей несколько единиц в качестве возможной фигурки и все это рендерится в одном методе по условию проверки на 1 или 0.

Но я не понимаю как мне передавать в массив фигурку и двигать ее там, перерисовывая весь массив на каждый сдвиг фигурки ? Если я правильно понимаю конечно. Нигде нет подробного объяснения. Подскажите как надо и как лучше
Миниатюры
Объясните реализацию логики тетриса  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2016, 11:30
Ответы с готовыми решениями:

Объясните реализацию формы
Есть форма, приложенная на скрин шоте. Я не совсем понимаю метод реализации данной формы. Что это получается какой то input text + select...

Объясните реализацию интерфейсов на примере интерфейса IAny
На лекциях про IAny ничего не объясняли, но в билете есть такой вопрос. Поиск в интернет выдал только такой кусок кода. Помогите пожалуйста...

пытаюсь сделать реализацию через считывание из файла кол-ва чисел, i,но незнаю как сделать реализацию из файла в массив и сортировки.
В файле input.txt находится неизвестное количество вещественных чисел в интервале . Выцапарать их оттуда, отсортировать по убыванию модуля...

65
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
27.07.2016, 11:31
Цитата Сообщение от Sergio89 Посмотреть сообщение
перерисовывая весь массив на каждый сдвиг фигурки ?
да.
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
27.07.2016, 11:38  [ТС]
это понятно ) я просто переспросил, что удостоверится, что это оптимально и не сильно затратно по ресурсам.

Но как передавать туда фигурку, изменяя ее положение в массиве и очищая ячейки из прошлой позиции ?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
27.07.2016, 14:03
Цитата Сообщение от Sergio89 Посмотреть сообщение
Но как передавать туда фигурку, изменяя ее положение в массиве и очищая ячейки из прошлой позиции ?
что значит как? Ходите по массиву. Записываете единички куда надо, нолики куда надо.....
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
27.07.2016, 14:20  [ТС]
не понимаю и не могу сформулировать ( Как доска узнает в каком месте надо ставить 1, а когда не надо ?
ну не могу я понять еще пока. И нет ни одного тутора русского объясняющего.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
27.07.2016, 15:45
Sergio89, есть у вас например квадратная матрица и там на координате [5][7] стоит 1, а остальные все нули. Как вы теперь эту 1 переместите на три клетку вправо? Правильно прибавите три ко второй координате и обнулите старую координату. То есть запишите 0 в [5][7] и запишите 1 в [5][10]. Так же и с фигурками, только там будет не одна единица, а несколько. Это если вы хотите на совсем низком уровне. Возможно в JavaFX можно просто нарисовать фигурки и проверять их на коллизии с другими фигурками.
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
27.07.2016, 16:07  [ТС]
Вот простой класс доски
в конструкторе заполняется массив нулями и там же я вручную ставлю единицы
У фигурки будет свой массив. Но я все равно не поймаю паттерн, по которому переносить единицы из массива фигурки в массив доски. Мне необходим какой-то простой наглядный пример. Сорри я гуманитарий.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package sample;
 
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
 
public class Board extends Pane {
    private static final int ROWS = 25;
    private static final int COLS = 17;
 
    int[][] board = new int[ROWS][COLS];
    private Rectangle rect;
 
    public Board(){
        for(int i = 0; i<ROWS; i++){
            for(int j = 0; j<COLS; j++){
             board[i][j] = 0;
            }
        }
        board[1][6] = 1;
        board[1][7] = 1;
        board[2][7] = 1;
        board[3][7] = 1;
    }
 
    public void draw(){
        for(int i= 0; i<ROWS; i++){
            System.out.println();
            for(int j = 0; j<COLS; j++){
                if(board[i][j] == 0){
                    rect = new Rectangle(15,15);
                    rect.setFill(Color.rgb(255,200,100,1));
                    rect.setTranslateY(i*(15+1));
                    rect.setTranslateX(j*(15+1));
                    getChildren().add(rect);
                }
                else{
                    rect = new Rectangle(15,15);
                    rect.setTranslateY(i*(15+1));
                    rect.setTranslateX(j*(15+1));
                    rect.setFill(Color.RED);
                    getChildren().add(rect);
                }
                System.out.print(board[i][j]);
            }
        }
    }
}
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
28.07.2016, 16:17  [ТС]
Никто не делал тетрис ? я смотрел разные исходники - там используют систему координат в параметрах фигур, но я не понимаю как она работает - мне всего лишь не хватает объяснения.

PS
периодически буду поднимать эту тему вверх ветки
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
28.07.2016, 17:28
Цитата Сообщение от Sergio89 Посмотреть сообщение
там используют систему координат в параметрах фигур, но я не понимаю как она работает
так может вы рано за тетрис взялись? Наберитесь опыта на более легкий программах, а потом вернитесь в этой.
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
28.07.2016, 17:35  [ТС]
Так я для этого и хочу набраться опыта и понять принцип. Все ровно практиковаться больше не начем
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
30.07.2016, 13:13  [ТС]
Продолжаем долбиться. Пойдем от обратного.
Я нарисовал на поле нулей одну единственную единицу. Написал обработчик для клавиш A и D, по нажатию,
которых я циклом нахожу единицу, должен заменить на ноль и поставить в соседней ячейке

Как мне мне перемещать эту единицу по полю и не получить эксепшен выхода за границы массива ?


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void movePieces(KeyEvent e){
        
     for(int i= 0; i<ROWS; i++){
            for(int j=0; j<COLS; j++){
                if(board[i][j] == 1){
                    if(e.getCode()== KeyCode.A){
                        board[i][j]= 0;
                        board[i][-?-] = 1;
                        System.out.println("A");
                    }
                    else if(e.getCode()== KeyCode.D){
                        board[i][j] = 0;
                        board[i][-?-] = 1;
                        System.out.println("D");
                    }
                }
            }
        }
    }
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2016, 13:54
Цитата Сообщение от Sergio89 Посмотреть сообщение
Как мне мне перемещать эту единицу по полю и не получить эксепшен выхода за границы массива ?
думаю чтобы не получать этот ексепшн, достаточно не выходить за границы массива. Попробуйте.
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
30.07.2016, 14:03  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
думаю чтобы не получать этот ексепшн, достаточно не выходить за границы массива. Попробуйте.
Серьезно ? я вроде же спросил как мне это сделать.
Как получить соседнюю координату, если [j+1] мгновенно приводит к этому
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2016, 14:49
Sergio89, если у вас массив размером N, то последняя координата будет именть индекс N-1 как говорит К.О
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
30.07.2016, 15:15  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Sergio89, если у вас массив размером N, то последняя координата будет именть индекс N-1 как говорит К.О
знаю, дальше то что ? блин я как будто великую тайну пытаюсь узнать
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2016, 15:51
Sergio89, что значит что? Все. Проверяете если ваш индекс больше N-1 или нет. В чем проблема то?
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
30.07.2016, 15:57  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Sergio89, что значит что? Все. Проверяете если ваш индекс больше N-1 или нет. В чем проблема то?
В том что это не получается сделать. Оно неправильно работает все равно. я и тернарную переменную делал и еще одно условие запихивал, но как только я нажимаю клавишу элемент либо мгновенно уходит в конец строки, либо вообще пропадает.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2016, 16:00
Sergio89, смотрите в дебаге что не так.

Цитата Сообщение от Sergio89 Посмотреть сообщение
я и тернарную переменную делал
нет такого понятия как тренарная переменная
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 70
31.07.2016, 13:49  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
[nick]нет такого понятия как тренарная переменная
Если в переменной тернарный оператор, то переменная тернарная )) не вижу причин ее так не называть )

Добавлено через 21 час 43 минуты
235 просмотров, но только один человек отвечает
На youtube 0 русских туторов по написанию тетриса
0 толковых статей по написанию тетриса

Никто не пробовал писать свой тетрис ?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
31.07.2016, 14:12
Sergio89, вы толком не можете сформулировать вопрос, поэтому вам никто не отвечает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.07.2016, 14:12
Помогаю со студенческими работами здесь

Программирование тетриса
Ребята , есть попытка создания игры &quot;ТЕТРИС&quot; на VS 2010 . Железо PC не позволяет поздние версии.Но суть вопроса не в этом. Дело в том,...

Программирование тетриса
Ребята , есть попытка создания игры &quot;ТЕТРИС&quot; на VS 2010 . Железо PC не позволяет поздние версии.Но суть вопроса не в этом. Дело в том,...

Проблема тетриса
Привет, форум. Появлялась идея изучить хотя-бы азы PyGame, принял решение написать Тетрис. Мой код конечно так себе ибо я не знаю как в...

Графическая часть Тетриса
Помогите с графической частью Тетриса. Создание стакана, фигур и их вывод. Пишу для графического окна. (Гуглом пользоваться умею, но...

Статьи по созданию тетриса
Всем привет. Есть ли какие нибудь статьи по созданию тетриса на vb.net? Если знаете какие нибудь, то скиньте пожалуйста. Заранее спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru