0% found this document useful (0 votes)
65 views19 pages

Proyecto

This document contains code for a Pong game including classes for the Ball, Paddles, Renderer and main Futpong class. The Ball class handles ball movement and collision detection. The Paddle class controls paddle movement. The Renderer class handles drawing to the screen. The main Futpong class initializes the game, controls the game loop and handles input.

Uploaded by

gabrielsoriano38
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
65 views19 pages

Proyecto

This document contains code for a Pong game including classes for the Ball, Paddles, Renderer and main Futpong class. The Ball class handles ball movement and collision detection. The Paddle class controls paddle movement. The Renderer class handles drawing to the screen. The main Futpong class initializes the game, controls the game loop and handles input.

Uploaded by

gabrielsoriano38
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 19

Ball

/*

* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license

* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template

*/

package futpong;

import java.awt.Color;

import java.awt.Graphics;

import java.util.Random;

public class Ball {

public int x, y, width = 25, height = 25;

public int motionX, motionY;

public Random random;

private futpong pong;

public int amountOfHits;

public Ball(futpong pong) {

this.pong = pong;

this.random = new Random();

spawn();
}

public void update(Paddle paddle1, Paddle paddle2) {

int speed = 5;

this.x += motionX * speed;

this.y += motionY * speed;

if (this.y + height - motionY > pong.height || this.y + motionY < 0) {

if (this.motionY < 0) {

this.y = 0;

this.motionY = random.nextInt(4);

if (motionY == 0) {

motionY = 1;

} else {

this.motionY = -random.nextInt(4);

this.y = pong.height - height;

if (motionY == 0) {

motionY = -1;

if (checkCollision(paddle1) == 1) {

this.motionX = 1 + (amountOfHits / 5);

this.motionY = -2 + random.nextInt(4);
if (motionY == 0) {

motionY = 1;

amountOfHits++;

} else if (checkCollision(paddle2) == 1) {

this.motionX = -1 - (amountOfHits / 5);

this.motionY = -2 + random.nextInt(4);

if (motionY == 0) {

motionY = 1;

amountOfHits++;

if (checkCollision(paddle1) == 2) {

paddle2.score++;

spawn();

} else if (checkCollision(paddle2) == 2) {

paddle1.score++;

spawn();

public void spawn() { //no de mobs na yeones esto pa regresar

this.amountOfHits = 0;

this.x = pong.width / 2 - this.width / 2;


this.y = pong.height / 2 - this.height / 2;

this.motionY = -2 + random.nextInt(4);

if (motionY == 0) {

motionY = 1;

if (random.nextBoolean()) {

motionX = 1;

} else {

motionX = -1;

public int checkCollision(Paddle paddle) {

if (this.x < paddle.x + paddle.width && this.x + width > paddle.x && this.y < paddle.y + paddle.height
&& this.y + height > paddle.y) {

return 1; //golpe

} else if ((paddle.x > x && paddle.paddleNumber == 1) || (paddle.x < x - width &&


paddle.paddleNumber == 2)) {

return 2; //puntaje

return 0; //no hace nada xd

public void render(Graphics g) {

g.setColor(Color.WHITE);
g.fillOval(x, y, width, height);

Paddle

/*

* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license

* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template

*/

package futpong;

import java.awt.Color;

import java.awt.Graphics;

public class Paddle {

public int paddleNumber;

public int x, y, width = 20, height = 100;

public int score;

public Paddle(futpong pong, int paddleNumber) {

this.paddleNumber = paddleNumber;

if (paddleNumber == 1) {

this.x = 0;

}
if (paddleNumber == 2) {

this.x = pong.width - width;

this.y = pong.height / 2 - this.height / 2;

public void render(Graphics g) {

g.setColor(Color.WHITE);

g.fillRect(x, y, width, height);

public void move(boolean up) {

int speed = 15;

if (up) {

if (y - speed > 0) {

y -= speed;

} else {

y = 0;

} else {

if (y + height + speed < futpong.pong.height) {

y += speed;

} else {

y = futpong.pong.height - height;

}
}

Renderer

/*

* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license

* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template

*/

package futpong;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import javax.swing.ImageIcon;

import javax.swing.JPanel;

public class Renderer extends javax.swing.JPanel {

//public class Renderer extends JLabel {

private static final long serialVersionUID = 1L;

public Image fondo = null;

// public Renderer jPanel1;

//

// public Renderer() {

// this.setSize(150, 200);

// }
public void paint(Graphics2D grafico) {

// Dimension height = getSize();

//

// //Se selecciona la imagen que tenemos en el paquete de la //ruta del programa

//

// ImageIcon Img = new ImageIcon(getClass().getResource("/Images/FutPong.jpg"));

//

// //se dibuja la imagen que tenemos en el paquete Images //dentro de un panel

//

// grafico.drawImage(Img.getImage(), 0, 0, height.width, height.height, null);

//

// setOpaque(false);

// super.paintComponent(grafico);

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

g.drawImage(fondo, 0, 0, getWidth(), getHeight(), null);

futpong.pong.render((Graphics2D) g);

public void setImage(String image) {

if (image != null) {

fondo = new ImageIcon(getClass().getResource(image)).getImage();

}
}

Futpong

/*

* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license

* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template

*/

package futpong;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.util.Random;

import javax.swing.JFrame;

import javax.swing.Timer;

import java.awt.Image;

import javax.swing.ImageIcon;

import java.awt.Dimension;

public class futpong implements ActionListener, KeyListener{


public static futpong pong;

public int width = 700, height = 700; //medidas de tabla

public Renderer renderer;

public Paddle player1;

public Paddle player2;

public Ball ball;

public boolean bot = false, selectingDifficulty; //verdaderi pase a juegio natural

public boolean w, s, up, down; //paq se mueva

public int gameStatus = 0, scoreLimit = 3, playerWon; //0 = Menu, 1 = Pausa, 2 = Juegando papu, 3 =
Game Over :(, 4 = portada q no cogio chch

public int botDifficulty, botMoves, botCooldown = 0;

public Random random;

public JFrame jframe;

public static void main(String[] args) {

// TODO code application logic here

System.out.println("Inicio");

// Ventana imagen = new Ventana();

// imagen.setVisible(true);

pong = new futpong();

@Override

public void keyPressed(KeyEvent e) {

int id = e.getKeyCode();

if (id == KeyEvent.VK_W) {

w = true;

} else if (id == KeyEvent.VK_S) {


s = true;

} else if (id == KeyEvent.VK_UP) {

up = true;

} else if (id == KeyEvent.VK_DOWN) {

down = true;

} else if (id == KeyEvent.VK_RIGHT) {

if (selectingDifficulty) {

if (botDifficulty < 2) {

botDifficulty++;

} else {

botDifficulty = 0;

} else if (gameStatus == 0) {

scoreLimit++;

} else if (id == KeyEvent.VK_LEFT) {

if (selectingDifficulty) {

if (botDifficulty > 0) {

botDifficulty--;

} else {

botDifficulty = 2;

} else if (gameStatus == 0 && scoreLimit > 1) {

scoreLimit--;

} else if (id == KeyEvent.VK_ESCAPE && (gameStatus == 2 || gameStatus == 3)) {

gameStatus = 0;

} else if (id == KeyEvent.VK_SHIFT && gameStatus == 0) {

bot = true;
selectingDifficulty = true;

} else if (id == KeyEvent.VK_SPACE) {

if (gameStatus == 0 || gameStatus == 3) {

if (!selectingDifficulty) {

bot = false;

} else {

selectingDifficulty = false;

start();

} else if (gameStatus == 1) {

gameStatus = 2;

} else if (gameStatus == 2) {

gameStatus = 1;

@Override

public void keyReleased(KeyEvent e) {

int id = e.getKeyCode();

if (id == KeyEvent.VK_W) {

w = false;

} else if (id == KeyEvent.VK_S) {

s = false;

} else if (id == KeyEvent.VK_UP) {

up = false;

} else if (id == KeyEvent.VK_DOWN) {


down = false;

@Override

public void keyTyped(KeyEvent e) {

//no se que hacia esto creo q nd :)

public futpong() {

Timer timer = new Timer(20, this);

random = new Random();

jframe = new JFrame("Pong");

renderer = new Renderer();

jframe.setSize(width + 15, height + 35);

jframe.setVisible(true);

jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //pa cerrar

jframe.add(renderer);

jframe.addKeyListener(this);

timer.start();

}
public void start() {

gameStatus = 2;

player1 = new Paddle(this, 1);

player2 = new Paddle(this, 2);

ball = new Ball(this);

public void update() {

if (player1.score >= scoreLimit) {

playerWon = 1;

gameStatus = 3;

if (player2.score >= scoreLimit) {

gameStatus = 3;

playerWon = 2;

if (w) {

player1.move(true);

if (s) {

player1.move(false);

if (!bot) {

if (up) {

player2.move(true);

}
if (down) {

player2.move(false);

} else {

if (botCooldown > 0) {

botCooldown--;

if (botCooldown == 0) {

botMoves = 0;

if (botMoves < 10) {

if (player2.y + player2.height / 2 < ball.y) {

player2.move(false);

botMoves++;

if (player2.y + player2.height / 2 > ball.y) {

player2.move(true);

botMoves++;

if (botDifficulty == 0) {

botCooldown = 20;

if (botDifficulty == 1) {

botCooldown = 15;

}
if (botDifficulty == 2) {

botCooldown = 10;

ball.update(player1, player2);

@Override

public void actionPerformed(ActionEvent e) {

if (gameStatus == 2) {

update();

renderer.repaint();

public void render(Graphics2D g){ //pta hueva me jodio la vida

g.setColor(Color.GREEN);

g.fillRect(0, 0, width, height);

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

// if (gameStatus == 0) {

// jLabel1.setIcon(new javax.swing.ImageIcon("C:\\Users\\Alfonso\\Desktop\\FutPong.jpg"));

// }
if (gameStatus == 0) {

g.setColor(Color.WHITE);

g.setFont(new Font("Ink Free", Font.BOLD, 70));

g.drawString("FUT PONG", width / 2 - 180, 150);

// setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

// NOI18N

if (!selectingDifficulty) {

// jLabel1.setIcon(new javax.swing.ImageIcon("C:\\Users\\Alfonso\\Desktop\\FutPong.jpg"));

g.setFont(new Font("Arial", 1, 30));

g.drawString("Press Space to Play", width / 2 - 150, height / 2 - 25);

g.drawString("Press Shift to Play with Bot", width / 2 - 200, height / 2 + 25);

g.drawString("<< Score Limit: " + scoreLimit + " >>", width / 2 - 150, height / 2 + 75);

if (selectingDifficulty) {

String string = botDifficulty == 0 ? "Easy" : (botDifficulty == 1 ? "Medium" : "Hard");

g.setFont(new Font("Arial", 1, 30));

g.drawString("<< Bot Difficulty: " + string + " >>", width / 2 - 180, height / 2 - 25);
g.drawString("Press Space to Play", width / 2 - 150, height / 2 + 25);

if (gameStatus == 1) {

g.setColor(Color.BLACK);

g.setFont(new Font("Ink Free", Font.BOLD, 50));

g.drawString("PAUSED", width / 2 - 103, height / 2 - 25);

if (gameStatus == 1 || gameStatus == 2) {

g.setColor(Color.WHITE);

g.setStroke(new BasicStroke(5f));

g.drawLine(width / 2, 0, width / 2, height);

g.setStroke(new BasicStroke(5f));

g.drawOval(width / 2 - 100, height / 2 - 100, 200, 200);

g.setStroke(new BasicStroke(5f));

g.drawRect(0, 250, 100, 200);

g.drawRect(0, 200, 150, 300);

g.drawRect(600, 250, 100, 200);

g.drawRect(550, 200, 150, 300);

g.setFont(new Font("Ink Free", Font.BOLD, 50));


g.drawString(String.valueOf(player1.score), width / 2 - 90, 50);

g.drawString(String.valueOf(player2.score), width / 2 + 65, 50);

player1.render(g);

player2.render(g);

ball.render(g);

if (gameStatus == 3) {

g.setColor(Color.WHITE);

g.setFont(new Font("Ink Free", Font.BOLD, 70));

g.drawString("FUT PONG", width / 2 - 180, 150);

if (bot && playerWon == 2) {

g.drawString("The Bot Wins!", width / 2 - 200, 250);

} else {

g.drawString("Player " + playerWon + " Wins!", width / 2 - 200, 250);

g.setFont(new Font("Arial", 1, 30));

g.drawString("Press Space to Play Again", width / 2 - 185, height / 2 - 25);

g.drawString("Press ESC for Menu", width / 2 - 140, height / 2 + 25);

You might also like