Losowanie liczb w Javie LOSOWNIK KOSTKOWY

0

Heyah wszystkim

Potrzebuję napisać w J2ME programik na phona i niestety jakoś mi to nie wychodzi. Próbuję ale nawet się nie chce kod skompilować :-/ .

Chodzi mi o program który wyglądał by następująco:

Włączam > Wpisz Liczbę ścianek [pole do wpisu] >Wpisz liczbę rzutów [pole do wpisu] Rzuć !! > [wynik]

Program wylosuje liczbę z zakresu jakim jest liczba ścianek tyle razy ile podana została liczba rzutów i wyniki doda. Takie cóż potrzebne mi jest do gry RPG w której jest 7 kostek.
Jeszcze żeby po wybraniu rzuć odtworzył wava :-) (dzwięk kostki upadającej na dębowy stół.

Jakieś sugestie? :-/

Pozdrawiam wszystkich !!!!!</b>

0

A konkretnie, w ktorym momencie masz problem?

pozdrawiam
johny

0

Konkretnie to w... javie. NIe znam javy niestety. Próbuję coś ale to niestety nie działa :-/

0

nie znajac javy chcesz napisac midlet, moze jeszcze z kostka 3D? Troche to malo realne, najpierw naucz sie javy, albo znajdz kogos kto napisze Ci ten program.

0

Nie wydaje mi się żeby zajął więcej niż kilkadziesiąt linijek ... mógłby mi ktoś podpowiedzieć chociaż jak powinno wyglądać polecenie które by losowało liczę z wybranego zakresu?

0

Nie wydaje mi się żeby zajął więcej niż kilkadziesiąt linijek ... mógłby mi ktoś podpowiedzieć chociaż jak powinno wyglądać polecenie które by losowało liczbę z wybranego zakresu?

0
Random random = new Random(Calendar.get(Calendar.MILLISECOND);
int losowana_liczba = random.nextInt(zakres);

wylosuje liczbe pomiedzy 0 a zakres.

pozdrawiam
johny

0

Wielkie dzięki ! na to bym nie wpadł. Pomęcze się z tym do jutra. Już chyba wiem jak to zrobić. :-)
Pozdrawiam
Infotw

0

Dobrzy ludzie pomóżcie..... już nie wiem czy rovbię jakiś drobny błąd czy wszystko pieprze....

import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

	public class hwdp1 extends MIDlet implements CommandListener
	{
	 public hwdp1()
	 {
	  formatka = new Form("Kostek");
	  Random random = new Random(Calendar.get(Calendar.MILLISECOND);
	  formatka.append(rzuty.getString()) = random.nextInt(scianki.getString());
	  Command poleceniedodaj = new Command("Dodaj",Command.OK,0);
	  Command poleceniewyjscie = new Command("Koniec",Command.EXIT,0);
	  formatka.addCommand(poleceniedodaj);
	  formatka.addCommand(poleceniewyjscie);
	  formatka.setCommandListener(this);
	  rzuty = new TextField("Ile razy rzucić?:","",3,TextField.NUMERIC);
	  formatka.append(rzuty);
	  scianki = new TextField("Ile ścianek ma kostka?:","",3,TextField.NUMERIC);
	  formatka.append(scianki);
	  Display ekran = Display.getDisplay(this);
	  ekran.setCurrent(formatka);
	 }
	public void startApp()
	{
	}
	public void pauseApp()
	{
	}
	public void destroyApp(boolean unconditional)
	{
	}
	public void commandAction(Command c, Displayable s)
	{
	 if (c.getCommandType() == Command.OK)
	 {
	  formatka.append(random.getString());
	 }
	 if (c.getCommandType() == Command.EXIT) notifyDestroyed();
	 }
	private Form formatka;
	private TextField rzuty;
	private TextField scianki;
}

Pozdrawiam
Infotw

0

Znowu pytanie - konkretnie w czym problem? Nikomu zapewnie nie bedzie sie chcialo uruchamiac kodu i domyslac sie co Ci nie pasuje...

pozdrawiam
johny

0

import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

    public class hwdp1 extends MIDlet implements CommandListener
    {
     public hwdp1()
     {
      formatka = new Form("Kostek");

Random random = new Random(Calendar.get(Calendar.MILLISECOND);
formatka.append(rzuty.getString()) = random.nextInt(scianki.getString());

Command poleceniedodaj = new Command("Dodaj",Command.OK,0);
Command poleceniewyjscie = new Command("Koniec",Command.EXIT,0);
formatka.addCommand(poleceniedodaj);
formatka.addCommand(poleceniewyjscie);
formatka.setCommandListener(this);
rzuty = new TextField("Ile razy rzucić?:","",3,TextField.NUMERIC);
formatka.append(rzuty);
scianki = new TextField("Ile ścianek ma kostka?:","",3,TextField.NUMERIC);
formatka.append(scianki);
Display ekran = Display.getDisplay(this);
ekran.setCurrent(formatka);
}
public void startApp()
{
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable s)
{
if (c.getCommandType() == Command.OK)
{
formatka.append(random.getString());

}
if (c.getCommandType() == Command.EXIT) notifyDestroyed();
}
private Form formatka;
private TextField rzuty;
private TextField scianki;
}

Konkretnie problem w zaznaczonych linijkach - czy tak to powinno wyglądać?

0

na pierwszy rzut oka brakuje ')', poza tym zapewne trzeba zaimportowac java.util.*; zeby skorzyctac z Random i Calendar

Random random = new Random(Calendar.get(Calendar.MILLISECOND));
0

Poprawiłem powyższe błędy - kompilator stwierdza że random jest funkcją dynamiczną i nie można z niej skorzystaj w statycznym konteksie ( :| ). Pytanie: jak stworzyć dynamiczny kontekst?

0
  1. Ważna uwaga! Jeśli pytasz o problemy w kodzie podaj informacje jakie wyrzucił Ci kompilator. Dzięki temu można łatwiej i szybciej odpowiedzieć na stawiane pytania.
  2. Zapewne masz problem z powodu formatka.append. Z dokumentacji wynika jasno, że parametrem tej metody może być jedynie obiekt klasy Item, więc nie możesz wykonać jej ze Stringiem. Musisz więc użyć klasy StringItem. Będzie to wyglądało tak:
    formatka.append(new StringItem(rzuty.getString(),String.valueOf(random.nextInt(scianki.getString()));
  3. W konstruktorze deklarujesz i tworzysz nowy obiekt klasy Random, więc nie możesz do niego się odwołać w metodzie commandAction. Obiekt muszisz zadeklarować analogicznie jak np. Form. W ciele klasy a nie metody.
  4. Metody statyczne nie mają swojego przeciwnika w postaci metod dynamicznych ;). Są to metody dla klas, a nie dla obiektów. W ciele takich metod można odwoływać się do obiektów zadeklarowanych jako statyczne, lub w ich ciele.
0

A poza tym metoda nextInt klasy Random przyjmuje inty, a nie stringi.

pozdrawiam
johny

0

Witam ponownie :-) Po dłuższych zmaganiach z kompilatorem udało mi się napisać ten programik.

Chciałem dodać jeszcze dzwięk rzutu kostką przy rzuceniu ale napotkałem problem:
Wiem jak użyć dźwięku z pliku umieszczonego w internecie. Ale jak użyć pliku uieszczonego w archiwum jar? (i jak zaimportować plik wav do archiwum jar?)

Oto kod. Pogrubioną czcionką sekcja dotycząca importu dzwięku:

import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;

public class ckostek extends MIDlet implements CommandListener 

{

	private Form formatka;
	private TextField rzuty;
	private TextField scianki;
	private Random random;
	public ckostek() {
		formatka = new Form("Kostek");
		random = new Random(Calendar.getInstance().get(Calendar.MILLISECOND));
		Command polecenierzuc = new Command("Rzuć !!!", Command.OK, 0);
		Command poleceniewyjscie = new Command("Koniec", Command.EXIT, 0);
		formatka.addCommand(polecenierzuc);
		formatka.addCommand(poleceniewyjscie);
		formatka.setCommandListener(this);
		rzuty = new TextField("Ile razy rzucić?:", "", 3, TextField.NUMERIC);
		formatka.append(rzuty);
		scianki = new TextField("Ile ścianek ma kostka?:", "", 3,TextField.NUMERIC);
		formatka.append(scianki);
		Display ekran = Display.getDisplay(this);
		ekran.setCurrent(formatka);
	}
	 protected void destroyApp(boolean arg0) throws MIDletStateChangeException 
	{
	}
	 protected void pauseApp() 
	{
	}
	 protected void startApp() throws MIDletStateChangeException 
	{
	}
	 public void commandAction(Command c, Displayable arg1) 
	{
		if (c.getCommandType() == Command.OK) 
		{
			String adres = ("http://www.republika.pl/informatykatw/kostka.wav");
			Watek odtwarzanie = new Watek(adres);
			odtwarzanie.start();
			int suma = 0, rzutow, scianek;
			try 
			{
			 rzutow=Integer.parseInt(rzuty.getString());
			 scianek=Integer.parseInt(scianki.getString());
			}
			catch (Exception e) 
			{
			 formatka.append("Nieprawidłowe liczby");
			 return;
			}
			for (int i = 0; i < rzutow; i++) 
			{
			 suma += (Math.abs(random.nextInt()) % scianek)+1;
			}
		 formatka.append(new Integer(suma).toString());
		}
		 
  if (c.getCommandType() == Command.EXIT) notifyDestroyed();
  }
  class Watek extends Thread
  {
   public Watek(String padres)
   {
   adres = padres;
   }
   public void run()
   {
    try
    {
     Player odtwarzacz = Manager.createPlayer(adres);
     odtwarzacz.realize();
     odtwarzacz.start();
    }
    catch (Exception e)
    {
     formus.append("Błąd");
    }
   }
   private String adres;
}
  private Form formus;
}

Pozdrawiam
Infotw

0

Lokalne obrazki to nic innego jak zasoby - resources. W strukturze katalogów masz jeden na zasoby - res. Wystarczy przegrać plik. O wrzucanie do jara nie musisz się martwić, bo wszystko będzie zrobione automatycznie.

0

Obawiam się ponieważ plik wav ma 20 kb zaź plik jar 8 po stworzeniu... a kopiuję do res właśnie plik. Jednak głównie chodzi mi o to jak napisać to by pobierał plik z jara a nie z internetu (pogrubienia nie dziłają - linijka po środku kodu z ardewem url)

Pozdrawiam
Infotw

0
Infotw napisał(a)

Obawiam się ponieważ plik wav ma 20 kb zaź plik jar 8 po stworzeniu.

Plik jar jest spakowany algorytmem ZIP'a metodą store, a twój wave zapewne nie ma kompresji.
String adres = ("file://kostka.wav");

0

Wav jednak ładuje się do archiwum jar, ale polecenie String adres = ("file://kostka.wav"); nie działa :/

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