IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Avis jeux grattage


Sujet :

Android

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    541
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 541
    Points : 124
    Points
    124
    Par défaut Avis jeux grattage
    Bonjour,

    Je souhaiterais afficher des cases dont lesquels on devra gratter dessus pour afficher les symboles et savoir si on a gagné mais je ne sais pas quel biais technique dois je passer.

    Est-ce avec des boutons puis une animation qui fait apparaitre ce qu'il a dedans ou une view avec la gestuelle qui est gérer sur cette vue?

    Merci pour vos idées.

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    A vue de nez, je dirais :
    • Une View redéfinissant onDraw() pour dessiner les cases et les symboles dans ces cases
    • Une SurfaceView par dessus qui dessine des rectangles opaques uniquement aux niveaux des cases (transparent pour le reste).
    • Un GestureOverlayView pour que les mouvements du doigt de l'utilisateur efface les rectangles opaques (avec un truc du genre Canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR))


    Il y a aussi des notions de synchronisation et de verrouillage/déverrouillage du Canvas.

    Bref, du travail en perspective...
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    ouep des calques et la gestion de la transparence.
    Si la réponse vous a aidé, pensez à cliquer sur +1

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    541
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 541
    Points : 124
    Points
    124
    Par défaut
    J'ai utilisé ce code pour déterminer la couleur de chaque pixel puis de changer sa valeur lors de l'appuie sur l'écran mais aucun effet visuel, d'où pourrais venir le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
     
    public class TouchView extends ImageView {
     
     
    	Bitmap bitmap;
    	 double bmWidth, bmHeight; 
     
    	 public TouchView(Context context) {
    	  super(context);
    	  // TODO Auto-generated constructor stub
    	  init();
    	 }
     
    	 public TouchView(Context context, AttributeSet attrs) {
    	  super(context, attrs);
    	  // TODO Auto-generated constructor stub
    	  init();
    	 }
     
    	 public TouchView(Context context, AttributeSet attrs, int defStyle) {
    	  super(context, attrs, defStyle);
    	  // TODO Auto-generated constructor stub
    	  init();
    	 }
     
    	 private void init(){
     
    	  bitmap = ((BitmapDrawable)getBackground()).getBitmap();
    	  bmWidth = (double)bitmap.getWidth();
    	  bmHeight = (double)bitmap.getHeight();
    	 }
     
    	 @Override
    	 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    	  // TODO Auto-generated method stub
    	  setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
    	       MeasureSpec.getSize(heightMeasureSpec));
    	 }
     
    	 @Override
    	 public boolean onTouchEvent(MotionEvent event) {
    	  // TODO Auto-generated method stub
     
     
    	  switch(event.getAction()){
    	  case MotionEvent.ACTION_DOWN:
    	  case MotionEvent.ACTION_MOVE:
    	   float x = event.getX();
    	   float y = event.getY();
     
    	   int color = getColor(x, y);
    	      ((ALessonsArabicMainActivity)getContext()).updateMsg("Touched@" + x + " : " + y, color);
     
    	   break;
    	  case MotionEvent.ACTION_UP:
    	   ((ALessonsArabicMainActivity)getContext()).updateMsg("", 0);
    	   break;
    	  }
     
    	  return true;
    	 }
     
    	 private int getColor(float x, float y){
     
    	  if ( x < 0 || y < 0 || x > (float)getWidth() || y > (float)getHeight()){
    	   return 0; //Invalid, return 0
    	  }else{
    	   //Convert touched x, y on View to on Bitmap
    	   int xBm = (int)(x * (bmWidth / (double)getWidth()));
    	      int yBm = (int)(y * (bmHeight / (double)getHeight()));
    	      Bitmap mutableBitmap = Bitmap.createBitmap(bitmap.getWidth(),
    	    		  bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    	      mutableBitmap.setPixel(xBm, yBm, 255);
     
    	      setImageBitmap(mutableBitmap);
    	   return bitmap.getPixel(xBm, yBm);
    	  }
     
    	 }
    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    541
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 541
    Points : 124
    Points
    124
    Par défaut
    J'ai testé avec les calques mais la transparence ne marche pas lors de l'appuie sur la view, en fait j'affiche l'image qui s'affichera dès lors qu'on aura gratté, puis par dessus une image dont lequel on peut dessinner, ainsi lors du grattage je souhaiterais vérifier que lorsque un certain nombre de pixel apparaissent en clair je peux effectuer une action Y:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    private Bitmap mBitmap;
    	private Canvas mCanvas;
    	private Path mPath;
    	private Paint mBitmapPaint;
    	private Paint mPaint;
     
    	public CaseView(Context c) {
    		super(c);
     
    		mPaint = new Paint();
    		mPaint.setAntiAlias(true);
    		mPaint.setDither(true);
    		mPaint.setStyle(Paint.Style.STROKE);
    		mPaint.setStrokeWidth(40);
     
    		// creation d'un carré de couleur grisatre
    		mBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    		for (int i = 0; i < 100; i++) {
    			for (int j = 0; j < 100; j++) {
    				mBitmap.setPixel(i, j, Color.GRAY);
    			}
     
    		}
    		mCanvas = new Canvas(mBitmap);
    		mPath = new Path();
    		mBitmapPaint = new Paint(Paint.DITHER_FLAG);
     
    	}
     
    	@Override
    	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    		super.onSizeChanged(0, 0, oldw, oldh);
     
    	}
     
    	@Override
    	protected void onDraw(Canvas canvas) {
     
    		canvas.drawRect(100, 100, 200, 200, mBitmapPaint);
    		canvas.drawPath(mPath, mPaint);
     
    		Bitmap _scratch = BitmapFactory.decodeResource(getResources(),
    				R.drawable.ic_launcher);
    		canvas.drawColor(Color.WHITE);
     
    		// logo
    		canvas.drawBitmap(_scratch, 0, 100, null);
     
     
    //affichage des pixels en clair lors de l'appuie sur pixel x/y
    		for (int i = 0; i < 100; i++) {
    			for (int j = 0; j < 100; j++) {
    				if ((mX < 100 && mX >= 0) && (mY < 100 && mY >= 0)) {
     
    					mBitmap.setPixel((int) mY,(int) mX,  Color.TRANSPARENT);
    				}
    			}
     
    		}
    		canvas.drawBitmap(mBitmap, 0, 100, mBitmapPaint);
     
    		Bitmap mutableBitmap = Bitmap.createBitmap(_scratch.getWidth(),
    				_scratch.getHeight(), Bitmap.Config.ARGB_8888);
    		mutableBitmap.setPixel(50, 50, 124);
    		canvas.drawBitmap(mutableBitmap, 0, 100, null);
    		int pixelColor = mBitmap.getPixel(50, 50);
    		int red = Color.red(pixelColor);
    		int green = Color.green(pixelColor);
    		Log.v("red", "red:" + red + " /green:" + green);
     
     
    	}
     
     
    	private float mX, mY;
    	private static final float TOUCH_TOLERANCE = 4;
     
    	private void touch_start(float x, float y) {
    		mPath.reset();
    		mPath.moveTo(x, y);
    		mX = x;
    		mY = y;
    	}
     
    	private void touch_move(float x, float y) {
    		float dx = Math.abs(x - mX);
    		float dy = Math.abs(y - mY);
    		if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
    			mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
    			mX = x;
    			mY = y;
    		}
    	}
     
    	private void touch_up() {
    		mPath.lineTo(mX, mY);
    		// commit the path to our offscreen
    		mCanvas.drawPath(mPath, mPaint);
    		// kill this so we don't double draw
    		mPath.reset();
    	}
     
    	@Override
    	public boolean onTouchEvent(MotionEvent event) {
    		float x = event.getX();
    		float y = event.getY();
    		Log.v("onTouchEvent", "x:" + x + "/y:" + y);
     
    		switch (event.getAction()) {
    		case MotionEvent.ACTION_DOWN:
    			touch_start(x, y);
    			invalidate();
    			break;
    		case MotionEvent.ACTION_MOVE:
    			touch_move(x, y);
    			invalidate();
    			break;
    		case MotionEvent.ACTION_UP:
    			touch_up();
    			invalidate();
    			break;
    		}
    		return true;
    	}

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    541
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 541
    Points : 124
    Points
    124
    Par défaut
    Je souhaiterais mettre 3 View (CaseView) sur un Layout, comment faire?

    Merci.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    541
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 541
    Points : 124
    Points
    124
    Par défaut
    Je souhaite afficher 9 cases dont lequel on pourra gratter, comment faire?

  8. #8
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Citation Envoyé par jojo_ol76 Voir le message
    Je souhaite afficher 9 cases dont lequel on pourra gratter, comment faire?
    Tu dois utiliser un TableLayout pour aligner les colonnes
    Si la réponse vous a aidé, pensez à cliquer sur +1

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    541
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 541
    Points : 124
    Points
    124
    Par défaut
    Oui mais le bitmap s'affiche avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    canvas.drawBitmap(mBitmap, 0, positionTop, mBitmapPaint);
    Comment faire à ce qu'il ne tienne pas compte de la positionTop dans un tablelayout?

  10. #10
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Comment faire à ce qu'il ne tienne pas compte de la positionTop dans un tablelayout?

    Il te suffit de pas mettre le paramètre lors de l'appel ou alors j'ai pas compris la question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canvas.drawBitmap(mBitmap, 0, positionTop, mBitmapPaint);
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

Discussions similaires

  1. [Avis]Jeux mot mystere
    Par girv97 dans le forum C++
    Réponses: 8
    Dernier message: 01/04/2014, 08h50
  2. Avis jeux de mots
    Par jojo_ol76 dans le forum Android
    Réponses: 0
    Dernier message: 07/11/2012, 22h01
  3. Vos Avis (Jeux Vidéo)!
    Par tabarez7 dans le forum Mon site
    Réponses: 3
    Dernier message: 17/07/2008, 18h54
  4. Réponses: 49
    Dernier message: 31/08/2007, 12h30
  5. Vos avis sur mon site de jeux : http://kor6k.free.fr
    Par kor6k dans le forum Mon site
    Réponses: 1
    Dernier message: 28/08/2007, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo