def b4(self): """ functie apelata in cazul apasarii butonului B4 """ if opponent == "calculator" and ("B" in self.text_label.text() or "calculatorului" in self.text_label.text()): return global buttons if buttons[0] == " ": buttons[0] = "B4" self.text_label.setText(" ") if game.ver_start("B4", player): self.B4Button.setText("0") else: if game.check_player(player) == 1 or game.check_player_start( player, "B4") == 0: self.set_text_label_err( "Ai inceput de pe o groapa care nu este a ta!") elif game.get_points("B4") == 0: self.set_text_label_err( "Groapa nu are niciun punct! Incepe din nou!") elif buttons[1] == " ": buttons[1] = "B4" if buttons[0] != " " and buttons[1] != " ": points = self.play() if points == -2: pass if points >= 0 and points <= 6: self.B4Button.setText(self.convert_points_to_text(points)) elif points >= 7: self.B4Button.setText(str(points))
def update_buttons_calc(self): """ face update la punctele de pe butoanele "apasate" de calculator """ global buttons, player, start, game_over time.sleep(1) # obtine butoanele, iar pentru fiecare buton seteaza textul corespunzator punctelor # cu o mica pauza intre mutari buttons_to_update = game.get_buttons_clicked_by_calc() for button in buttons_to_update: time.sleep(1) QApplication.processEvents() if game.get_points(button) <= 6 or (button == "A" or button == "B"): self.convert_str_to_button(button).setText( self.convert_points_to_text(game.get_points(button))) else: self.convert_str_to_button(button).setText( str(game.get_points(button))) time.sleep(1) buttons = game.get_buttons_calculator() # se apeleaza functia de play pentru a se continua jocul self.play()
def a1(self): """ functie apelata in cazul apasarii butonului A1, actualizeaza variabila "buttons" care tine evidenta mutarilor si mai apoi actualizeaza si punctele de pe buton """ # daca e randul calculatorului nu se intampla nimic if opponent == "calculator" and ("B" in self.text_label.text() or "calculatorului" in self.text_label.text()): return global buttons # daca e primul buton apasat se verifica daca este un inceput de mutare si daca este corect if buttons[0] == " ": buttons[0] = "A1" self.text_label.setText(" ") if game.ver_start("A1", player): self.A1Button.setText("0") else: if game.check_player(player) == 1 or game.check_player_start( player, "A1") == 0: self.set_text_label_err( "Ai inceput de pe o groapa care nu este a ta!") elif game.get_points("A1") == 0: self.set_text_label_err( "Groapa nu are niciun punct! Incepe din nou!") # daca este al 2-lea buton apasat se actualizeaza variabila buttons, se apeleaza functia play # pentru a updata punctajul si pentru a afla punctele corespunzatoare butonului A1 si se # actualizeaza punctele de pe buton elif buttons[1] == " ": buttons[1] = "A1" if buttons[0] != " " and buttons[1] != " ": points = self.play() # daca sunt pana in 6 puncte in textul de pe buton vor aparea si bulinele, altfel nu, din # motive vizuale if points == -2: pass if points >= 0 and points <= 6: self.A1Button.setText(self.convert_points_to_text(points)) elif points >= 7: self.A1Button.setText(str(points))
def play(self): """ functia comunica cu "game.py" pentru a actualiza in interfata punctele jucatorilor si pentru a-i informa starea jocului si rezultatul mutarilor returneaza: numarul de puncte pentru butonul apasat daca mutarea e corecta, -1 in caz contrar -2 daca jocul s-a terminat """ self.text_label.setStyleSheet( "font: bold; font-size:14px; color:black") self.text_label.setText("") ok = 1 global buttons, player, start, game_over # apeleaza functia update_points din game.py pentru a afla care e rezultatul mutarii # rezultatul are 2 componente if opponent == "om" or (opponent == "calculator" and player == 0): result = game.update_points(buttons[0], buttons[1], player) elif opponent == "calculator" and player == 1: result = game.get_result_calc() print("result e ", result[0], result[1]) # 0,0 semnifica faptul ca utilizatorul a apasat gresit( pe partea celuilalt) sau # oponentul a incercat sa-si mute piesele lui cand nu era randul sau if result[0] == 0 and result[1] == 0: self.text_label.setStyleSheet( "font: bold; font-size:16px; color:red") self.text_label.setText("Nu este randul tau!") buttons[0] = " " buttons[1] = " " ok = 0 QApplication.processEvents() # 0,1 sau 4,2 semnifica o mutare gresita din punct de vedere a regulilor jocului if (result[0] == 0 and result[1] == 1) or (result[0] == 4 and result[1] == 2): self.text_label.setStyleSheet( "font: bold; font-size:16px; color:red") self.text_label.setText( "Nu ai mutat conform regulilor! Te rog sa refaci ultima mutare!" ) buttons[1] = " " QApplication.processEvents() ok = 0 # 2,0 semnifica incercarea de inceput de la o groapa fara puncte if result[0] == 2 and result[1] == 0: self.text_label.setStyleSheet( "font: bold; font-size:16px; color:red") self.text_label.setText( "Groapa nu are niciun punct! Te rog sa refaci ultima mutare!") buttons[0] = " " buttons[1] = " " ok = 0 QApplication.processEvents() # daca utilizatorul a mutat corect, ok a ramas 1 if ok == 1: button2 = buttons[1] # rezultatul cu 1 pe prima pozitie semnifica mutari corecte # 1,0 semnifica faptul ca randul playerului curent s-a terminar, asa ca se va actualiza playerul # si se va afisa acest lucru in text_label if result[0] == 1 and result[1] == 0: if player == 1: player = 0 nume = "A" else: player = 1 nume = "B" self.text_label.setStyleSheet( "font: bold; font-size:16px; color:black") self.text_label.setText("Este randul lui " + nume) # se va actualiza si in partea de joc playerul game.set_player(player) QApplication.processEvents() # daca utilizatorul joaca cu calculatorul, se actualizeaza intai punctele ultimului buton # apasat, iar mai apoi se apeleaza functia pentru mutarea calculatorului if opponent == "calculator" and nume == "B": if game.get_points(buttons[1]) <= 6 or (buttons[1] == "A" or buttons[1] == "B"): self.convert_str_to_button(buttons[1]).setText( self.convert_points_to_text(game.get_points( buttons[1]))) else: self.convert_str_to_button(buttons[1]).setText( str(game.get_points(buttons[1]))) QApplication.processEvents() game.move_calculator() # se face update la textul butoanelor "apasate" de calculator self.update_buttons_calc() buttons[0] = " " buttons[1] = " " # 1,1 semnifica exceptia 1- ultima piatra a ajuns in groapa playerului curent # se actualizeaza textul afisat in functie de oponent, iar daca oponentul e calculatorul # se apeleaza functia pentru mutarea lui si se actualizeaza punctele if result[0] == 1 and result[1] == 1: self.text_label.setStyleSheet( "font: bold; font-size:16px; color:black") if opponent == "calculator" and player == 1: self.text_label.setText( "Ultima piatra a ajuns in banca calculatorului, va muta din nou!" ) buttons[0] = " " if game.get_points(buttons[1]) <= 6 or (buttons[1] == "A" or buttons[1] == "B"): self.convert_str_to_button(buttons[1]).setText( self.convert_points_to_text(game.get_points( buttons[1]))) else: self.convert_str_to_button(buttons[1]).setText( str(game.get_points(buttons[1]))) buttons[1] = " " QApplication.processEvents() game.move_calculator() self.update_buttons_calc() else: self.text_label.setText( "Ultima piatra a ajuns in banca ta, poti muta din nou!") buttons[0] = " " buttons[1] = " " QApplication.processEvents() # 1,2 semnifica exceptia 2 # se schimba playerul curent in ambele fisiere si se actualizeaza punctele conform dictionarului # de puncte din game.py if result[0] == 1 and result[1] == 2: self.text_label.setStyleSheet( "font: bold; font-size:16px; color:black") if player == 1: player = 0 nume = "A" points_b = game.get_points("B") self.BButton.setText(self.convert_points_to_text(points_b)) else: player = 1 nume = "B" points_a = game.get_points("A") self.AButton.setText(self.convert_points_to_text(points_a)) if opponent == "calculator" and nume == "A": self.text_label.setText( "Calculatorul aduna toate pietrele din groapa opusa+ultima piatra. Urmeaza randul tau!" ) time.sleep(1) buttons[0] = " " buttons[1] = " " # butonul opus ultimului buton apasat are 0 puncte ex2b = game.get_exc2_buttons() self.convert_str_to_button(ex2b[1]).setText("0") game.set_player(player) QApplication.processEvents() else: self.text_label.setText( "Aduni toate pietrele din groapa opusa+ultima piatra. Urmeaza randul lui " + nume) time.sleep(1) buttons[0] = " " if game.get_points(buttons[1]) <= 6 or (buttons[1] == "A" or buttons[1] == "B"): self.convert_str_to_button(buttons[1]).setText( self.convert_points_to_text(game.get_points( buttons[1]))) else: self.convert_str_to_button(buttons[1]).setText( str(game.get_points(buttons[1]))) buttons[1] = " " ex2b = game.get_exc2_buttons() self.convert_str_to_button(ex2b[1]).setText("0") game.set_player(player) QApplication.processEvents() # daca oponentul este calculatorul, se apeleaza functia game.move_calculator() pentru # mutarea acestuia si apoi se actualizeaza punctele din butoanele "apasate" de el if opponent == "calculator" and nume == "B": game.move_calculator() self.update_buttons_calc() # 1,3 semnifica o mutare corecta fara exceptii si in curs de derulare # se actualizeaza numarul de pietre care mai trebuie plasate in gropi/banca si se afiseaza if result[0] == 1 and result[1] == 3: self.text_label.setStyleSheet( "font: bold; font-size:16px; color:black") value = game.get_value() if value != 1: self.text_label.setText("Mai ai in mana " + str(value) + " pietre!") else: self.text_label.setText("Mai ai in mana o piatra!") buttons[0] = buttons[1] buttons[1] = " " # jocul s-a terminat, deci se vor bloca butoanele, se vor updata punctele din banci, gropile # vor avea toate 0 puncte si se va afisa castigatorul if result[0] == 3: game_over = 1 if result[1] != 2: if result[1] == 0: nume = "A" else: nume = "B" self.text_label.setStyleSheet( "font: bold; font-size:20px; color:green") self.text_label.setText( "Jocul s-a terminat! Castigatorul este " + nume + "!") else: self.text_label.setStyleSheet( "font: bold; font-size:20px; color:green") self.text_label.setText("Jocul s-a terminat! Este remiza!") self.block_buttons() a = game.get_points("A") b = game.get_points("B") print(a, b, "puncte") self.AButton.setText(str(a)) self.BButton.setText(str(b)) self.set_zero() QApplication.processEvents() return -2 # daca mutarea a fost corecta se vor returna punctele butonului apasat if ok == 1: return game.get_points(button2) else: # altfel, -1 return -1