Stworzone w pocie czoła w dniach od 7.IV.2008r. w górę.
Mój pierwszy raz z (n)aplletami javy.
Zapraszam na blogsek hoRacego
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class klasa extends Applet implements MouseMotionListener, ActionListener, ItemListener, Runnable, MouseListener
{
TextField field1; // pierwszy argument
TextField field2; // drugi argument
Choice rodzaj_paletki, inteligencja;
int ai, pal;
Panel p1;
int Height=640,Width=480, pkt_a, pkt_b, mX, mY, rog_x, rog_y;
float p1x, p1y, p2x, p2y;
Point p;
String string;
Button cheat, reset;
private Image dbImage;
private Graphics dbg;
float wspolczynnik;
int game=3;
float ball_x;
float ball_y;
int radius;
// Szybkosci piki
float speed_x;
float speed_y;
// Szybko przeciwnika
float opp_speed;
// Szybko: nim wiksza warto, tym wolniej.
int time;
// Rozmiary paletki
int pHeight = 20, pWidth = 100;
//Ograniczenia planszy
float breakRight; //590
float breakLeft; //50
int breakTop=60+radius; //50
int breakDown=460-radius; //470
//Zmienne potrzebne do obliczania odbicia
int roznica;
float odlegloscOdSrodka;
int punkt;
String pal1="Liniowa - dodawanie", pal2="Sektorowa - sztywna", pal3="Liniowa - mnoenie";
String ai1="Idealne AI", ai2="AI z ograniczon szybkoci", ai3="Tryb samotnika";
public void init()
{
setBackground(Color.red);
addMouseMotionListener(this);
addMouseListener(this);
setSize(Height,Width);
p1x= rog_x+10; //zawsze tak ma by
p2x = Height-40;
p2y = Width / 2;
speed_y=(float)Math.random();
speed_x=1;
pkt_a=0;
pkt_b=0;
rog_x=10;
rog_y=50;
ball_x = (Height/2)-10;
ball_y = (Width/2);
radius = 10;
// Szybko przeciwnika
opp_speed = (float)1.6;
// Szybko: nim wiksza warto, tym wolniej.
time = 2;
punkt=0;
//Domyle paletki i inteligencje
ai=1;
pal=1;
breakRight=p2x - radius; // LINIA CICIA PRAWA
breakLeft=p1x + radius +20; // LINIA CICIA LEWA
p1 = new Panel();
field1 = new TextField(5); // pierwszy argument
field2 = new TextField(5); // drugi argument
rodzaj_paletki = new Choice();
rodzaj_paletki.add(pal1);
rodzaj_paletki.add(pal2);
rodzaj_paletki.add(pal3);
rodzaj_paletki.addItemListener(this);
inteligencja = new Choice();
inteligencja.add(ai1);
inteligencja.add(ai2);
inteligencja.add(ai3);
inteligencja.addItemListener(this);
cheat = new Button("cheat");
cheat.addActionListener(this);
reset = new Button("reset");
reset.addActionListener(this);
p1.setLayout(new FlowLayout());
p1.setBackground(Color.yellow); // panel p1 kolor zlty
p1.add(rodzaj_paletki);
p1.add(new Label("Gracz 1:"));
p1.add(field1);
p1.add(new Label("Gracz 2:"));
p1.add(field2);
//p1.add(cheat);
p1.add(reset);
p1.add(inteligencja);
setVisible(true);
p1.setBounds(0, 0, 100, 20);
add(p1);
}
public void start() {
Thread th = new Thread (this);
th.start ();
}
public void stop() { }
public void destroy() { }
public void run () {
while(true)
{
if (game==1) // GRA WASCIWA
{
if (ball_y >= breakTop) // od GRY ODBICIE
{
speed_y = -speed_y;
}
if (ball_y <= breakDown) // od DOU ODBICIE
{
speed_y = -speed_y;
}
if ((ball_x >= breakRight)|(ball_x <= breakLeft))
{
// SPRAWDZENIE CZY NIE UDERZA W PALETKE
// I TRZEBA NALICZY PUNKT
if (ball_x >= breakRight)
{
roznica = (int)ball_y - (int)p2y; //ROZNICA ODLEGLOSCI PRAWEJ PALETKI
} else if (ball_x <= breakLeft)
{
roznica = (int)ball_y - (int)p1y; //ROZNICA ODLEGLOSCI LEWEJ PALETKI
}
if(roznica<0 | roznica > 100) // TRZEBA PUNKT
{
if (ball_x >= breakRight) // PUNKT DLA GRACZA 1 / 2gi wtopi
{
pkt_a++;
System.out.println("PUNKT DLA GRACZA 1");
punkt=1;
}
if (ball_x <= breakLeft) // PUNKT DLA GRACZA 2 / 1szy wtopi
{
pkt_b++;
System.out.println("PUNKT DLA GRACZA 2");
punkt=2;
}
} else // KULKA TRAFIA W PALETKE
{
// PATA PONY :)
if (ball_x >= breakRight) // Odbicie od 2
{
punkt=4;
}
if (ball_x <= breakLeft) // Odbicie od 1
{
punkt=3;
}
// LICZENIE SZATASKICH WSPӣCZYNNIKW ODLEGOCI
if (ball_x >= breakRight)
{
odlegloscOdSrodka = p2y + (pWidth / 2) - ball_y; //ROZNICA ODLEGLOSCI PRAWEJ PALETKI
} else if (ball_x <= breakLeft)
{
odlegloscOdSrodka = p1y + (pWidth / 2) - ball_y; //ROZNICA ODLEGLOSCI LEWEJ PALETKI
}
wspolczynnik = (odlegloscOdSrodka / (pWidth / 2));
switch(pal)
{
case(1): // Liniowa - dodawanie
speed_y = (speed_y - wspolczynnik); // MODYFIKACJA TRAJEKTORII
break;
case(2): // Sektorowa - staa
if (roznica >= 0 & roznica < 20)
{
speed_y = -2;
System.out.println("Strefa 1: Mocno do gry");
}
else if (roznica >= 20 & roznica < 40)
{
speed_y = (float)-1;
System.out.println("Strefa 2: rednio do gry");
}
else if (roznica >= 40 & roznica < 60)
{
//speed_y = speed_y;
System.out.println("Strefa 3: Bez zmian");
}
else if (roznica >= 60 & roznica < 80)
{
speed_y = (float)1;
System.out.println("Strefa 4: rednio na d");
}
else if (roznica >= 80 & roznica < 100)
{
speed_y = (float)2;
System.out.println("Strefa 5: Mocno na d");
}
break;
case(3): // Liniowa - mnoenie
speed_y = (speed_y * wspolczynnik*4); // MODYFIKACJA TRAJEKTORII
break;
}
// DEBUGOWANIE
System.out.print("odlegloscOdSrodka: ");
System.out.print(odlegloscOdSrodka);
System.out.print("; Ball_y: ");
System.out.print(ball_y);
System.out.print("; Speed_x: ");
System.out.print(speed_x);
System.out.print("; Speed_y: ");
System.out.print(speed_y);
System.out.print("; Wspolcz:");
System.out.println(wspolczynnik);
}
speed_x = -speed_x;
}
// PRZESUNICIE KULKI
ball_x = ball_x + speed_x;
ball_y = ball_y + speed_y;
repaint();
try
{
Thread.sleep (time);
}
catch (InterruptedException ex)
{
}
}
if (game==2)
{
}
}
}
public void paint(Graphics g)
{
// WYPENIENIE TEKSTEM
field1.setText(Integer.toString(pkt_a));
field2.setText(Integer.toString(pkt_b));
// PLANSZA
g.setColor(Color.green);
g.fillRoundRect(rog_x, rog_y, Height-20, Width-60, 20, 20);
g.setColor(Color.black);
// LINIE RODKA
g.drawLine((Height/2)-8, rog_y ,(Height/2)-8, Width-10);
g.drawLine((Height/2)-12, rog_y ,(Height/2)-12, Width-10);
// KӣKO NA RODKU
//g.drawOval((Height/2)-10, rog_y, 100, 100);
// REKLAMA
if (game==1) // ************* GRA WASCIWA
{
// PIKA
// pika waciwa
g.setColor(Color.yellow);
g.fillOval((int)ball_x - radius, (int)ball_y - radius, 2 * radius, 2 * radius);
// obwdka
g.setColor(Color.black);
g.drawOval((int)ball_x - radius, (int)ball_y - radius, 2 * radius, 2 * radius);
//***************************
// PALETKA GRACZA 1
g.setColor(Color.black);
//Sprawdzanie ogranicze, aby nie wyjedzao poza
if(mY < rog_y) p1y=rog_y; // paletka wykracza za gr
else if(mY > Width-110) p1y=Width-110; // paletka wykracza za d
else p1y=mY; // normalnie
g.fillRect((int)p1x, (int)p1y, (int)pHeight, (int)pWidth); //PALETKA 1
//***************************
// PALETKA GRACZA 2 (CPU)
g.setColor(Color.black);
switch(ai)
{
case(3): // GDY MA PODA ZA KURSOREM
p2y = mY;
break;
case(1): // IDEALNE AI ;))) Najgenialniejsze i najwspanialsze
p2y = ball_y-50;
break;
case(2): // AI z okrelon szybkoci
if (p2y >= ball_y) p2y = p2y - opp_speed; //Pika wyej -> idziem do gry
else if(p2y < ball_y) p2y = p2y + opp_speed ;// Pika niej -> idzemy na d
break;
}
//Sprawdzanie ogranicze, aby nie wyjedzao poza pole gry
if(p2y < rog_y) p2y=rog_y; // paletka wykracza za gr
else if(p2y > Width-110) p2y=Width-110; // paletka wykracza za d
g.fillRect((int)p2x, (int)p2y, (int)pHeight, (int)pWidth); //PALETKA 2
// POCHWAA GUPOTY! i efekty graficzne po PUNKCIE :)
switch(punkt)
{
case(1):
game=2;
break;
case(2):
game=2;
break;
case(3):
g.setFont(new Font("Tahoma",10,40));
g.drawString("PATA!", 110, 150);
break;
case(4):
g.setFont(new Font("Tahoma",10,40));
g.drawString("PON!", Height-180, 150);
break;
}
g.setFont(new Font("Tahoma",10,10));
g.drawString("(c) www.hoRacy.art.pl", Height-150, Width-15);
}
if (game==2)
{
/*
int x1,x2,y1,y2;
for (int it=1;it<1000;it++)
{
x1 = (int)((Math.random())*1000)%640;
x2 = (int)((Math.random())*1000)%640;
y1 = (int)((Math.random())*1000)%480;
y2 = (int)((Math.random())*1000)%480;
g.setColor(Color.DARK_GRAY) ;
g.drawLine(x1,y1,x2,y2);
}
*/
g.setColor(Color.white);
g.fillRoundRect(150, 180, 330, 100, 10, 10);
g.setColor(Color.black);
g.setFont(new Font("Tahoma",100,30));
switch(punkt)
{
case(1):
g.drawString("Gracz 1: PUNKT!", 200,Width/2);
break;
case(2):
g.drawString("Gracz 2: PUNKT!", 200,Width/2);
break;
}
}
if (game==3)
{
int x1,x2,y1,y2;
for (int it=1;it<10;it++)
{
x1 = (int)((Math.random())*1000)%640;
x2 = (int)((Math.random())*1000)%640;
y1 = (int)((Math.random())*1000)%480;
y2 = (int)((Math.random())*1000)%480;
g.setColor(Color.DARK_GRAY) ;
g.drawLine(x1,y1,x2,y2);
repaint();
}
g.setColor(Color.white);
g.fillRoundRect(150, 180, 330, 100, 10, 10);
g.setColor(Color.black);
g.setFont(new Font("Tahoma",100,20));
g.drawString("Pong : hoRacy's version", 160,Width/2-20);
g.setFont(new Font("Arial",100,12));
g.drawString("kliknij by zagra", 300,Width/2+20);
}
// ODKOMENTUJ ABY ZOBACZYC FAJNOSC
//fajnosc();
}
public void update (Graphics g)
{
// initialize buffer
if (dbImage == null)
{
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics ();
}
// clear screen in background
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// draw elements in background
dbg.setColor (getForeground());
paint (dbg);
// draw image on the screen
g.drawImage (dbImage, 0, 0, this);
}
public void mouseDragged(MouseEvent evt)
{
}
public void mouseMoved(MouseEvent evt)
{
p = evt.getPoint();
string = "x = " + p.x + "; y = " + p.y;
mX = p.x;
mY = p.y;
//System.out.print("mX: ");System.out.print(mX);System.out.print("; mY: ");System.out.println(mY);
//repaint(p1x, p1y, 20, 100); // TYLKO obszar paletki
}
public void mouseClicked(MouseEvent evt)
{
if(game==2)
{
game=1;
punkt=0;
reset("pozycje");
}
if(game==3)
{
reset("all");
}
}
public void mouseExited(MouseEvent evt)
{
}
public void mousePressed(MouseEvent evt)
{
}
public void mouseReleased(MouseEvent evt)
{
}
public void mouseEntered(MouseEvent evt)
{
}
public void actionPerformed(ActionEvent evt)
{
String label = evt.getActionCommand();
// Obsuga PRZYCISKU cheat
if (label.equals("cheat")) {
try {
pkt_a = Integer.parseInt(field1.getText());
pkt_b = Integer.parseInt(field2.getText());
System.out.println("Kliknieto CHEAT");
System.out.println(pkt_a);System.out.println(pkt_b);
//repaint();
} catch (NumberFormatException e) {
System.out.println("Blad argumentow CHEAT!");
}
}
// Obsuga PRZYCISKU RESET
if (label.equals("reset")) {
try {
reset("all");
System.out.println("Kliknieto RESET");
System.out.println(pkt_a);System.out.println(pkt_b);
//repaint();
} catch (NumberFormatException e) {
System.out.println("Blad argumentow RESET!");
}
}
}
public void itemStateChanged(ItemEvent e)
{
String ai_spr=inteligencja.getSelectedItem();
String pal_spr=rodzaj_paletki.getSelectedItem();
if (ai_spr==ai1) ai=1;
else if(ai_spr==ai2) ai=2;
else if(ai_spr==ai3) ai=3;
if (pal_spr==pal1) pal=1;
else if(pal_spr==pal2) pal=2;
else if(pal_spr==pal3) pal=3;
}
public void reset(String co)
{
if (co=="all")
{
game=1;
speed_y=(float)Math.random();
speed_x=1;
pkt_a=0;
pkt_b=0;
rog_x=10;
rog_y=50;
ball_x = (Height/2)-10;
ball_y = (Width/2);
radius = 10;
opp_speed = (float)1.6;
time = 2;
punkt=0;
} else if (co=="pozycje")
{
speed_y=(float)Math.random();
speed_x=1;
rog_x=10;
rog_y=50;
ball_x = (Height/2)-10;
ball_y = (Width/2);
radius = 10;
opp_speed = (float)1.6;
time = 2;
punkt=0;
}
}
}