Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
6 / 6 / 0
Регистрация: 17.05.2020
Сообщений: 81

Подход к ООП

27.04.2021, 12:35. Показов 849. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Понимаю что глупый вопрос, но все же. Есть код :
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import java.util.Random;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
import javafx.util.Duration;
import logic.HeroRacket;
 
public class Tennis extends Application {
 
    private static final int width = 800;
    private static final int height = 600;
 
    private static final int PLAYER_HEIGHT = 100;
    private static final int PLAYER_WIDTH = 15;
 
    private static final double BALL_R = 15;
    private int ballYSpeed = 1;
    private int ballXSpeed = 1;
 
    private int playerOneXPos = 0;
    private double playerOneYPos = height / 2;
 
    private double playerTwoXPos = width - PLAYER_WIDTH;
    private double playerTwoYPos = height / 2;
 
    private double ballXPos = width / 2;
    private double ballYPos = height / 2;
 
    private int scoreP1 = 0;
    private int scoreP2 = 0;
 
    private boolean gameStarted;
 
 
    public void start(Stage stage) {
        Canvas canvas = new Canvas(width, height);
        GraphicsContext gc = canvas.getGraphicsContext2D();
        Timeline tl = new Timeline(new KeyFrame(Duration.millis(10), e -> run(gc)));
        tl.setCycleCount(Timeline.INDEFINITE);
        canvas.setOnMouseMoved(e ->  playerOneYPos  = e.getY());
        canvas.setOnMouseClicked(e ->  gameStarted = true);
        stage.setScene(new Scene(new StackPane(canvas)));
        stage.show();
        tl.play();
    }
 
    private void field(GraphicsContext gc){
        gc.setFill(Color.GREEN);
        gc.fillRect(0, 0, width, height);
        gc.setFill(Color.WHITE);
        gc.setFont(Font.font(25));
    }
    private void showTextForGame(GraphicsContext gc){
        gc.setStroke(Color.BLACK);
        gc.setTextAlign(TextAlignment.CENTER);
        gc.strokeText("Click to Start", width / 2, height / 2);
    }
    private void run(GraphicsContext gc) {
        field(gc);
 
        if(gameStarted) {
            ballXPos+=ballXSpeed;
            ballYPos+=ballYSpeed;
            if(ballXPos < width - width  / 4) {
                playerTwoYPos = ballYPos - PLAYER_HEIGHT / 2;
            }  else {
                playerTwoYPos =  ballYPos > playerTwoYPos + PLAYER_HEIGHT / 2 ?playerTwoYPos += 1: playerTwoYPos - 1;
            }
            gc.fillOval(ballXPos, ballYPos, BALL_R, BALL_R);
        } else {
            showTextForGame(gc);
            ballXPos = width / 2;
            ballYPos = height / 2;
            ballXSpeed = new Random().nextInt(2) == 0 ? 1: -1;
            ballYSpeed = new Random().nextInt(2) == 0 ? 1: -1;
        }
        if(ballYPos > height || ballYPos < 0) ballYSpeed *=-1;
        if(ballXPos < playerOneXPos - PLAYER_WIDTH) {
            scoreP2++;
            gameStarted = false;
        }
        if(ballXPos > playerTwoXPos + PLAYER_WIDTH) {
            scoreP1++;
            gameStarted = false;
        }
        if( ((ballXPos + BALL_R > playerTwoXPos) && ballYPos >= playerTwoYPos && ballYPos <= playerTwoYPos + PLAYER_HEIGHT) ||
                ((ballXPos < playerOneXPos + PLAYER_WIDTH) && ballYPos >= playerOneYPos && ballYPos <= playerOneYPos + PLAYER_HEIGHT)) {
            ballYSpeed += 1 * Math.signum(ballYSpeed);
            ballXSpeed += 1 * Math.signum(ballXSpeed);
            ballXSpeed *= -1;
            ballYSpeed *= -1;
        }
        showScore(gc);
        showTwoPlayer(gc);
        showOnePlayer(gc);
    }
    public void showScore(GraphicsContext gc){
        gc.fillText(scoreP1 + "\t\t\t\t\t\t\t\t" + scoreP2, 400, 100);
    }
    public void showOnePlayer(GraphicsContext gc){
        gc.fillRect(playerOneXPos, playerOneYPos, PLAYER_WIDTH, PLAYER_HEIGHT);
    }
    private void showTwoPlayer(GraphicsContext gc){
        gc.fillRect(playerTwoXPos, playerTwoYPos, PLAYER_WIDTH, PLAYER_HEIGHT);
    }
}
Как можно его переделать чтобы код соответствовал ООП?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2021, 12:35
Ответы с готовыми решениями:

Ребята , как реализовать это выражение используя ООП подход?
У меня никак не идет работа с классами :(

Правильный подход ООП
Здравствуйте! Создал тестовый пример для себя для изучения. Может кто то переделать проект в соответствии всем законам ООП. Я думаю многим...

ООП или Структурный подход?
Доброго времени суток! Могу ли я использовать процедурный подход программирования в PHP для разработки портала бронирование отелей с...

10
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
27.04.2021, 15:17
А че этот класс вообще должен делать?
0
6 / 6 / 0
Регистрация: 17.05.2020
Сообщений: 81
27.04.2021, 15:18  [ТС]
Игра теннис
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
27.04.2021, 15:21
Tihon18, конкретненько так сказанул.
А почему выбрал JavaFX, а не Java Swing, например?

Добавлено через 34 секунды
Цитата Сообщение от Tihon18 Посмотреть сообщение
import logic.HeroRacket;
И вот это что?
0
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
27.04.2021, 15:25
Coffeini, А зачем Swing, если FX богаче и удобнее?
0
6 / 6 / 0
Регистрация: 17.05.2020
Сообщений: 81
27.04.2021, 15:42  [ТС]
Это по ошибке)
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
27.04.2021, 15:56
Цитата Сообщение от asdzxc Посмотреть сообщение
А зачем Swing, если FX богаче и удобнее?
asdzxc, да я просто причину выбора хотел узнать.
Ну и масштабирование, как по мне, не очень удобное, если пытаться что-то сложнее статичной формочки сделать.
Цитата Сообщение от Tihon18 Посмотреть сообщение
Это по ошибке)
Ты про что?
0
6 / 6 / 0
Регистрация: 17.05.2020
Сообщений: 81
27.04.2021, 16:10  [ТС]
Про import logic.HeroRacket

Добавлено через 11 секунд
Сможете помочь?
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
27.04.2021, 16:40
Цитата Сообщение от Tihon18 Посмотреть сообщение
Как можно его переделать чтобы код соответствовал ООП?
Никак.
0
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
27.04.2021, 17:28
ну в общем можно прикрутить паттерн MVC сюда и будет ООП
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
27.04.2021, 19:15
Цитата Сообщение от asdzxc Посмотреть сообщение
и будет ООП
Оно уже и так есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2021, 19:15
Помогаю со студенческими работами здесь

ООП подход. я на правильном пути?
Всем привет! После нескольких лет программирования на Delphi и изучения Java SE решил попробовать написать программу на Delphi с...

Mysqli ООП или процедурный подход
Вот интересно, услышать мнение специалистов, что лучшие использовать при работе с mysqli ООП или процедурный подход, что больше используют...

Изменение программы на ООП подход для unit-тестирования
Помогите переписать данную программу чтобы она была как &quot;Классы&quot; с декомпозицией (отделить логику от программы) для автотеста в visual...

Дерево АВЛ: реализовать в данной программе ООП-подход
Помогите реализовать в данной программе ООП-подход(раскидать всё по классам) #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Где лучше учить ООП PHP ? И зачем нужен ООП
Здравствуйте ! До того как начел учить ООП я кайфовал от программирования, после того как начел учить ООП нет мотивации ну и т.д общем...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru