Burada PyQt5 üzerinde gördüğünüz minimax algoritmasının ufak bir bölümünü görüyorsunuz.
Bunları bu şekilde yazmaya devam edersem fazlasıyla uzayacak. Minimax algoritması da böyle uzun aslında ama bir kısaltma yolu vardır belki diye sormak istiyorum.
Bu kodları kısaltmak mümkün mü ?
self.timer = QTimer
# table of blocks
self.blocks = [
[self.left_top_block, self.top_middle_block, self.top_right_block], # row 1
[self.middle_left_block, self.middle_middle_block, self.middle_right_block], # row 2
[self.bot_left_block, self.bot_middle_block, self.bot_right_block] # row 3
]
def Artificial_Intelligence(self):
# If the User Puts "X" in blocks[0][0] (left top block)
if (
self.blocks[0][0].text() == "X" and self.blocks[0][1].text() == "" and self.blocks[0][2].text() == "" and
self.blocks[1][0].text() == "" and self.blocks[1][1].text() == "" and self.blocks[1][2].text() == "" and
self.blocks[2][0].text() == "" and self.blocks[2][1].text() == "" and self.blocks[2][2].text() == ""
):
random_assignments = ["2","3","4","5","6","7","8","9"] # No "1"
random_assignment = random.choice(random_assignments)
if random_assignment == "2":
self.timer.singleShot(300, lambda: self.blocks[0][1].setText("O"))
elif random_assignment == "3":
self.timer.singleShot(300, lambda:self.blocks[0][2].setText("O"))
elif random_assignment == "4":
self.timer.singleShot(300, lambda:self.blocks[1][0].setText("O"))
elif random_assignment == "5":
self.timer.singleShot(300, lambda:self.blocks[1][1].setText("O"))
elif random_assignment == "6":
self.timer.singleShot(300, lambda:self.blocks[1][2].setText("O"))
elif random_assignment == "7":
self.timer.singleShot(300, lambda:self.blocks[2][0].setText("O"))
elif random_assignment == "8":
self.timer.singleShot(300, lambda:self.blocks[2][1].setText("O"))
elif random_assignment == "9":
self.timer.singleShot(300, lambda:self.blocks[2][2].setText("O"))
# If the User Puts "X" in blocks[0][1] (top middle block)
elif (
self.blocks[0][0].text() == "" and self.blocks[0][1].text() == "X" and self.blocks[0][2].text() == "" and
self.blocks[1][0].text() == "" and self.blocks[1][1].text() == "" and self.blocks[1][2].text() == "" and
self.blocks[2][0].text() == "" and self.blocks[2][1].text() == "" and self.blocks[2][2].text() == ""
):
random_assignments = ["1","3","4","5","6","7","8","9"] # No "2"
random_assignment = random.choice(random_assignments)
if random_assignment == "1":
self.timer.singleShot(300, lambda: self.blocks[0][1].setText("O"))
elif random_assignment == "3":
self.timer.singleShot(300, lambda:self.blocks[0][2].setText("O"))
elif random_assignment == "4":
self.timer.singleShot(300, lambda:self.blocks[1][0].setText("O"))
elif random_assignment == "5":
self.timer.singleShot(300, lambda:self.blocks[1][1].setText("O"))
elif random_assignment == "6":
self.timer.singleShot(300, lambda:self.blocks[1][2].setText("O"))
elif random_assignment == "7":
self.timer.singleShot(300, lambda:self.blocks[2][0].setText("O"))
elif random_assignment == "8":
self.timer.singleShot(300, lambda:self.blocks[2][1].setText("O"))
elif random_assignment == "9":
self.timer.singleShot(300, lambda:self.blocks[2][2].setText("O"))
# If the User Puts "X" in blocks[0][2] (top right block)
elif (
self.blocks[0][0].text() == "" and self.blocks[0][1].text() == "" and self.blocks[0][2].text() == "X" and
self.blocks[1][0].text() == "" and self.blocks[1][1].text() == "" and self.blocks[1][2].text() == "" and
self.blocks[2][0].text() == "" and self.blocks[2][1].text() == "" and self.blocks[2][2].text() == ""
):
random_assignments = ["1","2","4","5","6","7","8","9"] # no "3"
random_assignment = random.choice(random_assignments)
if random_assignment == "1":
self.timer.singleShot(300, lambda: self.blocks[0][1].setText("O"))
elif random_assignment == "2":
self.timer.singleShot(300, lambda:self.blocks[0][2].setText("O"))
elif random_assignment == "4":
self.timer.singleShot(300, lambda:self.blocks[1][0].setText("O"))
elif random_assignment == "5":
self.timer.singleShot(300, lambda:self.blocks[1][1].setText("O"))
elif random_assignment == "6":
self.timer.singleShot(300, lambda:self.blocks[1][2].setText("O"))
elif random_assignment == "7":
self.timer.singleShot(300, lambda:self.blocks[2][0].setText("O"))
elif random_assignment == "8":
self.timer.singleShot(300, lambda:self.blocks[2][1].setText("O"))
elif random_assignment == "9":
self.timer.singleShot(300, lambda:self.blocks[2][2].setText("O"))