Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Abbiamo provato il nuovo Galaxy S25 Edge, uno smartphone unico per il suo spessore di soli 5,8 mm e un peso super piuma. Parliamo di un device che ha pro e contro, ma sicuramente si differenzia dalla massa per la sua portabilità, ma non senza qualche compromesso. Ecco la nostra prova completa.
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Basato su piattaforma Qualcomm Snapdragon X Plus a 8 core, il nuovo Microsoft Surface Pro 12 è un notebook 2 in 1 molto compatto che punta sulla facilità di trasporto, sulla flessibilità d'uso nelle differenti configurazioni, sul funzionamento senza ventola e sull'ampia autonomia lontano dalla presa di corrente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-06-2007, 15: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, 07:40   #2
BeagleKoki
Junior Member
 
Iscritto dal: Apr 2007
Messaggi: 26
up
BeagleKoki è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2 Dopo un mese, e 50 foto, cosa abbiamo capito del...
Il tuo mouse ti spia? La suite di gestio...
Proton presenta Lumo: l'assistente AI co...
Samsung Galaxy S26 Edge: più auto...
Escobar Inc.: una frode che porta il mar...
Apple e la smart home in arrivo? Nuovo H...
Anche Alfa Romeo lancia il suo incentivo...
Un braccialetto che ascolta e registra o...
OPPO Find X8 Ultra: il RE dei cameraphon...
DeepL sempre più potente: arrivan...
Addio a Shunsaku Tamiya, il papà ...
Il volontariato non può essere gr...
Baxi presenta le nuove pompe di calore a...
Solo 104€ per questo robot Lefant da 500...
AppleCare One è unico! 3 disposit...
La HP DeskJet 4220e a soli 39€: un po' c...
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: 18:02.


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