Цикл действия, пока не произойдет другой случай | Понг с Java - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь запрограммировать игру Понг с библиотекой " bGL OOP".

(bGL OOP - это библиотека, которую вы можете использовать для создания геометрических фигур c. Эти рисунки можно редактировать, перемещая или рисуя их.)

Я уже создал самую важную элементы. Но теперь у меня есть проблемы с их использованием:

Что я планирую:

У меня уже есть лопасти для мяча, которыми вы можете управлять с помощью кнопок (это работает) , Но автоматическое движение мяча c не работает должным образом. Мяч должен двигаться в указанном направлении c, если он находится в допустимой зоне, например, в зоне для игры. Если он находится в углу этой области, он должен отскочить в противоположном направлении. Так что, если мяч слишком высокий, он должен подпрыгнуть до дна. Если мяч слишком далеко к правой стороне, он должен отскочить к левой стороне. Смена направлений уже работает. Но если он подпрыгивает, например, до дна, потому что мяч был слишком высок, мяч сразу же go снова поднимется, потому что это установлено в направлении, в котором шар должен go, если он находится в допустимой зоне для игры.

Таким образом, мяч не движется ни в каком направлении. Это просто дрожит.

Где мне нужна помощь:

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

Есть ли возможность избежать этих немедленных действий и позволить мячу двигаться в определенных c направлениях, пока он не окажется в другой области, в которой он должен отскочить назад? Может быть, как поместить движение в al oop, чтобы оно не проверяло, находится ли оно за пределами зоны для игры?

Поскольку я из Германии, часть моего кода написана на немецком языке. Если вы хотите проверить команды со ссылкой на странице bGL OOP выше, вы можете посмотреть мой оригинальный код ниже.

Переводная версия:

import bGLOOP.*;

public class game {
    game() {
        new GLKamera();
        GLLight Light;
        GLKeyboard Keyboard_Input;      
        GLMouse Mouse_Input;        
        new GLHeaven();

        Light = new GLLight(100,100,100);

        GLLightobject Ball;
        Ball = new GLLightobject(new GLKugel(0, 0, 0, 7));
        Ball.setColor(.4, .5, .2);
        Ball.scale(1.5);   

        //defining inputs      
        Keyboard_Input = new GLKeyboard(); 
        Mouse_Input = new GLMouse();
        //defining inputs

        GLCuboid Block_player1; //Block left
        Block_player1 = new GLCuboid(-500, 50, 0, 20, 150, 0);

        GLCuboid Block_player2; //Block right
        Block_player2 = new GLCuboid(500, 50, 0, 20, 150, 0);

        double Factor_X = 3;
        double Factor_Y = 2;


        while (true){ //checking of all inputs 
            if (Keyboard_Input.isPressed()){ //keyboard inputs
                if (Keyboard_Input.up()) { 
                    Block_player2.move(0,4,0);
                    Sys.wait(70);
                }
                if (Keyboard_Input.down()) {
                    Block_player2.move(0,-4,0);
                    Sys.wait(70);                   
                }
                char button = Keyboard_Input.giveCharacter();
                System.out.print(button);

                if (button == 'w') {
                    Block_player1.move(0,4,0);
                    Sys.wait(10);
                }
                if (button == 's') {
                    Block_player1.move(0,-4,0);
                    Sys.wait(10);
                }         
            }

            while (Ball.gibY() <= 30 && Ball.gibY() >= -30) {
                Ball.move(Factor_X,Factor_Y,0);
                Sys.wait(10);
            }
            if (Ball.gibY() > 30) {
                Ball.move(Factor_X-0.5,-Factor_Y,0);
                Sys.wait(10);
            }
            if (Ball.gibY() < -30) {
                Ball.move(Factor_X+0.5,Factor_Y,0);
                Sys.wait(10);
            }
            if (Ball.gibX() > 30) {
                Ball.move(-Factor_X,Factor_Y+0.3,0);
                Sys.wait(10);
            }
            if (Ball.gibX() < -30) {
                Ball.move(Factor_X+0.5,Factor_Y,0);
                Sys.wait(10);
            }
        }
    }
}

Мой оригинальный код:

import bGLOOP.*;

public class Spiel {
    Spiel() {
        new GLKamera();
        GLLicht Licht;
        GLTastatur Tastatur_Input;      
        GLMaus Maus_Input;        
        new GLHimmel();

        Licht = new GLLicht(100,100,100);

        GLLichtobjekt Ball;
        Ball = new GLLichtobjekt(new GLKugel(0, 0, 0, 7));
        Ball.setzeFarbe(.4, .5, .2);
        Ball.skaliere(1.5);   

        //Inputs Anfang        
        Tastatur_Input = new GLTastatur(); 
        Maus_Input = new GLMaus();
        //Inputs Ende

        GLQuader Block_Spieler1; //Block links
        Block_Spieler1 = new GLQuader(-500, 50, 0, 20, 150, 0);

        GLQuader Block_Spieler2; //Block rechts
        Block_Spieler2 = new GLQuader(500, 50, 0, 20, 150, 0);

        double Faktor_X = 3;
        double Faktor_Y = 2;


        while (true){ //checking of all inputs 
            if (Tastatur_Input.istGedrueckt()){ //keyboard inputs
                if (Tastatur_Input.oben()) { 
                    Block_Spieler2.verschiebe(0,4,0);
                    Sys.warte(70);
                }
                if (Tastatur_Input.unten()) {
                    Block_Spieler2.verschiebe(0,-4,0);
                    Sys.warte(70);                   
                }
                char taste = Tastatur_Input.gibZeichen();
                System.out.print(taste);

                if (taste == 'w') {
                    Block_Spieler1.verschiebe(0,4,0);
                    Sys.warte(10);
                }
                if (taste == 's') {
                    Block_Spieler1.verschiebe(0,-4,0);
                    Sys.warte(10);
                }         
            }

            while (Ball.gibY() <= 30 && Ball.gibY() >= -30) {
                Ball.verschiebe(Faktor_X,Faktor_Y,0);
                Sys.warte(10);
            }
            if (Ball.gibY() > 30) {
                Ball.verschiebe(Faktor_X-0.5,-Faktor_Y,0);
                Sys.warte(10);
            }
            if (Ball.gibY() < -30) {
                Ball.verschiebe(Faktor_X+0.5,Faktor_Y,0);
                Sys.warte(10);
            }
            if (Ball.gibX() > 30) {
                Ball.verschiebe(-Faktor_X,Faktor_Y+0.3,0);
                Sys.warte(10);
            }
            if (Ball.gibX() < -30) {
                Ball.verschiebe(Faktor_X+0.5,Faktor_Y,0);
                Sys.warte(10);
            }
        }
    }
}

...