mmayoub

School, Game 15 numbers, 15.04.18+22.04.18+06.05.18

Apr 15th, 2018
126
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. activity_main.xml
  2. -----------------
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:orientation="vertical">
  8.  
  9.     <LinearLayout
  10.         android:layout_width="match_parent"
  11.         android:layout_height="wrap_content"
  12.         android:orientation="horizontal">
  13.  
  14.         <Button
  15.             android:id="@+id/btnNew"
  16.             android:layout_width="wrap_content"
  17.             android:layout_height="wrap_content"
  18.             android:text="New"
  19.             android:textSize="30sp" />
  20.  
  21.         <TextView
  22.             android:id="@+id/tvCounter"
  23.             android:layout_width="match_parent"
  24.             android:layout_height="wrap_content"
  25.             android:layout_weight="1"
  26.             android:gravity="center"
  27.             android:text="MyText"
  28.             android:textSize="30sp"
  29.             tools:background="@android:color/holo_blue_bright" />
  30.  
  31.         <Button
  32.             android:id="@+id/btnSave"
  33.             android:layout_width="wrap_content"
  34.             android:layout_height="wrap_content"
  35.             android:text="Save"
  36.             android:textSize="30sp" />
  37.     </LinearLayout>
  38.  
  39.     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  40.         android:layout_width="match_parent"
  41.         android:layout_height="match_parent"
  42.         android:layout_weight="1"
  43.         android:orientation="horizontal">
  44.  
  45.         <Button
  46.             android:id="@+id/btn1"
  47.             android:layout_width="match_parent"
  48.             android:layout_height="match_parent"
  49.             android:layout_weight="1"
  50.             android:text="B1"
  51.             android:textSize="40sp" />
  52.  
  53.         <Button
  54.             android:id="@+id/btn2"
  55.             android:layout_width="match_parent"
  56.  
  57.             android:layout_height="match_parent"
  58.             android:layout_weight="1"
  59.             android:text="B2"
  60.  
  61.             android:textSize="40sp" />
  62.  
  63.         <Button
  64.             android:id="@+id/btn3"
  65.             android:layout_width="match_parent"
  66.  
  67.             android:layout_height="match_parent"
  68.             android:layout_weight="1"
  69.             android:text="B3"
  70.  
  71.             android:textSize="40sp" />
  72.  
  73.         <Button
  74.             android:id="@+id/btn4"
  75.             android:layout_width="match_parent"
  76.  
  77.             android:layout_height="match_parent"
  78.             android:layout_weight="1"
  79.             android:text="B4"
  80.  
  81.             android:textSize="40sp" />
  82.     </LinearLayout>
  83.  
  84.     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  85.         android:layout_width="match_parent"
  86.         android:layout_height="match_parent"
  87.         android:layout_weight="1"
  88.         android:orientation="horizontal">
  89.  
  90.         <Button
  91.             android:id="@+id/btn5"
  92.             android:layout_width="match_parent"
  93.  
  94.             android:layout_height="match_parent"
  95.             android:layout_weight="1"
  96.             android:text="B1"
  97.             android:textSize="40sp" />
  98.  
  99.         <Button
  100.             android:id="@+id/btn6"
  101.             android:layout_width="match_parent"
  102.  
  103.             android:layout_height="match_parent"
  104.             android:layout_weight="1"
  105.             android:text="B2"
  106.  
  107.             android:textSize="40sp" />
  108.  
  109.         <Button
  110.             android:id="@+id/btn7"
  111.             android:layout_width="match_parent"
  112.  
  113.             android:layout_height="match_parent"
  114.             android:layout_weight="1"
  115.             android:text="B3"
  116.  
  117.             android:textSize="40sp" />
  118.  
  119.         <Button
  120.             android:id="@+id/btn8"
  121.             android:layout_width="match_parent"
  122.  
  123.             android:layout_height="match_parent"
  124.             android:layout_weight="1"
  125.             android:text="B4"
  126.  
  127.             android:textSize="40sp" />
  128.     </LinearLayout>
  129.  
  130.     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  131.         android:layout_width="match_parent"
  132.         android:layout_height="match_parent"
  133.         android:layout_weight="1"
  134.         android:orientation="horizontal">
  135.  
  136.         <Button
  137.             android:id="@+id/btn9"
  138.             android:layout_width="match_parent"
  139.  
  140.             android:layout_height="match_parent"
  141.             android:layout_weight="1"
  142.             android:text="B1"
  143.             android:textSize="40sp" />
  144.  
  145.         <Button
  146.             android:id="@+id/btn10"
  147.             android:layout_width="match_parent"
  148.  
  149.             android:layout_height="match_parent"
  150.             android:layout_weight="1"
  151.             android:text="B2"
  152.  
  153.             android:textSize="40sp" />
  154.  
  155.         <Button
  156.             android:id="@+id/btn11"
  157.             android:layout_width="match_parent"
  158.  
  159.             android:layout_height="match_parent"
  160.             android:layout_weight="1"
  161.             android:text="B3"
  162.  
  163.             android:textSize="40sp" />
  164.  
  165.         <Button
  166.             android:id="@+id/btn12"
  167.             android:layout_width="match_parent"
  168.  
  169.             android:layout_height="match_parent"
  170.             android:layout_weight="1"
  171.             android:text="B4"
  172.  
  173.             android:textSize="40sp" />
  174.     </LinearLayout>
  175.  
  176.     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  177.         android:layout_width="match_parent"
  178.         android:layout_height="match_parent"
  179.         android:layout_weight="1"
  180.         android:orientation="horizontal">
  181.  
  182.         <Button
  183.             android:id="@+id/btn13"
  184.             android:layout_width="match_parent"
  185.  
  186.             android:layout_height="match_parent"
  187.             android:layout_weight="1"
  188.             android:text="B1"
  189.             android:textSize="40sp" />
  190.  
  191.         <Button
  192.             android:id="@+id/btn14"
  193.             android:layout_width="match_parent"
  194.  
  195.             android:layout_height="match_parent"
  196.             android:layout_weight="1"
  197.             android:text="B2"
  198.  
  199.             android:textSize="40sp" />
  200.  
  201.         <Button
  202.             android:id="@+id/btn15"
  203.             android:layout_width="match_parent"
  204.  
  205.             android:layout_height="match_parent"
  206.             android:layout_weight="1"
  207.             android:text="B3"
  208.  
  209.             android:textSize="40sp" />
  210.  
  211.         <Button
  212.             android:id="@+id/btn16"
  213.             android:layout_width="match_parent"
  214.  
  215.             android:layout_height="match_parent"
  216.             android:layout_weight="1"
  217.             android:text="B4"
  218.  
  219.             android:textSize="40sp" />
  220.     </LinearLayout>
  221.  
  222. </LinearLayout>
  223.  
  224.  
  225. MainActivity.java
  226. -----------------
  227. package com.example.mohamadpc.mygame;
  228.  
  229. import android.content.Context;
  230. import android.content.SharedPreferences;
  231. import android.os.Bundle;
  232. import android.support.v7.app.AppCompatActivity;
  233. import android.view.View;
  234. import android.widget.Button;
  235. import android.widget.TextView;
  236. import android.widget.Toast;
  237.  
  238. import java.util.Random;
  239.  
  240. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  241.     Button[] myBtn;
  242.     TextView tvCounter;
  243.     int emptyIndex;
  244.     int counter;
  245.  
  246.     @Override
  247.     protected void onCreate(Bundle savedInstanceState) {
  248.         super.onCreate(savedInstanceState);
  249.         setContentView(R.layout.activity_main);
  250.  
  251.         tvCounter = findViewById(R.id.tvCounter);
  252.  
  253.  
  254.         myBtn = new Button[16];
  255.         for (int i = 0; i < 16; i++) {
  256.             String btnName = "btn" + (i + 1);
  257.             int btnId = getResources().getIdentifier(btnName, "id", getPackageName());
  258.             myBtn[i] = findViewById(btnId);
  259.             myBtn[i].setOnClickListener(this);
  260.         }
  261.  
  262.         if (loadGame() == false) {
  263.             Toast.makeText(this, "New Game", Toast.LENGTH_LONG).show();
  264.             newGame();
  265.         }
  266.  
  267.         findViewById(R.id.btnSave).setOnClickListener(this);
  268.         findViewById(R.id.btnNew).setOnClickListener(this);
  269.  
  270.     }
  271.  
  272.     private void shuffle(int n) {
  273.         Random rnd = new Random();
  274.  
  275.         for (int i = 0; i < n; i++) {
  276.             int b1 = rnd.nextInt(16);
  277.             int b2 = rnd.nextInt(16);
  278.  
  279.             String text = myBtn[b1].getText().toString();
  280.             myBtn[b1].setText(myBtn[b2].getText().toString());
  281.             myBtn[b2].setText(text);
  282.  
  283.             if (b1 == emptyIndex) {
  284.                 emptyIndex = b2;
  285.             } else if (b2 == emptyIndex) {
  286.                 emptyIndex = b1;
  287.             }
  288.         }
  289.     }
  290.  
  291.     private boolean gameIsOver() {
  292.         for (int i = 0; i < 15; i++) {
  293.             if (!myBtn[i].getText().toString().equals(i + 1 + "")) {
  294.                 return false;
  295.             }
  296.         }
  297.  
  298.         return true;
  299.     }
  300.  
  301.     @Override
  302.     public void onClick(View v) {
  303.         if (v.getId() == R.id.btnSave) {
  304.             //save the game
  305.             saveGame();
  306.         } else if (v.getId() == R.id.btnNew) {
  307.             newGame();
  308.         } else {
  309.             int btnIndex = getButtonIndex(v.getId());
  310.             if (canMove(btnIndex, emptyIndex)) {
  311.                 String text = myBtn[btnIndex].getText().toString();
  312.                 myBtn[btnIndex].setText("");
  313.                 myBtn[emptyIndex].setText(text);
  314.  
  315.                 emptyIndex = btnIndex;
  316.  
  317.                 counter += 1;
  318.                 tvCounter.setText("Moves : " + counter);
  319.  
  320.                 if (gameIsOver()) {
  321.                     Toast.makeText(this, "Game Is Over", Toast.LENGTH_LONG).show();
  322.                     finish();
  323.                 }
  324.             }
  325.         }
  326.     }
  327.  
  328.     private void newGame() {
  329.         counter = 0;
  330.         tvCounter.setText("Moves: " + counter);
  331.  
  332.         for (int i = 0; i < 16; i += 1) {
  333.             myBtn[i].setText(i + 1 + "");
  334.         }
  335.  
  336.         myBtn[15].setText("");
  337.         emptyIndex = 15;
  338.  
  339.         shuffle(10);
  340.     }
  341.  
  342.     private void saveGame() {
  343.         Context context = getApplicationContext();
  344.         SharedPreferences sp = context.getSharedPreferences("saved_game", Context.MODE_PRIVATE);
  345.  
  346.         // start editing
  347.         SharedPreferences.Editor editor = sp.edit();
  348.  
  349.         // edit values to be saved
  350.         editor.putInt("MovesCounter", counter);
  351.         for (int i = 0; i < 16; i += 1) {
  352.             editor.putString("Key" + i, myBtn[i].getText().toString());
  353.         }
  354.  
  355.         // save all changes
  356.         editor.commit();
  357.         Toast.makeText(context, "Game has been saved!", Toast.LENGTH_LONG).show();
  358.     }
  359.  
  360.     public boolean loadGame() {
  361.         Context context = getApplicationContext();
  362.         SharedPreferences sp = context.getSharedPreferences("saved_game", Context.MODE_PRIVATE);
  363.  
  364.         // get saved counter
  365.         counter = sp.getInt("MovesCounter", -1);
  366.         if (counter == -1) {
  367.             return false;
  368.         }
  369.  
  370.         tvCounter.setText(counter + "");
  371.         for (int i = 0; i < 16; i++) {
  372.             String savedText = sp.getString("Key" + i, "");
  373.             myBtn[i].setText(savedText);
  374.  
  375.             if (savedText.equals("")) {
  376.                 emptyIndex = i;
  377.             }
  378.         }
  379.         return true;
  380.     }
  381.  
  382.     private boolean canMove(int btnIndex, int emptyIndex) {
  383.         if (btnIndex == emptyIndex + 1 && btnIndex / 4 == emptyIndex / 4) {
  384.             // move number to the left
  385.             return true;
  386.         } else if (btnIndex == emptyIndex - 1 && btnIndex / 4 == emptyIndex / 4) {
  387.             // move number to the right
  388.             return true;
  389.         } else if (btnIndex == emptyIndex + 4) {
  390.             // move number up
  391.             return true;
  392.         } else if (btnIndex == emptyIndex - 4) {
  393.             // move number down
  394.             return true;
  395.         }
  396.  
  397.         return false;
  398.     }
  399.  
  400.     private int getButtonIndex(int id) {
  401.         for (int i = 0; i < 16; i++) {
  402.             if (myBtn[i].getId() == id) {
  403.                 return i;
  404.             }
  405.         }
  406.  
  407.         return -1;
  408.     }
  409. }
RAW Paste Data