Înapoi la blog
#python#joc#proiect#random

Jocul Piatră-Hârtie-Foarfecă în Python

Construiește pas cu pas jocul Piatră-Hârtie-Foarfecă în Python: alegerea calculatorului cu random, logica de câștig, scor și mai multe runde. Cod complet.

Piatră-Hârtie-Foarfecă e jocul perfect de învățat programare: îl știe toată lumea, regulile sunt simple, dar logica de câștig te pune frumos la treabă cu condiții și dicționare. Hai să-l construim de la zero, pas cu pas.

Regulile, pe scurt

Fiecare jucător alege una dintre trei variante. Câștigătorul se decide așa:

  • piatra bate foarfeca;
  • foarfeca bate hârtia;
  • hârtia bate piatra;
  • alegeri egale = remiză.

Pasul 1: alegerea calculatorului

Calculatorul alege aleator cu modulul random:

import random

optiuni = ["piatra", "hartie", "foarfeca"]
alegere_pc = random.choice(optiuni)

random.choice ia un element la întâmplare dintr-o listă. Simplu și exact ce ne trebuie.

Pasul 2: citirea alegerii jucătorului

Cerem input și ne asigurăm că e valid, repetând până primim o opțiune corectă:

def citeste_alegere():
    while True:
        a = input("Alege (piatra/hartie/foarfeca): ").strip().lower()
        if a in optiuni:
            return a
        print("Opțiune invalidă. Încearcă din nou.")

Pasul 3: cine câștigă?

Aici e inima jocului. Cea mai curată variantă e un dicționar care spune, pentru fiecare alegere, pe cine bate:

bate = {
    "piatra": "foarfeca",
    "foarfeca": "hartie",
    "hartie": "piatra",
}

def cine_castiga(jucator, pc):
    if jucator == pc:
        return "remiza"
    if bate[jucator] == pc:
        return "jucator"
    return "pc"

Logica e elegantă: dacă ce a bătut jucătorul (bate[jucator]) e fix alegerea calculatorului, jucătorul câștigă. Altfel, dacă nu e remiză, câștigă calculatorul. Niciun lanț lung de if-uri.

Un dicționar bine gândit poate înlocui zeci de condiții. Când vezi multe if repetitive, întreabă-te dacă nu cumva o structură de date le poate înlocui.

Pasul 4: o rundă completă

Legăm pașii într-o singură rundă care întoarce rezultatul:

def runda():
    jucator = citeste_alegere()
    pc = random.choice(optiuni)
    print(f"Calculatorul a ales: {pc}")

    rezultat = cine_castiga(jucator, pc)
    if rezultat == "remiza":
        print("Remiză!")
    elif rezultat == "jucator":
        print("Ai câștigat runda!")
    else:
        print("Calculatorul a câștigat runda.")
    return rezultat

Pasul 5: scor și mai multe runde

Jucăm până când cineva ajunge la 3 puncte:

def main():
    scor_jucator = 0
    scor_pc = 0
    print("=== Piatră-Hârtie-Foarfecă ===")
    print("Primul la 3 puncte câștigă!\n")

    while scor_jucator < 3 and scor_pc < 3:
        rezultat = runda()
        if rezultat == "jucator":
            scor_jucator += 1
        elif rezultat == "pc":
            scor_pc += 1
        print(f"Scor: Tu {scor_jucator} - {scor_pc} PC\n")

    if scor_jucator == 3:
        print("Felicitări, ai câștigat meciul!")
    else:
        print("Calculatorul a câștigat meciul. Revanșă?")

main()

Cum îl rulezi

Pune tot codul într-un fișier phf.py și rulează în terminal:

# în terminal:
# python phf.py

Idei de îmbunătățire

FuncțieCum
Statisticinumără câte runde ai câștigat în total
Variantă extinsăadaugă „șopârlă" și „Spock"
Istoricsalvează rezultatele într-un fișier
Interfață graficăreconstruiește cu tkinter și butoane

Pentru varianta extinsă, frumusețea e că trebuie doar să actualizezi dicționarul bate cu noile reguli — restul codului rămâne neschimbat. Asta arată cât de bine ai structurat logica.

Recapitulare

Ai folosit random, citire validată, dicționare pentru logică, funcții și o buclă cu scor. Sunt fix uneltele de care ai nevoie în orice proiect mai mare.

La ByteSchool învățăm prin proiecte ca acesta, pas cu pas, alături de mentori care au lucrat în companii Big Tech. Te ajutăm să transformi joaca în abilități reale de programator.