Przesyłanie danych za pomocą Socketu

Przesyłanie danych za pomocą Socketu
Webowiec
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 7 lat
0

Witam. Moja "gra" umożliwia czatowanie między serwerem i klientem, jednak jest to skrypt napisany za pomocą jakiegoś tutoriala z YouTube'a. Niestety nie mam zielonego pojęcia jak przesyłać dane między serwerem a klientem np. po wciśnięciu przycisku.

Konkretnie chodzi mi o to, że gdy jeden gracz usiądzie do stołu w jednym z 4 miejsc, w jego oknie na miejsce buttona pojawia się jego imię (RamkaRysunku.b_1miejsce.setText(Gracz.imie);). Natomiast na ekranie drugiego gracza ma pojawić się ta sama informacja. Załóżmy, że siada serwer, a klientowi odbiera tą informację. Pomóżcie :(

Oto kod:

Kopiuj
package chicken;

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.*;
import java.awt.Color;
import javax.swing.*;

import java.io.BufferedReader;  
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;  
import java.io.Serializable;
import java.net.InetAddress;
import java.net.ServerSocket;  
import java.net.Socket; 
/**
 *
 * @author Chicken
 */



@SuppressWarnings("serial")
public class Okno extends JFrame implements ActionListener  {		
	
	JButton bServer, bClient;
	static String ktoTo = "";

	public Okno()
	{
		bServer = new JButton("Serwer");
		bClient = new JButton("Klient");
		
		setLayout(null); 
		setTitle("Chińczyk by Kamil Derkacz - EKRAN STARTOWY"); 
		setSize(400,400);
		setVisible(true);
		
		bServer.setBounds(0, 0, 100, 40);
    	bClient.setBounds(100, 0, 100, 40);
    	add(bServer);
    	add(bClient);
    	bServer.addActionListener(this);
    	bClient.addActionListener(this);
	}
	
	public void actionPerformed(ActionEvent ae) { // to co się dzieje po wciśnięciu przycisków! :))
		
		Object zrodlo = ae.getSource();
		
		if(zrodlo == bServer){
			
			ktoTo = "serwer";
			System.out.println("Wybrales"+ktoTo);
			stworzRamke(ktoTo);
		}
		else if(zrodlo == bClient){
			
			ktoTo = "klient";
			System.out.println("Wybrales "+ktoTo);
			stworzRamke(ktoTo);
		}
        
	}
	
    public static void main(String[] args)
	{
    	Okno okienko = new Okno();
    	okienko.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	okienko.setVisible(true);
	}
    
    public static void stworzRamke(String ktoTo) {
    	
    	RamkaRysunku ramka = new RamkaRysunku("127.0.0.1", ktoTo);
    	(new Thread(ramka)).start(); /////////////////////////////////////////
    	
		ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		ramka.setVisible(true);
		
    }
}




@SuppressWarnings("serial")
class RamkaRysunku extends JFrame implements ActionListener, Runnable
{
	
	public void run() {
		startRunning(ktoTo2);
	}
	
	static String gracz; // określany tylko raz
	static JButton serverButton, clientButton;
	static JButton b_1miejsce, b_2miejsce, b_3miejsce, b_4miejsce;
	static JLabel stol, l_1, l_2, l_3, l_4, czat, l_1miejsce, l_2miejsce, l_3miejsce, l_4miejsce, komunikat;
	
	private JTextField userText;
    private JTextArea chatWindow;
    private ObjectOutputStream output;
    private ObjectInputStream input;
    private ServerSocket server;
    private Socket connection; // set up the Socket = set up the connection
    //klient
    private String message = "";
    private String serverIP;
    
    int size;
    
    static String ktoTo2 = ""; ////////////////////////////////////
    
    //konstruktor
	public RamkaRysunku(String host, final String ktoTo) 
	{
		super("A");
		serverIP = host;
		ktoTo2 = ktoTo;
		
		setLayout(null); // dzięki temu możemy określać współrzędne bzwzględne
		
		userText = new JTextField();
        userText.setEditable(false);
        userText.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent event) {
                        sendMessage(event.getActionCommand(), ktoTo);
                        userText.setText(""); // po wciśnięciu ENTER'a mamy puste pole
                    }
                }
        );
        
        userText.setBounds(680,502,450,25);
        add(userText, BorderLayout.NORTH); //!!!!!!!!!!!!!!!!!
        
        
        l_1 = new JLabel("#1");
        l_1.setFont(new Font("MS Sans Serif", Font.BOLD, 40));
        l_1.setBounds(35, 0, 100, 100);
        add(l_1);
        l_2 = new JLabel("#2");
        l_2.setFont(new Font("MS Sans Serif", Font.BOLD, 40));
        l_2.setBounds(575, 0, 100, 100);
        add(l_2);
        
        //STOŁY i miejsca
        stol = new JLabel("Stół graczy");
        stol.setFont(new Font("MS Sans Serif", Font.BOLD, 24));
        stol.setBounds(700, 25, 200, 40);
        add(stol);
        
        l_1miejsce = new JLabel("Miejsce #1");
        l_1miejsce.setBounds(700, 70, 100, 40);
        add(l_1miejsce);
        l_2miejsce = new JLabel("Miejsce #2");
        l_2miejsce.setBounds(900, 70, 100, 40);
        add(l_2miejsce);
        l_3miejsce = new JLabel("Miejsce #3");
        l_3miejsce.setBounds(700, 150, 100, 40);
        add(l_3miejsce);
        l_3miejsce = new JLabel("Miejsce #4");
        l_3miejsce.setBounds(900, 150, 100, 40);
        add(l_3miejsce);
        
        b_1miejsce = new JButton("Usiądź");
        b_1miejsce.setBounds(700, 100, 150, 50);
        add(b_1miejsce);
        if(Gracz.gracz1Istnieje) // jeśli gracz siedzi przy stole...
        {
        	b_1miejsce.setEnabled(false);
        	b_1miejsce.setText(Gracz.imie);
        }
        
        b_2miejsce = new JButton("Usiądź");
        b_2miejsce.setBounds(900, 100, 150, 50);
        add(b_2miejsce);
        if(Gracz.gracz2Istnieje) // jeśli gracz siedzi przy stole...
        {
        	b_2miejsce.setEnabled(false);
        	b_2miejsce.setText(Gracz.imie);
        }
        
        b_3miejsce = new JButton("Usiądź");
        b_3miejsce.setBounds(700, 180, 150, 50);
        add(b_3miejsce);
        b_4miejsce = new JButton("Usiądź");
        b_4miejsce.setBounds(900, 180, 150, 50);
        add(b_4miejsce);
        
        b_1miejsce.addActionListener(this);
        b_2miejsce.addActionListener(this);
        
        //Komunikaty
        komunikat = new JLabel("");
        komunikat.setBounds(700, 240, 500, 40);
        komunikat.setForeground(Color.RED);
        add(komunikat);
        
        // Chat
        czat = new JLabel("Chat");
        czat.setFont(new Font("MS Sans Serif", Font.BOLD, 24));
        czat.setBounds(680, 355, 200, 40);
        add(czat);
        chatWindow = new JTextArea();
        add(new JScrollPane(chatWindow), BorderLayout.CENTER);
        chatWindow.setBounds(680,400,450,100);
        add(chatWindow, BorderLayout.NORTH);
        setVisible(true);
        
		//setTitle("Chińczyk by Kamil Derkacz"); 
		setSize(1200,700);
		
		PanelRysunku panel = new PanelRysunku(); 
		(new Thread(panel)).start(); /////////////////////////////////////////
		
		panel.setBounds(0,0,700,700);
		Container zawartosc = getContentPane();
		zawartosc.add(panel); // dodanie panelu do kontenera
		
	}

	
	
	@Override
	public void actionPerformed(ActionEvent ae)  { // Przyciski "Usiądź"
		Object zrodlo = ae.getSource();
		
		if(zrodlo == b_1miejsce) {
			
			Gracz gracz1 = new Gracz();
			
			//wysłanie info do klienta
			//wyslij("SIEDZE", 1, Gracz.imie); // co zrobił gracz, numer siedzenia, imie gracza
			
			
			gracz = Gracz.imie;
			Gracz.gracz1Istnieje = true;
			RamkaRysunku.b_1miejsce.setEnabled(false);
			RamkaRysunku.b_2miejsce.setEnabled(false);
			RamkaRysunku.b_3miejsce.setEnabled(false);
			RamkaRysunku.b_4miejsce.setEnabled(false);
			RamkaRysunku.b_1miejsce.setText(Gracz.imie);
			
			if(Gracz.gracz2Istnieje==true || Gracz.gracz3Istnieje==true || Gracz.gracz4Istnieje==true)
				komunikat.setText("Zająłeś 1 miejsce przy stole.");
			else
				komunikat.setText("Zająłeś 1 miejsce przy stole. Zaczekaj na innych graczy.");
			
			
		}
		if(zrodlo == b_2miejsce) {
			
			Gracz gracz2 = new Gracz();
			
			gracz = Gracz.imie;
			Gracz.gracz2Istnieje = true;
			RamkaRysunku.b_1miejsce.setEnabled(false);
			RamkaRysunku.b_2miejsce.setEnabled(false);
			RamkaRysunku.b_3miejsce.setEnabled(false);
			RamkaRysunku.b_4miejsce.setEnabled(false);
			RamkaRysunku.b_2miejsce.setText(Gracz.imie);

			if(Gracz.gracz1Istnieje==true || Gracz.gracz3Istnieje==true || Gracz.gracz4Istnieje==true)
				komunikat.setText("Zająłeś 1 miejsce przy stole.");
			else
				komunikat.setText("Zająłeś 1 miejsce przy stole.\nZaczekaj na innych graczy.");
			
		}
		if(zrodlo == b_3miejsce) {
			
			
		}
		if(zrodlo == b_4miejsce) {
			
			
		}
			
	}
	
	
	
    public void startRunning(String ktoTo) { //set up and run the server
        System.out.println("Jestem w startRunnin: "+ktoTo);
    	if(ktoTo == "serwer")
    	{
    	
	        try {
		            server = new ServerSocket(6788, 100); // port, liczba uż.
		            while(true)
		            {
		                try{
		                    // connect and have conversation
		                    waitForConnection();
		                    setupStreams();
		                    whileChatting(ktoTo);
		                }catch(EOFException oefException){
		                    showMessage("\n Server ended the connection");
		                }finally{
		                    closeCrap();
		                }
		            }
	        }catch(IOException ioException){
	            ioException.printStackTrace();
	        }
        
    	}
    	else if(ktoTo == "klient")
    	{
    		try{
                connectToServer();
                setupStreams();
                whileChatting(ktoTo);
            }catch(EOFException eofException){
                showMessage("\n Client terminated connection");
            }catch(IOException ioException){
                ioException.printStackTrace();
            }finally{
                closeCrap();
            }
    	}
    }
    
    
    //wait for conn., then display connection info.
    private void waitForConnection() throws IOException{
          showMessage("Czekam na innych graczy... \n");
          connection = server.accept();
          showMessage("Połączono z " + connection.getInetAddress().getHostName());
    }
    
    //client - connect to server
    private void connectToServer() throws IOException{
        showMessage("Nawiązywanie połączenia... \n");
        connection = new Socket(InetAddress.getByName(serverIP), 6788);
        showMessage("Połączono z "+ connection.getInetAddress().getHostName());
        
    }
    
    
    //get stream to send and receive data
    private void setupStreams() throws IOException{
        output = new ObjectOutputStream(connection.getOutputStream());
        output.flush(); //nie wiem
        input = new ObjectInputStream(connection.getInputStream());
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        
    }
    
    //during the chat conversation
    private void whileChatting(String ktoTo) throws IOException{
        if(ktoTo == "serwer")
        {
	        String message = "Jesteś połączony!";
	        sendMessage(message,ktoTo);
	        
	        ableToType(true);
	        do {
	            try {
	                message = (String) input.readObject();
	                showMessage("\n" + message);
	            }catch(ClassNotFoundException classNotFoundException){
	                showMessage("\nni dy rydy panie...!");
	            }
	        } while(!message.equals("klient - END"));
        }
        else if(ktoTo == "klient")
        {
        	ableToType(true);
            do{
                try{
                    message = (String) input.readObject();
                    showMessage("\n" + message);
                }catch(ClassNotFoundException classNotFoundException){
                    showMessage("\n I don't know that object type!");
                }
                    
            }while(!message.equals("serwer - END"));
        }
    }
    
    //close streams and sockets after you are done chatting
    private void closeCrap(){
        
        showMessage("\n Zamykanie połączenia... \n");
        ableToType(false);
        try{
            output.close();
            input.close();
            connection.close(); // zamyka socket
        }catch(IOException ioException){
            ioException.printStackTrace();
        }
        System.out.println(size);
    }
    
    //send a message to client
    private void sendMessage(String message, String ktoTo){
        try{
            output.writeObject(ktoTo + " - " + message);
            output.flush();
            showMessage("\n" + ktoTo + " - " + message);
        }catch(IOException ioException){
            chatWindow.append("\n BŁĄD: NIE MOGĘ WYSŁAĆ WIADOMOŚCI ");
        }
    }
    
    //updates chatWindow!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    private void showMessage(final String text){
        
        SwingUtilities.invokeLater(
                new Runnable(){
                    public void run(){
                        chatWindow.append(text);
                    }
                }
        );
        
    }
    
    //let the users type stuff into their box
    private void ableToType(final boolean tof){
        SwingUtilities.invokeLater(
                new Runnable(){
                    public void run(){
                        userText.setEditable(tof);
                    }
                }
        );
    }
    
    
	
	
}


class Gracz
{
	public static boolean gracz1Istnieje, gracz2Istnieje, gracz3Istnieje, gracz4Istnieje;
	static String imie;
	static int pionkow, oczek;
	
	public Gracz()
	{
		imie = JOptionPane.showInputDialog("Podaj imię");
		//JOptionPane.showMessageDialog(this, "Podaj imię: \n\n", "Podaj imię", JOptionPane.WARNING_MESSAGE);
		
		
		pionkow = 4; oczek = 0;
	}
	
	public void main()
	{
		
	}
}





@SuppressWarnings("serial")
class PanelRysunku extends JPanel
	implements Runnable
{
	
	@Override
    public void run() {
		paintComponent(null);
	}
	
	public void paintComponent(Graphics g)  // Utworzenie metody paintComponent
	{
            super.paintComponent(g); // Czyszczenie obrazu
        
            GeneralPath srodek = new GeneralPath(GeneralPath.WIND_EVEN_ODD); // Stworzenie obiektu klasy GeneralPath
            BasicStroke linia1 = new BasicStroke(30f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); // Stworzenie linii klasy BasicStroke i określenie jej właściwości: grubości oraz zaokrągleń krawędzi
            BasicStroke linia2 = new BasicStroke(20f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); // ...
            BasicStroke linia3 = new BasicStroke(0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); // ...

            Graphics2D g2 = (Graphics2D)g; //
            Graphics2D g3 = (Graphics2D)g; // 
            Graphics2D g4 = (Graphics2D)g; // 
            Graphics2D g6 = (Graphics2D)g; // 
                                           // Stworzenie obiektów graficznych g
            Graphics2D g7 = (Graphics2D)g; // 
            Graphics2D g8 = (Graphics2D)g; // 
            Graphics2D g9 = (Graphics2D)g; // 
            Graphics2D g10 = (Graphics2D)g; // 

            g2.setColor(Color.RED); // Ustawienie koloru 1 linii
            g2.setStroke(linia1); // Nadanie ustawień linii

            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // Włączenie anty-aliasingu
            g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); // Włączenie renderingu

            Point2D.Double p1 = new Point2D.Double(195, 50); //
            Point2D.Double p2 = new Point2D.Double(50, 283); // Utworzenie punktów trójkąta
            Point2D.Double p3 = new Point2D.Double(330, 283);//
            Line2D.Double l1 = new Line2D.Double(p1, p2); //
            Line2D.Double l2 = new Line2D.Double(p2, p3); // Połączenie punktów liniami
            Line2D.Double l3 = new Line2D.Double(p3, p1); //
            g2.draw(l1); //
            g2.draw(l2); // Narysowanie figury
            g2.draw(l3); //

            g3.setColor(Color.YELLOW); // Ustawienie koloru 2 linii
            g3.setStroke(linia2); // Nadanie ustawień linii
            Point2D.Double p4 = new Point2D.Double(195, 60); //
            Point2D.Double p5 = new Point2D.Double(60, 278); // Utworzenie punktów trójkąta
            Point2D.Double p6 = new Point2D.Double(320, 278);//
            Line2D.Double  l4 = new Line2D.Double(p4, p5); //
            Line2D.Double  l5 = new Line2D.Double(p5, p6); // Połączenie punktów liniami
            Line2D.Double  l6 = new Line2D.Double(p6, p4); //
            srodek.append(l4, true); //
            srodek.append(l5, true); // Dodanie linii do obiektu "srodek"
            srodek.append(l6, true); //
            g3.fill(srodek); // Wypełnienie obiektu "srodek"
            g3.draw(l4); //
            g3.draw(l5); // Narysowanie figury
            g3.draw(l6); //
        
		
  
	    Rectangle2D prost1 = new Rectangle2D.Double(160, 120, 25, 65); // Deklaracja prostokąta wraz z określeniem położenia i wymiarów
	    g6.setStroke(linia3); // Ustawienie grubości linii prostokąta wcześniej zdefiniowaną linią nr 3
	    g6.setColor(Color.black); // Kolor figury
	    g6.fill(prost1); // Wypełenienie figury
	    g6.draw(prost1); // Narysowanie figury
	    
	    Rectangle2D prost2 = new Rectangle2D.Double(200, 120, 25, 65);
	    g7.setStroke(linia3); 
	    g7.setColor(Color.black);
	    g7.fill(prost2);
	    g7.draw(prost2);
	    
	    Rectangle2D prost3 = new Rectangle2D.Double(136, 200, 25, 70);
	    g8.setStroke(linia3);
	    g8.setColor(Color.black);
	    g8.fill(prost3);
	    g8.draw(prost3);
	    
	    Rectangle2D prost4 = new Rectangle2D.Double(225, 200, 25, 70);
	    g9.setStroke(linia3);
	    g9.setColor(Color.black);
	    g9.fill(prost4);
	    g9.draw(prost4);
	    
	    int n = 4; // Deklaracja zmiennej odpowiadającej liczbie wierzchołków równoległoboku
	    int x_rown1[] = {136, 160, 185, 160}; // Punkty X równoległoboku
	    int y_rown1[] = {200, 180, 184, 205}; // Punkty Y równoległoboku
	    g4.setColor(Color.black); // Ustawienie koloru figury
	    g4.fillPolygon(x_rown1, y_rown1, n); // Wypełnienie figury złożonej z powyższych punktów o "n" wierzchołkach
	    
	    int x_rown2[] = {200, 225, 250, 225}; //
	    int y_rown2[] = {185, 180, 200, 205}; //
	    g4.setColor(Color.black);  			  // Narysowanie drugiej figury 
	    g4.fillPolygon(x_rown2, y_rown2, n);  //
            
            
            
            
            //Plansza-Obrys
            Rectangle2D planszaObrys = new Rectangle2D.Double(25, 25, 604, 604);
	    g10.setStroke(linia3);
	    g10.setColor(Color.black);
	    g10.fill(planszaObrys);
	    g10.draw(planszaObrys);
            //Plansza-wypełnienie
            Rectangle2D planszaWypel = new Rectangle2D.Double(27, 27, 600, 600);
	    g10.setStroke(linia3);
	    g10.setColor(Color.GREEN);
	    g10.fill(planszaWypel);
	    g10.draw(planszaWypel);
            
            //Czarny-Krzyż
            g10.setColor(Color.BLACK);
            Rectangle2D kolumnaPion = new Rectangle2D.Double(251, 46, 151, 551);
            g10.fill(kolumnaPion);g10.draw(kolumnaPion);
            Rectangle2D kolumnaPozi = new Rectangle2D.Double(51, 246, 551, 151);
            g10.fill(kolumnaPozi);g10.draw(kolumnaPozi);
            
            
            //Pola
            g10.setColor(Color.GRAY);
            //wzór:
            Rectangle2D pole = new Rectangle2D.Double(252, 547, 49, 49);
            g10.fill(pole);g10.draw(pole);
            //
            Rectangle2D pole1 = new Rectangle2D.Double(252, 47, 49, 49);
            g10.fill(pole1);g10.draw(pole1);
            Rectangle2D pole2 = new Rectangle2D.Double(252, 97, 49, 49);
            g10.fill(pole2);g10.draw(pole2);
            Rectangle2D pole3 = new Rectangle2D.Double(252, 147, 49, 49);
            g10.fill(pole3);g10.draw(pole3);
            Rectangle2D pole4 = new Rectangle2D.Double(252, 197, 49, 49);
            g10.fill(pole4);g10.draw(pole4);
            Rectangle2D pole5 = new Rectangle2D.Double(252, 247, 49, 49);
            g10.fill(pole5);g10.draw(pole5);
            
            Rectangle2D pole6 = new Rectangle2D.Double(252, 347, 49, 49);
            g10.fill(pole6);g10.draw(pole6);
            Rectangle2D pole7 = new Rectangle2D.Double(252, 397, 49, 49);
            g10.fill(pole7);g10.draw(pole7);
            Rectangle2D pole8 = new Rectangle2D.Double(252, 447, 49, 49);
            g10.fill(pole8);g10.draw(pole8);
            Rectangle2D pole9 = new Rectangle2D.Double(252, 497, 49, 49);
            g10.fill(pole9);g10.draw(pole9);
            Rectangle2D pole10 = new Rectangle2D.Double(252, 547, 49, 49);
            g10.fill(pole10);g10.draw(pole10);
            
            //pole przed bazą u góry^
            Rectangle2D pole11 = new Rectangle2D.Double(302, 47, 49, 49);
            g10.fill(pole11);g10.draw(pole11);
            Rectangle2D pole12 = new Rectangle2D.Double(302, 547, 49, 49);
            g10.fill(pole12);g10.draw(pole12);
            
            Rectangle2D pole13 = new Rectangle2D.Double(352, 47, 49, 49);
            g10.fill(pole13);g10.draw(pole13);
            Rectangle2D pole14 = new Rectangle2D.Double(352, 97, 49, 49);
            g10.fill(pole14);g10.draw(pole14);
            Rectangle2D pole15 = new Rectangle2D.Double(352, 147, 49, 49);
            g10.fill(pole15);g10.draw(pole15);
            Rectangle2D pole16 = new Rectangle2D.Double(352, 197, 49, 49);
            g10.fill(pole16);g10.draw(pole16);
            Rectangle2D pole17 = new Rectangle2D.Double(352, 247, 49, 49);
            g10.fill(pole17);g10.draw(pole17);
            
            Rectangle2D pole18 = new Rectangle2D.Double(352, 347, 49, 49);
            g10.fill(pole18);g10.draw(pole18);
            Rectangle2D pole19 = new Rectangle2D.Double(352, 397, 49, 49);
            g10.fill(pole19);g10.draw(pole19);
            Rectangle2D pole20 = new Rectangle2D.Double(352, 447, 49, 49);
            g10.fill(pole20);g10.draw(pole20);
            Rectangle2D pole21 = new Rectangle2D.Double(352, 497, 49, 49);
            g10.fill(pole21);g10.draw(pole21);
            Rectangle2D pole22 = new Rectangle2D.Double(352, 547, 49, 49);
            g10.fill(pole22);g10.draw(pole22);
            
            
            
            Rectangle2D pole23 = new Rectangle2D.Double(52, 247, 49, 49);
            g10.fill(pole23);g10.draw(pole23);
            Rectangle2D pole24 = new Rectangle2D.Double(102, 247, 49, 49);
            g10.fill(pole24);g10.draw(pole24);
            Rectangle2D pole25 = new Rectangle2D.Double(152, 247, 49, 49);
            g10.fill(pole25);g10.draw(pole25);
            Rectangle2D pole26 = new Rectangle2D.Double(202, 247, 49, 49);
            g10.fill(pole26);g10.draw(pole26);
            
            
            Rectangle2D pole27 = new Rectangle2D.Double(402, 247, 49, 49);
            g10.fill(pole27);g10.draw(pole27);
            Rectangle2D pole28 = new Rectangle2D.Double(452, 247, 49, 49);
            g10.fill(pole28);g10.draw(pole28);
            Rectangle2D pole29 = new Rectangle2D.Double(502, 247, 49, 49);
            g10.fill(pole29);g10.draw(pole29);
            Rectangle2D pole30 = new Rectangle2D.Double(552, 247, 49, 49);
            g10.fill(pole30);g10.draw(pole30);
            
            Rectangle2D pole31 = new Rectangle2D.Double(52, 297, 49, 49);
            g10.fill(pole31);g10.draw(pole31);
            Rectangle2D pole32 = new Rectangle2D.Double(552, 297, 49, 49);
            g10.fill(pole32);g10.draw(pole32);
            
            Rectangle2D pole33 = new Rectangle2D.Double(52, 347, 49, 49);
            g10.fill(pole33);g10.draw(pole33);
            Rectangle2D pole34 = new Rectangle2D.Double(102, 347, 49, 49);
            g10.fill(pole34);g10.draw(pole34);
            Rectangle2D pole35 = new Rectangle2D.Double(152, 347, 49, 49);
            g10.fill(pole35);g10.draw(pole35);
            Rectangle2D pole36 = new Rectangle2D.Double(202, 347, 49, 49);
            g10.fill(pole36);g10.draw(pole36);
        
            Rectangle2D pole37 = new Rectangle2D.Double(402, 347, 49, 49);
            g10.fill(pole37);g10.draw(pole37);
            Rectangle2D pole38 = new Rectangle2D.Double(452, 347, 49, 49);
            g10.fill(pole38);g10.draw(pole38);
            Rectangle2D pole39 = new Rectangle2D.Double(502, 347, 49, 49);
            g10.fill(pole39);g10.draw(pole39);
            Rectangle2D pole40 = new Rectangle2D.Double(552, 347, 49, 49);
            g10.fill(pole40);g10.draw(pole40);
            
            
            //Domki-graczy
            g10.setColor(Color.GRAY);
            g10.fillOval(76, 76, 150, 150);
            g10.fillOval(426, 76, 150, 150);
            g10.fillOval(76, 421, 150, 150); // duże koła
            g10.fillOval(426, 421, 150, 150);
            
            //pionki
            int pol_pionk1[][] = { { 101, 101 }, { 151, 101 }, { 101, 151 }, { 151, 151 } };
            int pol_pionk2[][] = { { 451, 101 }, { 501, 101 }, { 451, 151 }, { 501, 151 } };
            int pol_pionk3[][] = { { 101, 446 }, { 151, 446 }, { 101, 496 }, { 151, 496 } };
            int pol_pionk4[][] = { { 451, 446 }, { 501, 446 }, { 451, 496 }, { 501, 496 } };
            
            g10.setColor(Color.BLUE);
            for(int i=0; i<4; i++)
                g10.fillOval(pol_pionk1[i][0], pol_pionk1[i][1], 48, 48);
            g10.setColor(Color.GREEN);
            for(int i=0; i<4; i++)
                g10.fillOval(pol_pionk2[i][0], pol_pionk2[i][1], 48, 48);
            g10.setColor(Color.YELLOW);
            for(int i=0; i<4; i++)
                g10.fillOval(pol_pionk3[i][0], pol_pionk3[i][1], 48, 48);
            g10.setColor(Color.RED);
            for(int i=0; i<4; i++)
                g10.fillOval(pol_pionk4[i][0], pol_pionk4[i][1], 48, 48);
            
            
            
            //Bazy
            g10.setColor(Color.BLUE);
            Rectangle2D baza11 = new Rectangle2D.Double(302, 97, 49, 49);
            g10.fill(baza11);g10.draw(baza11);
            Rectangle2D baza12 = new Rectangle2D.Double(302, 147, 49, 49);
            g10.fill(baza12);g10.draw(baza12);
            Rectangle2D baza13 = new Rectangle2D.Double(302, 197, 49, 49);
            g10.fill(baza13);g10.draw(baza13);
            Rectangle2D baza14 = new Rectangle2D.Double(302, 247, 49, 49);
            g10.fill(baza14);g10.draw(baza14);
            g10.setColor(Color.GREEN);
            Rectangle2D baza21 = new Rectangle2D.Double(502, 297, 49, 49);
            g10.fill(baza21);g10.draw(baza21);
            Rectangle2D baza22 = new Rectangle2D.Double(452, 297, 49, 49);
            g10.fill(baza22);g10.draw(baza22);
            Rectangle2D baza23 = new Rectangle2D.Double(402, 297, 49, 49);
            g10.fill(baza23);g10.draw(baza23);
            Rectangle2D baza24 = new Rectangle2D.Double(352, 297, 49, 49);
            g10.fill(baza24);g10.draw(baza24);
            g10.setColor(Color.RED);
            Rectangle2D baza31 = new Rectangle2D.Double(302, 497, 49, 49);
            g10.fill(baza31);g10.draw(baza31);
            Rectangle2D baza32 = new Rectangle2D.Double(302, 447, 49, 49);
            g10.fill(baza32);g10.draw(baza32);
            Rectangle2D baza33 = new Rectangle2D.Double(302, 397, 49, 49);
            g10.fill(baza33);g10.draw(baza33);
            Rectangle2D baza34 = new Rectangle2D.Double(302, 347, 49, 49);
            g10.fill(baza34);g10.draw(baza34);
            g10.setColor(Color.YELLOW);
            Rectangle2D baza41 = new Rectangle2D.Double(102, 297, 49, 49);
            g10.fill(baza41);g10.draw(baza41);
            Rectangle2D baza42 = new Rectangle2D.Double(152, 297, 49, 49);
            g10.fill(baza42);g10.draw(baza42);
            Rectangle2D baza43 = new Rectangle2D.Double(202, 297, 49, 49);
            g10.fill(baza43);g10.draw(baza43);
            Rectangle2D baza44 = new Rectangle2D.Double(252, 297, 49, 49);
            g10.fill(baza44);g10.draw(baza44);
            
            
	}
	
	
	
}


Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)