سورس بازی Arrange Number در اندروید

یکشنبه 12 اردیبهشت 1395

در این مقاله می خواهیم یک سورس بازی به زبان جاوا قرار دهیم، در این بازی باید اعداد را به ترتیب مرتب نمایید و مربع اعداد را به صورت مرتب بچینید.

سورس بازی Arrange Number در اندروید

ابتدا داخل فایل activity از یک گرید ویو برای قرار دادن مربع اعداد استفاده می نمایید که به صورت زیر خواهد بود:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<GridView
 android:id="@+id/gridview"
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent"
 android:numColumns="3"
 android:verticalSpacing="10dp"
 android:horizontalSpacing="10dp"
 android:columnWidth="90dp"
 android:stretchMode="columnWidth"
 android:gravity="center"
 > 
</GridView>

  <TextView  
        android:id="@+id/textview"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/typesCounter"
        />
        
</LinearLayout>

برای کلاس جاوا هم باید قطعه کد زیر را قرار دهید:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;
public class ArrengeNumber extends Activity {
	private Integer elementsLength = 9;
	private ArrayList<TextView> elements= new ArrayList<TextView>();
	private GridView gridview;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView(R.layout.easy);
        MyOnClickListener cl = new MyOnClickListener();
        for( Integer i=0; i<elementsLength ;i++ ){
    		Button newButton = new Button(this);
    		newButton.setLayoutParams(new GridView.LayoutParams(150, 150));
    		newButton.setPadding(8, 8, 8, 8);
    		newButton.setText( ((Integer)(i+1)).toString() );
    		newButton.setTextSize(50); 
    		newButton.setId(i+1);
    		newButton.setOnClickListener( cl );
    		newButton.setEnabled( true );
     	   	if( i == elementsLength-1 )
     	   		newButton.setVisibility(4);
     	   	elements.add( newButton );
        }
        shuffle();
        gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ButtonGridAdapter());
    }
    private void arrange( View v ){
    	Integer vIndex = indexOf( v );
    	if( vIndex > -1 ){
    		if( vIndex-1 < 0 || vIndex-3 < 0 ){
    			testHeaderList( vIndex );
    		} else if( vIndex+1 > 8 || vIndex+3 > 8 ){
    			testTailList( vIndex );
    		} else{
    			testHeaderList( vIndex );
    			testTailList( vIndex );
    		}
    	} else{
    		Toast.makeText(ArrengeNumber.this, "sory, we got an error!",
    				Toast.LENGTH_SHORT).show();
    	}
    	if( isSorted() )
    		Toast.makeText(ArrengeNumber.this, "Congratulation o/",
   				Toast.LENGTH_SHORT).show();
    }
    private void testHeaderList( Integer vIndex ){
    	
		if( elements.get( vIndex+1 ).getId() == 9 ){
			if( vIndex != 2 && vIndex != 5 )
				switchPosition( vIndex, vIndex+1 );
        	
    	} else if( elements.get( vIndex+3 ).getId() == 9 ){
    		switchPosition( vIndex, vIndex+3 );
    	
    	} else if(vIndex!=0 ){
    		if( elements.get(vIndex-1 ).getId() == 9 && vIndex != 3 )
    			switchPosition( vIndex, vIndex-1 );
    	}
    }
    private void testTailList( Integer vIndex ){

    	if( elements.get( vIndex-1 ).getId() == 9 ){
    		if( vIndex != 6 && vIndex != 3 )	
    			switchPosition( vIndex, vIndex-1 );
    		
    	}else if( elements.get( vIndex-3 ).getId() == 9 ){
    		switchPosition( vIndex, vIndex-3 );
    	
    	}else if( vIndex != elementsLength-1 ){
    		if( elements.get( vIndex+1 ).getId() == 9 && vIndex != 5 )
    			switchPosition( vIndex, vIndex+1 );
    	}
    }
    private Integer indexOf( View v ){
    	for( int i=0; i<elementsLength; i++ )
    		if( elements.get( i ) == v )
    			return i;
    	return -1;
    }
    private Boolean isSorted( ){
    	
    	for( int i=0; i < elementsLength - 1; i++ ){
    		
    		if( elements.get( i ).getId() < elements.get( i+1 ).getId() )
    			continue;
    		else
    			return false;
    	}
    	return true;
    }
    private void shuffle(){
    	Collections.shuffle( elements );
    }
    private void switchPosition( Integer currentPos, Integer toChangePos){
    	TextView tmp = elements.get( toChangePos );
		elements.set( toChangePos, elements.get( currentPos ) );
		gridview.invalidateViews();
    }
	class MyOnClickListener implements OnClickListener {
  		// On Click function
		public void onClick(View v) {
			// Call to the arrange function that try to switch positions
			arrange( v );
		}
	}
	public class ButtonGridAdapter extends BaseAdapter {
    	 public int getCount() {
    		 return elementsLength;
    	 }
    	 public Object getItem(int position) {
    	  return null;
    	 }
    	 public long getItemId(int position) {
    	  return position;
    	 }
    	 public boolean areAllItemsEnabled(){
    		 return false;
    	 }
    	 public int getItemViewType( int pos ){
   			 return 0;
    	 }
    	 public int getViewTypeCount(){
    		 return 1;
    	 }
    	 public boolean isEnabled( int pos ){
    		 return pos!=5;
    	 }
    	 public View getView(int position, 
    	                           View convertView, ViewGroup parent) {
    		 return elements.get( position );
    	 }
    }
	class ArrayListMatrix extends ArrayList<TextView>{
		public ArrayListMatrix(int lines, int colums){
			super();
		}
	}
}

ابتدا یک آرایه تعریف نمایید و ابزارهایی که در صفحه قرار دادید را تعریف کنید، دکمه هایی که بر روی صفحه قرار دادید برای آن ها اندازه و سایز متن و فاصله ی دکمه ها از هم دیگر را مشخص کنید، گرید ویوی تعریف شده به وسیله ی آرایه ای که تعریف کرده اید باید پر نمایید برای مرتب سازی از دستور if استفاده شده است اگر درست مرتب نمایید پیغام را با Toast نمایش خواهد داد در غیر این صورت پیغام عدم موفقیت نمایش داده خواهد شد.

متدهایی برای تغییر وضعیت دکمه ها می نویسیم که باز هم با دستور if چک خواهد شد ودکمه ها را می توانیم جابه جا کنیم.

خروجی به صورت زیر خواهد بود:

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید