Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-06-2007, 16:03   #1
BeagleKoki
Junior Member
 
Iscritto dal: Apr 2007
Messaggi: 26
[J2ME] aiuto sul gioco del tetris

Salve,
ho bisogno di un aiuto.
Vorrei creare un gioco simile al tetris ma solo con i quadrati dove, appena un quadrato di colore verde si scontra con un altro dello stesso colore, scompaiono entrambi.
Ho iniziato a gestire la grafica e il movimento ma, se muovo il quadrato a destra o a sinistra appena questo tocca il bordo non scende piu(si blocca li).
Avrei dunque bisogno di alcuni aiuti:
- se il quadratino tocca il bordo laterale si blocca e non scende più.
- vorrei gestire tramite il random il colore dei quadrati (ogni volta che ne scende uno nuovo vorrei fargli cambiare colore).
Posto il codice che ho scritto fino ad ora:
codice:
Codice:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

public class Applicazione extends MIDlet {
    private Display display;
    private CanvasTetris canvas;
    
    //costruttore
    public Applicazione() {
        display = Display.getDisplay(this);
        canvas  = new CanvasTetris(this);
    }
    
    protected void startApp() {
        display.setCurrent(canvas);
    }
    
    protected void pauseApp() {
    }
    
    protected void destroyApp( boolean unconditional ) {
    }
    
    // cEsci
    public void exitMIDlet() {
        destroyApp(true);
        notifyDestroyed();
    }
}

//-----------------------------------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------------------------------//

// classe intesa come "midlet grafico" a parte.
class CanvasTetris extends Canvas implements CommandListener {
    
    private Command cmExit, cPausa;
    private String keyText = "", testo="";
    private Applicazione midlet;
    private int x, y, cx, cy, dMp=24, iTime=50, iTime2=0, score,pz=1;
    private int size, rnd=-1, rnd2=-1;  //size è la dimensione in pixel (larghezza e altezza ) di ogni cella della matrice
    private int mp [][] = new int [12][22];
    private int px [] = new int [4];
    private int py [] = new int [4];
    
    private boolean pausa;
    private Timer tm;
    private TimerTask tt;
    
    
    
    
    
    
    // costruttore
    public CanvasTetris(Applicazione midlet) {
        this.midlet = midlet;    // dentro al canvas "midlet" contiene midlet della classe più esterna.
        cmExit = new Command("Exit",Command.EXIT,0);
        cPausa = new Command("Pausa",Command.OK,0);
        addCommand(cmExit);
        addCommand(cPausa);
        setCommandListener(this);
        
        tm = new Timer();
        
        
        tt = new TimerTT();
        tm.scheduleAtFixedRate(tt,0,200);
       
        score=0;
        
        //COSTRUISCO LE COORDINATE DEL QUADRATO GRIGIO
        px[0]=4;
        py[0]=1;
        px[1]=5;
        py[1]=1;
        px[2]=4;
        py[2]=2;
        px[3]=5;
        py[3]=2;
        pz=1;
        
        
        
        //COSTRIUSCO LE VERIABILI DEL RETTANGOLO VERDE
        px[0]=4;
        py[0]=1;
        px[1]=4;
        py[1]=2;
        px[2]=4;
        py[2]=3;
        px[3]=4;
        py[3]=4;
        pz=2;
        
      


        
      
        //COSTRUISCO UNA CORNICE GIALLA
        for (int c=0;c<12;c++) { //12 E' IL BORDO ORIZZONTALE
            mp[c][0]=-1;
            mp[c][21]=-1;
        }
        for (int r=0;r<21;r++) { //21 E' IL BORDO IN VERTICALE
            mp[0][r]=-1;
            mp[11][r]=-1;
        }
        
        
        
        size=getWidth()/16 ; //SCELGO LA LARGHEZZA DEL PIXEL
        if(getHeight()/22<size){   //SCELGO L'ALTEZZA DEL PIXEL
            size=getHeight()/22; //SE L'ALTEZZA E' PIU PICCOLA DELLA LARGHEZZA DISEGNAMI UN QUADRATINO
        }
    }
    private class TimerTT extends TimerTask {
        public final void run() {
            boolean ok=false;
        
            for (int i=0;i<4;i++){
                
                ok=false;
                if (mp[px[i]][py[i]+1]==0)     // CONTROLLA SE C'E' UNO SPAZIO VUOTO SOTTO
                    ok=true;
                
                
                else{
                    for (int j=0;j<4;j++){
                        if (py[j]==py[i]+1 && px[j]==px[i])    {
                            ok=true;
                        }
                    }
                }
                
                //CONTROLLA CHE NON CI SIA LA MIA CORNICE GIALLA
                // SE C'E' LA CORNICE IL QUADRATINO SI FERMA
                
                if (mp[px[i]+1][py[i]]==-1)      //Gestisco la parte di destra
                    ok=false;                    // il quadratino non va oltre il riquadro
                
                
                
                if(mp[px[i]-1][py[i]]==-1)      //Gestisco la parte di sinistra
                    ok=false;                   //  il quadratino non va oltre il riquadro
                
                
                
                if (!ok)
                    i=5;
            }
            if (!ok)      {
                px[0]=4;
                py[0]=1;
                px[1]=5;
                py[1]=1;
                px[2]=4;
                py[2]=2;
                px[3]=5;
                py[3]=2;
                pz=1;
                for (int k=0;k<4;k++)
                    mp[px[k]][py[k]]=pz;
                return;
            }
            
            
            
            
            pz=0;
            for (int k=0;k<4;k++)
                mp[px[k]][py[k]]=pz;
            
            px[0]=px[0];
            py[0]=py[0]+1;
            px[1]=px[1];
            py[1]=py[1]+1;
            px[2]=px[2];
            py[2]=py[2]+1;
            px[3]=px[3];
            py[3]=py[3]+1;
            pz=1;
            for (int k=0;k<4;k++)
                mp[px[k]][py[k]]=pz;
            
            
            repaint();
            
        }
}
    // CREAZIONE DEL METODO PAINT
    
    protected void paint(Graphics g) {
        g.setColor(0,0,132);
        g.fillRect(0,0,getWidth(),getHeight());
        
//        g.setColor(0,0,0);
//        g.fillRect(10,10,getWidth()-80,getHeight()-60);
        
//        // 2  righe gialle
        g.setColor(255,255,0);
        g.drawString("Punteggio: " + score ,getWidth()-80,getHeight()-260,0);
//        g.drawString("Score: " + score ,getWidth()-150,getWidth()+18,0);
        for(int xx=0; xx<12; xx++) {
            for(int yy=0; yy<22; yy++) {
                switch(mp[xx][yy]) {
                    case 1:   // LA MIA POSIZIONE
                    {
                        g.setColor(255,255,0);
                        g.fillRect(xx*size,yy*size,size,size);
                        break;
                    }
                    case -1:
                    {
                        g.setColor(154,53,255);
                        g.fillRect(xx*size,yy*size,size,size);
                        break;
                    }
                    case 2:   // LA MIA POSIZIONE
                    {
                        g.setColor(24,201,82);
                        g.fillRect(xx*size,yy*size,size,size);
                        break;
                    }
                }
            }
        }
    }
    public void commandAction(Command c, Displayable s) {
        if (c == cmExit) {
            midlet.exitMIDlet();
        }
        if(c == cPausa) {
            repaint();
            pausa = !pausa;
        }
    }
    protected void keyPressed(int keyCode) {
        keyText=getKeyName(keyCode);
//        if(keyText.equals("DOWN")){
//
//            pz=0;
//            for (int k=0;k<4;k++)
//                mp[px[k]][py[k]]=pz;
//
//            px[0]=px[0];
//            py[0]=py[0]+1;
//            px[1]=px[1];
//            py[1]=py[1]+1;
//            px[2]=px[2];
//            py[2]=py[2]+1;
//            px[3]=px[3];
//            py[3]=py[3]+1;
//            pz=1;
//            for (int k=0;k<4;k++)
//                mp[px[k]][py[k]]=pz;
//
//
//            repaint();
//
//        }
        if(keyText.equals("LEFT")){
            
            pz=0;
            for (int k=0;k<4;k++)
                mp[px[k]][py[k]]=pz;
            
            px[0]=px[0]-1;
            py[0]=py[0];
            px[1]=px[1]-1;
            py[1]=py[1];
            px[2]=px[2]-1;
            py[2]=py[2];
            px[3]=px[3]-1;
            py[3]=py[3];
            pz=1;
            for (int k=0;k<4;k++)
                mp[px[k]][py[k]]=pz;
            
            
            repaint();
            
        }
        if(keyText.equals("RIGHT")){
            
            pz=0;
            for (int k=0;k<4;k++)
                mp[px[k]][py[k]]=pz;
            
            px[0]=px[0]+1;
            py[0]=py[0];
            px[1]=px[1]+1;
            py[1]=py[1];
            px[2]=px[2]+1;
            py[2]=py[2];
            px[3]=px[3]+1;
            py[3]=py[3];
            pz=1;
            for (int k=0;k<4;k++)
                mp[px[k]][py[k]]=pz;
            
            
            repaint();
            
        }
        if(pausa == false) {
//            muovi();
        }
        // caso pausa
        else {
            
            
            
        }
    }
    
}

Sto diventando matto perchè non riesco a fare queste due cose.
Aiutatemi!!
Grazie.
BeagleKoki è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2007, 08:40   #2
BeagleKoki
Junior Member
 
Iscritto dal: Apr 2007
Messaggi: 26
up
BeagleKoki è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
GTA 6 gratis se nasce un figlio il giorn...
Quasi la metà degli smartphone at...
DDR5 a 16 dollari al gigabyte: Framework...
Meno di 3kg per 'diventare' bionici: l'u...
Al regalo di San Valentino ci pensa HUAW...
Intel multata in India: 30 milioni di do...
Beast of Reincarnation ha una data di us...
Provati Reno15 e Reno15 FS: analisi comp...
L'Europa sfida la Cina sul litio: in Fin...
Sono 32, di cui 6 nuove, le offerte Amaz...
Rinnovo dei coupon Amazon nascosti: ecco...
Corsair aggiorna la confezione delle RAM...
Ecco tutti i robot aspirapolvere in offe...
Tachyum: dal processore universale alle ...
L'eVTOL tedesco per missioni mediche e m...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v