# Hilfloser Abiturient



## fake115 (20. Mai 2014)

Guten Tag die Herren,
ich mache nächste Woche mein mündliches Abitur in Informatik. Mein Thema lautet Multiplayer - Keine Langeweile mehr, immer jemand da zum spielen. Als Teil meiner Prüfung möchte ich ein Beispiel zeigen und habe PONG gewählt. Anhand von Pong kann ich zumindest zeigen, wie der offline Multiplayer funktioniert indem man 2 Personen hat welche klassisch z.B. einer WS und der andere die Pfeiltasten benutzt. Nach etwas Recherche bin ich hier auf einen recht simplen und für mich angenehmen Code gestoßen, welcher nach etwas umschreiben auch nach meinen Ansprüchen funktioniert.

Mein Problem ist jetzt jedoch, dass ich Java in der Schule nie hatte und natürlich jetzt viele sagen dann arbeite dich ein oder sonstetwas in der Art. Meine Frage wäre nun ob und wenn ja wieweit, sodass ich auch noch selbstständig etwas tun kann, man mir helfen kann diesen Code soweit zu verstehen, dass wenn ich abgefragt werde auch antworten kann. Desweiteren wäre das nächste Problem den Code weiter umzuschreiben, dass ich die Pfeiltasten benutzen kann. Für einen Block kann man die Maus benutzen, jedoch möchte ich den anderen nicht automatisch gesteuert haben, sondern auch per Tasten, was mir dann kommt, dass man wohl einen Keylistener braucht und ich nicht weis inwieweit ich dann alles ändern muss und insgesamt komme ich mir mit meinem KnowHow sehr hilflos vor.

Wenn man sagt, dass ich vllt. nicht Java nehmen sollte, da es zu schwer ist für mich bin ich für einfachere Vorschläger immer offen. Wichtig ist lediglich, dass ich mein Beispiel so vorzeigen kann im Sinne von "Hier an dieser Stelle des Codes ist es möglich, dass nun mehr als eine Person spielen kann".

Mein erster Gedanke und der bessere wäre es Online irgendwie hinzukriegen, jedoch sprengt das bestimmt meine Möglichkeiten.



```
import java.awt.*;
     
     
    public class MyPong extends javax.swing.JFrame {
       
        /**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		private Graphics grp = null;
        private boolean running = true;
        private Thread t = null;
        private Image screen  = null;
        private Graphics2D gra = null;
       
        private Kugel k = null;
       
        int x = 0;
        int y = 0;
           
        /** Creates new form MyPong */
        public MyPong() {
            initComponents();
            initGame();
        }
       
        public void initGame(){if (!running){
            while(true) {
                try{
                    Thread.currentThread();
					Thread.sleep(100);
                }catch(InterruptedException ie){
                    ie.printStackTrace();
                }
            }
        }
       
        grp = jPanel1.getGraphics();
        screen = createImage(400,300);
        gra = (Graphics2D)screen.getGraphics();
        k = new Kugel(150,150, 1, 1);
        t = new Thread(new Game());
        t.start();
        }
       
       
     
        private void initComponents() {
            jPanel1 = new javax.swing.JPanel();
     
            setTitle("MyPong");
            addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent evt) {
                    exitForm(evt);
                }
            });
     
            jPanel1.setMinimumSize(new java.awt.Dimension(400, 300));
            jPanel1.setPreferredSize(new java.awt.Dimension(400, 300));
            jPanel1.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent evt) {
                    jPanel1MouseClicked(evt);
                }
            });
            jPanel1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
                public void mouseMoved(java.awt.event.MouseEvent evt) {
                    jPanel1MouseMoved(evt);
                }
            });
     
            getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
     
            pack();
        }
       
        private void jPanel1MouseMoved(java.awt.event.MouseEvent evt) {
            // Add your handling code here:
           
            y = evt.getY();
           
           
        }
       
        private void jPanel1MouseClicked(java.awt.event.MouseEvent evt) {
            // Add your handling code here:
           
            running = running ^ true;
            //System.out.println(running);
        }
       
        /** Exit the Application */
        private void exitForm(java.awt.event.WindowEvent evt) {
            System.exit(0);
        }
       
     
        @SuppressWarnings("deprecation")
		public static void main(String args[]) {
            new MyPong().show();
        }
       
        private void drawField(){
            gra.drawRect(5,5, 394, 294);
            gra.drawOval(175, 125, 50, 50);
            gra.drawLine(200,5, 200, 294);
            gra.drawLine(5, 150, 394, 150);
           
        }
       
        private void toScreen(){
            grp.drawImage(screen,0,0,400,300,this);
        }
       
        private void drawKugel(){
           
            k.koord.x += 2 * k.xricht;
            k.koord.y += 2 * k.yricht;
           
            if (( ( k.koord.x >= 380 ) || ( k.koord.x <= 390 ) ) &&  ( Math.abs(y - k.koord.y ) < 20 )){ //Treffer!
               
                if( k.koord.x + 10 > 390 )
                    k.xricht *= -1;
            }
           
            if (k.koord.x + 5 < 23)
                k.xricht *= -1;
           
            if( k.koord.y + 4 > 300 )
                k.yricht *= -1;
            else if (k.koord.y + 4 < 14)
                k.yricht *= -1;
           
           
            gra.fillOval(k.koord.x - 3, k.koord.y - 3, 5,5);
           
        }
       
        private void drawPlayer(){
            gra.fillRect( 380 , ( ( y < 278 ) && (y > 10) ) ? y : (y == 278) ? 278 : 10,  10, 20);
        }
       
        private void drawComputer(){
            gra.fillRect(10, k.koord.y - 10 , 10,20);
        }
       
    class Game implements Runnable{
           
            public void run(){
               
                while(true){
                   
                    if (!running){
                        while(!running) {
                            try{
                                Thread.currentThread();
								Thread.sleep(100);
                            }catch(InterruptedException ie){
                                ie.printStackTrace();
                            }
                        }
                    } else {
                       
                        while(running){
                           
                           
                           
                            gra.clearRect(0,0,400,300);
                           
                            drawField();
                           
                            drawPlayer();
                           
                            drawKugel();
                           
                            drawComputer();
                           
                            toScreen();
                           
                            try{
                                Thread.currentThread();
								Thread.sleep(10);
                            }catch(InterruptedException ie){
                                System.out.println(ie);
                                ie.printStackTrace();
                            }
                        }
                    }
                }
            }
           
        }
       
        class Kugel{
           
            public Point koord = null;
            public int xricht = 0; // -1, 0 , 1
            public int yricht = 0; // -1, 0 , 1
           
            public Kugel(int x, int y, int xr, int yr){
                koord = new Point(x,y);
                xricht = xr;
                yricht = yr;
               
            }
           
        }
       
       
        // Variables declaration - do not modify
        private javax.swing.JPanel jPanel1;
        // End of variables declaration
       
    }
```


----------



## Deros (21. Mai 2014)

nur weil ich gerade neugierig war eine kleine Hilfe auch wenn das sehr schwierig wird mit null Java Kenntnissen da was zu reißen auch wenn es an sich simpel wäre:


```
private void drawComputer(){
            gra.fillRect(10, k.koord.y - 10 , 10,20);
        }
```

hier wird der Balken des Computers bewegt 



```
private void jPanel1MouseMoved(java.awt.event.MouseEvent evt) {
        // Add your handling code here:
       
        y = evt.getY();
       
       
    }
```

das ist das MouseEvent für spieler 1, eine recht ähnliche funktion müsstest du halt nur haben um den Spieler 2 zu bewegen


----------



## fake115 (21. Mai 2014)

Habe mich jetzt für Lazarus entschieden. Dort bin ich zwar auch schon auf Probleme gestoßen kenn mich a ber besser aus, was es dann einfacher machen sollte.


----------

