рд╣рдо рдкрд╣рд▓рд╛ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╢реБрд░реБрдЖрдд рд╣реИред рдореЗрд░реЗ рдкрд╣рд▓реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реБрдП, рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрд╣рд╛рдВред



рдпрд╣ рд▓реЗрдЦ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдЪрдХреНрд░ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред рдПрдХ рд╕рд╛рде рд╣рдо рдПрдХ рд╕реНрдХреНрд░реАрди (рдПрдВрдбреНрд░реЙрдЗрдб рдУрдПрд╕ рдореЗрдВ рдЗрд╕реЗ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЧреЗрдо "рдЯрд┐рдХ рдЯреИрдХ рдЯреЛ" рд▓рд┐рдЦреЗрдВрдЧреЗред



рдЬрд╛рд╡рд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдиреБрднрд╡ рдХреА рдХрдореА Android рд╕реАрдЦрдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд╡рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ (рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдпрджрд┐ рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PHP рдореЗрдВ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдореВрд▓рднреВрдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдмрджрд▓реЗ рдореЗрдВ, рдЪреВрдВрдХрд┐ рдореИрдВ рдЬрд╛рд╡рд╛ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб "рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдЬрд╛рд╡рд╛ рд╡рд┐рдХрд╛рд╕ рдЖрдЪрд░рдг" рд▓реЗрдмрд▓ рд╣реЛрдиреЗ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред







рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛





рдореИрдВ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рд╕реВрдЪреАрдмрджреНрдз рдХрд░реВрдВрдЧрд╛ред рдЙрдирдореЗрдВ рд╕реЗ 3 рд╣реИрдВ:

  1. JDK - рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЯ ;
  2. рдПрдВрдбреНрд░реЙрдЗрдб рдПрд╕рдбреАрдХреЗ рдФрд░ рдПрд╡реАрдбреА рдкреНрд░рдмрдВрдзрдХ - рд╡рд┐рдХрд╛рд╕ + рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ ;
  3. Android рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд╕рд╛рде IDE:

    • рдЧреНрд░рд╣рдг + рдПрдбреАрдЯреА рдкреНрд▓рдЧрдЗрди;
    • рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбреАрдИрдП рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг;
    • Netbeans + nbandroid plugin;






рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдКрдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рднреА рдЖрдИрдбреАрдИ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЛ рд╕рд╣реА рдЪреБрдирдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рди рд╣реЛ)ред рдореИрдВ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд IDEs рдореЗрдВ рд╕реЗ рдПрдХ IntelliJ IDEA рдХрдореНрдпреБрдирд┐рдЯреА рдПрдбрд┐рд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред



рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рд╢реБрд░реВ рдХрд░рдирд╛



рдПрд╡реАрдбреА рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ (рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдПрд╕рдбреАрдХреЗ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ, рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред







рдбрд┐рд╡рд╛рдЗрд╕ рд╕реВрдЪреА









рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг



рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЙрддреНрд╕реБрдХ рд░рд╣рддрд╛ рд╣реВрдВ, рддреИрдпрд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд░рдирд╛, рдЬрд┐рд╕рдореЗрдВ рдЖрдИрдбреАрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реИрдХреНрд╖рд┐рдХ рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред



рддреЛ рдлрд╝рд╛рдЗрд▓-> рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛:



































F6 рдмрдЯрди рджрдмрд╛рдХрд░, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЗрдХрдЯреНрдард╛, рд╕рдВрдХрд▓рд┐рдд рдФрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛



рдкрд┐рдЫрд▓реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИред рдЪреВрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рдкреАрдЫрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХрд╛ рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВ: рдЬреАрди , рд░реЗрд╕ рдФрд░ src ред



рдЬреАрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╡реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред



Res рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЪрд┐рддреНрд░, рдкрд╛рда (рдЕрдиреБрд╡рд╛рдж рд╕рд╣рд┐рдд), рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди, рд▓реЗрдЖрдЙрдЯред



src рд╡рд╣ рдлреЛрд▓реНрдбрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рдо рдХрд╛ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓рдЧреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдпрд╣рд╛рдВ рд╕реНрдЯреЛрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВред



рдкрд╣рд▓реА рд▓рд╛рдЗрдиреЗрдВ





рдЬреИрд╕реЗ рд╣реА рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдХреНрд░реАрди) рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдСрдирдХреНрд░рд┐рдПрдЯ () рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред IDE рдиреЗ рдЗрд╕реЗ 2 рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рднрд░рд╛:

super.onCreate(savedInstanceState); setContentView(R.layout.main);
      
      





SetContentView рдореЗрдердб (this.setContentView рдХреЗ рд╕рдорддреБрд▓реНрдп) xml рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, xml- рд▓реЗрдЖрдЙрдЯ рдХреЛ "рд▓реЗрдЖрдЙрдЯ" рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЛ "рдЧрддрд┐рд╡рд┐рдзрд┐" рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрд╡реЗрджрди рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:

 <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_l" android:gravity="center" > </TableLayout>
      
      







TableLayout рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИред рдЖрдИрдбреА рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, TableLayout рдХреЛ id = main_l рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред FindViewById () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рджреГрд╢реНрдп рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 private TableLayout layout; //    KrestikinolikiActivity public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); layout = (TableLayout) findViewById(R.id.main_l); buildGameField(); }
      
      







рдЕрдм рдЖрдкрдХреЛ buildGameField () рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЧреЗрдо рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдкреНрд▓реЗрдпрд░ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рдирдХреА рд╡рд╕реНрддреБрдПрдВ рдЗрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рднрд░ рджреЗрдВрдЧреАред



Square.java



 package com.example; public class Square { private Player player = null; public void fill(Player player) { this.player = player; } public boolean isFilled() { if (player != null) { return true; } return false; } public Player getPlayer() { return player; } }
      
      







Player.java



 package com.example; public class Player { private String name; public Player(String name) { this.name = name; } public CharSequence getName() { return (CharSequence) name; } }
      
      







рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рд╕рднреА рдХрдХреНрд╖рд╛рдПрдВ src рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВред



Game.java



 package com.example; public class Game { /** *  */ private Square[][] field; /** *  * */ public Game() { field = new Square[3][3]; squareCount = 0; //   for (int i = 0, l = field.length; i < l; i++) { for (int j = 0, l2 = field[i].length; j < l2; j++) { field[i][j] = new Square(); squareCount++; } } } public Square[][] getField() { return field; } }
      
      







KrestikinolikiActivity рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЧреЗрдо рдХреА рд╢реБрд░реБрдЖрддред

 public KrestikinolikiActivity() { game = new Game(); game.start(); //    }
      
      







рдХреНрд░рд┐рдПрдЯрд┐рдХрд┐рдиреЛрд▓рд┐рдХреА рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреНрд▓рд╛рд╕ рдХреА рдмрд┐рд▓реНрдбрдЧреИрдордлрд┐рд▓реНрдб () рд╡рд┐рдзрд┐ред рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ (рдЦреЗрд▓ рдореИрджрд╛рди) рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:

 private Button[][] buttons = new Button[3][3]; //(....) private void buildGameField() { Square[][] field = game.getField(); for (int i = 0, lenI = field.length; i < lenI; i++ ) { TableRow row = new TableRow(this); //    for (int j = 0, lenJ = field[i].length; j < lenJ; j++) { Button button = new Button(this); buttons[i][j] = button; button.setOnClickListener(new Listener(i, j)); //  ,      row.addView(button, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT)); //      button.setWidth(107); button.setHeight(107); } layout.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT)); //     } }
      
      





рд▓рд╛рдЗрди 8 рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ View.OnClickListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рд╢реНрд░реЛрддрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБред рдпрд╣ рдХреЗрд╡рд▓ KrestikinolikiActivity рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

 public class Listener implements View.OnClickListener { private int x = 0; private int y = 0; public Listener(int x, int y) { this.x = x; this.y = y; } public void onClick(View view) { Button button = (Button) view; } }
      
      





рдпрд╣ рдЦреЗрд▓ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

 public class Game { /** *  */ private Player[] players; /** *  */ private Square[][] field; /** *   ? */ private boolean started; /** *   */ private Player activePlayer; /** *     */ private int filled; /** *   */ private int squareCount; /** *  * */ public Game() { field = new Square[3][3]; squareCount = 0; //   for (int i = 0, l = field.length; i < l; i++) { for (int j = 0, l2 = field[i].length; j < l2; j++) { field[i][j] = new Square(); squareCount++; } } players = new Player[2]; started = false; activePlayer = null; filled = 0; } public void start() { resetPlayers(); started = true; } private void resetPlayers() { players[0] = new Player("X"); players[1] = new Player("O"); setCurrentActivePlayer(players[0]); } public Square[][] getField() { return field; } private void setCurrentActivePlayer(Player player) { activePlayer = player; } public boolean makeTurn(int x, int y) { if (field[x][y].isFilled()) { return false; } field[x][y].fill(getCurrentActivePlayer()); filled++; switchPlayers(); return true; } private void switchPlayers() { activePlayer = (activePlayer == players[0]) ? players[1] : players[0]; } public Player getCurrentActivePlayer() { return activePlayer; } public boolean isFieldFilled() { return squareCount == filled; } public void reset() { resetField(); resetPlayers(); } private void resetField() { for (int i = 0, l = field.length; i < l; i++) { for (int j = 0, l2 = field[i].length; j < l2; j++) { field[i][j].fill(null); } } filled = 0; } }
      
      





рд╡рд┐рдЬреЗрддрд╛ рдХрд╛ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк



рдХреЗред рдУред рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдПрдХреНрд╕ рдпрд╛ рдУ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓рдореНрдмрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рд▓рдВрдмрд╡рдд, рдпрд╛ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ, рдпрд╛ рддрд┐рд░рдЫреЗ рд╕реЗ рдЯрд┐рдХ-рдЯреИрдХ-рдЯреЛ рдореЗрдВ рдорд░ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рд▓рд┐рдЦрдирд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЪреЗрди рдСрдл рд░рд┐рд╕реНрдкреЙрдиреНрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдкреИрдЯрд░реНрди рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ

 package com.example; public interface WinnerCheckerInterface { public Player checkWinner(); }
      
      





рдЪреВрдВрдХрд┐ рдЧреЗрдо рдореЗрдВ рд╡рд┐рдЬреЗрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрднрд╛рд╕реА "рд▓рд╛рдЗрдирдореИрди" рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрдХреНрд╖ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред рд╡реЗ рд╕рднреА WinnerCheckerInterface рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

WinnerCheckerHorizontal.java



 package com.example; public class WinnerCheckerHorizontal implements WinnerCheckerInterface { private Game game; public WinnerCheckerHorizontal(Game game) { this.game = game; } public Player checkWinner() { Square[][] field = game.getField(); Player currPlayer; Player lastPlayer = null; for (int i = 0, len = field.length; i < len; i++) { lastPlayer = null; int successCounter = 1; for (int j = 0, len2 = field[i].length; j < len2; j++) { currPlayer = field[i][j].getPlayer(); if (currPlayer == lastPlayer && (currPlayer != null && lastPlayer !=null)) { successCounter++; if (successCounter == len2) { return currPlayer; } } lastPlayer = currPlayer; } } return null; } }
      
      





WinnerCheckerVertical.java



 package com.example; public class WinnerCheckerVertical implements WinnerCheckerInterface { private Game game; public WinnerCheckerVertical (Game game) { this.game = game; } public Player checkWinner() { Square[][] field = game.getField(); Player currPlayer; Player lastPlayer = null; for (int i = 0, len = field.length; i < len; i++) { lastPlayer = null; int successCounter = 1; for (int j = 0, len2 = field[i].length; j < len2; j++) { currPlayer = field[j][i].getPlayer(); if (currPlayer == lastPlayer && (currPlayer != null && lastPlayer !=null)) { successCounter++; if (successCounter == len2) { return currPlayer; } } lastPlayer = currPlayer; } } return null; } }
      
      





WinnerCheckerDiagonalLeft.java



 package com.example; public class WinnerCheckerDiagonalLeft implements WinnerCheckerInterface { private Game game; public WinnerCheckerDiagonalLeft(Game game) { this.game = game; } public Player checkWinner() { Square[][] field = game.getField(); Player currPlayer; Player lastPlayer = null; int successCounter = 1; for (int i = 0, len = field.length; i < len; i++) { currPlayer = field[i][i].getPlayer(); if (currPlayer != null) { if (lastPlayer == currPlayer) { successCounter++; if (successCounter == len) { return currPlayer; } } } lastPlayer = currPlayer; } return null; } }
      
      





WinnerCheckerDiagonalRight.java



 package com.example; public class WinnerCheckerDiagonalRight implements WinnerCheckerInterface { private Game game; public WinnerCheckerDiagonalRight(Game game) { this.game = game; } public Player checkWinner() { Square[][] field = game.getField(); Player currPlayer; Player lastPlayer = null; int successCounter = 1; for (int i = 0, len = field.length; i < len; i++) { currPlayer = field[i][len - (i + 1)].getPlayer(); if (currPlayer != null) { if (lastPlayer == currPlayer) { successCounter++; if (successCounter == len) { return currPlayer; } } } lastPlayer = currPlayer; } return null; } }
      
      





рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЧреЗрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ:

 //(....) /** * "" =).      , *    */ private WinnerCheckerInterface[] winnerCheckers; //(....) public Game() { //(....) winnerCheckers = new WinnerCheckerInterface[4]; winnerCheckers[0] = new WinnerCheckerHorizontal(this); winnerCheckers[1] = new WinnerCheckerVertical(this); winnerCheckers[2] = new WinnerCheckerDiagonalLeft(this); winnerCheckers[3] = new WinnerCheckerDiagonalRight(this); //(....) }
      
      





рдЪреЗрдХрд╡рд┐рдирд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ():

 public Player checkWinner() { for (WinnerCheckerInterface winChecker : winnerCheckers) { Player winner = winChecker.checkWinner(); if (winner != null) { return winner; } } return null; }
      
      





рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рд▓ рдХреЗ рдмрд╛рдж рд╡рд┐рдЬреЗрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рд╢реНрд░реЛрддрд╛ рд╡рд░реНрдЧ рдХреЗ onClick () рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ

 public void onClick(View view) { Button button = (Button) view; Game g = game; Player player = g.getCurrentActivePlayer(); if (makeTurn(x, y)) { button.setText(player.getName()); } Player winner = g.checkWinner(); if (winner != null) { gameOver(winner); } if (g.isFieldFilled()) { //  ,    gameOver(); } }
      
      





рдЧреЗрдордУрд╡рд░ () рд╡рд┐рдзрд┐ 2 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИ:

 private void gameOver(Player player) { CharSequence text = "Player \"" + player.getName() + "\" won!"; Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); game.reset(); refresh(); } private void gameOver() { CharSequence text = "Draw"; Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); game.reset(); refresh(); }
      
      





рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП, рдЧреЗрдордУрд╡рд░ (рдкреНрд▓реЗрдпрд░ рдкреНрд▓реЗрдпрд░) рдФрд░ рдЧреЗрдордУрд╡рд░ () рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВред рдмрд┐рд▓реНрдбрд░ Toast.makeText рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдмрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрд╛рдЬрд╝рд╛ () рдлрд╝реАрд▓реНрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ:

 private void refresh() { Square[][] field = game.getField(); for (int i = 0, len = field.length; i < len; i++) { for (int j = 0, len2 = field[i].length; j < len2; j++) { if (field[i][j].getPlayer() == null) { buttons[i][j].setText(""); } else { buttons[i][j].setText(field[i][j].getPlayer().getName()); } } } }
      
      







рд╣реЛ рдЧрдпрд╛! рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрд░рд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рддреИрдпрд╛рд░ рдЖрд╡реЗрджрди рд╡реАрдбрд┐рдпреЛ









рд╕ рд╕ рд╕ ред



рдкреБрдирд╢реНрдЪ: рд▓реЗрдЦ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



All Articles