Commit 75301e06 by Patryk Czarnik

Uzupełnienie gry w jabłka o koszyk

parent bf3d4eec
<?xml version="1.0" encoding="UTF-8"?>
<actions>
<action>
<actionName>run</actionName>
<packagings>
<packaging>jar</packaging>
</packagings>
<goals>
<goal>process-classes</goal>
<goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
</goals>
<properties>
<exec.vmArgs></exec.vmArgs>
<exec.args>${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs}</exec.args>
<exec.appArgs></exec.appArgs>
<exec.mainClass>gra.OknoGlowne</exec.mainClass>
<exec.executable>java</exec.executable>
</properties>
</action>
<action>
<actionName>debug</actionName>
<packagings>
<packaging>jar</packaging>
</packagings>
<goals>
<goal>process-classes</goal>
<goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
</goals>
<properties>
<exec.vmArgs>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address}</exec.vmArgs>
<exec.args>${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs}</exec.args>
<exec.appArgs></exec.appArgs>
<exec.mainClass>gra.OknoGlowne</exec.mainClass>
<exec.executable>java</exec.executable>
<jpda.listen>true</jpda.listen>
</properties>
</action>
<action>
<actionName>profile</actionName>
<packagings>
<packaging>jar</packaging>
</packagings>
<goals>
<goal>process-classes</goal>
<goal>org.codehaus.mojo:exec-maven-plugin:3.1.0:exec</goal>
</goals>
<properties>
<exec.vmArgs></exec.vmArgs>
<exec.args>${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs}</exec.args>
<exec.mainClass>gra.OknoGlowne</exec.mainClass>
<exec.executable>java</exec.executable>
<exec.appArgs></exec.appArgs>
</properties>
</action>
</actions>
...@@ -72,6 +72,17 @@ ...@@ -72,6 +72,17 @@
<Component id="jLabel1" max="32767" attributes="0"/> <Component id="jLabel1" max="32767" attributes="0"/>
<Component id="jLabel2" alignment="0" max="32767" attributes="0"/> <Component id="jLabel2" alignment="0" max="32767" attributes="0"/>
<Component id="jSlider2" alignment="0" max="32767" attributes="0"/> <Component id="jSlider2" alignment="0" max="32767" attributes="0"/>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jLabel4" alignment="0" min="-2" max="-2" attributes="0"/>
<Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0">
<Component id="jLabel_Zgubione" alignment="0" max="32767" attributes="0"/>
<Component id="jLabel3" alignment="0" max="32767" attributes="0"/>
</Group>
<Component id="jLabel_Zlapane" alignment="0" min="-2" pref="184" max="-2" attributes="0"/>
</Group>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
</Group> </Group>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
</Group> </Group>
...@@ -88,7 +99,15 @@ ...@@ -88,7 +99,15 @@
<Component id="jLabel2" min="-2" max="-2" attributes="0"/> <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="jSlider2" min="-2" max="-2" attributes="0"/> <Component id="jSlider2" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="613" max="32767" attributes="0"/> <EmptySpace min="-2" pref="67" max="-2" attributes="0"/>
<Component id="jLabel3" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel_Zlapane" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="27" max="-2" attributes="0"/>
<Component id="jLabel4" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel_Zgubione" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="407" max="32767" attributes="0"/>
</Group> </Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
...@@ -110,6 +129,41 @@ ...@@ -110,6 +129,41 @@
</Properties> </Properties>
</Component> </Component>
<Component class="javax.swing.JSlider" name="jSlider2"> <Component class="javax.swing.JSlider" name="jSlider2">
<Events>
<EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="jSlider2StateChanged"/>
</Events>
</Component>
<Component class="javax.swing.JLabel" name="jLabel3">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Segoe UI" size="18" style="0"/>
</Property>
<Property name="text" type="java.lang.String" value="Liczba z&#x142;apanych jab&#x142;ek"/>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jLabel4">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Segoe UI" size="18" style="0"/>
</Property>
<Property name="text" type="java.lang.String" value="Liczba zgubionych jab&#x142;ek"/>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jLabel_Zgubione">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Segoe UI" size="18" style="1"/>
</Property>
<Property name="text" type="java.lang.String" value="0"/>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jLabel_Zlapane">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Segoe UI" size="18" style="1"/>
</Property>
<Property name="text" type="java.lang.String" value="0"/>
</Properties>
</Component> </Component>
</SubComponents> </SubComponents>
</Container> </Container>
...@@ -123,6 +177,9 @@ ...@@ -123,6 +177,9 @@
</Border> </Border>
</Property> </Property>
</Properties> </Properties>
<Events>
<EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="plansza1MouseMoved"/>
</Events>
<Layout> <Layout>
<DimensionLayout dim="0"> <DimensionLayout dim="0">
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
*/ */
package gra; package gra;
import javax.swing.Timer;
/** /**
* *
* @author kurs * @author kurs
...@@ -15,6 +17,7 @@ public class OknoGlowne extends javax.swing.JFrame { ...@@ -15,6 +17,7 @@ public class OknoGlowne extends javax.swing.JFrame {
*/ */
public OknoGlowne() { public OknoGlowne() {
initComponents(); initComponents();
timer.start();
} }
/** /**
...@@ -31,6 +34,10 @@ public class OknoGlowne extends javax.swing.JFrame { ...@@ -31,6 +34,10 @@ public class OknoGlowne extends javax.swing.JFrame {
jLabel1 = new javax.swing.JLabel(); jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel();
jSlider2 = new javax.swing.JSlider(); jSlider2 = new javax.swing.JSlider();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel_Zgubione = new javax.swing.JLabel();
jLabel_Zlapane = new javax.swing.JLabel();
plansza1 = new gra.Plansza(); plansza1 = new gra.Plansza();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
...@@ -50,6 +57,24 @@ public class OknoGlowne extends javax.swing.JFrame { ...@@ -50,6 +57,24 @@ public class OknoGlowne extends javax.swing.JFrame {
jLabel2.setText("Skok"); jLabel2.setText("Skok");
jSlider2.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
jSlider2StateChanged(evt);
}
});
jLabel3.setFont(new java.awt.Font("Segoe UI", 0, 18)); // NOI18N
jLabel3.setText("Liczba złapanych jabłek");
jLabel4.setFont(new java.awt.Font("Segoe UI", 0, 18)); // NOI18N
jLabel4.setText("Liczba zgubionych jabłek");
jLabel_Zgubione.setFont(new java.awt.Font("Segoe UI", 1, 18)); // NOI18N
jLabel_Zgubione.setText("0");
jLabel_Zlapane.setFont(new java.awt.Font("Segoe UI", 1, 18)); // NOI18N
jLabel_Zlapane.setText("0");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout); jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup( jPanel1Layout.setHorizontalGroup(
...@@ -60,7 +85,15 @@ public class OknoGlowne extends javax.swing.JFrame { ...@@ -60,7 +85,15 @@ public class OknoGlowne extends javax.swing.JFrame {
.addComponent(jSlider1, javax.swing.GroupLayout.DEFAULT_SIZE, 258, Short.MAX_VALUE) .addComponent(jSlider1, javax.swing.GroupLayout.DEFAULT_SIZE, 258, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jSlider2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(jSlider2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jLabel_Zgubione, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(jLabel_Zlapane, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap()) .addContainerGap())
); );
jPanel1Layout.setVerticalGroup( jPanel1Layout.setVerticalGroup(
...@@ -74,10 +107,23 @@ public class OknoGlowne extends javax.swing.JFrame { ...@@ -74,10 +107,23 @@ public class OknoGlowne extends javax.swing.JFrame {
.addComponent(jLabel2) .addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSlider2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jSlider2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(613, Short.MAX_VALUE)) .addGap(67, 67, 67)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel_Zlapane)
.addGap(27, 27, 27)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel_Zgubione)
.addContainerGap(407, Short.MAX_VALUE))
); );
plansza1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 153, 0))); plansza1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 153, 0)));
plansza1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
plansza1MouseMoved(evt);
}
});
javax.swing.GroupLayout plansza1Layout = new javax.swing.GroupLayout(plansza1); javax.swing.GroupLayout plansza1Layout = new javax.swing.GroupLayout(plansza1);
plansza1.setLayout(plansza1Layout); plansza1.setLayout(plansza1Layout);
...@@ -115,10 +161,19 @@ public class OknoGlowne extends javax.swing.JFrame { ...@@ -115,10 +161,19 @@ public class OknoGlowne extends javax.swing.JFrame {
}// </editor-fold>//GEN-END:initComponents }// </editor-fold>//GEN-END:initComponents
private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jSlider1StateChanged private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jSlider1StateChanged
int czas = 2000 / jSlider1.getValue(); int czas = 500 / (jSlider1.getValue()+1);
plansza1.setPauza(czas); setPauza(czas);
}//GEN-LAST:event_jSlider1StateChanged }//GEN-LAST:event_jSlider1StateChanged
private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jSlider2StateChanged
plansza1.setSkok((jSlider2.getValue())/5+1);
}//GEN-LAST:event_jSlider2StateChanged
private void plansza1MouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_plansza1MouseMoved
plansza1.ustawKoszyk(evt.getX());
plansza1.repaint();
}//GEN-LAST:event_plansza1MouseMoved
/** /**
* @param args the command line arguments * @param args the command line arguments
*/ */
...@@ -157,9 +212,34 @@ public class OknoGlowne extends javax.swing.JFrame { ...@@ -157,9 +212,34 @@ public class OknoGlowne extends javax.swing.JFrame {
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel_Zgubione;
private javax.swing.JLabel jLabel_Zlapane;
private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel1;
private javax.swing.JSlider jSlider1; private javax.swing.JSlider jSlider1;
private javax.swing.JSlider jSlider2; private javax.swing.JSlider jSlider2;
private gra.Plansza plansza1; private gra.Plansza plansza1;
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
// w milisekundach - co jaki czas ma być odświeżony ekran
private int pauza = 1000;
private Timer timer = new Timer(pauza, (evt) -> {
plansza1.jedenKrok();
jLabel_Zlapane.setText(String.valueOf(plansza1.getIleZlapanych()));
jLabel_Zgubione.setText(String.valueOf(plansza1.getIleZgubionych()));
// repaint();
});
public int getPauza() {
return pauza;
}
public void setPauza(int pauza) {
this.pauza = pauza;
timer.setDelay(pauza);
timer.restart();
}
} }
package gra; package gra;
import java.awt.Color;
import java.awt.Graphics; import java.awt.Graphics;
import java.util.HashSet; import java.util.HashSet;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.Timer;
public class Plansza extends JPanel { public class Plansza extends JPanel {
private Set<Jablko> jablka = new HashSet<>(); private Set<Jablko> jablka = new HashSet<>();
private Random random = new Random(); private Random random = new Random();
// w milisekundach - co jaki czas ma być odświeżony ekran
private int pauza = 1000;
// o ile pikseli jablka spadaja w jednym ruchu // o ile pikseli jablka spadaja w jednym ruchu
private int skok = 20; private int skok = 20;
private double prawdopodobienstwoNowegoJablka = 0.5; private double prawdopodobienstwoNowegoJablka = 0.5;
private Timer timer = new Timer(pauza, (evt) -> { private int koszyk;
jedenKrok(); private int ileZlapanych, ileZgubionych;
}); final int SZEROKOSC_KOSZYKA = 50;
final int WYSOKOSC_KOSZYKA = 20;
public Plansza() {
timer.start();
}
@Override @Override
protected void paintComponent(Graphics g) { protected void paintComponent(Graphics g) {
...@@ -32,13 +27,26 @@ public class Plansza extends JPanel { ...@@ -32,13 +27,26 @@ public class Plansza extends JPanel {
for(Jablko jablko : jablka) { for(Jablko jablko : jablka) {
jablko.narysujSie(g); jablko.narysujSie(g);
} }
g.setColor(Color.GREEN);
g.fillRect(koszyk, getHeight()-WYSOKOSC_KOSZYKA, SZEROKOSC_KOSZYKA, WYSOKOSC_KOSZYKA);
} }
// tresc tej metody bedzie wykonywana cyklicznie co okreslony czas przez timera // tresc tej metody bedzie wykonywana cyklicznie co okreslony czas przez timera
void jedenKrok() { void jedenKrok() {
Set<Jablko> jablkaDoUsuniecia = new HashSet<>();
for(Jablko jablko : jablka) { for(Jablko jablko : jablka) {
jablko.opusc(skok); jablko.opusc(skok);
if(jablko.getY() > this.getHeight()-WYSOKOSC_KOSZYKA) {
if(koszyk <= jablko.getX() && jablko.getX() < koszyk+SZEROKOSC_KOSZYKA) {
ileZlapanych++;
} else {
ileZgubionych++;
}
jablkaDoUsuniecia.add(jablko);
}
} }
jablka.removeAll(jablkaDoUsuniecia);
if(random.nextDouble() < prawdopodobienstwoNowegoJablka) { if(random.nextDouble() < prawdopodobienstwoNowegoJablka) {
int x = random.nextInt(this.getWidth() - Jablko.SREDNICA); int x = random.nextInt(this.getWidth() - Jablko.SREDNICA);
int y = 0; int y = 0;
...@@ -48,15 +56,6 @@ public class Plansza extends JPanel { ...@@ -48,15 +56,6 @@ public class Plansza extends JPanel {
this.repaint(); this.repaint();
} }
public int getPauza() {
return pauza;
}
public void setPauza(int pauza) {
this.pauza = pauza;
timer.setDelay(pauza);
}
public int getSkok() { public int getSkok() {
return skok; return skok;
} }
...@@ -73,5 +72,23 @@ public class Plansza extends JPanel { ...@@ -73,5 +72,23 @@ public class Plansza extends JPanel {
this.prawdopodobienstwoNowegoJablka = prawdopodobienstwoNowegoJablka; this.prawdopodobienstwoNowegoJablka = prawdopodobienstwoNowegoJablka;
} }
public void ustawKoszyk(int pozycjaMyszy) {
int nowaPozycja = pozycjaMyszy - SZEROKOSC_KOSZYKA/2;
if(nowaPozycja < 0) {
nowaPozycja = 0;
}
if(nowaPozycja > getWidth() - SZEROKOSC_KOSZYKA) {
nowaPozycja = getWidth() - SZEROKOSC_KOSZYKA;
}
koszyk = nowaPozycja;
}
public int getIleZlapanych() {
return ileZlapanych;
}
public int getIleZgubionych() {
return ileZgubionych;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment