Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added pong_processing/Pong_Sounds/victory-fanfare.wav
Binary file not shown.
222 changes: 150 additions & 72 deletions pong_processing/pong_processing.pde
Original file line number Diff line number Diff line change
@@ -1,30 +1,58 @@
import processing.serial.*;
//import processing.serial.*; // Comentar a variável para não usar comunicação serial
import javax.sound.sampled.*; //Abre biblioteca que suporta áudios
import java.io.File; //Biblioteca pra acessar os arquivos de áudio

float p1 = 0, p2 = 0; // Posição das barras, eixo y
float x = 0, y = 0; // Posicao da bolinha
int pont1 = 0, pont2 = 0; // Pontuação dos jogadores
float x = 0, y = 0; // Posicao da bolinha
int v_b = 8; //Velocidade das barras

int ordem = 0; // Chamada das telas
String ganhou = ""; // Nome do jogador que ganhou (numero 1/ numero 2)
int vencedor = 6; // Quantidades de pontos para vencer/perder
bol b; // Objeto bola
int reset = 0;

int pont1 = 0, pont2 = 0; // Pontuação dos jogadores
int pontc1 = 0, pontc2 = 0; // Pontuação dos jogadores corrigida
int vencedor = 2; // Quantidades de pontos para vencer/perder


//Serial MyPort; // Comentar a variável para não usar comunicação serial
bol b;
bot b1, b2, b3, b4;
Serial MyPort;
int pontc1 = 0, pontc2 = 0;
barra barra_direita;
barra barra_esquerda;

/* // Comentar as variáveis abaixo para não usar comunicação serial
String portName = "COM5";
String pacote = "";

String portName = "COM5";
char[] pacoteaberto;
int tracos = 0;
int cont = 0;
String barra1 = "", barra2 = "";
String botao1 = "", botao2 = "";
*/

void setup(){
size(1080,720); //Tamanho da tela
//fullScreen(); // Tamanho preenchendo a tela
textAlign(CENTER, CENTER); // Alianhmento do texto
b = new bol(); // Inicia o objeto bola
rectMode(CENTER);

b = new bol(); // Inicia o objeto bola
b1 = new bot(); b2 = new bot(); b3 = new bot(); b4 = new bot();

MyPort = new Serial(this, portName, 9600);

barra_direita = new barra(false);// falso pq é direita
barra_esquerda = new barra(true);// verdadeiro pq é esquerda
//MyPort = new Serial(this, portName, 9600); // Comentar a variável para não usar comunicação serial

}

void VictorySound(){ //Função do som do fim de jogo
File victory = new File("Pong_Sounds//victory-fanfare.wav"); //Adiciona o arquivo do áudio no código

Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(victory));
clip.start();
Thread.sleep(3000);// Toca o som por 3 segundos antes de interromper
clip.stop();
clip.close();
}

void draw(){ // main
Expand All @@ -39,21 +67,34 @@ void draw(){ // main
tela_pause();
break;
case 3:
fim_jogo();
tela_instrucoes();
break;
case 4:
fim_jogo();
if(mousePressed && reset == 0){
reset = 1;
}
if(!mousePressed && reset == 1){
reset = 0;
ordem = 0;
barra_esquerda.local_y = height/2; //As barras começam no centro quando o jogo reinicia
barra_direita.local_y = height/2;
}
break;
}
}

void keyPressed() { // Move as barras com um limite inferior e superior
if (keyCode == UP && p1 > 0) {
p1 -= v_b;
} else if (keyCode == DOWN && p1 < (height - 200)) {
p1 += v_b;
int v_b = 8; // velocidade da barra
if (keyCode == UP ) {
barra_direita.mover(-v_b);
} else if (keyCode == DOWN ) {
barra_direita.mover(v_b);
}
if(key == 'w' && p2 > 0){
p2 -= v_b;
} else if(key == 's' && p2 < (height - 200)){
p2 += v_b;
if(key == 'w'){
barra_esquerda.mover(-v_b);
} else if(key == 's' ){
barra_esquerda.mover(v_b);
}
//Barras não sincronizadas devido a essa função so pegar uma tecla por vez
}
Expand All @@ -66,6 +107,45 @@ void meio(){ // Desenha os traços no meio
}
}

void tela_inicial(){ // Primeira tela
pont1 = 0; pont2 = 0;

background(200,0,0);
textSize(height/6);
fill(255);
text("POOng", width/2, height/3 -150); // Textos finais

b1.escreve("Jogar",width/2, height/3 +100);

b1.escreve("Instruções",width/2, height/3 + 250);

//fazer a distinção de se vai para as intruções ou para o jogo

if(mousePressed){ // Caso pressione o mouse vai para as instruções
ordem = 3;
}
}


void tela_instrucoes(){
background(170,10,30);
textSize(height/25);
fill(255);

text("Pong é uma simulação de uma partida de tênis de mesa.", width/2, height/4);

String s = "O objetivo do jogo é fazer a bolinha chegar ao outro lado sem que seu oponente defenda e assim marcar mais pontos.";
text(s, width/2, height/2-50, width/2+100, height/2);

String n = "Utilize os botões grandes para controlar a sua barra e evite que a bola toque na parede!";
text(n, width/2, height/2+50, width/2+100, height/2);

b1.escreve("Jogar",width/2, height/2 +200);


}


void dinamico(){ // Tela das movimentações principais do jogo
background(180,0,0); // Cor do fundo
meio(); // Desenha traços do meio
Expand All @@ -74,66 +154,58 @@ void dinamico(){ // Tela das movimentações principais do jogo
text(pontc1, width/4, 100); // Mostra as pontuacoes alinhadas
text(pontc2, width - (width/4), 100);

rect(6, p1, 14, 200, 28); // Desenha os retângulos certinho
rect((width - 16 - 6), p2, 14, 200, 28);
barra_esquerda.barra_inicio();
barra_direita.barra_inicio();
b.display(); //Mostra a bola

b.display(); //Ações da bola
b.move();
b.checkb();
b.colisaobarrad(barra_direita.local_x, barra_direita.local_y, barra_direita.largura, barra_direita.altura);
b.colisaobarrae(barra_esquerda.local_x, barra_esquerda.local_y, barra_esquerda.largura, barra_esquerda.altura);

b.checkpont();
pontc1 = pont1 / 2; // Corrige a duplicação da pontuação
pontc2 = pont2 / 2;
pontc1 = pont1 / 2; pontc2 = pont2 / 2; // Corrige a duplicação da pontuação


if (pontc1 == vencedor || pontc2 == vencedor){ //Analisando se o jogo acabou para acionar tela de fim
fim_jogo();
}
if (keyPressed){ //Aciona o pause apertando a tecla b
if (keyPressed){ //Aciona o pause apertando a tecla b
if(key == 'b'){
tela_pause();
}
}

if ( MyPort.available() > 0) {
/*
if ( MyPort.available() > 0) { // Comentar tudo dentro desse if para usar sem comunicação
pacote = MyPort.readStringUntil('\n');
println("Valor pacote: ", pacote);
}
}

void fim_jogo(){ // função de fim de jogo
textSize(height/10);
if (pont1 == vencedor){ //definindo vencedor como um lado
fill (0,255,0);
ganhou = "Lado esquerdo é o vencedor!!!!!!!!";
} else if(pont2 == vencedor){ //definindo vencedor como um outro lado
fill (0,255,0);
ganhou = "Lado direito é o vencedor!!!!!!!!";
}
background(180,0,0);
fill(255); // definindo a cor das letras como brancas
text("Fim de jogo", width/2, height/3 -200); // Textos finais
b3.escreve("click para jogar novamente", width/2, height/3 +200);
fill(0,255,0); // definindo a cor das letras como verde
text(ganhou, width/2, height/3); // definindo o texto do vencedor


if(mousePressed){ // Clicando com o mouse reinicia as variáveis do jogo
pont1 = 0;
pont2 = 0;
v_b = 8;
if(pacote != null){
barra1 = "";
//pacote = pacote.replace("\n", "");
pacoteaberto = pacote.toCharArray();

for(int i = 0; i < 3; i++){
//barra1 = barra1 + pacoteaberto[i];
//if(pacoteaberto[i] == '-' ){break;}
}

}
println("Barra 1: ", barra1,"Pacote", pacote);
//println("Valor barra1: ", barra1);
//println("Valor pacote: ", pacote);
}

ordem = 3; // Mantem a tela final ativa
*/
}

void tela_pause(){ // Tela de pause do jogo

v_b = 0; // zera a velocidade das barras

background(180,0,0);
textSize(height/5);
textSize(height/6);
fill(255);
text("PAUSE", width/2, height/3 -200); // Textos de pause

b2.escreve("Retomar", width/2, height/3 +200);
b4.escreve("Casa", width/2, height/2 +200);
b2.escreve("Retomar", width/2, height/3 +100);
b4.escreve("Reiniciar", width/2, height/2 +150);
//text ();

if (mousePressed){ // é para no futuro retomar o jogo
Expand All @@ -143,15 +215,21 @@ void tela_pause(){ // Tela de pause do jogo

}

void tela_inicial(){ // Primeira tela
background(200,0,0);
textSize(height/10);
fill(255); // definindo a cor das letras como brancas
text("POOng", width/2, height/3 -200); // Textos finais

b1.escreve("Jogar",width/2, height/3 +200);

if(mousePressed){ // Caso pressione o mouse o jogo comeca
ordem = 1;

void fim_jogo(){ // função de fim de jogo
if (pontc2 == vencedor){ //definindo vencedor como um lado
ganhou = "Lado esquerdo é o vencedor!";
} else if(pontc1 == vencedor){ //definindo vencedor como um outro lado
ganhou = "Lado direito é o vencedor!";
}
background(180,0,0);
textSize(height/10);
fill(255); // definindo a cor das letras como brancas
text("Fim de jogo", width/2, height/3 -200); // Textos finais
text(ganhou, width/2, height/3); // definindo o texto do vencedor
VictorySound(); //Inicia o som do fim de jogo

b3.escreve("Jogar novamente", width/2, height/3 +200);

ordem = 3; // Mantem a tela final ativa
}