- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Samsung Galaxy S26 Ultra - fontossági sorrend
- Nagy bemutatóra készül az Oppo
- Szaporodik és sokasodik a One UI 8.5
- Huawei Watch Fit 5 Pro - jó forma
- Okosóra és okoskiegészítő topik
- Rég várt frissítést kap az Android tárcsázója
- Friss információk és képek a OnePlus új órájáról
- Fotók, videók mobillal
- One mobilszolgáltatások
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
loszerafin
senior tag
örömmel jelentem, hogy négy napnyi kemény munak után elkészültem a megközelítőleg végleges kóddal

Már korábban akartam írni, hogy érdemes ilyen "kis" programoknál megtanulni a kód-dokumentálást, unit tesztelést és a többnyelvűséget
http://java.sun.com/docs/books/tutorial/i18n/index.html
http://java.sun.com/j2se/javadoc/writingdoccomments/
http://www.devx.com/Java/Article/31983/0/page/1 -
rdi
veterán
megcsináltam az alábbi módon
(remélem jól értelmeztem a mondani valódat
)int[] tomb1={25,85,145,25,85,145,25,85,145};
int[] tomb2={50,50,50,110,110,110,170,170,170};
int[] gombtomb={512,2,1024,4,256,32,2048,64,4096};
Random rnd=new Random();
int veletlen=rnd.nextInt(8);
dx=tomb1[veletlen];
dy=tomb2[veletlen];
sprite.next(dx,dy,veletlen);
lm.paint(g,0,0);
flushGraphics();
int keyStates=getKeyStates();
if (keyStates==gombtomb[veletlen]){
pontszam++;
}
else{
if(keyStates!=0){
pontszam=(pontszam)-1;
}
}Apró szépséghiba, hogy az időzítések össze-visszasága miatt a jó billentyűleütéseket is néha rossznak veszi és fordítva, illetve valamiért a 2,4,5,6,8 gombok értéke nulla
Pedig tudomásom szerint azok felveszik a LEFT_PRESSED, RIGHT_PRESSED, UP_PRESSED, DOWN_PRESSED és FIRE_PRESSED értékeit is. A gombtomb[]-ben a gombok sorrendjében tároltam le a koordinátákat, tehát az index maga a gomb száma. Lehet az a gond, hogy a paint és/vagy flushgraphics után tettem a feltételeket?ó megint valami jó hsz
keyStates pont erre van szükségem... -
loszerafin
senior tag
nem titkos, kedden délután már elárulhatom, akkor már túl leszek a bemutatásán és a leadásán
Konzultáltam ma a szakirány tanárommal és azt javasolta, hogy bonstam ketté a render() metódust, mégpedig rajzolós és billentyűzetelemzős részre. Módosítsam ezek alapján a Midletben a szál run() metódusát úgy, hogy először billvizsgálatot csinál, aztán vár valamennyit, aztán egy for ciklusba tegyem bele a rajzolós metódust és ehhez mérten igazítsam mennyi ideig sleepeljen a thread. Tehát pl. 1 mp-es képváltásnál thread.sleep(50) és ciklusváltozó 0-19. Most ezt fogom megpróbálni megcsinálni, remélem sikerrel járok és utána már "csak" az RMS (RecodStore) rész van hátra az eredmények mentéséhez és kiírásához (HighScore).Remek.
Kissé átpofoztam a kódodat, de nem tudom kipróbálni:
int[] dx={25,85,145,25,85,145,25,85,145};
int[] dy={50,50,50,110,110,110,170,170,170};
int[] keyCodes={512,2,1024,4,256,32,2048,64,4096};
int keyIndex=(int)(Math.random()*9);
sprite.next(dx[keyIndex],dy[keyIndex],keyIndex);
lm.paint(g,0,0);
flushGraphics();
int keyState=getKeyStates();
if ( (keyState & keyCodes[keyIndex]) !=0 ){
score++;
}
else{
if(keyState!=0){
score--;
}
}A keyCodes tömb számai helyett jobb lenne enum-okat használni, úgy érthetőbb lenne a program.
Az else ágban a keyState!=0-nak utána kellene nézni, tényleg azt jelenti-e, hogy nyomtak gombot.És azt hiszem, itt mindent megtalálsz a témádhoz:
és ez se rossz:
[link]Ráadásul ez az utolsó "megvan" magyarul is:
[link] -
loszerafin
senior tag
megcsináltam az alábbi módon
(remélem jól értelmeztem a mondani valódat
)int[] tomb1={25,85,145,25,85,145,25,85,145};
int[] tomb2={50,50,50,110,110,110,170,170,170};
int[] gombtomb={512,2,1024,4,256,32,2048,64,4096};
Random rnd=new Random();
int veletlen=rnd.nextInt(8);
dx=tomb1[veletlen];
dy=tomb2[veletlen];
sprite.next(dx,dy,veletlen);
lm.paint(g,0,0);
flushGraphics();
int keyStates=getKeyStates();
if (keyStates==gombtomb[veletlen]){
pontszam++;
}
else{
if(keyStates!=0){
pontszam=(pontszam)-1;
}
}Apró szépséghiba, hogy az időzítések össze-visszasága miatt a jó billentyűleütéseket is néha rossznak veszi és fordítva, illetve valamiért a 2,4,5,6,8 gombok értéke nulla
Pedig tudomásom szerint azok felveszik a LEFT_PRESSED, RIGHT_PRESSED, UP_PRESSED, DOWN_PRESSED és FIRE_PRESSED értékeit is. A gombtomb[]-ben a gombok sorrendjében tároltam le a koordinátákat, tehát az index maga a gomb száma. Lehet az a gond, hogy a paint és/vagy flushgraphics után tettem a feltételeket?Jól értetted, így gondoltam, látom, gyorsan "fogod" az adást
Lenne pár megjegyzésem a programozási stílussal kapcsolatban:
1. Próbálj meg angol azonosítókat használni, jobban illenek a programozáshoz
2. Próbálj meg olyan azonosítókat választani, amik a funkcióra utalnak és nem a
tartalomra, vagy típusra (pl: veletlen, tomb nem szerencsés)
3. Próbáld meg betartani a Sun névkonvencióit (változónevek első betűje kicsi, ha több szóból áll, akkor a többi kezdőbetű nagy
4. Szeparáld a kódodat. rajzolás és user input mehetne külön metódusba, akár külön osztályban is lehetnének (cohesion)Találtam egy fórumot, talán segít, rákeresve a getkeystates szóra van pár programpélda
[L]http://developer.sonyericsson.com/search.jspa?objID=c2&q=getkeystates[/L]Ha az a gyanúd, hogy az időzítések miatt megy össze vissza a programod, olvasd el ezt:
[L]http://java.sun.com/docs/books/tutorial/essential/concurrency/sync.html[/L]
(Legyenek a metódusaid syncronized-ek)De lehet megoldás az is, hogy nevezzük egy "körnek" a lámpa kigyúlásától a gomb lenyomásáig vagy az idő lejártáig tartó játékrészt.
Ekkor a kör végén hagyd a szálakat összefutni (mindegyik fejeződjön be), majd indítsd újra a szálakat, így nem lesz olyan, hogy pl. az előző lámpához tartozó gombnyomást fogja a programod jónak érzékelni. Meg egyébként is "tisztább, szárazabb érzés" lesz, hogy a szálaid ugyanazt a "kört" kezelik.Hajrá, kíváncsi vagyok a programodra, ha nem titkos, küldhetnél egy forrást az emailemre.
-
loszerafin
senior tag
konkrétan azt szeretném elérni, hogy van egy veletlen nevű változóm, ami egy 0-8-ig terjedű szám (ezzel kreálom azt, hogy a 9 szám közül melyik váltson zöldről pirosra (értelemszerűen ezt kell majd lenyomni a billentyűzeten ahhoz, hogy kapjon a játékos egy pontot)), ez alapján csinálnék egy elágazást (jelenleg 9 darab if, de majd bevágom case-be őket
), hogy ha veletlen=0 & GAME_A_PRESSED!=0, akkor pontszam++, else pontszam=(pontszam-1). Na ilyenből csináltam 9 fajta IF-et, csak az a bajom, hogy állandóan növeli a pontszám értékét teljesen függetlenül attól, hogy hozzányúltam-e a billentyűzethez vagy sem.
Ráadásul én a 2,4,5,6,8 gombokkal úgy számoltam, hogy azok működnek UP,LEFT,FIRE,RIGHT,DOWN gombokként, de a keyStates-ük mindnek 0
Így hiába teszem bele az elágazásokba őket, nem fogja érzékelni a program, ha megnyomtam
Remélem úgy nagyjából világos mit szeretnék elérni
Nagyjából érthető, nekem csak a 9 db IF szúrt szemet.
Rakd be tömbbe a lenyomható gombokat, vizsgáld meg, a tömbben van-e a lenyomott gomb
és egyezik-e azzal ami kell neked, ha igen adj pontot, ha nem, vonj le egyet.kb így :
if nyomtak_le_gombot then
pontszam+=(lenyomhato_gombok[veletlen] == lenyomott_gomb) ? 1 : -1;
else lejart_az_ido then /* nem nyomott meg semmit és már vált a lámpa */
pontszam-=1; -
robisz
senior tag
nem működik (void typue not allowod here), feltételben mondom, hogy nem lehet használni, mive a keyPressed(int number) függvény akkor hívódik meg, ha a number gombot lenyomtad

Mit értesz az alatt hogy "a number gombot" lenyomtad??

A "number" itt az eseménykezelő paramétere... a keyPressed MINDEN gomb lenyomásakor meghívódik, és a a number a lenyomott gomb kódja lesz. Az általad bemásolt hibaüzenet alapján azt mondom hogy valami más gond van a kódoddal.... másold be a hibás részt és kiderítjük :-)
-
robisz
senior tag
van két osztályom (a harmadik nem érdekes):
SPRITECANVAS.JAVA
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;public class SpriteCanvas extends GameCanvas{
public Command exitCommand;
public Sprite1 sprite;BackgroundLayer bgLayer;
LayerManager lm;public SpriteCanvas() throws java.io.IOException {
super(false);exitCommand=new Command("Kilépés",Command.EXIT,0);
addCommand(exitCommand);sprite=new Sprite1();
sprite.setPosition(25,50);
bgLayer=new BackgroundLayer();
lm=new LayerManager();
lm.append(sprite);
lm.append(bgLayer);
}void render(){
Graphics g=getGraphics();g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());int dx=0,dy=0;
int[] tomb1={25,85,145,25,85,145,25,85,145};
int[] tomb2={50,50,50,110,110,110,170,170,170};
Random rnd=new Random();
int veletlen=rnd.nextInt(8);
dx=tomb1[veletlen];
dy=tomb2[veletlen];
sprite.next(dx,dy,getWidth(),getHeight(),veletlen);lm.paint(g,0,0);
flushGraphics();}
}SPRITE1.JAVA
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;public class Sprite1 extends Sprite{
static final int width=60;
static final int height=60;public int mode=0;
static Random rnd=new Random();
static int[] frame_sequence_1={0,1,2,3,4,5,6,7,8};int framecount=0;
public Sprite1() throws java.io.IOException{
super(Image.createImage("/hello/gomb2.png"),width,height);
setFrameSequence(frame_sequence_1);
}public void next(int dx, int dy, int maxX, int maxY, int randomize){
setPosition(dx,dy);
setFrame(randomize);
}
}A lényeg az lenne, hogy a render vagy next hivások között legyen monjuk egy másodpercnyi idő, amíg a lenyomott gombot (még nincs deklarálva) meg tudom vizsgálni, hogy mi volt az. Apropó létezik olyan függvény, amely a lenyomott gomb kódját adja vissza integerben? Mert keyPressed(int number) függvény van, csak az akkor fut le, ha az adott gombot nyomom meg, nekem meg pont fordítva kéne, hogy lenyomás után el tudjam dönteni, hogy melyik számú (49-57 [KEY_NUM1-KEY_NUM9]) gomb volt az és ennek megfelelően csinálni egy szép nagy case elágazást.
A MainMidlet osztályban az egyik menüponthoz hozzárendeltem ezt az eseményt:
try{
spritecanvas=new SpriteCanvas();
spritecanvas.setCommandListener(this);
Display.getDisplay(this).setCurrent(spritecanvas);
thread=new Thread(this);
thread.start();
} catch (IOException E){
destroyApp(true);
}A Runnable interfész miatt kell bele még egy Run metódus is, ezt a Midlet legvégére szúrtam be és így néz ki:
public void run(){
try{
while((thread.isAlive())&&(spritecanvas!=null)){
spritecanvas.render();
thread.sleep(1000);}
} catch (InterruptedException E1){}
}Szia!
A GameCanvas osztályon van egy getKeyStates() metódus, ezzel tudod lekérdezni a gombok állapotát. Pl.:
int keyState = getKeyStates();
if ((keyState & LEFT_PRESSED) != 0) {
// Balra gomb le van nyomva
}A user input kezelést a fő ciklusodba érdemes betenni mondjuk a renderelés elé. Az 1000 millisec sleep-elés egyébként rengeteg, így maximum 1 fps-el fog futni az animáció
Akár egy 20 millisec-es sleep-elés is megteszi. -
Lortech
addikt
köszi, ezeket én is megtaláltam, próbáltam belőle kihámozni a használatot, de nem tudom átültetni az én feladatomba

De írd le akkor, hogy mi okozza a problémát.
Példányosítasz a Timerből.
Kiterjeszted a TimerTask osztályt, implementálod a run metódusát annak megfelelően, hogy mit akarsz ismételni, amikor lejár az idő.
Példányosítasz ebből a kiterjesztett osztályból, és paraméterként átadod a Timer példányod schedule metódusának, plusz megadod az ismétlési időközt. -
Lortech
addikt
J2ME-ben nincs javax.swing sajnos, úgyhogy azt hiszem ez nem járható út

-
Sianis
addikt
J2ME-ben programozok NetBeans-ben és azt szeretném kérdezni, hogy hogyan tudok időzéítéseket használni? Nagyjából annyi lenne a feladat, hogy egy TiledLayerrel és egy Sprite-tal operálok, az előbbin mozgatom az utóbbit, viszont azt szeretném megoldani, hogy két pozícióváltás között legyen x másodperc, hogy ilyenkor a felhasználó lenyomhasson egy gombot (játékot készítek mobiltelefonra), aztán ha jót nyomott, akkor egy változót megnövelek, ha rosszat, akkor ugyanazt csökkentem. Tehát az idő-, és/vagy időzítéskezelés alapjait szeretném tudni Java-ban/J2ME-ben, előre is köszönöm, szakirányom egyik munkájához kellene

Timer?
Sianis
-
andriscs
aktív tag
Csinálsz egy Console nevű osztályt és belemásolod a letöltött Console osztály minden sorát, a package extra sort pedig kitörlöd. Így már elvileg tudsz majd hivatkozni rá.
Hi!
Ez így oké, de majd mikor ZH-t írok Java-ból, akkor mit írjak a lapra? Hogy tessék tanár úr, itt egy link, ezen ellenőrizheti, hogy az általam használt Console osztály létezik, csak nem jegyeztem meg, de amúgy müködik.
Megpróbálom ezt a BufferedInputStream.In.Read.Int.Load.Integer.ReadLine.DoWork.Already.Java.Very.Easy.ToUse.This.Input.Read() függvényt, talán működik 
-
faster
nagyúr
nem a Java része
Mondom, hogy eredetileg .NET osztály.

-
andriscs
aktív tag
Az említett Console osztály segítségével a Console.ReadInt() paranccsal tudod beolvasni őket, ha ki akarsz írni vmit a beolvasás elé, pl., hogy ''írj be egy számot'', akkor x=Console.ReadInt(''Írj be egy számot''). Persze ha jól emléxem

Hi!
Oké, de akkor ebből a Console osztályból kellene származtatnom az eredeti osztályt, hogy elérjem a Console class metódusait. De ez a Console nem ''gyári'' Java osztály, hiába írnám be, hogy class xy extends Console. Szóval vmi eredeti Sun inputolvasás nincs?
[Szerkesztve] -
faster
nagyúr
Nem, arról az osztályról van szó, amiről a kolléga fentebb beszélt.
Ez valami extra osztály, nem a Java része?
-
faster
nagyúr
Az említett Console osztály segítségével a Console.ReadInt() paranccsal tudod beolvasni őket, ha ki akarsz írni vmit a beolvasás elé, pl., hogy ''írj be egy számot'', akkor x=Console.ReadInt(''Írj be egy számot''). Persze ha jól emléxem

Console.ReadInt() ? A Console nem .NET osztály?
Mod: Ja nem, van Java is. Az Console.readInt();
[Szerkesztve]
Új hozzászólás Aktív témák
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- BMW topik
- Kuponkunyeráló
- Gumi és felni topik
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- AMD FX
- Milyen billentyűzetet vegyek?
- Mibe tegyem a megtakarításaimat?
- Samsung Galaxy S26 Ultra - fontossági sorrend
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Windows 11
- További aktív témák...
- Honor Magic7 Lite / 8/256GB / Kártyafüggetlen / 12Hó Garancia
- SK Hynix PC811 2TB PCI-E 4.0 x4 nvme SSD 7000/6500MB/s
- Kuriózum: Ozark Trail (amerikai) fejlámpa 600 lumen
- AKCIÓS ! MacBook Pro 16" M1 Pro 16GB RAM 512GB SSD! 1 év garancia!
- LENOVO ThinkCentre M93p (SFF)i5-4570,4GB DDR3,500GB SATA3 HDD,DVD,WIN10
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


)
Pedig tudomásom szerint azok felveszik a LEFT_PRESSED, RIGHT_PRESSED, UP_PRESSED, DOWN_PRESSED és FIRE_PRESSED értékeit is. A gombtomb[]-ben a gombok sorrendjében tároltam le a koordinátákat, tehát az index maga a gomb száma. Lehet az a gond, hogy a paint és/vagy flushgraphics után tettem a feltételeket?
Ráadásul én a 2,4,5,6,8 gombokkal úgy számoltam, hogy azok működnek UP,LEFT,FIRE,RIGHT,DOWN gombokként, de a keyStates-ük mindnek 0





