package advancedsystemsmanager.client.gui.pong; import advancedsystemsmanager.client.gui.GuiColourSelector; import advancedsystemsmanager.client.gui.GuiManager; import advancedsystemsmanager.client.gui.IInterfaceRenderer; import advancedsystemsmanager.client.gui.fonts.FontRenderer; import java.awt.*; public class GuiPong implements IInterfaceRenderer { private Ball ball; private Paddle player; private PaddleAI ai; private int move = 5; private int winCondition = 9; private int height, width, x, y; private FontRenderer fontRenderer; private boolean ended; public GuiPong() { ended = false; fontRenderer = new FontRenderer(new Font(Font.SANS_SERIF, Font.PLAIN, 32), false); // TODO proper pong font x = 16; y = 16; height = GuiManager.GUI_HEIGHT - 2 * y; width = GuiManager.GUI_WIDTH - 2 * x; int yBorder = 5; int rectHeight = 50; ball = new Ball(width / 2 - 2, height / 2 - 2, 5, y + yBorder, y + height - yBorder); player = new Paddle(x * 2, (height - rectHeight) / 2, 5, rectHeight, y + yBorder, y + height - yBorder); ai = new PaddleAI(width, height / 2, 5, rectHeight, y + yBorder, y + height - yBorder); resetGame(); } private void resetGame() { if (player.score > winCondition || ai.score > winCondition) { finish(); return; } ball.reset(); player.reset(); ai.reset(); } private void finish() { ended = true; } @Override public void draw(GuiManager gui, int mX, int mY) { if (!ended) { update(); int border = 5; gui.drawRectangle(x, y, x + width, y + height, GuiColourSelector.WHITE); gui.drawRectangle(x + border, y + border, x + width - border, y + height - border, GuiColourSelector.BLACK); int y = this.y + border; int x = this.x + width / 2 - 2; while (y < this.y + height) { gui.drawRectangle(x, y, x + 4, y + 8, GuiColourSelector.WHITE); y += 16; } ball.draw(gui); player.draw(gui); fontRenderer.drawString(this.x - 40 + width / 2, this.y, player.getScore(), 0xFFFFFF); ai.draw(gui); fontRenderer.drawString(this.x + 20 + width / 2, this.y, ai.getScore(), 0xFFFFFF); } else { fontRenderer.drawString(this.x + width / 4, this.y, "Thx for playing", 0xFFFFFF); fontRenderer.drawScaledString(this.x + width / 2 - 40, this.y + 40, (player.score > winCondition ? "Player" : "AI") + " wins", 0xFFFFFF, 26); } } private void update() { if (ball.checkScore(x + 5, player, width + x - 5, ai)) resetGame(); ai.update(ball, move); player.update(move); ball.update(player, ai); } @Override public void drawMouseOver(GuiManager gui, int mX, int mY) { } @Override public void onClick(GuiManager gui, int mX, int mY, int button) { } @Override public void onDrag(GuiManager gui, int mX, int mY) { } @Override public void onRelease(GuiManager gui, int mX, int mY, int button) { } @Override public boolean onKeyTyped(GuiManager gui, char c, int k) { return false; } @Override public void onScroll(int scroll) { } }