diff --git a/app/build.gradle b/app/build.gradle index e4e4e86..8a5d972 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,11 +20,11 @@ android { } dependencies { implementation 'com.android.support:support-v4:27.0.2' - compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:27.0.2' - compile 'com.android.support.constraint:constraint-layout:1.0.2' - compile 'com.android.support:design:27.0.2' - compile 'com.android.support:support-vector-drawable:27.0.2' + api fileTree(include: ['*.jar'], dir: 'libs') + api 'com.android.support:appcompat-v7:27.0.2' + api 'com.android.support.constraint:constraint-layout:1.0.2' + api 'com.android.support:design:27.0.2' + api 'com.android.support:support-vector-drawable:27.0.2' } repositories { diff --git a/app/src/main/java/net/DeltaWings/Android/Hangman/GameActivity.java b/app/src/main/java/net/DeltaWings/Android/Hangman/GameActivity.java index 39c85d1..0520928 100644 --- a/app/src/main/java/net/DeltaWings/Android/Hangman/GameActivity.java +++ b/app/src/main/java/net/DeltaWings/Android/Hangman/GameActivity.java @@ -8,6 +8,7 @@ import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.KeyEvent; import android.view.animation.DecelerateInterpolator; import android.widget.EditText; @@ -16,20 +17,16 @@ import android.widget.TextView; import android.widget.Toast; import net.DeltaWings.Android.Hangman.Util.Command; -import net.DeltaWings.Android.Hangman.Util.ConnectionUtil; +import net.DeltaWings.Android.Hangman.Util.GameUtil; import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; public class GameActivity extends AppCompatActivity { private AlertDialog.Builder builder; - private ConnectionUtil co; private TextView word; - private List letters = new ArrayList<>(); + static private GameUtil gameUtil; + private ArrayList letters = new ArrayList<>(); private Context context = this; @Override @@ -50,13 +47,14 @@ public class GameActivity extends AppCompatActivity { MainActivity.setTheme(this); setContentView(R.layout.game_activity); - word = findViewById(R.id.letters); + word = findViewById(R.id.word); ProgressBar progressBar = findViewById(R.id.progressBar); EditText input = findViewById(R.id.input); log("Logs"); - log("Connecting..."); - co = new ConnectionUtil(); + + gameUtil = new GameUtil(); + word.setText(gameUtil.getUndescores().toString().replace(",", "")); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -76,10 +74,6 @@ public class GameActivity extends AppCompatActivity { public void onClick(DialogInterface dialog, int which) { switch (which){ case DialogInterface.BUTTON_POSITIVE: - //Close Connection - log("Closing connection"); - co.closeConnection(); - //send to main menu finish(); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); @@ -88,6 +82,14 @@ public class GameActivity extends AppCompatActivity { } }; + //Return Builder + builder = new AlertDialog.Builder(context); + + builder.setMessage("Do you really want to quit the game ?") + .setPositiveButton("Yes", dialogClickListener) + .setNegativeButton("No", dialogClickListener); + //Return Builder + @@ -97,11 +99,58 @@ public class GameActivity extends AppCompatActivity { input.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - EditText txt = ((EditText) v); - String text = txt.getText().toString().toLowerCase(); + EditText editText = ((EditText) v); + String word = editText.getText().toString().toLowerCase(); + + switch (word.length()) { + case 0: + Toast.makeText(MainActivity.getInstance(), "Please type something!", Toast.LENGTH_LONG).show(); + break; + + case 1: + if(letters.contains(word)) { // Check si lettre déjà noté + Toast.makeText(MainActivity.getInstance(), "letter already used!", Toast.LENGTH_LONG).show(); + editText.setText(""); + break; + } + Boolean res = gameUtil.checkLetter(word); + if(res && gameUtil.hasWon()) { // check si joueur vainqueur + + win(); + break; + } else { // si joueur non vainqueur + letters.add(word); + ((TextView) findViewById(R.id.letters)).setText(letters.toString().toLowerCase()); + if(res) { + Toast.makeText(MainActivity.getInstance(), "Correct Letter!", Toast.LENGTH_LONG).show(); + + ((TextView) findViewById(R.id.word)).setText(gameUtil.getUndescores().toString().replace(",", "")); + new Command().execute("AFFICHER|"+gameUtil.getUndescores().toString().replace(",", "")); + } else { + Toast.makeText(MainActivity.getInstance(), "Incorrect letter!", Toast.LENGTH_LONG).show(); + //update image + } + editText.setText(""); + + log("You used : " + word); + break; + } + + default: + if(gameUtil.checkWord(word)) { + win(); + } else { + Toast.makeText(MainActivity.getInstance(), "Incorrect word!", Toast.LENGTH_LONG).show(); + //update image + } + break; + } - if(text.length() == 1) { //is letter + + +/* + if(word.length() == 1) { //is letter if(letters.contains(text)) { log("Letter : " + text + "Already in"); } else { @@ -154,7 +203,7 @@ public class GameActivity extends AppCompatActivity { log(letters.toString()); } //Send Letter - txt.setText("", TextView.BufferType.EDITABLE); + editText.setText("", TextView.BufferType.EDITABLE); } } else if(text.length() > 1) { log("Word : " + text); @@ -163,9 +212,9 @@ public class GameActivity extends AppCompatActivity { temp.put("letter", text); co.sendData(temp); - txt.setText("", TextView.BufferType.EDITABLE); + editText.setText("", TextView.BufferType.EDITABLE); - } + }*/ return false; } }); @@ -176,13 +225,7 @@ public class GameActivity extends AppCompatActivity { - //Return Builder - builder = new AlertDialog.Builder(context); - builder.setMessage("Do you really want to quit your game ?") - .setPositiveButton("Yes", dialogClickListener) - .setNegativeButton("No", dialogClickListener); - //Return Builder @@ -202,7 +245,39 @@ public class GameActivity extends AppCompatActivity { } private void log(String message) { + Log.v("GameActivity", message); TextView logs = findViewById(R.id.logs); logs.setText(logs.getText().toString() + "\n" + message); } + + private void win() { + new Command().execute("AFFICHER|You won !!!"); + DialogInterface.OnClickListener clickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which){ + case DialogInterface.BUTTON_POSITIVE: + //Close Connection + Intent intent = getIntent(); + overridePendingTransition(0, 0); + intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + finish(); + + overridePendingTransition(0, 0); + startActivity(intent); + break; + default: + finish(); + overridePendingTransition(R.anim.fade_in, R.anim.fade_out); + break; + } + } + }; + + new AlertDialog.Builder(context) + .setMessage("You won!") + .setPositiveButton("Restart", clickListener) + .setNegativeButton("Quit", clickListener) + .show(); + } } diff --git a/app/src/main/java/net/DeltaWings/Android/Hangman/MainActivity.java b/app/src/main/java/net/DeltaWings/Android/Hangman/MainActivity.java index f3514c5..98a11cf 100644 --- a/app/src/main/java/net/DeltaWings/Android/Hangman/MainActivity.java +++ b/app/src/main/java/net/DeltaWings/Android/Hangman/MainActivity.java @@ -5,22 +5,17 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; -import android.os.StrictMode; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; import android.widget.Toast; import net.DeltaWings.Android.Hangman.Util.Command; import net.DeltaWings.Android.Hangman.settings.SettingActivity; -import java.io.IOException; - public class MainActivity extends AppCompatActivity { public static MainActivity instance; @@ -51,16 +46,12 @@ public class MainActivity extends AppCompatActivity { instance = this; super.onCreate(savedInstanceState); - - StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); - StrictMode.setThreadPolicy(policy); - setTheme(this); setContentView(R.layout.activity_main); //Multiplayer button - findViewById(R.id.multiplayerButton).setOnClickListener(new View.OnClickListener() { + findViewById(R.id.singleplayerButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(instance, GameActivity.class)); @@ -68,7 +59,7 @@ public class MainActivity extends AppCompatActivity { } }); - findViewById(R.id.singleplayerButton).setOnClickListener(new View.OnClickListener() { + findViewById(R.id.testsButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Command().execute("AFFICHER|test"); @@ -104,7 +95,7 @@ public class MainActivity extends AppCompatActivity { } } - public static void putPref(String key, String value, Context context) { + public static void setPref(String key, String value, Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = prefs.edit(); editor.putString(key, value); diff --git a/app/src/main/java/net/DeltaWings/Android/Hangman/Util/Command.java b/app/src/main/java/net/DeltaWings/Android/Hangman/Util/Command.java index bc343f9..b170f3f 100644 --- a/app/src/main/java/net/DeltaWings/Android/Hangman/Util/Command.java +++ b/app/src/main/java/net/DeltaWings/Android/Hangman/Util/Command.java @@ -1,13 +1,12 @@ package net.DeltaWings.Android.Hangman.Util; -import java.io.IOException; -import java.net.InetAddress; -import java.net.Socket; import android.os.AsyncTask; -import java.net.UnknownHostException; import java.io.DataInputStream; import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.UnknownHostException; public class Command extends AsyncTask { @@ -46,24 +45,18 @@ public class Command extends AsyncTask { } //---------------------------------------------------------------------------------------------- - public void envoyer_commande( String c ) throws IOException, ClassNotFoundException, InterruptedException { + public void envoyer_commande(String c) throws IOException, ClassNotFoundException, InterruptedException { System.out.println("\nDEBUG:\tenvoyer_commande"); - String message_recu; - byte[] ipAddr = new byte[]{(byte)192,(byte)168,(byte)1,(byte)103}; - InetAddress host = InetAddress.getByAddress(ipAddr); - int port = Integer.parseInt("53000"); - Socket socket = null; DataOutputStream dataOutputStream = null; DataInputStream dataInputStream = null; try { //establish socket connection to server - socket = new Socket("192.168.1.2", 53000); + socket = new Socket("192.168.0.2", 53000); dataOutputStream = new DataOutputStream(socket.getOutputStream()); - //dataInputStream = new DataInputStream(socket.getInputStream()); System.out.println("\nDEBUG:\tConnexion ok"); System.out.println("\nDEBUG:\tdebut envoi"); @@ -71,8 +64,6 @@ public class Command extends AsyncTask { System.out.println("\nDEBUG:\tfinenvoi"); System.out.println("\nDEBUG:\tdebut reception"); - //message_recu = dataInputStream.readLine(); - //System.out.println("\nDEBUG:\tmessage recu = " + message_recu); System.out.println("\nDEBUG:\tfin réception"); } catch (UnknownHostException e) { diff --git a/app/src/main/java/net/DeltaWings/Android/Hangman/Util/ConnectionUtil.java b/app/src/main/java/net/DeltaWings/Android/Hangman/Util/ConnectionUtil.java deleted file mode 100644 index 09e5d3d..0000000 --- a/app/src/main/java/net/DeltaWings/Android/Hangman/Util/ConnectionUtil.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.DeltaWings.Android.Hangman.Util; - -import net.DeltaWings.Android.Hangman.MainActivity; - -import java.util.HashMap; - -public class ConnectionUtil { - - static public ConnectionUtil connection; - - private String ip = null; - private String userID = null; - private String jsp = "jsp"; - public int percent = 0; - private boolean single = MainActivity.getInstance().single; - private GameUtil gameUtil = null; - - public ConnectionUtil() { - //check gamemode - if(single) { - gameUtil = new GameUtil(); - } else { - //init connection - //send user name, generated userID - } - - - } - - public void closeConnection() { - if(single) { - gameUtil = null; - } else { - //send null username and null userID - } - - } - - public boolean sendData(HashMap query) { - if(single) { - System.out.println(query); - return gameUtil.datasReader(query); - } - else { - System.out.println(query); - } - return false; - } - - public HashMap getDatas() { - if(single) { - return gameUtil.datasSender(); - } else { - - } - return null; - } -} - diff --git a/app/src/main/java/net/DeltaWings/Android/Hangman/Util/GameUtil.java b/app/src/main/java/net/DeltaWings/Android/Hangman/Util/GameUtil.java index 70c925d..1f67898 100644 --- a/app/src/main/java/net/DeltaWings/Android/Hangman/Util/GameUtil.java +++ b/app/src/main/java/net/DeltaWings/Android/Hangman/Util/GameUtil.java @@ -1,37 +1,17 @@ package net.DeltaWings.Android.Hangman.Util; -import android.os.Environment; -import android.text.TextUtils; import android.util.Log; -import android.util.Xml; -import android.widget.Toast; -import net.DeltaWings.Android.Hangman.MainActivity; - -import org.json.JSONException; import org.json.JSONObject; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; import java.io.BufferedReader; -import java.io.File; +import java.io.FileNotFoundException; import java.io.FileReader; -import java.net.URL; -import java.net.URLEncoder; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Paths; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Objects; import java.util.Random; -import java.util.Scanner; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; public class GameUtil { @@ -48,16 +28,43 @@ public class GameUtil { String s = "https://raw.githubusercontent.com/dwyl/english-words/master/words_dictionary.json"; - + String r = ""; + StringBuilder sb = new StringBuilder(); + ArrayList list = new ArrayList<>(); try { + BufferedReader br = new BufferedReader(new FileReader("/sdcard/list.txt")); + + String line = br.readLine(); + + while (line != null) { + list.add(line); + sb.append(line); + sb.append(System.lineSeparator()); + line = br.readLine(); + } + r = sb.toString(); + br.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + //Log.v(tag, list.toString()); + word = list.get(randInt(0, list.size()-1)); + Log.v(tag, word); + + /*try { + URI uri = new URI("/sdcard/list.txt"); byte[] encoded = Files.readAllBytes(Paths.get("/sdcard/list.txt")); + Files.readAllLines(Paths.get(uri)); String[] strings = new String(encoded, Charset.defaultCharset()).split("\r"); Log.v(tag, strings[randInt(0, strings.length-1)]); word = strings[randInt(0, strings.length-1)]; } catch (Exception e) { //ntm - } + }*/ @@ -70,55 +77,31 @@ public class GameUtil { Log.v(tag, res.toString()); } - public boolean datasReader(HashMap datas) { - returning.clear(); - String query = datas.get("query"); - if(Objects.equals(query, "letter")) { - String letter = datas.get("letter"); - if(word.contains(letter)) { - Log.v(tag, "2"); - for (int i = 0; i < word.length(); i++) { - if(Objects.equals(String.valueOf(word.charAt(i)), letter)) { - res.set(i, letter); - } + public boolean checkLetter(String letter) { + if(this.word.contains(letter)) { + Log.v(tag, "Letter Found !"); + for (int i = 0; i < this.word.length(); i++) { + if(Objects.equals(String.valueOf(this.word.charAt(i)), letter)) { + res.set(i, letter); } - if(!res.contains("_")) { - //winner - returning.put("status", "won"); - } - } else { - - } - letters.add(letter); - returning.put("newWord", TextUtils.join("", res)); - returning.put("lettersUsed", TextUtils.join(",", letters)); - } else if (Objects.equals(query, "word")) { - if(Objects.equals(datas.get("word"), word)) { - returning.put("status", "won"); - } + return true; } - Log.v(tag, returning.toString()); - //Toast.makeText(MainActivity.getInstance(), returning.get("newWord"), Toast.LENGTH_SHORT).show(); - return true; + return false; } - public HashMap datasSender() { - return returning; + public boolean checkWord(String word) { + if(Objects.equals(word, this.word)) { + for (int i = 0; i < word.length(); i++) { + res.set(i, word.split("")[i]); + } + return true; + } + return false; } - public static String generateRandomWords() - { - String randomStrings; - Random random = new Random(); - char[] word = new char[random.nextInt(8)+3]; // words of length 3 through 10. (1 and 2 letter words are boring.) - for(int j = 0; j < word.length; j++) - { - word[j] = (char)('a' + random.nextInt(26)); - } - randomStrings = new String(word); - - return randomStrings; + public boolean hasWon() { + return !res.contains("_"); } public static int randInt(int min, int max) { @@ -126,18 +109,8 @@ public class GameUtil { int randomNum = rand.nextInt((max - min) + 1) + min; return randomNum; } -} -/* -Trames sended to app : - status = status de la game (won, Integer of tries left, lost) - lettersUsed = String of letters used (,) - newWord = _________ - - -Trames sended from app: - word = word || letter = letter - userId = userId - username = username - ip = ip - */ \ No newline at end of file + public ArrayList getUndescores() { + return res; + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index cd7f440..d61b19a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -49,7 +49,7 @@ tools:layout_editor_absoluteX="142dp"/>