//////////////////////////////////////// // Bubble Wrap // Drew Harris, January 30th, 2012 // A fun bubble wrap game /////////////////////////////////////// package edu.uwec.cs.harrisd.BubbleWrap; import java.util.ArrayList; import edu.uwec.cs.harrisd.BubbleWrap.R; import android.app.Activity; import android.content.Context; import android.hardware.SensorManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.os.Vibrator; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; public class BubbleWrapActivity extends Activity { /** Called when the activity is first created. */ // Bubble Dimensions // int bubbleSize = 70; int padding = 5; // Starting Score // int count = 0; // Score that resets with each new sheet // int recount = 0; // Instance Variables // ImageView b; TextView s; TableLayout mainFrame; double width; double height; int totalBubbles; ArrayList bubbleList; int vibeDuration = 25; boolean sound = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println("Hey there, sailor"); s = (TextView) findViewById(R.id.score); s.setText("Bubbles Popped: " + count); // Get the screensize TextView screenWidth = (TextView) findViewById(R.id.screenwidth); TextView screenHeight = (TextView) findViewById(R.id.screenheight); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); width = dm.widthPixels; height = dm.heightPixels; // Calculate how many bubble rows are needed // Round down if not an even number double colNum = Math.floor(height / (bubbleSize + padding)); double rowNum = Math.floor(width / (bubbleSize + padding)); totalBubbles = (int) ((colNum - 1) * rowNum); mainFrame = (TableLayout) findViewById(R.id.mainLayout); mainFrame.setGravity(Gravity.CENTER); mainFrame.setPadding(0, 0, 0, 0); bubbleList = new ArrayList(); for (int r = 1; r <= colNum - 1; r++) { TableRow tr = new TableRow(this); tr.setGravity(Gravity.CENTER); for (int c = 1; c <= rowNum; c++) { ImageView b = new ImageView(this); b.setImageDrawable(getResources() .getDrawable(R.drawable.bubble)); b.setPadding(padding, padding, padding, padding); b.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent arg1) { ImageView popMe = (ImageView) v; if (popMe.getTag() != "popped") { if(sound == true) { // Play the popping noise MediaPlayer mp = MediaPlayer.create( getBaseContext(), R.raw.pop); mp.start(); mp.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp.release(); } }); } // Vibrate Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); vibe.vibrate(vibeDuration); count++; recount++; if (recount == totalBubbles) { System.out.println(recount); // If user finishes a sheet, display a message that lets them // know they can shake their device to start a new sheet Context context = getApplicationContext(); CharSequence text = "Shake to Start a Fresh Sheet!"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show(); recount = 0; } s.setText("Bubbles Popped: " + count); int p = R.drawable.popped; popMe.setImageResource(p); popMe.setTag("popped"); } return false; } }); bubbleList.add(b); tr.addView(b, bubbleSize, bubbleSize); ShakeListener NewSheet = new ShakeListener( (SensorManager) getSystemService(SENSOR_SERVICE)); NewSheet.setForceThreshHold(4); NewSheet.setOnShakeListener(new ShakeListener.OnShakeListener() { @Override public void onShake() { newGame(); } }); } mainFrame.addView(tr); } } public void newGame() { // Start a new sheet for (int i = 0; i < bubbleList.size(); i++) { bubbleList.get(i).setImageResource( R.drawable.bubble); bubbleList.get(i).setTag("unPop"); } } // Option Menu // @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.sound: if (sound == true) { sound = false; } else { sound = true; } break; case R.id.vibe: if (vibeDuration != 0) { vibeDuration = 0; } else { vibeDuration = 25; } break; case R.id.newSheet: newGame(); break; } return true; } }