diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..0e23f8e --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5d19981 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e7e41e6 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/app-release.apk b/app/app-release.apk new file mode 100644 index 0000000..269e375 Binary files /dev/null and b/app/app-release.apk differ diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..48a96c1 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,30 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.2" + defaultConfig { + applicationId "com.wbrawner.numberguess" + minSdkVersion 15 + targetSdkVersion 25 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:25.1.0' + compile 'com.android.support:support-v4:25.1.0' + testCompile 'junit:junit:4.12' +} diff --git a/app/ngg.apk b/app/ngg.apk new file mode 100644 index 0000000..1bc6d88 Binary files /dev/null and b/app/ngg.apk differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..ee067a4 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /home/billy/Android/Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/com/wbrawner/numberguess/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/wbrawner/numberguess/ExampleInstrumentedTest.java new file mode 100644 index 0000000..5d5445a --- /dev/null +++ b/app/src/androidTest/java/com/wbrawner/numberguess/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.wbrawner.numberguess; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.wbrawner.numberguess", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ad5c6bf --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/wbrawner/numberguess/GameOverDialogFragment.java b/app/src/main/java/com/wbrawner/numberguess/GameOverDialogFragment.java new file mode 100644 index 0000000..a695388 --- /dev/null +++ b/app/src/main/java/com/wbrawner/numberguess/GameOverDialogFragment.java @@ -0,0 +1,46 @@ +package com.wbrawner.numberguess; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.DialogInterface; +import android.os.Bundle; + +public class GameOverDialogFragment extends DialogFragment { + + protected String message; + + public void setMessage(String message) { + this.message = message; + } + + public interface GameOverListener { + public void onDialogPositiveClick(DialogFragment dialog); + } + + GameOverListener mListener; + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mListener = (GameOverListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + "must implement GameOverListener"); + } + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setMessage(this.message); + builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + mListener.onDialogPositiveClick(GameOverDialogFragment.this); + } + }); + return builder.create(); + } +} diff --git a/app/src/main/java/com/wbrawner/numberguess/MainActivity.java b/app/src/main/java/com/wbrawner/numberguess/MainActivity.java new file mode 100644 index 0000000..55edf23 --- /dev/null +++ b/app/src/main/java/com/wbrawner/numberguess/MainActivity.java @@ -0,0 +1,87 @@ +package com.wbrawner.numberguess; + +import android.app.DialogFragment; +import android.content.Context; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import java.util.Map; + +public class MainActivity extends AppCompatActivity + implements GameOverDialogFragment.GameOverListener { + + public EditText guessInput; + public TextView guessResponse; + public Player user; + public NumberGuess ng; + + @Override + public void onDialogPositiveClick(DialogFragment dialog) { + this.resetGame(); + } + + public void gameOver(String message) { + GameOverDialogFragment gameOverPrompt = new GameOverDialogFragment(); + gameOverPrompt.setMessage(message); + gameOverPrompt.show(getFragmentManager(), "gameOver"); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + this.guessInput = (EditText) findViewById(R.id.guessInput); + resetGame(); + } + + public void resetGame() { + this.guessInput.setText("50"); + this.user = null; + this.ng = null; + + this.user = new Player(); + this.user.clearGuesses(); + + this.ng = new NumberGuess(); + this.ng.setAnswer(); + } + + public void setResponse(Map response) { + CharSequence text; + if (response.get("code").equals("correct")) { + String popup = String.format(getString(R.string.correct_answer), response.get("count")); + text = getString(R.string.game_over); + gameOver(popup); + } else if (response.get("code").equals("too_big")) { + text = getString(R.string.too_big); + } else { + text = getString(R.string.too_small); + } + Context context = getApplicationContext(); + int duration = Toast.LENGTH_SHORT; + Toast toast = Toast.makeText(context, text, duration); + toast.show(); + } + + public void setResponse(String response) { + this.guessResponse.setText(response); + } + + public void onClickGuessButton(View view) { + if (!guessInput.getText().toString().equals("")) { + this.user.addGuess( + Integer.parseInt( + guessInput.getText().toString() + ) + ); + } + this.setResponse( + this.ng.checkAnswer(this.user) + ); + this.guessInput.setText(null); + } +} diff --git a/app/src/main/java/com/wbrawner/numberguess/NumberGuess.java b/app/src/main/java/com/wbrawner/numberguess/NumberGuess.java new file mode 100644 index 0000000..7801b27 --- /dev/null +++ b/app/src/main/java/com/wbrawner/numberguess/NumberGuess.java @@ -0,0 +1,37 @@ +package com.wbrawner.numberguess; + +import java.util.HashMap; +import java.util.Map; + +public class NumberGuess { + + protected int answer = 0; + + public void setAnswer() { + this.answer = (int) (Math.random() * 100); + } + + public int getAnswer() { + return this.answer; + } + + public Map checkAnswer(Player user) { + Map response = new HashMap<>(); + int guess = user.getLastGuess(); + String guessCount = String.valueOf(user.getGuesses().size()); + if (guess == this.getAnswer()) { + response.put("count", guessCount); + response.put("code", "correct"); + } else { + if (guess > this.getAnswer()) { + response.put("code", "too_big"); + } else { + // If the number wasn't equal to the answer and it wasn't too + // big, it must be too small + response.put("code", "too_small"); + } + } + return response; + } + +} diff --git a/app/src/main/java/com/wbrawner/numberguess/Player.java b/app/src/main/java/com/wbrawner/numberguess/Player.java new file mode 100644 index 0000000..5724ad5 --- /dev/null +++ b/app/src/main/java/com/wbrawner/numberguess/Player.java @@ -0,0 +1,26 @@ +package com.wbrawner.numberguess; + +import java.util.List; +import java.util.ArrayList; + +public class Player { + + protected List guesses = new ArrayList(); + + public void clearGuesses() { + this.guesses = new ArrayList(); + } + + public void addGuess(int guess) { + this.guesses.add(guess); + } + + public int getLastGuess() { + return this.guesses.get(this.guesses.size() - 1); + } + + public List getGuesses() { + return this.guesses; + } + +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..502e8d6 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,56 @@ + + + + + + + + + + +