Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[java libGDX] Pasjans - możliwe ruchy pomiędzy Tableau ale z odrzucaniem zapętlonych ruchów

Ostatnio zmodyfikowano 2026-01-11 21:43
Autor Wiadomość
skovv
» 2026-01-10 15:16:32
Ciężko powiedzieć nie widząc całego kodu.. ogółem ja bym sobie nadal wartości kart według kolejności.. od asa szło chyba i na to 2 i tak dalej? To as wartość 1, 2 to 2, 3 to 3 i tak dalej.. i teraz jak chcesz sprawdzić czy możesz wykonać jakikolwiek ruch to to sprawdzasz dla każdej talii czy jej ostatnia karta jest o 1 wieksza od ostatniej karty z innych kupek, jeśli nie to kolejna kilka itp.. za dużo inspirujesz się chatem gpt, pamiętaj że to debil o pisze bo każesz ale on często nie wie co piszesz i nie musi rozumieć do końca co chcesz a używając jego kodu którego do końca nie rozumiesz narobisz sobie lipy w kodzie
P-183788
tBane
Temat założony przez niniejszego użytkownika
» 2026-01-10 16:33:20
Sam nie mam pojęcia jak to opisać logicznie.
P-183789
tBane
Temat założony przez niniejszego użytkownika
» 2026-01-10 17:20:43
Chyba wymyśliłem. Teraz testować trzeba.


// move the cards from Tableau to Tableau (ANTI-LOOP - how?)
        for (Tableau from : Tableaus.tableaus) {

            if (from._cards.isEmpty())
                continue;

            if(from._cards.get(0)._isOpen && from._cards.get(0)._value == 13)
                continue;

            for(int i=0;i<from._cards.size();i++){
                for(Tableau to : Tableaus.tableaus){
                    if(from == to){
                        continue;
                    }

                    if(to._cards.isEmpty())
                        continue;

                    Card prevCard;
                    if(i==0)
                        prevCard = null;
                    else
                        prevCard = from._cards.get(i-1);

                    boolean prevCardIsOpen;
                    if(prevCard == null)
                        prevCardIsOpen = false;
                    else
                        prevCardIsOpen = prevCard._isOpen;

                    boolean cardsAreEqual;
                    if(prevCard == null)
                        cardsAreEqual = false;
                    else
                        cardsAreEqual = prevCard._value == to.getLastCard()._value;

                    boolean cardsAreOtherColor = false;

                    if(prevCard == null){
                        cardsAreOtherColor = true;
                    }
                    else{
                        if (prevCard._color == Card.cardColor.Heart || prevCard._color == Card.cardColor.Tile) {
                            cardsAreOtherColor =  (to.getLastCard()._color == Card.cardColor.Pike || to.getLastCard()._color == Card.cardColor.Clover);
                        }

                        if (prevCard._color == Card.cardColor.Pike || prevCard._color == Card.cardColor.Clover) {
                            cardsAreOtherColor =  (to.getLastCard()._color == Card.cardColor.Heart || to.getLastCard()._color == Card.cardColor.Tile);
                        }
                    }

                    String color1, color2;
                    color1 = color2 = "";

                    switch(from._cards.get(i)._color){
                        case Heart: color1 = "Heart"; break;
                        case Tile: color1 = "Tile"; break;
                        case Pike: color1 = "Pike"; break;
                        case Clover: color1 = "Clover"; break;
                    }

                    switch(to.getLastCard()._color){
                        case Heart: color2 = "Heart"; break;
                        case Tile: color2 = "Tile"; break;
                        case Pike: color2 = "Pike"; break;
                        case Clover: color2 = "Clover"; break;
                    }

                    if( from._cards.get(i)._isOpen && !prevCardIsOpen && to.cardIsAcceptable(from._cards.get(i))){
                        System.out.println("move the cards from Tableau to Tableau1");
                        System.out.println(from._cards.get(i)._value + color1 + from._id + " to " + to.getLastCard()._value + color2 + to._id);
                        return true;
                    }

                    if(prevCardIsOpen && cardsAreEqual && cardsAreOtherColor && to.cardIsAcceptable(from._cards.get(i))){
                        System.out.println("move the cards from Tableau to Tableau2");
                        System.out.println(from._cards.get(i)._value + color1 + from._id + " to " + to.getLastCard()._value + color2 + to._id);
                        return true;
                    }
                }
            }
        }

//edit
teraz chyba działa, szrobiłem parę różnych testów i zawsze pokazuje poprawnie ruchy
P-183790
skovv
» 2026-01-10 23:00:14
Daj cały kod rozgrywki, jak definiujesz karty itp itd
P-183791
tBane
Temat założony przez niniejszego użytkownika
» 2026-01-11 12:46:28
Sporo jest tego kodu - ponad 1500 linii. I to w różnych plikach. Łatwiej chyba było, by podać link do repo i wyjaśnić co gdzie i jak.
P-183792
tBane
Temat założony przez niniejszego użytkownika
» 2026-01-11 14:20:34
https://github.com/tBane1995/Solitaire-demo.git

Kod odpowiedzialny za sprawdzanie ruchów jest w Solitaire-Demo\core\src\main\java\com\tbane\solitaire\Game.java/isNextMove()
P-183793
skovv
» 2026-01-11 18:09:53
Ehh za dużo tego, sory ale nie chce mi się aż tak przebijać :D No ogółem tak:

bool ruchmozliwy = false;
for(kupka : wszystkie kupki) {
    if(ta kupka nie jest pusta oraz ta karta nie jest niemozliwa do przeniesienia) {
        for(innakupka : wszystkiekupki) {
            if(innakupka != kupka && innakupka.ostatniakarta != pusta) {
                if(kupka.ostatniakarta == innakupka.ostatniakarta-1) { ruchmozliwy = true; break; }// bo jopek idzie na dame itp nie? czyli karta ktora rzucamy ma byc mniejsza o 1 nie?
            }
        }
    }
}
return ruchmozliwy;
P-183794
tBane
Temat założony przez niniejszego użytkownika
» 2026-01-11 19:37:23
Mniej więcej tak zrobiłem i dodałem warunki na otwartą/zamkniętą kartę
P-183795
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona