Rzut kostką

0

Witam.
Muszę stworzyć program, który "rzuca" kostką, mam problem ze zrobieniem tak jakby nowych rzutów. Mój program wygląda mniej więcej tak:

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.Random;

public class Kostka extends Applet implements ActionListener
{

Button przycisk;
Panel panel;
int wynik = 0;

public void init()
{
     setBackground(Color.white);
     przycisk = new Button("Rzucaj");
     przycisk.addActionListener(this);
     setLayout(new BorderLayout());
     panel=new Panel();
     panel.add(przycisk);
     add(przycisk, BorderLayout.SOUTH);
}

public void paint(Graphics g)
{
	if (wynik == 0)
	    g.drawRect(10, 10, 100, 100);
	else if (wynik == 1)
		g.drawRect(10, 10, 100, 100);
	 	g.fillOval(50, 50, 20, 20);
}


public void actionPerformed(ActionEvent ev)
{
    Random rzut = new Random(); 
    wynik = rzut.nextInt(6) + 1;
    System.out.println("Wynik: " + wynik);
    repaint();
}
public static void main(String[] args)
  {
       Kostka r = new Kostka();

     
     
                	 
 }
}

Proszę o jakieś rozwiązania. Pozdrawiam

0

tak na szybko zrobione i bez graficznie zrobionej kostki (kostkę możesz : 1. narysować , 2. wkleić gifa czy coś w tym stylu )

public class Main extends JFrame implements ActionListener {

    JButton przycisk;
    JPanel panel;
    int wynik = 0;

    public Main() {
        init();
    }

    public void init() {
        setBackground(Color.white);

        przycisk = new JButton("Rzucaj");
        przycisk.addActionListener(this);
        setLayout(new BorderLayout());

        add(panel = new Pan(), BorderLayout.CENTER);
        //  panel.add(przycisk);
        add(przycisk, BorderLayout.SOUTH);
    }

    class Pan extends JPanel {

        public void paint(Graphics g) {
            g.drawString(String.valueOf(wynik), 50, 50);
        }
    }

    public void actionPerformed(ActionEvent ev) {
        Random rzut = new Random();
        wynik = rzut.nextInt(6) + 1;
        System.out.println("Wynik: " + wynik);
        repaint();
    }

    public static void main(String[] args) {
        Main r = new Main();
        r.setVisible(true);
        r.setSize(300, 300);
        r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

 

niestety program w Swingu...:/ musisz przerobić

0

I w czym ten problem?
Swoją drogą, masz tutaj kod:

if (wynik == 0)
            g.drawRect(10, 10, 100, 100);
        else if (wynik == 1)
                g.drawRect(10, 10, 100, 100);
                 g.fillOval(50, 50, 20, 20);

który normalnie wyglądałby tak:

if (wynik == 0) {
    g.drawRect(10, 10, 100, 100);
} else if (wynik == 1) {
    g.drawRect(10, 10, 100, 100);
}
g.fillOval(50, 50, 20, 20);

No i niepotrzebnie tworzysz za każdym razem nowy obiekt Random.

0

Jestem początkujący, dlatego się pytam. Dokładnie chodzi o to żeby kostka za każdym razem po kliknięciu przycisku Rzucaj losowała wartość oczek i pokazywała je, musi być to pokazane w aplecie, przy każdej wartości, czyli np przy wartości 4 mają być wyświetlane 4 oczka i tak dalej, tak jak przy rzucaniu kostką.

I żeby na samym początku wyświetlała się sama, pusta kostka.

Sory za zamieszanie, ale w końcu "wyszło", wystarczyło trochę pomyśleć, a nie wypisywać post pod postem:)
Dzięki za rady, pozdro

0

Tu masz gotowy kod remigio z dorobioną kostką

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

public class Kostka extends JFrame implements ActionListener {
    JButton przycisk;
    JPanel panel;
    int wynik = 0;
    public Kostka() {
        init();
    }
    private void init() {
        setBackground(Color.white);
        przycisk = new JButton("Rzucaj");
        przycisk.addActionListener(this);
        setLayout(new BorderLayout());
        add(panel = new Pan(), BorderLayout.CENTER);
        panel.add(przycisk);
        add(przycisk, BorderLayout.SOUTH);
    }
    class Pan extends JPanel {
        @Override
        public void paint(Graphics g) {
            g.drawRoundRect(50, 50, 80, 80, 10, 10);
            if (wynik == 1) {
                g.fillOval(80,  80,  20, 20);
            }
            if (wynik == 2) {
                g.fillOval(60,  80,  20, 20);
                g.fillOval(100, 80,  20, 20);
            }
            if (wynik == 3){
                g.fillOval(60,  55,  20, 20);
                g.fillOval(80,  80,  20, 20);
                g.fillOval(100, 105, 20, 20);
            }
            if (wynik == 4){
                g.fillOval(60,  60,   20, 20);
                g.fillOval(100, 60,   20, 20);
                g.fillOval(60,  100,  20, 20);
                g.fillOval(100, 100,  20, 20);
            }
            if (wynik == 5){
                g.fillOval(60,  60,  20, 20);
                g.fillOval(100, 60,  20, 20);
                g.fillOval(80,  80,  20, 20);
                g.fillOval(60,  100, 20, 20);
                g.fillOval(100, 100, 20, 20);
            }
            if (wynik == 6){
                g.fillOval(60,  55,  20, 20);
                g.fillOval(100, 55,  20, 20);
                g.fillOval(60,  80,  20, 20);
                g.fillOval(100, 80,  20, 20);
                g.fillOval(60,  105, 20, 20);
                g.fillOval(100, 105, 20, 20);
            }
        }
    }
    public void actionPerformed(ActionEvent ev) {
        Random rzut = new Random();
        wynik = rzut.nextInt(6) + 1;
        System.out.println("Wynik: " + wynik);
        repaint();
    }
    public static void main(String[] args) {
        Kostka r = new Kostka();
        r.setVisible(true);
        r.setSize(300, 300);
        r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Tak jak remigio napisał można też zrobić inaczej można podmieniać gifa w JButton lub JLabel. Musisz tylko to przerobić na aplet.

1 użytkowników online, w tym zalogowanych: 0, gości: 1