现在的位置: 首页 > 综合 > 正文

拼图游戏代码

2013年03月22日 ⁄ 综合 ⁄ 共 6668字 ⁄ 字号 评论关闭
package com.aiai.www;


import java.util.Random;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

public class PuzzleActivity extends Activity implements OnClickListener
{
	  private ImageView[] imageViewVector = new ImageView[9];
	  private Bitmap[] images = new Bitmap[9];
	  private int[] randomIds;
	  private Bitmap image_null = null;

	  
 
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		 int action = event.getAction();
		 if(MotionEvent.ACTION_DOWN==action)
			 System.out.println("point x="+event.getX()+",y="+event.getY());


		return super.onTouchEvent(event);
	}

	public PuzzleActivity() {
		    randomIds = new int[9];
		    randomIds[0] = 8;
		    randomIds[1] = 8;
		    randomIds[2] = 8;
		    randomIds[3] = 8;
		    randomIds[4] = 8;
		    randomIds[5] = 8;
		    randomIds[6] = 8;
		    randomIds[7] = 8;
		    randomIds[8] = 8;
		    
		    
 
		System.out.println("PuzzleActivity construct");
	}

	protected void onCreate(Bundle savedInstanceState)
	  {
         	this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
	    	this.requestWindowFeature(Window.FEATURE_NO_TITLE);
	    	
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.puzzle);
	        
	        
	        Bitmap localBitmap = getBitmapFromResOrSDCard(getIntent().getExtras());
	        
	        initImageViewVector();
	        splitImages(localBitmap, this.images);
	        startGame();
	        
	  }

	private void startGame() {
		// TODO Auto-generated method stub
	    this.randomIds[8] =8;
	    this.images[8] = null;
	    this.imageViewVector[8].setImageBitmap(null);
	    this.image_null=BitmapFactory.decodeResource(getResources(), R.drawable.img_null);
	    
	    generateRandomArray();
	    while((checkValidRandom(randomIds,8)==false))
	    {
	    	generateRandomArray();
	    }
	    
	    setImageToImageView();
	}

	private void generateRandomArray() {
		// TODO Auto-generated method stub


        Random localRandom = new Random();
	    int i = 0;

	    for (int j = localRandom.nextInt(8); ; j = localRandom.nextInt(8))
	    {
	    	
	      if (checkRepeat(j, this.randomIds, i))
	        continue;
	      this.randomIds[i] = j;
	      System.out.println("randomIds["+i+"]="+randomIds[i]);
	      i++;
	      
	      if( i>= 8)
	    	  break;

	    }
	}
	
	private boolean checkValidRandom(int[] paramrandomIds,int cnt)
	{
		 int sum = 0; //逆序数总和
		// int tmp=0;
		for(int i = 0; i < cnt ; i++)
		{
			for(int j=0 ; j <= i ; j++)
			{
				if(paramrandomIds[i] < paramrandomIds[j])
				{ 
				//	  tmp++;
					sum++;
			//		System.out.println("sum = "+sum);
				}
			}
			// System.out.println("checkValidRandom paramrandomIds["+i+"]=lixu:"+tmp);
			// tmp=0;
		             
		}
		 if ((sum & 1) == 0)   //是偶数
         {
			// System.out.println("checkvalidrandom true sum = "+sum);
            return true;
         }
         else
         {
         //System.out.println("checkvalidrandom false");
             return false;  //是奇数
         }

		
 
		
		
	}

	private boolean checkRepeat(int j, int[] paramrandomIds, int i) {
		// TODO Auto-generated method stub
		//compare paramrandomIds[0]--[i-1]  to j
		
		if(i==0)
		{
			//System.out.println("return false");
			return false;
		}
		
		//System.out.println("#i="+i+"#");	
		 
		 
	    for ( ; i >= 1 ; i--)
	    { 
	    	//System.out.println("paramrandomIds["+(i-1)+"]="+randomIds[i-1]);
	    	if(paramrandomIds[i-1]==j)
	    	{
	    		//System.out.println("return true");
	    		return true;	  
	    	}
	    }
	   // System.out.println("return false2");
	    return false; 
	}

	private void setImageToImageView() {
		// TODO Auto-generated method stub
	    for (int i = 0; ; i++)
	    {
	      if (i >= 8)
	        return;
	      ImageView localImageView = this.imageViewVector[i];
	      int j = this.randomIds[i];
	      localImageView.setImageBitmap(this.images[j]);

	    }
	    
	   
	}

	private void splitImages(Bitmap paramBitmap, Bitmap[] paramArrayOfBitmap) {
		// TODO Auto-generated method stub
	    Bitmap localBitmap = paramBitmap;
	    int i = paramBitmap.getWidth();
	    int j = paramBitmap.getHeight();

	    if ((i != 320) || (j != 480))
	    {
	      float f1 = (320) /(float) i;
	      float f2 = (480) / (float)j;
	      Matrix localMatrix = new Matrix();
	      
	      localMatrix.postScale(f1, f2);	   

	      localBitmap = Bitmap.createBitmap(paramBitmap, 0, 0, i, j, localMatrix, true);  //get resized img
	      
	    }
	    int k = (320-5) / 3;
	    int m = (480-5) / 3;
  
	    
	    for (int n = 0; ; n++)
	    {
	      if (n >= 8)
	        return;
	      int i1 = (320 / 3) * (n % 3);
	      int i2 = (480 / 3) * (n / 3);	      
	      
 	      paramArrayOfBitmap[n] = Bitmap.createBitmap(localBitmap, i1, i2, k, m);
	    }
	}

	private void initImageViewVector() {
		// TODO Auto-generated method stub
		this.imageViewVector[0] = ((ImageView)findViewById(R.id.imageView1));
	    this.imageViewVector[1] = ((ImageView)findViewById(R.id.imageView2));
	    this.imageViewVector[2] = ((ImageView)findViewById(R.id.imageView3));
	    this.imageViewVector[3] = ((ImageView)findViewById(R.id.imageView4));
	    this.imageViewVector[4] = ((ImageView)findViewById(R.id.imageView5));
	    this.imageViewVector[5] = ((ImageView)findViewById(R.id.imageView6));
	    this.imageViewVector[6] = ((ImageView)findViewById(R.id.imageView7));
	    this.imageViewVector[7] = ((ImageView)findViewById(R.id.imageView8));
	    this.imageViewVector[8] = ((ImageView)findViewById(R.id.imageView9));
	    for (int i = 0; ; i++)
	    {
	      if (i >= 9)
	        return;
	      this.imageViewVector[i].setOnClickListener(this);
	    }
	}

	private Bitmap getBitmapFromResOrSDCard(Bundle extras) {
		// TODO Auto-generated method stub
		 
		return BitmapFactory.decodeResource(getResources(), R.drawable.jinsha);
		//return null;
	}

	public void onClick(View arg0) {
		// TODO Auto-generated method stub
	//	System.out.printf("value=%x\n",arg0.getId());
		int i=-1;
		switch(arg0.getId())
		{
		case R.id.imageView1:
			i = 0;
			break;
		case R.id.imageView2:
			i = 1;
			break;
		case R.id.imageView3:
			i = 2;
			break;
		case R.id.imageView4:
			i = 3;
			break;
		case R.id.imageView5:
			i = 4;
			break;
		case R.id.imageView6:
			i = 5;
			break;
		case R.id.imageView7:
			i = 6;
			break;
		case R.id.imageView8:	
			i = 7;
			break;
		case R.id.imageView9:
			i = 8;			
			break;
			
		default:
			System.out.println("view default");
		
		}
		
		if(i<=8 && i>=0)
			checkPosition(i);
				
		
		
	}

	  private void changePosition(int paramInt1, int paramInt2)
	  {
	    int i = this.randomIds[paramInt1];
	    this.randomIds[paramInt1] = this.randomIds[paramInt2];
	    this.randomIds[paramInt2] = i;
	 
	    System.out.println("i="+i);
	    System.out.println("paraint1="+paramInt1+",paraint2="+paramInt2);
	    System.out.println("1randomIds["+paramInt1+"]="+(randomIds[paramInt1])+",2randomIds["+paramInt2+"]="+(randomIds[paramInt2]));
	    if(this.randomIds[paramInt1]==8)
	    	this.imageViewVector[paramInt1].setImageBitmap(image_null);
	    else
	    	this.imageViewVector[paramInt1].setImageBitmap(this.images[this.randomIds[paramInt1]]);

	    if(this.randomIds[paramInt2]==8)
	    	this.imageViewVector[paramInt2].setImageBitmap(image_null);
	    else
	    	this.imageViewVector[paramInt2].setImageBitmap(this.images[this.randomIds[paramInt2]]);
	    
	   // imageViewVector[8].setImageBitmap(this.images[3]);
	    
/*	    this.imageViewVector[7].setImageBitmap(image_null);
	    this.imageViewVector[8].setImageBitmap(this.images[3]);*/
	  }
	  
	private boolean canChangePosition(int paramInt) 
	{
		if (this.randomIds[paramInt] == 8)
			return true;
		else
			return false;

	}

	private void checkPosition(int paramInt) {
		// TODO Auto-generated method stub
		 if (paramInt / 3 > 0)
		    {
		      int m = paramInt - 3;
		      if ((m >= 0) && (canChangePosition(m)))
		      {
		        changePosition(paramInt, m);
		        return;
		      }
		    }
		 
	     if (paramInt % 3 > 0)
	      {
	        int k = paramInt - 1;
	        if ((k >= 0) && (canChangePosition(k)))
	        {
	          changePosition(paramInt, k);	 
	          return;
	        }
	      }
	     
	      if (paramInt / 3 < 2)
	      {
	        int j = paramInt + 3;
	        if ((j >= 0) && (j < 9) && (canChangePosition(j)))
	        {
	          changePosition(paramInt, j);
	          return;
	        }
	      }
	      
	      if (paramInt % 3 < 2)
	      {
	        int l = paramInt +1;
	        if ((l >= 0) && (l < 9) && (canChangePosition(l)))
	        {
	          changePosition(paramInt, l);
	          return;
	        }
	      }
	}
}

抱歉!评论已关闭.