J'ai essayé de casser le bloc avec java (1)

Choses à faire

L'article précédent est ci-dessous

https://qiita.com/strict39275/items/41da2ad3bb8fd60228e0 Même si j'y réfléchis bien, le code n'a pas atteint mon idéal, mais j'aimerais l'améliorer à partir de maintenant. Dans cet article, je voudrais expliquer chaque classe. Si vous expliquez tout d'un coup, cela prendra énormément de temps, donc la prochaine fois, il semble préférable d'expliquer soigneusement chaque classe une par une. Je vais le faire.

Schéma de la structure de classe

Il s'agit d'un diagramme de structure de classe réalisé par shiracamus. On a l'impression que la classe breakout est la principale et que les variables d'instance de la classe y sont créées. java1.png

Code programme

Je voudrais expliquer un par un, y compris la réflexion.

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

Il semble préférable de déclarer la déclaration d'importation au début du code. De cette façon, il est plus facile de voir quelle bibliothèque ce code utilise. En entrant une déclaration telle que import javax.swing. Vous pourrez utiliser les classes créées par java. En d'autres termes, vous pourrez afficher l'écran et saisir les événements de la souris sans avoir à écrire votre propre code. La plupart des instructions d'importation utilisent des importations à la demande. Si vous importez le type à la demande, par exemple, vous pourrez utiliser toutes les fonctions de javax.util. En d'autres termes, si vous ajoutez ✳︎ à la fin de l'instruction d'importation, vous n'aurez pas à vous soucier des erreurs. Cependant, vous devez être prudent car vous ne saurez pas quelle fonction utiliser.

Description de la classe de petits groupes

Cette fois, je vais seulement expliquer la classe de petits groupes

   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;

Caractéristiques de ce code

-La classe breakout hérite de la fonction JPanel et a la fonction d'afficher réellement l'écran. Dans ce panneau, j'ai tapé des outils pour activer la fonctionnalité de la souris -Déclarez-le comme une variable de classe statique et définissez le nombre de billes sur 15. -Déclarer les variables d'instance racket, ballblock1 block2, block3 qui ne sont pas déclarées statiques, et prendre les variables qui ont les fonctions de chaque classe. -Le temps entre l'exécution et la valeur de gameover devient True est de 37 secondes. -Comme l'état initial n'est pas l'état du gameover, la valeur booléenne initiale est définie sur false.

En d'autres termes, qu'avez-vous fait

C'est là que nous poserons les bases de la création de jeux. Même si vous créez un jeu, cela ne signifie pas qu'il n'est pas affiché à l'écran, et si vous n'avez pas de fonction souris, vous ne pouvez même pas utiliser une raquette qui fait rebondir la balle, donc ce code a une fois créé un environnement qui peut être utilisé comme ça. Je veux faire une balle, mais je ne peux pas jouer à un jeu sans savoir combien, j'ai donc défini la valeur initiale pour le moment.

Code pour le nombre de blocs et la taille de l'écran


static int x=855;
   static int y=800;
   static int size =15; //Je n'en ai pas besoin car le nombre de balles est déclaré en countball
//Nombre de blocs bleu clair
   static final int NUM_BLOCK_ROW = 4;
   //Nombre de colonnes dans le bloc
    static final int NUM_BLOCK_COL = 9;
   //Nombre de blocs
    static final int NUM_BLOCK = NUM_BLOCK_ROW * NUM_BLOCK_COL;
//Nombre de blocs gris
    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;
 //Nombre de blocs verts
    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;
//Nombre de blocs jaunes
    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;
//Trouvez le nombre de tous les blocs
    static final int SumBlock=  NUM_BLOCK+NUM_BLOCK2+NUM_BLOCK3;

Oubliez la taille int statique = 15

Caractéristiques de ce code

・ La taille horizontale du panneau est 855 et la longueur verticale est 800. -Déclarez ici le nombre de blocs. ROW est le nombre de colonnes dans le bloc COL est le nombre de lignes dans le bloc ・ Multipliez pour trouver le nombre de blocs. Par exemple, si la colonne 8 lignes 4 est utilisée, un bloc de 8 × 4 = 32 peut être créé. ・ Trouvez le nombre de blocs bleu clair, gris, vert et jaune ・ Sumblock est le total de chaque

En d'autres termes, qu'avez-vous fait

Définition de la taille de l'écran de jeu et déclaration du nombre de blocs. Ici, vous pouvez modifier librement le nombre de blocs. Puisque je veux hériter de la valeur lorsque le nombre de ce bloc diminue, je l'ai déclaré comme statique et l'ai également utilisé comme variable de classe. Vous n'avez pas besoin de déclarer définitif.

Code de la position initiale du bloc


 //Créer une carte bidimensionnelle
      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",                        
                                 };

Caractéristiques de ce code

-Créer une variable qui dessine réellement un bloc avec une variable de type char -La plage du bloc à dessiner est de 20 horizontales et 18 verticales. ・ L'emplacement du bloc est uniquement à droite

Ici, la raison pour laquelle les blocs sont également placés sur la paroi gauche et la paroi supérieure est parce qu'elle est définie comme la valeur initiale dans le futur code.

Code de la fonction balle et position du bloc


 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';Je n'ai pas besoin
           }
           for (int y = 0; y <= MY+1; y++) {
             map[y][0] = 'B'; 
             //map[y][MX+1] = 'B'; //Je n'ai pas besoin
           }
           for (int y = 1; y <= MY; y++) {
               for (int x = 1; x <= MX; x++) {
                 map[y][x] = map_str[y-1].charAt(x-1);
               }
           }
        }

Caractéristiques de ce code

-Ajouter à l'heure de type double qui a une limite de temps, plus la limite de temps actuelle x 0,001. -Ici, utilisez les variables d'instance des classes Racket et Ball. -Déclarer rand pour rendre les coordonnées horizontales de la balle aléatoires -Les coordonnées horizontales de la balle sont attribuées au tableau num au hasard de 0 à 700 suivant 40. Autrement dit, les coordonnées horizontales de 15 boules sont générées de manière aléatoire et les valeurs sont attribuées à num. -Depuis la gauche, les arguments déclarés dans la classe Ball sont les coordonnées horizontales de la balle, les coordonnées verticales de la balle, la vitesse à laquelle la balle se déplace horizontalement et la vitesse à laquelle la balle se déplace verticalement. Les coordonnées verticales ont été entrées manuellement afin qu'elles ne se chevauchent pas avec les coordonnées du bloc. -Le nombre de blocs a été utilisé tel quel et les variables d'instance ont été générées dans le bloc, le bloc1, le bloc2 et le bloc3. -Afin d'entrer les coordonnées verticales et horizontales, plusieurs boucles ont été faites avec l'instruction for, et les coordonnées du bloc ont été définies à x, y, a, b, etc., respectivement. -Même si le programme est exécuté par timer.schedule (timeBomb, 5000);, les fonctions boule et bloc sont arrêtées pendant les 5 premières secondes. -Définir la position initiale du placement du bloc. L'endroit où vous avez indiqué que vous n'avez pas besoin d'un bloc est une fonction qui vous permet de placer des blocs autres que le mur, vous n'en avez donc pas besoin.

En d'autres termes, qu'avez-vous fait

Pour la première fois, j'ai défini la fonction de la balle, la position du bloc et la position du mur végétal. J'ai défini les coordonnées verticales de la balle sur manuel afin que les coordonnées du bloc et de la balle ne se chevauchent pas. Sinon, la balle sera dans le bloc, la bulle se cassera et le contenu sortira, de sorte que les coordonnées verticales ne sont pas aléatoires. Certains codes ont été étiquetés BBB la dernière fois, mais vous pouvez également placer des blocs ici.

La partie qui n'a pas besoin de code


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

Mais j'ai l'impression qu'il n'y a pas de problème. Vous n'avez pas eu à faire le compilateur et à déclarer l'instance plusieurs fois, et num [i] = 40 + rand.nextInt (700); était suffisant pour entrer dans l'instruction for.

Impressions

La méthode de la classe breakout, la classe après cela et TimerTask seront exécutés la prochaine fois. Pour être honnête, j'ai en quelque sorte compris ce que je voulais faire, mais il y avait trop de code inutile à écrire. Il y a trop de questions. C'est dommage que ce soit trop à mi-chemin. Si vous le rendez trop parfait, le temps disparaîtra, alors je voudrais le couper dans une certaine mesure et l'ajouter.

Recommended Posts

J'ai essayé de casser le bloc avec java (1)
java j'ai essayé de casser un simple bloc
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
J'ai essayé de faire une authentification de base avec Java
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé OCR de traiter un fichier PDF avec Java
J'ai essayé d'implémenter Sterling Sort avec Java Collector
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
J'ai essayé la communication UDP avec Java
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
[Rails] J'ai essayé de créer une mini application avec FullCalendar
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai essayé de créer un environnement de développement padrino avec Docker
J'ai essayé OCR de traiter un fichier PDF avec Java part2
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
J'ai essayé de résumer les expressions Java lambda
J'ai essayé de démarrer avec Web Assembly
J'ai essayé de jouer un peu avec BottomNavigationView ①
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
J'ai essayé de créer une application Android avec MVC maintenant (Java)
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
J'ai essayé de gérer la configuration des jambes de force avec Coggle
J'ai essayé d'apprendre Java avec une série que les débutants peuvent comprendre clairement
J'ai essayé de gérer les informations de connexion avec JMX
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
J'ai essayé de développer un site Web pour étudier DUO3.0.
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
[iOS] J'ai essayé de créer une application de traitement de type insta avec Swift
J'ai essayé de frapper une méthode Java d'ABCL
Je veux utiliser java8 forEach avec index
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
J'ai essayé de créer une application de clonage LINE
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
Je veux ForEach un tableau avec une expression Lambda en Java
J'ai essayé de créer une compétence Alexa avec Java
J'ai essayé de développer un site Web pour enregistrer les dépenses.
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé d'exécuter Java dans un terminal Mac
J'ai essayé de créer un portefeuille avec AWS, Docker, CircleCI, Laravel [avec lien de référence]
J'ai essayé d'implémenter une fonction équivalente à Felica Lite avec HCE-F d'Android
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (inachevé)
[Android] J'ai créé un écran de liste de matériaux avec ListView + Bottom Sheet
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
[Azure] J'ai essayé de créer une application Java pour la création d'applications Web gratuites - [Débutant]
[Petite histoire] J'ai essayé de rendre java ArrayList un peu plus pratique