AmidamaruZXC

Untitled

May 19th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 29.38 KB | None | 0 0
  1. public class GameActivity extends AppCompatActivity {
  2.  
  3.     private GridLayout scrabble;
  4.     private String selectedLetter;
  5.     private int selectedLetterId = -1;
  6.     private String letters = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
  7.     private int[] lettersCount = {8, 2, 4, 2, 4, 8, 1, 1, 2, 5, 1, 4, 4, 3, 5, 10, 4, 5, 5, 5, 4, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2};
  8.     private int[] scores = {1, 3, 1, 3, 2, 1, 3, 5, 5, 1, 4, 2, 2, 2, 1, 1, 2, 1, 1, 1, 2, 10, 5, 5, 5, 8, 10, 10, 4, 3, 8, 8, 3};
  9.     private ArrayList<Integer> selectedButtons = new ArrayList<>();
  10.     private int[] buttonsIds = {R.id.letter1, R.id.letter2, R.id.letter3, R.id.letter4,
  11.             R.id.letter5, R.id.letter6, R.id.letter7};
  12.     private boolean isFirstMove = true;
  13.     private ArrayList<GridLetter> gridLetters = new ArrayList<>();
  14.     private ArrayList<GridLetter> gridLettersTemp = new ArrayList<>();
  15.     private ArrayList<String> words = new ArrayList<>();
  16.     private String sessionId;
  17.     private AlertDialog alertDialog;
  18.     private DatabaseReference mDatabase;
  19.     private String userName;
  20.     private long userId;
  21.     private ArrayList<User> users = new ArrayList<>();
  22.     private int lettersLeft = 104;
  23.     private int passes = 0;
  24.     private boolean gameOver = false;
  25.     private User currentUser;
  26.  
  27.     @Override
  28.     protected void onCreate(Bundle savedInstanceState) {
  29.         super.onCreate(savedInstanceState);
  30.         setContentView(R.layout.activity_game);
  31.  
  32.         sessionId = getIntent().getStringExtra("sessionId");
  33.         userName = getIntent().getStringExtra("userName");
  34.  
  35.         View dialogView = LayoutInflater.from(this).inflate(R.layout.dialog_wait_users, null);
  36.         AlertDialog.Builder dialog = new AlertDialog.Builder(this);
  37.         dialog.setView(dialogView);
  38.         dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
  39.             @Override
  40.             public void onCancel(DialogInterface dialog) {
  41.                 AlertDialog.Builder builder = new AlertDialog.Builder(GameActivity.this);
  42.                 builder.setMessage(R.string.session_exit);
  43.                 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
  44.                     @Override
  45.                     public void onClick(DialogInterface dialog, int which) {
  46.                         exitSession();
  47.                     }
  48.                 });
  49.                 builder.setNegativeButton("Отмена", new DialogInterface.OnClickListener() {
  50.                     @Override
  51.                     public void onClick(DialogInterface dialog, int which) {
  52.                         dialog.dismiss();
  53.                         alertDialog.show();
  54.                     }
  55.                 });
  56.                 builder.show();
  57.             }
  58.         });
  59.         alertDialog = dialog.create();
  60.  
  61.         getUsers();
  62.  
  63.         initUI();
  64.  
  65.     }
  66.  
  67.     private void getUsers() {
  68.         mDatabase = FirebaseDatabase.getInstance().getReference();
  69.         mDatabase.child("sessions").child(sessionId).child("users")
  70.                 .addListenerForSingleValueEvent(new ValueEventListener() {
  71.                     @Override
  72.                     public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  73.                         userId = 0;
  74.                         for (DataSnapshot users : dataSnapshot.getChildren()) {
  75.                             User user = users.getValue(User.class);
  76.                             if (user != null) {
  77.                                 if (user.getId() >= userId) {
  78.                                     userId = user.getId() + 1;
  79.                                 }
  80.                             }
  81.                         }
  82.                         User userFb = new User();
  83.                         userFb.setId(userId);
  84.                         userFb.setName(userName);
  85.                         userFb.setScore(0);
  86.                         userFb.setPasses(0);
  87.                         if (userId == 0) {
  88.                             userFb.setUserMove(0);
  89.                         } else {
  90.                             userFb.setUserMove(1);
  91.                         }
  92.                         mDatabase.child("sessions").child(sessionId).child("users").child(String.valueOf(userId)).setValue(userFb);
  93.                         Intent logOutService = new Intent(GameActivity.this, LogOutService.class);
  94.                         logOutService.putExtra("sessionId", sessionId);
  95.                         logOutService.putExtra("userId", String.valueOf(userId));
  96.                         startService(logOutService);
  97.                         waitUsers();
  98.                     }
  99.  
  100.                     @Override
  101.                     public void onCancelled(@NonNull DatabaseError databaseError) {
  102.  
  103.                     }
  104.                 });
  105.     }
  106.  
  107.     private void waitUsers() {
  108.         mDatabase.child("sessions").child(sessionId).child("users").addValueEventListener(new ValueEventListener() {
  109.             @Override
  110.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  111.                 long userCount = dataSnapshot.getChildrenCount();
  112.                 if (userCount > 1) {
  113.                     users.clear();
  114.                     for (DataSnapshot user : dataSnapshot.getChildren()) {
  115.                         User userFb = user.getValue(User.class);
  116.                         users.add(userFb);
  117.                         if (userFb.getName().equals(userName)) {
  118.                             currentUser = userFb;
  119.                             if (userFb.getUserMove() == 1) {
  120.                                 try {
  121.                                     alertDialog.show();
  122.                                 } catch (Exception e) {
  123.                                     e.printStackTrace();
  124.                                 }
  125.                             } else {
  126.                                 try {
  127.                                     alertDialog.dismiss();
  128.                                 } catch (Exception e) {
  129.                                     e.printStackTrace();
  130.                                 }
  131.                             }
  132.                         }
  133.                     }
  134.                     setUsers();
  135.                 } else {
  136.                     if (!gameOver) {
  137.                         try {
  138.                             alertDialog.show();
  139.                         } catch (Exception e) {
  140.                             e.printStackTrace();
  141.                         }
  142.                     }
  143.                 }
  144.             }
  145.  
  146.             @Override
  147.             public void onCancelled(@NonNull DatabaseError databaseError) {
  148.  
  149.             }
  150.         });
  151.     }
  152.  
  153.     private void setUsers() {
  154.         if (users.get(0).getPasses() == 2 && users.get(1).getPasses() == 2) {
  155.             endGame();
  156.         } else {
  157.             passes = currentUser.getPasses();
  158.             for (int i = 0; i < users.size(); i++) {
  159.                 if (users.get(i).getName().equals(userName)) {
  160.                     ((TextView) findViewById(R.id.txtName1)).setText(users.get(i).getName());
  161.                     ((TextView) findViewById(R.id.txtScore1)).setText(String.valueOf(users.get(i).getScore()));
  162.                 } else {
  163.                     ((TextView) findViewById(R.id.txtName2)).setText(users.get(i).getName());
  164.                     ((TextView) findViewById(R.id.txtScore2)).setText(String.valueOf(users.get(i).getScore()));
  165.                 }
  166.             }
  167.             getWordsSession();
  168.         }
  169.     }
  170.  
  171.     private void getWordsSession() {
  172.         mDatabase.child("sessions").child(sessionId).child("words").addValueEventListener(new ValueEventListener() {
  173.             @Override
  174.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  175.                 words.clear();
  176.                 for (DataSnapshot word : dataSnapshot.getChildren()) {
  177.                     words.add(word.getValue().toString());
  178.                 }
  179.                 if (words.size() > 0) {
  180.                     isFirstMove = false;
  181.                 }
  182.                 getLettersSession();
  183.             }
  184.  
  185.             @Override
  186.             public void onCancelled(@NonNull DatabaseError databaseError) {
  187.  
  188.             }
  189.         });
  190.     }
  191.  
  192.     private void getLettersSession() {
  193.         mDatabase.child("sessions").child(sessionId).child("letters").addValueEventListener(new ValueEventListener() {
  194.             @Override
  195.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  196.                 gridLetters.clear();
  197.                 for (DataSnapshot letter : dataSnapshot.getChildren()) {
  198.                     GridLetter gridLetter = letter.getValue(GridLetter.class);
  199.                     int position = gridLetter.getRow() * 15 + gridLetter.getCol();
  200.                     scrabble.getChildAt(position).setSelected(true);
  201.                     TextView txtLetter = scrabble.getChildAt(position)
  202.                             .findViewById(R.id.gridLetter);
  203.                     txtLetter.setText(gridLetter.getLetter());
  204.                     gridLetters.add(gridLetter);
  205.                 }
  206.             }
  207.  
  208.             @Override
  209.             public void onCancelled(@NonNull DatabaseError databaseError) {
  210.  
  211.             }
  212.         });
  213.     }
  214.  
  215.     private void initUI() {
  216.         initGrid();
  217.         setLetters();
  218.  
  219.         findViewById(R.id.btnSwap).setOnClickListener(new View.OnClickListener() {
  220.             @Override
  221.             public void onClick(View v) {
  222.                 passes++;
  223.                 setLetters();
  224.                 nextMove();
  225.             }
  226.         });
  227.  
  228.         findViewById(R.id.btnPass).setOnClickListener(new View.OnClickListener() {
  229.             @Override
  230.             public void onClick(View v) {
  231.                 passes++;
  232.                 nextMove();
  233.             }
  234.         });
  235.  
  236.         findViewById(R.id.btnSubmit).setOnClickListener(new View.OnClickListener() {
  237.             @Override
  238.             public void onClick(View v) {
  239.                 getWord();
  240.             }
  241.         });
  242.  
  243.         findViewById(R.id.btnBack).setOnClickListener(new View.OnClickListener() {
  244.             @Override
  245.             public void onClick(View v) {
  246.                 finish();
  247.             }
  248.         });
  249.     }
  250.  
  251.     private void initGrid() {
  252.         scrabble = findViewById(R.id.gridGame);
  253.         for (int row = 0; row < 15; row++) {
  254.             for (int col = 0; col < 15; col++) {
  255.                 final View newGrid;
  256.                 if (row == 7 && col == 7) {
  257.                     newGrid = LayoutInflater.from(this).inflate(R.layout.grid_item_center, scrabble, false);
  258.                 } else {
  259.                     newGrid = LayoutInflater.from(this).inflate(R.layout.grid_item, scrabble, false);
  260.                 }
  261.                 newGrid.setTag(R.string.row, row);
  262.                 newGrid.setTag(R.string.col, col);
  263.                 newGrid.setOnClickListener(new View.OnClickListener() {
  264.                     @Override
  265.                     public void onClick(View v) {
  266.                         if (selectedLetterId != -1) {
  267.                             GridLetter gridLetter = new GridLetter();
  268.                             gridLetter.setRow((int) v.getTag(R.string.row));
  269.                             gridLetter.setCol((int) v.getTag(R.string.col));
  270.                             gridLetter.setLetter(selectedLetter);
  271.                             boolean canceled = false;
  272.                             for (GridLetter gridLetter1 : gridLetters) {
  273.                                 if (gridLetter.getRow() == gridLetter1.getRow() && gridLetter.getCol() == gridLetter1.getCol()) {
  274.                                     canceled = true;
  275.                                     break;
  276.                                 }
  277.                             }
  278.                             for (GridLetter gridLetter1 : gridLettersTemp){
  279.                                 if (gridLetter.getRow() == gridLetter1.getRow() && gridLetter.getCol() == gridLetter1.getCol()) {
  280.                                     canceled = true;
  281.                                     break;
  282.                                 }
  283.                             }
  284.                             if (!canceled) {
  285.                                 findViewById(R.id.btnSwap).setEnabled(false);
  286.                                 gridLettersTemp.add(gridLetter);
  287.                                 v.setSelected(true);
  288.                                 ((TextView) newGrid.findViewById(R.id.gridLetter)).setText(selectedLetter);
  289.                                 (findViewById(buttonsIds[selectedLetterId])).setEnabled(false);
  290.                             } else {
  291.                                 cancelMove();
  292.                             }
  293.                             (findViewById(buttonsIds[selectedLetterId])).setSelected(false);
  294.                             selectedLetterId = -1;
  295.                         }
  296.                     }
  297.                 });
  298.                 scrabble.addView(newGrid);
  299.             }
  300.         }
  301.     }
  302.  
  303.     private void setLetters() {
  304.         if (selectedLetterId != -1) {
  305.             (findViewById(buttonsIds[selectedLetterId])).setSelected(false);
  306.         }
  307.  
  308.         char[] array = letters.toCharArray();
  309.         Random random = new Random();
  310.  
  311.         if (selectedButtons.size() > 0) {
  312.             for (int button : selectedButtons) {
  313.                 if (lettersLeft > 0) {
  314.                     lettersLeft--;
  315.                     int rInt = random.nextInt(array.length);
  316.                     while (lettersCount[rInt] == 0)
  317.                         rInt = random.nextInt(array.length);
  318.                     lettersCount[rInt]--;
  319.                     String letter = String.valueOf(array[rInt]);
  320.                     ((Button) findViewById(button)).setText(letter);
  321.                     (findViewById(button)).setEnabled(true);
  322.                     (findViewById(button)).setSelected(false);
  323.                     (findViewById(button)).setOnClickListener(new View.OnClickListener() {
  324.                         @Override
  325.                         public void onClick(View v) {
  326.                             if (v.isSelected()) {
  327.                                 v.setSelected(false);
  328.                                 selectedButtons.remove((Integer) v.getId());
  329.                                 selectedLetterId = -1;
  330.                             } else {
  331.                                 selectedLetter = ((Button) findViewById(buttonsIds[(int) v.getTag()])).getText().toString();
  332.                                 selectedLetterId = (int) v.getTag();
  333.                                 v.setSelected(true);
  334.                                 selectedButtons.add(v.getId());
  335.                             }
  336.                         }
  337.                     });
  338.                 } else {
  339.                     (findViewById(button)).setEnabled(true);
  340.                     (findViewById(button)).setSelected(false);
  341.                     Toast.makeText(this, "Больше нельзя заменить буквы", Toast.LENGTH_SHORT).show();
  342.                 }
  343.             }
  344.             selectedButtons.clear();
  345.         } else {
  346.             for (int i = 0; i < 7 - selectedButtons.size(); i++) {
  347.                 if (lettersLeft > 0) {
  348.                     lettersLeft--;
  349.                     int rInt = random.nextInt(array.length);
  350.                     while (lettersCount[rInt] == 0)
  351.                         rInt = random.nextInt(array.length);
  352.                     lettersCount[rInt]--;
  353.                     String letter = String.valueOf(array[rInt]);
  354.                     ((Button) findViewById(buttonsIds[i])).setText(letter);
  355.                     (findViewById(buttonsIds[i])).setTag(i);
  356.                     (findViewById(buttonsIds[i])).setEnabled(true);
  357.                     (findViewById(buttonsIds[i])).setSelected(false);
  358.                     (findViewById(buttonsIds[i])).setOnClickListener(new View.OnClickListener() {
  359.                         @Override
  360.                         public void onClick(View v) {
  361.                             if (v.isSelected()) {
  362.                                 v.setSelected(false);
  363.                                 selectedButtons.remove((Integer) v.getId());
  364.                                 selectedLetterId = -1;
  365.                             } else {
  366.                                 selectedLetter = ((Button) findViewById(buttonsIds[(int) v.getTag()])).getText().toString();
  367.                                 selectedLetterId = (int) v.getTag();
  368.                                 v.setSelected(true);
  369.                                 selectedButtons.add(v.getId());
  370.                             }
  371.                         }
  372.                     });
  373.                 } else {
  374.                     Toast.makeText(this, "Больше нельзя заменить буквы", Toast.LENGTH_SHORT).show();
  375.                 }
  376.             }
  377.         }
  378.         int buttonsLeft = 0;
  379.         for (int button : buttonsIds) {
  380.             if (findViewById(button).isEnabled()) {
  381.                 buttonsLeft++;
  382.             }
  383.         }
  384.         if (buttonsLeft == 0) {
  385.             mDatabase.child("sessions").child(sessionId).child("users")
  386.                     .child(String.valueOf(users.get(0).getId())).child("passes").setValue(2);
  387.             mDatabase.child("sessions").child(sessionId).child("users")
  388.                     .child(String.valueOf(users.get(1).getId())).child("passes").setValue(2);
  389.         }
  390.     }
  391.  
  392.     private boolean isCenter() {
  393.         boolean center = false;
  394.         for (GridLetter gridLetter : gridLettersTemp) {
  395.             if (gridLetter.getRow() == 7 && gridLetter.getCol() == 7) {
  396.                 center = true;
  397.                 break;
  398.             }
  399.         }
  400.         return center;
  401.     }
  402.  
  403.     private void getWord() {
  404.         if (gridLettersTemp != null && gridLettersTemp.size() > 0) {
  405.             if (isFirstMove) {
  406.                 if (isCenter()) {
  407.                     selectedLetterId = -1;
  408.                     getWordString();
  409.                 } else {
  410.                     cancelMove();
  411.                     Toast.makeText(this, "Первое слово должно проходить через центральную клетку",
  412.                             Toast.LENGTH_SHORT).show();
  413.                 }
  414.             } else {
  415.                 selectedLetterId = -1;
  416.                 getWordString();
  417.             }
  418.         }
  419.     }
  420.  
  421.     private void getWordString() {
  422.         int row1 = 0;
  423.         int col1 = 0;
  424.         int length1 = 0, length2 = 0;
  425.         String word_last = "";
  426.         boolean isCanceled = false;
  427.  
  428.         ArrayList<String> newWords = new ArrayList<>();
  429.  
  430.         for (GridLetter gridLetter : gridLettersTemp) {
  431.  
  432.             int row = gridLetter.getRow();
  433.             StringBuilder word;
  434.             for (int a = 0; a < gridLetter.getRow(); a++) {
  435.                 int position = row * 15 + gridLetter.getCol() - a;
  436.                 TextView txtLetter = scrabble.getChildAt(position)
  437.                         .findViewById(R.id.gridLetter);
  438.                 if (txtLetter.getText().toString().equals("")) {
  439.                     col1 = (int) scrabble.getChildAt(position)
  440.                             .getTag(R.string.col) + 1;
  441.                     break;
  442.                 }
  443.             }
  444.             word = new StringBuilder();
  445.             for (int a = 0; a < 15 - col1; a++) {
  446.                 int position = row * 15 + col1 + a;
  447.                 TextView txtLetter = scrabble.getChildAt(position)
  448.                         .findViewById(R.id.gridLetter);
  449.                 word.append(txtLetter.getText().toString());
  450.                 if (txtLetter.getText().toString().equals("")) {
  451.                     length1 = word.length();
  452.                     if (word.length() > 1 && !word.toString().equals(word_last)) {
  453.                         word_last = word.toString();
  454.                         if (!words.contains(word_last)) {
  455.                             newWords.add(word_last);
  456.                         } else {
  457.                             isCanceled = true;
  458.                             break;
  459.                         }
  460.                     }
  461.                     break;
  462.                 }
  463.             }
  464.  
  465.             word = new StringBuilder();
  466.  
  467.             int col = gridLetter.getCol();
  468.             for (int a = 0; a < gridLetter.getRow(); a++) {
  469.                 int position = row * 15 + col - 15 * a;
  470.                 TextView txtLetter = scrabble.getChildAt(position)
  471.                         .findViewById(R.id.gridLetter);
  472.                 if (txtLetter.getText().toString().equals("")) {
  473.                     row1 = (int) scrabble.getChildAt(position)
  474.                             .getTag(R.string.row) + 1;
  475.                     break;
  476.                 }
  477.             }
  478.             for (int a = 0; a < 15 - row1; a++) {
  479.                 int position = row1 * 15 + col + 15 * a;
  480.                 TextView txtLetter = scrabble.getChildAt(position)
  481.                         .findViewById(R.id.gridLetter);
  482.                 word.append(txtLetter.getText().toString());
  483.                 if (txtLetter.getText().toString().equals("")) {
  484.                     length2 = word.length();
  485.                     if (word.length() > 1 && !word.toString().equals(word_last)) {
  486.                         word_last = word.toString();
  487.                         if (!words.contains(word_last)) {
  488.                             newWords.add(word_last);
  489.                         } else {
  490.                             isCanceled = true;
  491.                             break;
  492.                         }
  493.                     }
  494.                     break;
  495.                 }
  496.             }
  497.         }
  498.  
  499.         if (isCanceled) {
  500.             cancelMove();
  501.         } else {
  502.             if (length1 == 1 && length2 == 1) {
  503.                 cancelMove();
  504.             } else {
  505.                 if (newWords.size() > 0) {
  506.                     boolean canceled = false;
  507.                     Set<String> words_final = new HashSet<>(newWords);
  508.                     for (String word : words_final) {
  509.                         if (!dictionary.contains(word.toLowerCase())) {
  510.                             canceled = true;
  511.                             break;
  512.                         }
  513.                     }
  514.                     if (!canceled) {
  515.                         alertDialog.show();
  516.  
  517.                         boolean cross = false;
  518.  
  519.                         if (!isFirstMove) {
  520.                             for (GridLetter gridLetter : gridLettersTemp) {
  521.                                 for (GridLetter gridLetter1 : gridLetters) {
  522.                                     if ((gridLetter.getRow() - 1 == gridLetter1.getRow()
  523.                                             || gridLetter.getRow() + 1 == gridLetter1.getRow())
  524.                                             && (gridLetter.getCol() - 1 == gridLetter1.getCol()
  525.                                             || gridLetter.getCol() + 1 == gridLetter1.getCol())) {
  526.                                         cross = true;
  527.                                         break;
  528.                                     }
  529.                                 }
  530.                             }
  531.                         } else {
  532.                             cross = true;
  533.                         }
  534.  
  535.                         if (cross) {
  536.                             setLetters();
  537.                             gridLetters.addAll(gridLettersTemp);
  538.  
  539.                             if (isFirstMove) isFirstMove = false;
  540.  
  541.                             int score = 0;
  542.                             for (String word : newWords) {
  543.                                 mDatabase.child("sessions").child(sessionId).child("words").push().setValue(word);
  544.                                 for (int i = 0; i < word.length(); i++) {
  545.                                     score += scores[letters.indexOf(word.charAt(i))];
  546.                                 }
  547.                             }
  548.  
  549.                             for (GridLetter gridLetter : gridLettersTemp) {
  550.                                 mDatabase.child("sessions").child(sessionId).child("letters").push().setValue(gridLetter);
  551.                             }
  552.                             gridLettersTemp.clear();
  553.                             mDatabase.child("sessions").child(sessionId).child("users").child(String.valueOf(userId))
  554.                                     .child("score").setValue(currentUser.getScore() + score);
  555.                             clearPasses();
  556.                         } else {
  557.                             alertDialog.dismiss();
  558.                             cancelMove();
  559.                         }
  560.  
  561.                     } else {
  562.                         alertDialog.dismiss();
  563.                         cancelMove();
  564.                     }
  565.                 }
  566.             }
  567.         }
  568.  
  569.         //gridLetters.clear();
  570.         //words.clear();
  571.     }
  572.  
  573.     private void cancelMove() {
  574.         for (int button : selectedButtons) {
  575.             (findViewById(button)).setEnabled(true);
  576.         }
  577.         for (GridLetter gridLetter : gridLettersTemp) {
  578.             scrabble.getChildAt(gridLetter.getRow() * 15 + gridLetter.getCol()).setSelected(false);
  579.             ((TextView) scrabble.getChildAt(gridLetter.getRow() * 15 + gridLetter.getCol())
  580.                     .findViewById(R.id.gridLetter)).setText("");
  581.         }
  582.         gridLetters.removeAll(gridLettersTemp);
  583.         gridLettersTemp.clear();
  584.         selectedButtons.clear();
  585.         findViewById(R.id.btnSwap).setEnabled(true);
  586.     }
  587.  
  588.     private void nextMove() {
  589.         findViewById(R.id.btnSwap).setEnabled(true);
  590.         mDatabase.child("sessions").child(sessionId).child("users")
  591.                 .child(String.valueOf(userId)).child("userMove").setValue(1);
  592.         mDatabase.child("sessions").child(sessionId).child("users")
  593.                 .child(String.valueOf(userId)).child("passes").setValue(passes);
  594.         if (users.indexOf(currentUser) == users.size() - 1) {
  595.             mDatabase.child("sessions").child(sessionId).child("users")
  596.                     .child(String.valueOf(users.get(0).getId())).child("userMove").setValue(0);
  597.         } else {
  598.             mDatabase.child("sessions").child(sessionId).child("users")
  599.                     .child(String.valueOf(users.get(users.indexOf(currentUser) + 1).getId())).child("userMove").setValue(0);
  600.         }
  601.     }
  602.  
  603.     private void clearPasses() {
  604.         passes = 0;
  605.         mDatabase.child("sessions").child(sessionId).child("users")
  606.                 .child(String.valueOf(users.get(0).getId())).child("passes").setValue(0);
  607.         mDatabase.child("sessions").child(sessionId).child("users")
  608.                 .child(String.valueOf(users.get(1).getId())).child("passes").setValue(0);
  609.         nextMove();
  610.     }
  611.  
  612.     private void endGame() {
  613.         findViewById(R.id.btnSubmit).setEnabled(false);
  614.         findViewById(R.id.btnPass).setEnabled(false);
  615.         findViewById(R.id.btnSwap).setEnabled(false);
  616.  
  617.         AlertDialog.Builder builder = new AlertDialog.Builder(GameActivity.this);
  618.         builder.setMessage(R.string.game_over);
  619.         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
  620.             @Override
  621.             public void onClick(DialogInterface dialog, int which) {
  622.                 exitSession();
  623.             }
  624.         });
  625.         builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
  626.             @Override
  627.             public void onCancel(DialogInterface dialog) {
  628.                 exitSession();
  629.             }
  630.         });
  631.         try {
  632.             builder.show();
  633.         } catch (Exception e) {
  634.             e.printStackTrace();
  635.         }
  636.         gameOver = true;
  637.     }
  638.  
  639.     private void exitSession() {
  640.         mDatabase.child("sessions").child(sessionId).child("users").child(String.valueOf(userId)).removeValue()
  641.                 .addOnSuccessListener(new OnSuccessListener<Void>() {
  642.                     @Override
  643.                     public void onSuccess(Void aVoid) {
  644.                         mDatabase.child("sessions").child(sessionId).child("users").addValueEventListener(new ValueEventListener() {
  645.                             @Override
  646.                             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  647.                                 if (dataSnapshot.getChildrenCount() == 0) {
  648.                                     mDatabase.child("sessions").child(sessionId).removeValue();
  649.                                 }
  650.                                 finish();
  651.                             }
  652.  
  653.                             @Override
  654.                             public void onCancelled(@NonNull DatabaseError databaseError) {
  655.  
  656.                             }
  657.                         });
  658.                     }
  659.                 });
  660.     }
  661.  
  662.     @Override
  663.     public void onBackPressed() {
  664.         if (users.size() == 2 && !alertDialog.isShowing()) {
  665.             AlertDialog.Builder builder = new AlertDialog.Builder(GameActivity.this);
  666.             builder.setMessage(R.string.session_exit);
  667.             builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
  668.                 @Override
  669.                 public void onClick(DialogInterface dialog, int which) {
  670.                     exitSession();
  671.                 }
  672.             });
  673.             builder.setNegativeButton("Отмена", new DialogInterface.OnClickListener() {
  674.                 @Override
  675.                 public void onClick(DialogInterface dialog, int which) {
  676.                     dialog.dismiss();
  677.                 }
  678.             });
  679.             builder.show();
  680.         } else {
  681.             super.onBackPressed();
  682.         }
  683.     }
  684.  
  685.     @Override
  686.     protected void onDestroy() {
  687.         exitSession();
  688.         super.onDestroy();
  689.     }
  690. }
Add Comment
Please, Sign In to add comment