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

Gra Moblina TicTacToe Android

Object Storage Arubacloud
0 głosów
177 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 (270,110 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 394 wizyt
pytanie zadane 12 marca 2018 w Inne języki przez Partyjny Obywatel (1,170 p.)
0 głosów
1 odpowiedź 772 wizyt
pytanie zadane 30 czerwca 2019 w Java przez AleX1010 Obywatel (1,320 p.)
+3 głosów
2 odpowiedzi 695 wizyt
pytanie zadane 4 czerwca 2019 w Java przez reaktywny Nałogowiec (40,990 p.)

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

61,957 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...