Input alınmıyor

Ödev olarak yaptığım bir 2048 oyunu kodunda “game” fonksiyonuna geldiğimde input alamıyorum. Bundan ayrı olarak da “sayı_ekleme” fonksiyonunda zaten sayı olan bir yeri seçenekleri arasından çıkartmayı başaramadım. Bu ikisini veya en azından birisini düzeltebilirseniz sevinirim. Ayrıca son olarak da sadece “a” tuşuna basınca enter’e vasmaya gerek kalmadan beni algılayabileceği şekilde birşey yaparsanız da güzel olur (msvcrt ve getkey’i denedim ama ikisini de pip kullanarak indiremiyorum ve VS code kullanarak çalıştırınca hata veriyolar.).

import numpy as np
import random as rd

def random_1():
    i=rd.choice([0,1,2,3])
    return i

def random_2():
    j=rd.choice([0,1,2,3])
    return j

def random_3():
    y=rd.choice([2,2,2,2,2,2,2,2,2,4])
    return y

def sayı_ekleme(board,dolu_kutu,tekrar):
    i= random_1()
    j= random_2()
    y= random_3()
    dolu_kutu = []
    for a in range(4):
        for b in range(4):
            if board[a][b] != 0:
                dolu_kutu.append([a,b])
    if (i,j) in dolu_kutu:
        tekrar = True
        return board,dolu_kutu,tekrar
    else:
        board[i][j] = y
        dolu_kutu.append([i,j])

    return board, dolu_kutu

def sola_kaydır(board,dolu_kutu,tekrar):
    for i in range(4):
        for j in range(4):
            satır = []
            if board[i][j] != 0:
                satır.append(board[i][j])
                for x in range(4-len(satır)):
                    satır.append("0")
                for x in range(4):
                    satır[x] = board[i][j]
    return board

def sola_birleştir(board,dolu_kutu,tekrar):
    for i in range(4):
        for j in range(4):
            satır = []
            for x in range(4):
                satır.append(board[i][j])
            for x in range(3):
                if satır[x] == satır[x+1]:
                    satır[x] *= 2
                    satır[x+1] = 0
            for x in range(4):
                board[i][j] = satır[x]
    return board

def sol(board,dolu_kutu,tekrar):
    sola_kaydır(board,dolu_kutu,tekrar)
    sola_birleştir(board,dolu_kutu,tekrar)
    sola_kaydır(board,dolu_kutu,tekrar)
    sayı_ekleme(board,dolu_kutu,tekrar)
    return board,dolu_kutu,tekrar

def game(board,dolu_kutu,tekrar):
    while True:
        hareket = input()
        if hareket == "a":
            sol(board,dolu_kutu,tekrar)
            print(board)
    
def start():
    board = np.array([[0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0]])
    dolu_kutu = []
    tekrar = False
    for i in range(2):
        sayı_ekleme(board,dolu_kutu, tekrar)
        while tekrar == True:
            sayı_ekleme(board,dolu_kutu,tekrar)
    print(board)
    game(board,dolu_kutu,tekrar)

start()

“game” fonksiyonundan ne zaman çıkılıyor?

benim amacım çoğunlukla game fonksiyonunda bulunup a,w,s,d tuşlarındaan birine basıldığında tahtayı güncellemesi, bunu game fonksiyonuna geri vermesi ve tekrar komut beklemesi şeklinde.

bkz: Soru Sorarken Sıkça Düşülen Hatalar #13

Kutuphanelerin kaynaklari acik. Iclerindeki kodu alip kendi kodunuzun icine koyabilirsiniz.

Bir yeri secenekler arasindan cikartabilmek icin once seceneklere sahip olmaniz lazim. (dolu_kutu’nun tersi). Bu arada dondurdugunuz tekrar degerini hic bir yerde kullanmiyorsunuz.

Genel olarak, fonksiyonlarin veri akislarini daha iyi takip etmeniz, giren-cikan degerleri incelemeniz lazim.

Hocam kesinlikle beginner python yazıları okumanız ya da tutoriallar izlemeniz gerekiyor.

bu iki fonksiyon birebir aynı işi yapıyor. iki kere yazılmasına hiç gerek yok.
aynı şekilde buna bağlı olarak

bu kısmın böyle olmasına da gerek yok. tek bir random fonksiyonu tanımlayıp onu kullanabilirsiniz.