Ich habe versucht, den Block mit Java zu brechen (1)

Dinge die zu tun sind

Der vorherige Artikel ist unten

https://qiita.com/strict39275/items/41da2ad3bb8fd60228e0 Selbst wenn ich sorgfältig darüber nachdenke, hat der Code mein Ideal nicht erreicht, aber ich möchte ihn von nun an verbessern. In diesem Artikel möchte ich jede Klasse erklären. Wenn Sie alles plötzlich erklären, wird es eine enorme Zeitspanne sein, daher scheint es beim nächsten Mal besser, jede Klasse sorgfältig einzeln zu erklären. Ich werde es tun.

Diagramm der Klassenstruktur

Es ist ein Klassenstrukturdiagramm von Shiracamus. Es fühlt sich so an, als ob die Breakout-Klasse die Hauptklasse ist und die Instanzvariablen der Klasse darin erstellt werden. java1.png

Programmcode

Ich möchte eins nach dem anderen erklären, einschließlich Reflexion.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Timer;
import java.util.TimerTask;

Es scheint besser, die import-Anweisung am Anfang des Codes zu deklarieren. Auf diese Weise ist es einfacher zu erkennen, welche Bibliothek dieser Code verwendet. Durch Eingabe einer Deklaration wie import javax.swing. Sie können die von Java erstellten Klassen verwenden. Mit anderen Worten, Sie können den Bildschirm anzeigen und Mausereignisse eingeben, ohne Ihren eigenen Code schreiben zu müssen. Die meisten Importanweisungen verwenden den On-Demand-Import. Wenn Sie beispielsweise den On-Demand-Typ importieren, können Sie alle Funktionen in javax.util verwenden. Mit anderen Worten, wenn Sie am Ende der Importanweisung ✳︎ hinzufügen, müssen Sie sich keine Gedanken über Fehler machen. Sie sollten jedoch vorsichtig sein, da Sie nicht wissen, welche Funktion Sie verwenden sollen.

Beschreibung der Breakout-Klasse

Dieses Mal werde ich nur die Breakout-Klasse erklären

   public class breakout extends JPanel implements MouseMotionListener{
       static int countball =15;
      
       
   Racket racket;
   Ball[] ball;
   Block[] block;
   Unbreakblock[] block1;
   Twobreakblock[] block2;
   Threebreakblock[] block3;

   double time;
   int remain=37;
   boolean gameover=false;

Funktionen in diesem Code

-Die Breakout-Klasse erbt die JPanel-Funktion und hat die Funktion, den Bildschirm tatsächlich anzuzeigen. In diesem Bereich habe ich Geräte eingegeben, um die Mausfunktionalität zu aktivieren

Mit anderen Worten, was hast du gemacht?

Hier legen wir den Grundstein für die Herstellung von Spielen. Selbst wenn Sie ein Spiel erstellen, bedeutet dies nicht, dass es nicht auf dem Bildschirm angezeigt wird. Wenn Sie keine Mausfunktion haben, können Sie nicht einmal einen Schläger verwenden, der den Ball abprallt. Daher hat dieser Code einmal eine Umgebung erstellt, die so verwendet werden kann. Ich möchte einen Ball machen, aber ich kann kein Spiel spielen, ohne zu wissen, wie viele es sind. Deshalb habe ich vorerst den Anfangswert definiert.

Code für die Anzahl der Blöcke und die Bildschirmgröße


static int x=855;
   static int y=800;
   static int size =15; //Ich brauche es nicht, weil die Anzahl der Bälle im Countball angegeben ist
//Anzahl der hellblauen Blöcke
   static final int NUM_BLOCK_ROW = 4;
   //Anzahl der Spalten im Block
    static final int NUM_BLOCK_COL = 9;
   //Anzahl der Blöcke
    static final int NUM_BLOCK = NUM_BLOCK_ROW * NUM_BLOCK_COL;
//Anzahl der grauen Blöcke
    static final int NUM_BLOCK_ROW1 = 8;

    static final int NUM_BLOCK_COL1 = 1;
    
    static final int NUM_BLOCK1 = NUM_BLOCK_ROW1 * NUM_BLOCK_COL1;
 //Anzahl der grünen Blöcke
    static final int NUM_BLOCK_ROW2 = 8;

    static final int NUM_BLOCK_COL2 = 3;
    
    static final int NUM_BLOCK2 = NUM_BLOCK_ROW2 * NUM_BLOCK_COL2;
//Anzahl der gelben Blöcke
    static final int NUM_BLOCK_ROW3 = 8;

    static final int NUM_BLOCK_COL3 = 4;
    
    static final int NUM_BLOCK3 = NUM_BLOCK_ROW3 * NUM_BLOCK_COL3;
//Finden Sie die Anzahl aller Blöcke
    static final int SumBlock=  NUM_BLOCK+NUM_BLOCK2+NUM_BLOCK3;

Vergessen Sie die statische int size = 15

Funktionen in diesem Code

・ Die horizontale Größe des Panels beträgt 855 und die vertikale Länge 800.

Mit anderen Worten, was hast du gemacht?

Da ich den Wert erben möchte, wenn die Anzahl dieses Blocks abnimmt, habe ich ihn als statisch deklariert und auch als Klassenvariable verwendet. Sie mussten nicht endgültig erklären.

Code für die Anfangsposition des Blocks


 //Erstellen einer zweidimensionalen Karte
      private char[][] map;
       private int MX = 20, MY = 18;
       private String[] map_str = {
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",
       "                   B",                        
                                 };

Funktionen in diesem Code

Der Grund, warum die Blöcke auch an der linken Wand und an der oberen Wand platziert werden, liegt darin, dass sie im zukünftigen Code als Anfangswert definiert sind.

Code der Kugelfunktion und Blockposition


 public breakout(){
        time = System.currentTimeMillis() * 0.001 + remain; 
           addMouseMotionListener(this);
           racket =new Racket();
           ball =  new Ball[countball];
           Random rand = new Random();
           int n=countball;
            int num[] = new int [n];
      for(int i=0;i<n;i++){
            num[i]= 40+rand.nextInt(700);
           ball[0]=new Ball(num[0],250,5,-6,7);
           ball[1]=new Ball(num[1],260,-5,-3,10);
           ball[2]=new Ball(num[2],420,4,6,8);
           ball[3]=new Ball(num[3],480,-5,2,10);
           ball[4]=new Ball(num[4],590,5,-6,11);
           ball[5]=new Ball(num[5],550,-5,-3,12);
           ball[6]=new Ball(num[6],570,4,6,13);
           ball[7]=new Ball(num[7],480,-5,2,14);
           ball[8]=new Ball(num[8],490,5,-6,8);
           ball[9]=new Ball(num[9],400,-5,-3,8);
           ball[10]=new Ball(num[10], 350,4,6,9);
           ball[11]=new Ball(num[11],400,-5,2,10);
           ball[12]=new Ball(num[12],390,-5,-3,10);
           ball[13]=new Ball(num[13],500,4,6,10);
           ball[14]=new Ball(num[14],530,-5,2,7);
      }
           block = new Block[NUM_BLOCK];
           block1 = new Unbreakblock[NUM_BLOCK1];
          block2 = new Twobreakblock[NUM_BLOCK2];
           block3 =new Threebreakblock[NUM_BLOCK3];
          
           for (int i = 0; i < NUM_BLOCK_ROW; i++) {
               for (int j = 0; j < NUM_BLOCK_COL; j++) {
                   int x =2* j * Block.WIDTH + Block.WIDTH+50;
                   int y =2* i * Block.HEIGHT + Block.HEIGHT+600;
                   block[i * NUM_BLOCK_COL + j] = new Block(x, y);
               }
            }
           for ( int c = 0; c < NUM_BLOCK_ROW1; c++) {
               for (int d = 0; d < NUM_BLOCK_COL1; d++) {
                   int a = 2*c *  Unbreakblock.WIDTH1 +  Unbreakblock.WIDTH1+50;
                   int b = d *  Unbreakblock.HEIGHT1 +  Unbreakblock.HEIGHT1+450;
                   block1[d * NUM_BLOCK_COL1 + c] = new  Unbreakblock(a, b);
               }
            }
           for ( int c = 0; c < NUM_BLOCK_ROW2; c++) {
               for (int d = 0; d < NUM_BLOCK_COL2; d++) {
                   int a = 2*c *  Twobreakblock.WIDTH2 +  Twobreakblock.WIDTH2+50;
                   int b = 2*d *  Twobreakblock.HEIGHT2 +  Twobreakblock.HEIGHT2+300;
                   block2[c* NUM_BLOCK_COL2 + d] = new  Twobreakblock(a, b);
               }
           }
         for ( int c = 0; c < NUM_BLOCK_ROW3; c++) {
               for (int d = 0; d < NUM_BLOCK_COL3; d++) {
                   int a =2* c * Threebreakblock.WIDTH3 +  Threebreakblock.WIDTH3+50;
                   int b = 5*d * Threebreakblock.HEIGHT3 +  Threebreakblock.HEIGHT3+60;
                   block3[c * NUM_BLOCK_COL3 + d] = new  Threebreakblock(a, b);
               }
           } 
          TimeBomb timeBomb = new TimeBomb();
           Timer timer = new Timer();
           timer.schedule(timeBomb,  5000);
          
           map = new char[MY+2][MX+2];
           for (int x = 0; x <= MX+1; x++) {
             map[0][x] = 'B'; 
            // map[MY+1][x] = 'B';Ich brauche nicht
           }
           for (int y = 0; y <= MY+1; y++) {
             map[y][0] = 'B'; 
             //map[y][MX+1] = 'B'; //Ich brauche nicht
           }
           for (int y = 1; y <= MY; y++) {
               for (int x = 1; x <= MX; x++) {
                 map[y][x] = map_str[y-1].charAt(x-1);
               }
           }
        }

Funktionen in diesem Code

Mit anderen Worten, was hast du gemacht?

Zum ersten Mal definierte ich die Funktion des Balls, die Position des Blocks und die Position der grünen Wand. Ich setze die vertikalen Koordinaten des Balls auf manuell, damit sich die Koordinaten des Blocks und des Balls nicht überlappen. Andernfalls befindet sich der Ball im Block und der Ballon bricht und der Inhalt kommt heraus, sodass die vertikalen Koordinaten nicht zufällig sind. Einige Codes wurden beim letzten Mal als BBB gekennzeichnet, aber Sie können hier auch Blöcke einfügen.

Der Teil, der keinen Code benötigt


 for(int i=0;i<n;i++){
            num[i]= 40+rand.nextInt(700);
}
      ball[0]=new Ball(num[0],250,5,-6,7);
      ball[1]=new Ball(num[1],260,-5,-3,10);
           ball[2]=new Ball(num[2],420,4,6,8);
           ball[3]=new Ball(num[3],480,-5,2,10);
           ball[4]=new Ball(num[4],590,5,-6,11);
           ball[5]=new Ball(num[5],550,-5,-3,12);
           ball[6]=new Ball(num[6],570,4,6,13);
           ball[7]=new Ball(num[7],480,-5,2,14);
           ball[8]=new Ball(num[8],490,5,-6,8);
           ball[9]=new Ball(num[9],400,-5,-3,8);
           ball[10]=new Ball(num[10], 350,4,6,9);
           ball[11]=new Ball(num[11],400,-5,2,10);
           ball[12]=new Ball(num[12],390,-5,-3,10);
           ball[13]=new Ball(num[13],500,4,6,10);
           ball[14]=new Ball(num[14],530,-5,2,7);

Aber ich habe das Gefühl, dass es kein Problem gibt. Sie mussten den Compiler nicht viele Male ausführen und die Instanz deklarieren, und num [i] = 40 + rand.nextInt (700); reichte aus, um in die for-Anweisung zu gelangen.

Impressionen

Die Methode der Breakout-Klasse, die Klasse danach und TimerTask werden beim nächsten Mal ausgeführt. Um ehrlich zu sein, habe ich irgendwie verstanden, was ich tun wollte, aber es gab zu viel nutzlosen Code zum Schreiben. Es gibt zu viele Fragen. Schade, dass es zu halb ist. Wenn Sie es zu perfekt machen, verschwindet die Zeit, daher möchte ich es bis zu einem gewissen Grad abschneiden und hinzufügen.

Recommended Posts

Ich habe versucht, den Block mit Java zu brechen (1)
Java Ich habe versucht, einen einfachen Block zu brechen
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Ich habe versucht, UDP mit Java zu kommunizieren
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe jetzt versucht, Java 8 zusammenzufassen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine PDF-Datei mit Java part2 zu verarbeiten
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, ein wenig mit BottomNavigationView zu spielen ①
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Eine Geschichte, die ich mit Java nur schwer herausfordern konnte
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
Ich habe versucht, Java mit einer Reihe zu lernen, die Anfänger klar verstehen können
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Ich habe Java gemacht, um (a == 1 && a == 2 && a == 3) immer wahr zu machen
Ich habe versucht, eine Website für das Studium von DUO3.0 zu entwickeln.
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
[iOS] Ich habe versucht, mit Swift eine insta-ähnliche Verarbeitungsanwendung zu erstellen
Ich habe versucht, eine Java-Methode von ABCL zu verwenden
Ich möchte Java8 für jeden mit Index verwenden
Ich habe versucht, eine Web-API zu erstellen, die mit Quarkus eine Verbindung zur Datenbank herstellt
Ich habe versucht, eine LINE-Klon-App zu erstellen
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich habe versucht, eine Website zu entwickeln, um Ausgaben zu erfassen.
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, Java in einem Mac-Terminal auszuführen
Ich habe versucht, ein Portfolio mit AWS, Docker, CircleCI, Laravel [mit Referenzlink] zu erstellen.
Ich habe versucht, mit HCE-F von Android eine Funktion zu implementieren, die Felica Lite entspricht
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Ich habe versucht, mit Javafx ein einfaches Spiel zu machen ① "Lass uns Glücksspiel finden" (unvollendet)
[Android] Ich habe mit ListView + Bottom Sheet einen Materiallistenbildschirm erstellt
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
[Azure] Ich habe versucht, eine Java-App für die Erstellung von kostenlosen Web-Apps zu erstellen. [Anfänger]
[Kleine Geschichte] Ich habe versucht, die Java-ArrayList etwas komfortabler zu gestalten