You last visited: Today at 01:43
Advertisement
Java und Processing PingPong Spiele Modellierung !
Discussion on Java und Processing PingPong Spiele Modellierung ! within the Java forum part of the Coders Den category.
02/04/2017, 21:57
#1
elite*gold: 71
Join Date: Dec 2010
Posts: 19
Received Thanks: 6
Java und Processing PingPong Spiele Modellierung !
Hallo Liebe Community,
Ich stelle euch heute mein Programm Modell von dem bekannten Spiel Ping-Pong vor.
Da es sich nur um ein Modell handelt habe ich die Hilfe von Processing in Anspruch genommen.
Ich würde gerne mit euch zusammen weiter daran Arbeiten um den Thread immer mehr zu verfeinern.
Als erstes solltet ihr über processing.org die Software "Processing" donwloaden.
Eigentlich braucht man nur die "core.jar" Datei, falls man in Java programmieren will,
aber ich Empfehle euch die Software sehr.
Um euch einen kleinen einblick über die Software zu geben folgt der Text welcher beim downloaden erscheint.
"Processing is open source, free software. All donations fund the Processing Foundation,
a nonprofit organization devoted to advancing the role of programming within the visual arts through developing Processing."
Es wird empfohlen die Java JDK über Oracel zu downloaden und zu Installieren.
Vergesst nicht die ensprechenden Umgebungsvariablen zu setzten.
!!Falls ihr keine Erfahrung mit Java habt überspringt den ersten Teil.!!
Teil 1
Processing und Java
Um den Code zum laufen zu bringen müsst ihr in eurem processing Ordner den folgenden
Pfad folgen \Processing\core\library\core.jar und die "core.jar" Datei implementieren.
Achtung:
Dies ist nur ein Modell und kein code welches kommerziell zu gebrauchen ist.
Bedenkt das hier nicht Objektorientiert programmiert wurde also bitte keine Annmerkungen darauf.
PingPong.java
Code:
import processing.core.PApplet;
public class PingPong extends PApplet{
public static void main(String[] args){
PApplet.main("PingPong");
}
//walls
float wallThick = 20;
//paddle
float paddleHeight = wallThick*4;
float paddlePosL;
float paddlePosR;
boolean[] paddleLMove = new boolean[2];
boolean[] paddleRMove = new boolean[2];
float paddleSpeed;
//ball
float ballxPos;
float ballyPos;
int ballSize;
float ballspeed;
float ballySpeed;
//Point
int pointLeft = 0;
int pointRight = 0;
//start
boolean start;
int[] stonePos;
public void settings() {
size(700, 500);
}
public void setup() {
stonePos = new int[5];
reset();
}
//reset methode sets everything to start except points
void reset() {
ballxPos = width/2 + 100;
ballyPos = height/2;
ballSize= 20;
ballspeed= 5;
ballySpeed = 0;
paddleSpeed = 5;
paddlePosL = 250-paddleHeight/2;
paddlePosR = 250-paddleHeight/2;
}
//every 0.4 sec
public void draw() {
background(250, 250, 250);
fill(0,0,0);
rect(width/2 - 50, height/2 -23, 100, 30);
textAlign(CENTER);
textSize(20);
fill(255);
text("Start", width/2, height/2);
if (mouseX > width/2 - 50 && mouseX < width/2 - 50 + 150) {
if (mouseY > height/2 -23 && mouseY < height/2 -23 + 30) {
fill(0,0,0);
rect(width/2 - 50, height/2 -23, 100, 30);
textAlign(CENTER);
textSize(20);
fill(100);
text("Start", width/2, height/2);
}
}
//Start
if (start == true) {
background(250, 250, 250);
walls(wallThick);
ball(ballSize);
paddle(paddleHeight);
bricks();
fill(0,0,0);
}
//Points
fill(255);
text(pointRight, 700-15, 18);
text(pointLeft, 15, 18);
}
//Event for Start
public void mousePressed() {
if (mouseX > width/2 - 50 && mouseX < width/2 - 50 + 150) {
if (mouseY > height/2 -25 && mouseY < height/2 - 25 + 30) {
start = true;
}
}
}
void bricks() {
int yPos= 50;
int xPos = width/2;
int i = 0;
fill(0, 0, 0);
while (i < 5) {
rect(xPos-5 + stonePos[i], yPos, 10, 40);
yPos += 90;
i++;
}
yPos = 45;
//L
if (ballspeed < 0) {
for (int j = 0; j < 5; j++) {
if (ballxPos + ballSize/2 == xPos-5 + stonePos[j]) {
if (ballyPos > yPos && ballyPos < yPos + 40) {
ballspeed = -ballspeed;
stonePos[j] += 5;
}
}
yPos += 90;
}
}
//R
yPos = 45;
if (ballspeed > 0) {
for (int j = 0; j < 5; j++) {
if (ballxPos - ballSize/2 == xPos+5 + stonePos[j]) {
if (ballyPos > yPos && ballyPos < yPos + 40) {
ballspeed = -ballspeed;
stonePos[j] -= 5;
}
}
yPos += 90;
}
}
}
//If keyPressed Event used set paddle(R/L)Move[a] = t;
public void keyPressed() {
//right
if (keyCode == UP) {
paddleRMove[0] = true;
}
if (keyCode == DOWN) {
paddleRMove[1] = true;
}
//left
if (key == 'w') {
paddleLMove[0] = true;
}
if (key == 's') {
paddleLMove[1] = true;
}
}
//If keyR Event used set paddle(R/L)Move[a] = f;
public void keyReleased() {
//right
if (keyCode == UP) {
paddleRMove[0] = false;
}
if (keyCode == DOWN) {
paddleRMove[1] = false;
}
//left
if (key == 'w') {
paddleLMove[0] = false;
}
if (key == 's') {
paddleLMove[1] = false;
}
}
void walls(float wallThick) {
// noStroke() kein rand
fill(0, 0, 0);
rect(0, 0, width, wallThick);
rect(0, height-wallThick, width, wallThick);
}
//ball func for ball
void ball(int ballSize) {
ellipse(ballxPos, ballyPos, ballSize, ballSize);
ballxPos = ballxPos - ballspeed;
float paddleTop = paddlePosR;
float paddleBot = paddlePosR + paddleHeight;
//look for depending variables and calc hitting area on right paddle + Curveballs
if (ballxPos + 10 > width - wallThick/2) {
if (ballyPos > paddleTop && ballyPos < paddleBot) {
float balldistance = paddleBot - ballyPos;
float percent = balldistance/paddleHeight;
ballySpeed += (-2*percent) + (2*(1-percent));
if (ballspeed < 0) {
ballspeed = -ballspeed;
}
}
}
paddleTop = paddlePosL;
paddleBot = paddlePosL + paddleHeight;
//look for depending variables and calc hitting area on left paddle + Curveballs
if (ballxPos - 10 < wallThick/2) {
if (ballyPos > paddleTop && ballyPos < paddleBot) {
float balldistance = paddleBot - ballyPos;
float percent = balldistance/paddleHeight;
ballySpeed += (-2*percent) + (2*(1-percent));
if (ballspeed > 0) {
ballspeed = -ballspeed;
}
}
}
//If someone lose calc Point up
if (ballxPos < -40 || ballxPos > width +40) {
if (ballxPos < -40) {
pointRight ++;
}
if (ballxPos > width +40) {
pointLeft ++;
}
reset();
}
//Hitting walls top and down
if (wallThick > ballyPos || height - wallThick < ballyPos) {
ballySpeed *= -1;
}
ballyPos = ballyPos + ballySpeed;
}
//func for paddles pos / min max Position
void paddle(float paddleHeight) {
//left
rect(0, paddlePosL, wallThick/2, paddleHeight);
if (!(paddleLMove[0] && paddleLMove[1])) {
//max methode get maxYLpos
if (paddleLMove[0]) paddlePosL = max(wallThick, paddlePosL - paddleSpeed);
//min methode get maxYLpos
if (paddleLMove[1]) paddlePosL = min(height-(wallThick + paddleHeight), paddlePosL + paddleSpeed);
}
//right
rect(width-wallThick/2, paddlePosR, wallThick/2, paddleHeight);
if (!(paddleRMove[0] && paddleRMove[1])) {
//max methode get maxVRpos
if (paddleRMove[0]) paddlePosR = max(wallThick, paddlePosR - paddleSpeed);
//min methode get minYRpos
if (paddleRMove[1]) paddlePosR = min(height-(wallThick + paddleHeight), paddlePosR + paddleSpeed);
}
}
}
Teil 2
Processing
Falls ihr auf die schnelle das Programm ausführen wollt könnt ihr auch die
processing.exe starten und den folgenden Code einfügen.
PingPong.pde
Code:
//walls
float wallThick = 20;
//paddle
float paddleHeight = wallThick*4;
float paddlePosL;
float paddlePosR;
boolean[] paddleLMove = new boolean[2];
boolean[] paddleRMove = new boolean[2];
float paddleSpeed;
//ball
float ballxPos;
float ballyPos;
int ballSize;
float ballspeed;
float ballySpeed;
//Point
int pointLeft = 0;
int pointRight = 0;
//start
boolean start;
int[] stonePos;
void setup() {
size(700, 500);
stonePos = new int[5];
reset();
}
//reset methode sets everything to start except points
void reset() {
ballxPos = width/2 + 100;
ballyPos = height/2;
ballSize= 20;
ballspeed= 5;
ballySpeed = 0;
paddleSpeed = 5;
paddlePosL = 250-paddleHeight/2;
paddlePosR = 250-paddleHeight/2;
}
//every 0.4 sec
void draw() {
background(250, 250, 250);
fill(#050505);
rect(width/2 - 50, height/2 -23, 100, 30);
textAlign(CENTER);
textSize(20);
fill(255);
text("Start", width/2, height/2);
if (mouseX > width/2 - 50 && mouseX < width/2 - 50 + 150) {
if (mouseY > height/2 -23 && mouseY < height/2 -23 + 30) {
fill(#050505);
rect(width/2 - 50, height/2 -23, 100, 30);
textAlign(CENTER);
textSize(20);
fill(100);
text("Start", width/2, height/2);
}
}
//Start
if (start == true) {
background(250, 250, 250);
walls(wallThick);
ball(ballSize);
paddle(paddleHeight);
bricks();
fill(#FFFCFC);
}
//Points
fill(255);
text(pointRight, 700-15, 18);
text(pointLeft, 15, 18);
}
//Event for Start
void mousePressed() {
if (mouseX > width/2 - 50 && mouseX < width/2 - 50 + 150) {
if (mouseY > height/2 -25 && mouseY < height/2 - 25 + 30) {
start = true;
}
}
}
void bricks() {
int yPos= 50;
int xPos = width/2;
int i = 0;
fill(0, 0, 0);
while (i < 5) {
rect(xPos-5 + stonePos[i], yPos, 10, 40);
yPos += 90;
i++;
}
yPos = 45;
//L
if (ballspeed < 0) {
for (int j = 0; j < 5; j++) {
if (ballxPos + ballSize/2 == xPos-5 + stonePos[j]) {
if (ballyPos > yPos && ballyPos < yPos + 40) {
ballspeed = -ballspeed;
stonePos[j] += 5;
}
}
yPos += 90;
}
}
//R
yPos = 45;
if (ballspeed > 0) {
for (int j = 0; j < 5; j++) {
if (ballxPos - ballSize/2 == xPos+5 + stonePos[j]) {
if (ballyPos > yPos && ballyPos < yPos + 40) {
ballspeed = -ballspeed;
stonePos[j] -= 5;
}
}
yPos += 90;
}
}
}
//If keyPressed Event used set paddle(R/L)Move[a] = t;
void keyPressed() {
//right
if (keyCode == UP) {
paddleRMove[0] = true;
}
if (keyCode == DOWN) {
paddleRMove[1] = true;
}
//left
if (key == 'w') {
paddleLMove[0] = true;
}
if (key == 's') {
paddleLMove[1] = true;
}
}
//If keyR Event used set paddle(R/L)Move[a] = f;
void keyReleased() {
//right
if (keyCode == UP) {
paddleRMove[0] = false;
}
if (keyCode == DOWN) {
paddleRMove[1] = false;
}
//left
if (key == 'w') {
paddleLMove[0] = false;
}
if (key == 's') {
paddleLMove[1] = false;
}
}
void walls(float wallThick) {
// noStroke() kein rand
fill(0, 0, 0);
rect(0, 0, width, wallThick);
rect(0, height-wallThick, width, wallThick);
}
//ball func for ball
void ball(int ballSize) {
ellipse(ballxPos, ballyPos, ballSize, ballSize);
ballxPos = ballxPos - ballspeed;
float paddleTop = paddlePosR;
float paddleBot = paddlePosR + paddleHeight;
//look for depending variables and calc hitting area on right paddle + Curveballs
if (ballxPos + 10 > width - wallThick/2) {
if (ballyPos > paddleTop && ballyPos < paddleBot) {
float balldistance = paddleBot - ballyPos;
float percent = balldistance/paddleHeight;
ballySpeed += (-2*percent) + (2*(1-percent));
if (ballspeed < 0) {
ballspeed = -ballspeed;
}
}
}
paddleTop = paddlePosL;
paddleBot = paddlePosL + paddleHeight;
//look for depending variables and calc hitting area on left paddle + Curveballs
if (ballxPos - 10 < wallThick/2) {
if (ballyPos > paddleTop && ballyPos < paddleBot) {
float balldistance = paddleBot - ballyPos;
float percent = balldistance/paddleHeight;
ballySpeed += (-2*percent) + (2*(1-percent));
if (ballspeed > 0) {
ballspeed = -ballspeed;
}
}
}
//If someone lose calc Point up
if (ballxPos < -40 || ballxPos > width +40) {
if (ballxPos < -40) {
pointRight ++;
}
if (ballxPos > width +40) {
pointLeft ++;
}
reset();
}
//Hitting walls top and down
if (wallThick > ballyPos || height - wallThick < ballyPos) {
ballySpeed *= -1;
}
ballyPos = ballyPos + ballySpeed;
}
//func for paddles pos / min max Position
void paddle(float paddleHeight) {
//left
rect(0, paddlePosL, wallThick/2, paddleHeight);
if (!(paddleLMove[0] && paddleLMove[1])) {
//max methode get maxYLpos
if (paddleLMove[0]) paddlePosL = max(wallThick, paddlePosL - paddleSpeed);
//min methode get maxYLpos
if (paddleLMove[1]) paddlePosL = min(height-(wallThick + paddleHeight), paddlePosL + paddleSpeed);
}
//right
rect(width-wallThick/2, paddlePosR, wallThick/2, paddleHeight);
if (!(paddleRMove[0] && paddleRMove[1])) {
//max methode get maxVRpos
if (paddleRMove[0]) paddlePosR = max(wallThick, paddlePosR - paddleSpeed);
//min methode get minYRpos
if (paddleRMove[1]) paddlePosR = min(height-(wallThick + paddleHeight), paddlePosR + paddleSpeed);
}
}
Edit: Es handelt sich um ein voll funktionsfähigen code
lg
02/04/2017, 22:14
#2
elite*gold: 0
Join Date: Aug 2013
Posts: 131
Received Thanks: 21
Nice sache muss ich sagen ^^
weiter so Digger
lg SuraSchatten
02/05/2017, 17:03
#3
elite*gold: 2
Join Date: Mar 2008
Posts: 240
Received Thanks: 21
Nice diggah hab den code getestet und er Funktioniert super.
Bitte mehr davon
Similar Threads
Vodafone Huawei 736 Java Spiele Übertragen?
12/26/2012 - Technical Support - 2 Replies
Hey, meine Schwester hat ein Vodafone Huawei 736 bekommen und ich wollte ihr ein Spiel runterladen:
Crazy Penguin Catapult 2 - Kostenlose Handyspiele von MobileRated herunterladen
(Werbefinanziert/Free2Play somit nicht illegal)
Aber wenn ich das Handy mit dem PC per USB verbinde und das Spiel reinziehe kommt später beim Starten die Fehlermeldung "Überprüfung fehlgeschlagen".
Kennt sich wer damit aus?
[Sammelthread]Kleine Java spiele
04/22/2011 - Off Topic - 2 Replies
Hey leute.
Ihr kennt sowas ja sicher...
Kleine selpstgescriptete JAVA spiele.
Hir mal ein SAMMELTHREAD.
processing fee!
06/04/2008 - RF Online - 5 Replies
im a noob hehehe^^,
but my question is
is thier a hack that might lower the process of a +4 ores?
coz, its little to much..
i got plenty +4 ores but cant process then
bcoz of the processing fee.
is there?
All times are GMT +2. The time now is 01:43 .