Initial State
Game ini terdiri dari dua buah garis sebagai bet
dalam permainan bola pingpong dan user
sebagai player satu akan melawan computer.permainan ini bisa dimainkan oleh dua
orang dengan cara salah satu pemain yang bertindak sebagai computer mengganti
player menjadi manusia.pemain mencetak angka jika bola yang di lepas oleh musuh
tidak dapat di tangkap oleh bet pingpong maka akan score akan bertambah 1 atau
sebaliknya
Tampilan awal game
ATURAN PERMAINAN
1.
Pemain melepaskan bola dengan cara
menekan L kearah daerah lawan
2.
Jika bola tidak tertangkap oleh bet
lawan maka score akan bertambah satu poin
KEY
BINDINGS
w : player 1 atas
s :
player 1 bawah
l :
player 1 lepas bola
up :
player 2 atas
down :
player 2 bawah
left
: player 2 lepas bola
p :
ganti player 2 : computer / human
r :
reset game
+ :
computer level ++
- :
computer level --
LISTING PROGRAM
PFont scoreFont;
Ground ground;
Player player1;
Player player2;
Ball ball;
Message message;
boolean start = true;
void setup() {
size(600, 450);
ground = new Ground();
player1 = new Player(1, 20, height/2, false);
player2 = new Player(2, width - 20, height/2,
true);
ball = new Ball(0,0);
ball.setPos(player1.posX + player1.size/9 +
ball.size/2, player1.posY);
message = new Message();
scoreFont = createFont("Andalus",
40);
textFont(scoreFont);
ellipseMode(CENTER);
frameRate(150);
}
void draw() {
background(255,0,0);
stroke(255); fill(255);
ground.draw();
player1.draw();
player2.draw();
ball.draw();
message.draw();
if (start) {
player1.movY = 4;
ball.stickRelease(1);
start = false;
}
}
void keyPressed() {
if (key == 'r' || key == 'R') {
resetGame();
}
if (key == 'p' || key == 'P') {
player2.switchComputerDriven();
}
if (key == 'w' || key == 'W') {
player1.up();
}
if (key == 's' || key == 'S') {
player1.down();
}
if (key == 'l' || key == 'L') {
player1.releaseBall();
}
if (key == '+') {
player2.setDifficulty(1);
message.set("computer level " +
(int)player2.getDifficulty());
}
if (key == '-') {
player2.setDifficulty(-1);
message.set("computer level " +
(int)player2.getDifficulty());
}
if (key == CODED) {
if (keyCode == UP) {
player2.up();
}
if (keyCode == DOWN) {
player2.down();
}
if (keyCode == LEFT) {
player2.releaseBall();
}
}
}
void resetGame() {
player1.setPos(20, height/2);
player2.setPos(width - 20, height/2);
player1.resetScore();
player2.resetScore();
ball.setSticky(1);
player1.movY = 4;
ball.stickRelease(1);
message.set("new game");
}
class Ground {
int scoreP1, scoreP2;
Ground() {
scoreP1 = 0;
scoreP2 = 0;
}
void draw() {
line(width/2, 0, width/2, height);
text(player1.getScore(), width/3, 50);
text(player2.getScore(), width/1.6, 50);
}
}
class Message {
String say;
int time;
int maxTime = 0;
Message() {
say = "";
time = 0;
}
void set(String _say) {
time = maxTime;
say = _say;
}
void draw() {
if ((say != "") && (time
> 0)) {
float a = 255 - ((maxTime - time) * 5);
stroke(255,255,255,a);
fill(255,255,255,a);
text(say, width/2 - (say.length() *
18)/2, height/2);
time--;
} else {
say = "";
}
stroke(255,255,255,255);
fill(255,255,255,255);
}
}
class Player {
float posX, posY, movX, movY;
int id, size, thickness, score;
boolean computerDriven;
int difficulty, pause, pauseTime, movPause,
dir;
Player(int _id, float _posX, float _posY,
boolean _computerDriven) {
id = _id;
posX = _posX;
posY = _posY;
computerDriven = _computerDriven;
size = 80;
thickness = 5;
score = 0;
difficulty = 2;
pause = 75;
pauseTime = pause;
movPause = 0;
dir = 0;
}
void
draw() {
update();
rect(posX - (size/16), posY - (size/2),
thickness, size);
}
void up() {
if (!computerDriven) movY = constrain (movY
-= 12, -10, 10);
}
void down() {
if (!computerDriven) movY = constrain (movY
+= 12, -10, 10);
}
void update() {
if (computerDriven) {
if (ball.sticky && (ball.stickOn
== 2)) pausePlayer();
else movY = constrain(ball.getPosY() -
posY, -2 - difficulty, 2 + difficulty);
}
posY = constrain (posY+movY, 0, height);
movY *= .7;
}
float getMovY() {
return movY;
}
void pausePlayer() {
if (computerDriven) {
if (pause == pauseTime) {
movPause = 5;
dir = 1;
}
movY = constrain (movPause * dir, -5, 5);
if ((posY < (size/2)) && (dir
< 0)) dir = 1;
else if ((posY > (height - (size/2)))
&& (dir > 0)) {
println(height - (size/2));
dir = -1;
}
pause--;
if (pause < 1) {
pause = 75;
releaseBall();
}
}
}
void releaseBall() {
ball.stickRelease(id);
}
void scorePlus() {
score ++;
}
int getScore() {
return score;
}
void resetScore() {
score = 0;
}
void setDifficulty(int _d) {
difficulty = constrain (difficulty += _d,
0, 10);
}
float getDifficulty() {
return difficulty;
}
void switchComputerDriven() {
if (computerDriven) computerDriven = false;
else computerDriven = true;
}
void setPos(int _posX, int _posY) {
posX = _posX;
posY = _posY;
}
boolean testRacketCollision(float x, float y,
float s) {
if ((y - (s / 2) > posY - (size / 2))
&& (y + (s / 2) < posY + (size / 2))) {
return true;
} else return false;
}
class Ball {
float posX, posY, movX, movY, speedX, speedY,
size;
int stickOn;
boolean sticky;
Ball(float _posX, float _posY) {
posX = _posX;
posY = _posY;
movX = 0;
movY = 0;
speedX = 0;
speedY = 0;
sticky = true;
stickOn = 1;
size = 6;
}
void setPos(float _posX, float _posY) {
posX = _posX;
posY = _posY;
}
void update() {
if (sticky) {
if (stickOn == 1) {
posX = player1.posX +
player1.thickness/2 + ball.size/2;
posY = player1.posY;
} else if (stickOn == 2) {
posX = player2.posX -
player2.thickness/2 - ball.size/2;
posY = player2.posY;
}
} else {
posX = posX + movX;
posY = posY + movY;
}
if (posY < size) movY = -movY; // top bounce
if (posY > height-size) movY = -movY; //
bottom bounce
if (posX < 0) { // out left side
player2.scorePlus();
sticky = true;
stickOn = 1;
}
else if (posX > width) { // out right
side
player1.scorePlus();
sticky = true;
stickOn = 2;
}
else if (posX < (player1.posX +
(player1.thickness / 2) + (size / 2))) {
if (player1.testRacketCollision(posX,
posY, size)) {
movX = -movX;
movY += player1.getMovY() / 5;
}
}
else if (posX > player2.posX) {
if (player2.testRacketCollision(posX,
posY, size)) {
movX = -movX;
movY += player2.getMovY() / 5;
}
}
}
void stickRelease(int idplayer) {
sticky = false;
if
((stickOn == 1) && (idplayer == 1)) {
movY = player1.getMovY();
movX = 5;
stickOn = 0;
} else if ((stickOn == 2) &&
(idplayer == 2)) {
movY = player2.getMovY();
movX = -5;
stickOn = 0;
}
}
void setSticky(int _playerId) {
sticky = true;
stickOn = _playerId;
}
float getPosY() {
return posY;
}
void draw() {
update();
ellipse(posX, posY, size, size);
}
}
LOGIKA PROGRAM
Untuk
membuat game pingpong diperlukan beberapa variable seperti
1. posX
dan posy yang digunakan untuk menetukan posisi bola
2.
movX dan movY yang digunakan untuk
menggerakan bola pingpong yang
berhubungan dengan posX dab posy untuk mengerakan bola
3.
speedX dan speedy yangdigunakan untuk
mengukur kecepatan bola dengan menggunaka posisi posX dan posy dan juga untuk mengaturkecepatannya berhubungan
dengan frame rate
4.
sticky dan stickyon yang berguna untuk
menempelkan bola jika bola sudah tida tertangkap bet pingpong lawan dan akan
menepel di bet yang akan serve pertamakali
lalu
juga ada beberapa method yang di buat
1.
Void Setup yaitu method yang digunakan
untuk pengaturan pertama kali permainan dijalankan seperti besar window yang
digunakan posisi bet pingpong pertama
kali,letakbola,text score
2.
Void Draw yaitu method yang berfungsi mengatur background dalam
permainan background disini mencakup posisi bola pertama kali warna background
3.
Void keyPressed yaitu method yang
mengatur configurator pemain void ini berfungsi sebagai pengatur permainan
dengan menggunkan keyboard jika keyboard
di tekan sesuai key yang dimasukan maka akan menggerakan bet pinpong
4.
Void ResetGame yaitu method yang
mengatur untuk memulai permainan dari awal lagi jika user ingin memulai
permainan baru hany denga menekan key R
5.
Void set yaitu method yang berguna untuk
mencetak atau menampilkan score
permainan
6.
Void Update yaitu method yang berfungsi
untuk mengupdate permainan jika bola tidak bisa ditangkap oleh lawan maka bola
akan berada di user yang tidak bisa menangkap bola tadi bukan berada di pemain
yang mencetak angka
Computer
Driven
Didalam game ini jika kita
memainkan melawan computer terdapat
semacam ai yang digunakan dipermainan ini digunakan Boolean ComputerDriven.
computerDriven ini berkerja dengan membaca posisi bet pingpong lawan dan membaca
posisi bola jika bola naik maka computer driven akan mengarahkan bet
pingpong nya sendiri untuk naik dan jika turun akan diarah kan turun oleh
computerDriven tersebut computerDriven dapat men-serve bola juga jika player
dapat mengarahkan bola untuk tidak dikena oleh bet pingpong computer selain itu
computerDriven ini juga dapat diatur
tingkat kesulitannya dengan menekan key + maka tingkatnya akan semakin
sulit dan bet pingpong yang dikendalikan computer dapat bergerak dengan cepat
jika kita kurangi dengan menakan tombol – maka pergerakan bet akan lama dan
memudahkan lawan untuk mengalahkan komputer
Computer dapat serve dengan
adanya ComputerDriven
Download file disini : https://www.dropbox.com/s/gb807qdayxnzd2s/sketch_50410549.rar
Tidak ada komentar:
Posting Komentar