M14 | L6 – Conceptul aleatoriu – Jocuri simple cu Python

Astăzi vom afla despre:

  • Functia random

Aplicațiile pe care le vom folosi sunt:

Replit, python

PROIECTE:

Jocuri

Joc de Ghicit

#GuessingGame.py

import random

the_number = random.randint(1, 10)

guess = int(input(„Guess a number between 1 and 10: „))

while guess != the_number:

    if guess > the_number:

        print(guess, „was too high. Try again.”)

    if guess < the_number:

        print(guess, „was too low. Try again.”)

    guess = int(input(„Guess again: „))

print(guess, „was the number! You win!”)

Spirale Colorate

#RandomSpirals.py

import random

import turtle

t = turtle.Pen()

turtle.bgcolor(„black”)

colors = [„red”, „yellow”, „blue”, „green”, „orange”, „purple”,

          „white”, „gray”]

for n in range(50):

    # Generate spirals of random sizes/colors at random locations

    t.pencolor(random.choice(colors))   # Pick a random color

    size = random.randint(10,40)        # Pick a random spiral size

    # Generate a random (x,y) location on the screen

    x = random.randrange(-turtle.window_width()//2,

                         turtle.window_width()//2)

    y = random.randrange(-turtle.window_height()//2,

                         turtle.window_height()//2)

    t.penup()

    t.setpos(x,y)

    t.pendown()

    for m in range(size):

        t.forward(m*2)

        t.left(91)

Piatra Hartie Foarfece

#RockPaperScissors.py

import random

choices = [„rock”, „paper”, „scissors”]

print(„Rock crushes scissors. Scissors cut paper. Paper covers rock.”)

player = input(„Do you want to be rock, paper, or scissors (or quit)? „)

while player != „quit”:                 # Keep playing until the user quits

    player = player.lower()             # Change user entry to lowercase

    computer = random.choice(choices)   # Pick one of the items in choices

    print(„You chose ” +player+ „, and the computer chose ” +computer+ „.”)

    if player == computer:

        print(„It’s a tie!”)

    elif player == „rock”:

        if computer == „scissors”:

            print(„You win!”)

        else:

            print(„Computer wins!”)

    elif player == „paper”:

        if computer == „rock”:

            print(„You win!”)

        else:

            print(„Computer wins!”)

    elif player == „scissors”:

        if computer == „paper”:

            print(„You win!”)

        else:

            print(„Computer wins!”)

    else:

        print(„I think there was some sort of error…”)

    print()                             # Skip a line

    player = input(„Do you want to be rock, paper, or scissors (or quit)? „)

Joc de carti

import random

suits = [„clubs”, „diamonds”, „hearts”, „spades”]

faces = [„two”, „three”, „four”, „five”, „six”, „seven”, „eight”, „nine”, „ten”, „jack”, „queen”, „king”, „ace”]

keep_going = True

while keep_going:

my_face = random.choice(faces)

my_suit = random.choice(suits)

your_face = random.choice(faces)

your_suit = random.choice(suits)

print(„I have the”, my_face, „of”, my_suit)

print(„You have the”, your_face, „of”, your_suit)

if faces.index(my_face) > faces.index(your_face):

print(„I win!”)

elif faces.index(my_face) < faces.index(your_face):

print(„You win!”)

else:

print(„It’s a tie!”)

answer = input(„Hit [Enter] to keep going, any key to exit: „)

keep_going = (answer == „”)

Joc de zaruri

# FiveDice.py

import random

# Game loop

keep_going = True

while keep_going:

    # „Roll” five random dice

    dice = [0,0,0,0,0]          # Set up an array for five values dice[0]-dice[4]

    for i in range(5):          # „Roll” a random number from 1-6 for all 5 dice

        dice[i] = random.randint(1,6)

    print(„You rolled:”, dice)  # Print out the dice values

    # Sort them

    dice.sort()

    # Check for five of a kind, four of a kind, three of a kind

    # Yahtzee – all five dice are the same

    if dice[0] == dice[4]:

        print(„Yahtzee!”)

    # FourOfAKind – first four are the same, or last four are the same

    elif (dice[0] == dice[3]) or (dice[1] == dice[4]):

        print(„Four of a kind!”)

    # ThreeOfAKind – first three, middle three, or last three are the same

    elif (dice[0] == dice[2]) or (dice[1] == dice[3]) or (dice[2] == dice[4]):

        print(„Three of a kind”)

    keep_going = (input(„Hit [Enter] to keep going, any key to exit: „) == „”)

Kaleidoscope

#Kaleidoscope.py

import random

import turtle

t = turtle.Pen()

t.speed(0)

turtle.bgcolor(„black”)

colors = [„red”, „yellow”, „blue”, „green”, „orange”, „purple”, „white”, „gray”]

for n in range(50):

    # Generate spirals of random sizes/colors at random locations on the screen

    t.pencolor(random.choice(colors))   # Pick a random color from colors[]

    size = random.randint(10,40)        # Pick a random spiral size from 10 to 40

    # Generate a random (x,y) location on the screen

    x = random.randrange(0,turtle.window_width()//2)

    y = random.randrange(0,turtle.window_height()//2)

    # First spiral

    t.penup()

    t.setpos(x,y)

    t.pendown()

    for m in range(size):

        t.forward(m*2)

        t.left(91)

    # Second spiral

    t.penup()

    t.setpos(-x,y)

    t.pendown()

    for m in range(size):

        t.forward(m*2)

        t.left(91)   

    # Third spiral

    t.penup()

    t.setpos(-x,-y)

    t.pendown()

    for m in range(size):

        t.forward(m*2)

        t.left(91)

    # Fourth spiral

    t.penup()

    t.setpos(x,-y)

    t.pendown()

    for m in range(size):

        t.forward(m*2)

        t.left(91)

Provocare 1:

Adăugați mai multă aleatorie la Kaleidoscope.py adăugând încă două variabile aleatorii. Adăugați o latură variabilă pentru numărul de laturi și apoi utilizați acea variabilă pentru a schimba unghiul pe care îl rotim de fiecare dată în bucla spirală (și, prin urmare, numărul de laturi din spirală) folosind 360 / laturi + 1 ca unghi în loc de 91. Apoi, creați o variabilă numită gros care va stoca un număr aleatoriu între 1 și 6 pentru grosimea țarcului țestoase. Adăugați linia t. Lățime (groasă) în locul potrivit pentru a schimba grosimea liniilor fiecărei spirale din calidoscopul nostru ran-dom.

Provocare 2:

Dacă cunoașteți o anumită geometrie, încă două modificări fac acest caleidoscop și mai realist. În primul rând, țineți evidența direcției (între 0 și 360 de grade), țestoasa este îndreptată înainte de a desena prima spirală obținând rezultatul t.heading () și stocând-o într-o variabilă numită unghi. Apoi, înainte de a desena fiecare spirală oglindită, modificați unghiul în direcția corectă oglindită, îndreptând broasca țestoasă cu t.setheading (). Sugestie: al doilea unghi va fi 180 – unghi, al treilea unghi al spiralei va fi unghi – 180, iar al patrulea va fi 360 – unghi.

Apoi, încercați să vă rotiți la stânga după fiecare linie trasată pentru prima și a treia spirală și să vă întoarceți la dreapta de fiecare dată pentru a doua și a patra spirală. Dacă implementați aceste îmbunătățiri, spiralele dvs. ar trebui să arate într-adevăr ca imagini oglindă reciproce în ceea ce privește dimensiunea, forma, culoarea, grosimea și orientarea. Dacă doriți, puteți chiar să împiedicați formele să se suprapună atât de mult schimbând intervalul valorilor coordonatelor x și y în random.randrange (size, turtle.window_width () // 2) și random.randrange (size, broasca testoasa.window_height () // 2).

Provocare 3:

Transformați HighCard.py în jocul complet al războiului, făcând trei modificări. În primul rând, țineți scorul: creați două variabile pentru a urmări câte mâini a câștigat computerul și câte a câștigat utilizatorul. În al doilea rând, simulează jocul unui pachet complet de cărți împărțind 26 de mâini (poate folosind o buclă for în loc de bucla noastră while sau ținând evidența numărului de mâini jucate până acum) și apoi declară un câștigător în funcție de jucătorul care are mai multe puncte . În al treilea rând, gestionați legăturile amintindu-vă câte legături s-au întâmplat la rând; apoi, data viitoare când câștigă unul dintre jucători, adăugați numărul de egalități recente la scorul câștigătorului și setați numărul de egalități înapoi la zero pentru runda următoare.