• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gra Moblina TicTacToe Android

Mały hosting, OGROMNE możliwości
0 głosów
309 wizyt
pytanie zadane 21 lutego 2018 w Java przez YoungCodingStudent Nowicjusz (120 p.)

Witam, dopiero zaczynam swoja przygodę z programowaniem mobilnym i przychodzę do was z problemem jak zaprogramować przycisk w android studio aby resetował on grę TicTacToe.
sama gra działa znakomicie, tylko aby zagrać od nowa trzeba wyjść z aplikacji
Kotlin:
 

package com.example.pc.tictactoy

import android.graphics.Color
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.Toast
import kotlinx.android.synthetic.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }



    protected fun buClick(view:View){
        val buSelected:Button= view as Button
        var cellID=0
        when(buSelected.id){
            R.id.bu1-> cellID=1
            R.id.bu2-> cellID=2
            R.id.bu3-> cellID=3
            R.id.bu4-> cellID=4
            R.id.bu5-> cellID=5
            R.id.bu6-> cellID=6
            R.id.bu7-> cellID=7
            R.id.bu8-> cellID=8
            R.id.bu9-> cellID=9

        }

        //Toast.makeText(this,"ID:"+ cellID, Toast.LENGTH_LONG).show()

        PlayGame(cellID,buSelected)
    }

    var player1=ArrayList<Int>()
    var player2=ArrayList<Int>()
    var ActivePlayer=1

    fun PlayGame(cellID:Int,buSelected:Button){

        if(ActivePlayer==1){
            buSelected.text="X"
            buSelected.setBackgroundResource(R.color.blue)
            player1.add(cellID)
            ActivePlayer=2
        }else{
            buSelected.text="O"
            buSelected.setBackgroundResource(R.color.green)
            player2.add(cellID)
            ActivePlayer=1
        }

        buSelected.isEnabled=false
        CheckWiner()
    }

    fun CheckWiner(){
        var winer=-1

        //row 1
        if(player1.contains(1) && player1.contains(2) && player1.contains(3)){
            winer=1
        }
        if(player2.contains(1) && player2.contains(2) && player2.contains(3)){
            winer=2
        }

        //row 2
        if(player1.contains(4) && player1.contains(5) && player1.contains(6)){
            winer=1
        }
        if(player2.contains(4) && player2.contains(5) && player2.contains(6)){
            winer=2
        }

        //row 3
        if(player1.contains(7) && player1.contains(8) && player1.contains(9)){
            winer=1
        }
        if(player2.contains(7) && player2.contains(8) && player2.contains(9)){
            winer=2
        }

        //kolumna 1
        if(player1.contains(1) && player1.contains(4) && player1.contains(7)){
            winer=1
        }
        if(player2.contains(1) && player2.contains(4) && player2.contains(7)){
            winer=2
        }

        //kolumna 2
        if(player1.contains(2) && player1.contains(5) && player1.contains(8)){
            winer=1
        }
        if(player2.contains(2) && player2.contains(5) && player2.contains(8)){
            winer=2
        }

        //kolumna 3
        if(player1.contains(3) && player1.contains(6) && player1.contains(9)){
            winer=1
        }
        if(player2.contains(3) && player2.contains(6) && player2.contains(9)){
            winer=2
        }

        //ukos 1
        if(player1.contains(1) && player1.contains(5) && player1.contains(9)){
            winer=1
        }
        if(player2.contains(1) && player2.contains(5)&& player2.contains(9)){
            winer=2
        }

        //ukos 2
        if(player1.contains(3) && player1.contains(5) && player1.contains(7)){
            winer=1
        }
        if(player2.contains(3) && player2.contains(5) && player2.contains(7)){
            winer=2
        }



        if( winer !=-1){

            if(winer==1){
                Toast.makeText(this," Player 1 win the game",  Toast.LENGTH_LONG).show()
            }else{
                Toast.makeText(this," Player 2 win the game",  Toast.LENGTH_LONG).show()
            }
        }


}

}

 

3 odpowiedzi

+1 głos
odpowiedź 21 lutego 2018 przez Wiciorny Ekspert (283,260 p.)
szczerze nie przetestuje, ale pierwsze co rzuca mi się na oczy to  strasznie słaba implementacja. Wiem, że to prymitywny projekt/gra - nawet trudno to projektem nazwać bo nie wymaga dłużej pracy niż dzień, ale można by pomyśleć o np zamienieniu 'powtarzalności  akcji ciągłym IF..." bo samo patrzenie razi programistę w oczy, ażeby w 1 metodzie było tyle warunków...

Niemniej jednak edukuj się i powodzenia dalej, nie wiem czego - oczekujesz  od strony "nas forumowiczów' wstawiając tutaj swój kod, dlatego napisałem to co uważam nie w formie hejtu a  dobrego ' advice' na przyszłość

 

Jak w android studio taki przycisk zaimplementować nie wiem jestem co prawda Javowcem, na pewno skorzystaj z " funkcji które uruchamiają nowy wątek po prostu jednocześnie kończąc poprzedni np w oparciu o konstruktory "
0 głosów
odpowiedź 22 lutego 2018 przez ebo96rok Bywalec (2,980 p.)
A czego potrzebujesz, żeby grać od początku? Czystych pól! Wyczyść i aktywuj wszystkie pola i graj dalej.
0 głosów
odpowiedź 25 lutego 2018 przez Tomasz90 Nałogowiec (25,140 p.)
Te buttony by pasowało jakoś w dwuwymiarowej tablicy zapisać, żeby to skrócić i ułatwić operacje na planszy. Co do tej funkcji co sprawdza wynik to zwróć uwagę, że tak naprawdę to po ruchu gracza nie musisz całej tablicy sprawdzać - interesuje Cię tylko wiersz, kolumna i ewentualnie jedna przekątna (lub obie, jeżeli wypełniony został środek planszy). Także, powinieneś przesłać sobie jakoś współrzędne ostatnio zaznaczonego elementu. W sumie jeszcze takie zastrzeżenie mam do nazw np. winer -> winner, player1 -> playerOne, player2 -> playerTwo, buSelected -> selectedButton. No i wiadomo takie hardcode'owane wartości to do stałych wyekstraktować

Podobne pytania

0 głosów
2 odpowiedzi 582 wizyt
pytanie zadane 12 marca 2018 w Inne języki przez Partyjny Obywatel (1,170 p.)
0 głosów
1 odpowiedź 1,172 wizyt
pytanie zadane 30 czerwca 2019 w Java przez AleX1010 Obywatel (1,320 p.)
+3 głosów
2 odpowiedzi 918 wizyt
pytanie zadane 4 czerwca 2019 w Java przez reaktywny Nałogowiec (46,230 p.)

93,715 zapytań

142,629 odpowiedzi

323,260 komentarzy

63,257 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...