Pong w wersji hoRacego. v. 0.999

Stworzone w pocie czoła w dniach od 7.IV.2008r. w górę.
Mój pierwszy raz z (n)aplletami javy.


GRA WŁAŚCIWA:

Your browser understands the <APPLET> tag but isn't running the applet, for some reason." Your browser is completely ignoring the <APPLET> tag!

Innymi słowy - odpal firefoxa, albo opere ;) Mi tam działa.

TODO:

Zapraszam na blogsek hoRacego

Kod źródłowy ;)

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;
		}
		
	}
	
}