Gra w kółko i krzyżyk z pomocą listy

0

Hej,

Chcę stworzyć grę w kółko i krzyżyk w konsoli za pomocą listy i niby wszystko śmiga, ale jak używam stworzonej przeze mnie funkcji dodajKrzyzyk(), to po kilku takich użyciach x zaczyna się przesuwać w tablicy. Mój kod:

gierka = [[0],[0],[0],
              [0],[0],[0],
              [0],[0],[0]]

def pokazGre():
    print(gierka[0], gierka[1], gierka[2])
    print(gierka[3], gierka[4], gierka[5])
    print(gierka[6], gierka[7], gierka[8])


def dodajKrzyzyk(a, b):
    if a >= 0 and a <= 8 and a % 1 == 0:
        if b == 0:
            print('Wartość dla krzyżyka to 1')
        elif b == 2:
            print('Wartość dla krzyżyka to 1')
        elif b == 1:
            print('')
            gierka.insert(a, '[x]')
            pokazGre()


dodajKrzyzyk(0, 1)
dodajKrzyzyk(1, 1)
dodajKrzyzyk(5, 1)
dodajKrzyzyk(2, 1)
print(gierka)

A tak wygląda przesunięcie się x w konsoli:
[x] [0] [0]
[0] [0] [0]
[0] [0] [0]

[x] [x] [0]
[0] [0] [0]
[0] [0] [0]

[x] [x] [0]
[0] [0] [x]
[0] [0] [0]

[x] [x] [x]
[0] [0] [0]
[x] [0] [0]

W ostatnim wypisie ostatni x na planszy skoczył z 5 miejsca na 6 miejsce.

Czy ktoś byłby w stanie mi pomóc rozwiązać ten problem?
Pozdrawiam.

1

Zobacz sobie jak wygląda Twoja zmienna gierka. Nie wstawiłeś tu jej prawdziwej wartości.

Za pomocą gierka.insert(a, '[x]') wkładasz do tej zmiennej kolejne elementy tablicy zamiast edytować obecne

0
anonimowy napisał(a):

Zobacz sobie jak wygląda Twoja zmienna gierka. Nie wstawiłeś tu jej prawdziwej wartości.

Nie wiem za bardzo o co chodzi, bo to mój cały kod odnośnie tego projektu, ale problem rozwiązany, faktycznie zapomniałem, że fukncja gierka.insert wstawia nowy element, zamiast edytować już istniejące.
Dzięki Ci wielkie za pomoc :)
Funkcja dodajKrzyzyk(a, b): wygląda teraz tak:

def dodajKrzyzyk(a, b):
    if a >= 0 and a <= 8 and a % 1 == 0:
        if b != 1:
            print('Wartość dla krzyżyka to 1')
        elif b == 1:
            print('')
            gierka[a] = '[X]'
            pokazGre()

Pozdrawiam.

0

Skoro już jesteśmy przy tym wątku, to czy mógłby ktoś podpowiedzieć, jak sprawić, by obie te funkcje dodajKrzyzyk, oraz dodajKolko byly dodawane naprzemiennie? Tzn. chodzi mi o to, aby program wymuszał na użytkowniku używanie tych funkcji naprzemiennie.

def dodajKrzyzyk(a, b):
    if a >= 0 and a <= 8 and a % 1 == 0:
        if b != 1:
            print('Wartość dla krzyżyka to 1')
        elif b == 1:
            if gierka[a] == '[X]':
                print('Pole jest zajęte')
            elif gierka[a] == '[O]':
                print('Pole jest zajęte')
            else:
                print('')
                gierka[a] = '[X]'
                pokazGre()

def dodajKolko(a, b):
    if a >= 0 and a <= 8 and a % 1 == 0:
        if b != 1:
            print('Wartość dla kółka to 1')
        elif b == 1:
            if gierka[a] == '[X]':
                print('Pole jest zajęte')
            elif gierka[a] == '[O]':
                print('Pole jest zajęte')
            else:
                print('')
                gierka[a] = '[O]'
                pokazGre()
0

@Luffyy213: Użyj pętli.

while True:
    dodajKrzyzyk
    dodajKolo
0
Dregorio napisał(a):

@Luffyy213: Użyj pętli.

while True:
    dodajKrzyzyk
    dodajKolo

Ok i co dalej? Bo tworzy mi się nieskończona pętla, a ja nie za bardzo wiem, co dalej moge zrobić z taką pętlą.

0

Może zacznij od jakiegoś poradnika lub prostszego zadania? Aktualnie to co napisałeś ma mały sens i ciężko z tego grę stworzyć

0

Ale mi nie chodzi o stworzenie gry okienkowej. To są zadania z kursu dla początkujących i na pewno jest jakieś proste rozwiązanie tego problemu, na który nie mogę sam wpaść, dlatego się zwracam tutaj o pomoc :) Poza tym, dlaczego uważasz, że to co napisałem nie ma sensu? Ja próbuję zrobić jedynie zadanie które mi dano, stworzenie takiej gierki w konsoli za pomocą małych kroków, a kolejnym krokiem jest właśnie napisanie kodu, który wymusi na użytkowniku używanie tych dwóch funkcji naprzemiennie.

0

Tylko, że w Twoim kodzie użytkownik przecież nic nie robi. Robisz tylko Ty jako twórca gry

0

No i właśnie o to mi chodzi. Pomożesz, czy będziemy dyskutować na temat sensowności gry w kółko i krzyżyk w konsoli? :)

0

Ale to nie chodzi o kółko i krzyżyk, tylko o logikę aplikacji. W którym miejscu u Ciebie użytkownik decyduje gdzie wstawić krzyżyk?

0

Nie potrafię zrozumieć, po co ciągniesz tą dyskusję. Tłumaczę Ci, że to jest kurs dla początkujących i nie chodzi tu o stworzenie ładnej gry, tylko chodzi o samą konstrukcję. W grę da się grać z poziomu kodu i o to mi chodzi. Od Ciebie pomocy się już raczej nie spodziewam, więc może ktoś coś jeszcze wymyśli?

0

@Luffyy213: Czytanie że zrozumieniem jest bardzo ważne w tym zawodzie. Zamiast złościć się, posłuchaj rady kolegi i najpierw przeczytaj jakiś prostszy kurs. Ten ewidentnie jest dla ciebie za trudny. Poczytaj o pętli, instrukcjach warunkowych oraz o break. Potem weź kartkę papieru i rozrysuj sobie co chcesz osiągnąć, jak już będziesz mieć algorytm to go napisz.

0

Może dla niektórych osób tutaj też ten algorytm jest za trudny, skoro jeszcze nikt nie spróbował pomóc koledze. Poza tym napisałem od początku, że chodzi mi o konsolową grę z poziomu kodu, więc może warto samemu zastanowić się, czy się rozumie sytuację, zanim się zwróci komuś taką uwagę, hm? Nie złoszczę się, tylko jestem w szoku, że nikt mi jeszcze nie pomógł tutaj. Idziecie na łatwiznę i odsyłacie mnie na google do poradników. Wydaje mi się, że od tego istnieje to forum, żeby pomagać sobie nawzajem, bo odesłać do google można każdego, jakby nie patrzeć w internecie jest wszystko.

0

Nie zadałeś konkretnego pytania. Aktualnie chcesz żebyśmy cały algorytm Ci podali a nawet nie podjąłeś się próby napisania go nam tutaj

0
Luffyy213 napisał(a):

Skoro już jesteśmy przy tym wątku, to czy mógłby ktoś podpowiedzieć, jak sprawić, by obie te funkcje dodajKrzyzyk, oraz dodajKolko byly dodawane naprzemiennie? Tzn. chodzi mi o to, aby program wymuszał na użytkowniku używanie tych funkcji naprzemiennie.

def dodajKrzyzyk(a, b):
    if a >= 0 and a <= 8 and a % 1 == 0:
        if b != 1:
            print('Wartość dla krzyżyka to 1')
        elif b == 1:
            if gierka[a] == '[X]':
                print('Pole jest zajęte')
            elif gierka[a] == '[O]':
                print('Pole jest zajęte')
            else:
                print('')
                gierka[a] = '[X]'
                pokazGre()

def dodajKolko(a, b):
    if a >= 0 and a <= 8 and a % 1 == 0:
        if b != 1:
            print('Wartość dla kółka to 1')
        elif b == 1:
            if gierka[a] == '[X]':
                print('Pole jest zajęte')
            elif gierka[a] == '[O]':
                print('Pole jest zajęte')
            else:
                print('')
                gierka[a] = '[O]'
                pokazGre()

Edit: Czy to nie jest konkretne postawienie problemu?

0

Ale po co chcesz to wymuszać. Wymuszanie tego z poziomu kodu będzie zbyt skomplikowane dla Ciebie. Co innego gdyby użytkownik z konsoli mógłby wybierać to byłoby zdecydowanie łatwiejsze. Jak wygląda algorytm kółka i krzyżyk?

0

Takie jest zadanie w teście z "Programatora". Jest to taki projekt unijny. Żeby się do niego dostać, trzeba przejść szybki kurs pythona, ale to zadanie wydaje mi się trochę nierealne, bo nie byłoby tej dyskusji, gdyby dało się to zrobić w jakiś łatwy sposób za pomocą pętli.

0

Da się stworzyć grę dosyć prosto ale musisz wykorzystać konsolę (żeby użytkownik w konsoli wybierał co chce zrobic) a nie zmuszać programistę do używania funkcji w określonej kolejności

0

No wiem, ale nie poznałem takiej funkcji w tym kursie, która pozwalałaby mi na wpisywanie do konsoli tekstu, który program by czytał. Dlatego założyłem, że skoro dają na tym kursie takie zadanie bez wyjaśniania takich funkcji, to pewnie istnieje jakiś prosty sposób na rozwiązanie tego zadania, np. za pomocą pętli.

0

Pokaż ten kurs

0

Link usunięty

0

Kurs jest słaby, zalecał bym skorzystanie z innego.

Z tego co widzę to zadanie jest kompletnie pozbawione sensu a napisała je niekompetentna osoba lub nie przyłożyła się do tego. Proponuję napisanie jednak zwykłej gry kółko i krzyżyk, gdzie to uzytkownik w konsoli wpisuje gdzie chce wykonać ruch. Jeśli to autor miał na myśli to przedstawił swoją wizję w zły sposób

0

Ok, dzięki za nic tak na prawdę. Pozdrawiam.

0

Co Ty chcesz żebym Ci to napisał czy co? Gdybyś tylko wiedział jak bardzo zadane przez Ciebie pytanie nie ma sensu to inaczej byś na to patrzył

0

Dostałeś przecież odpowiedź jak uruchomić funkcje naprzemiennie o co chodzi? Jeżeli nie potrafisz sobie poradzić z nieskończoną pętlą to zastanów się jaki inny warunek dodać zamiast while True, tzn. kiedy pętla gry powinna się zakończyć?

0

Zauważyłem, że największym problemem programistów, którzy coś umieją, niż podstawy, jest nieradzenie sobie z trudnymi problemami, a przynajmniej utrudnianie wielu z nich na siłę.
Proszę bardzo, oto rozwiązanie.


kolejnosc=1

def dodajKolko(x,y):

    global kolejnosc

    if kolejnosc==2:

        print("To nie jest kolej kolka!")

    else:

        if kolkoKrzyzyk[x][y]!=0:

            print('Pole jest zajęte, powtorz ruch')

        else:

            kolkoKrzyzyk[x][y]=1

            kolejnosc=2

Całego kodu nie skopiowałem, ale pomysł widać tutaj gołym okiem.

0

Lepiej unikać wartości globalnych. Budując na podstawie Twojego kodu:

def dodajKolko(x, y):
    if kolkoKrzyzyk[x][y]!=0
        print('Pole jest zajęte, powtorz ruch')
        return 1 # don't change player 
    else:
        kolkoKrzyzyk[x][y]=1
        return 0

active_player = 0
while True:
    if active_player:
        active_player = dodajKolko(x, y)
    else:
        active_player = dodajKrzyzyk(x, y)
    check_for_win()

1 użytkowników online, w tym zalogowanych: 0, gości: 1