splash.py

Created by schraf

Created on February 02, 2024

1.93 KB

Tuto détaillé sur la création de ce jeu (utile si vous suivez la filière NSI au lycée)

But

Obtenir le plus grand territoire possible en lançant de la peinture.

Comment jouer ?

  • A la ligne n°79 il y a un 0 après le -100, cela signifie qu’il s’agit d’un joueur humain
  • A la ligne n°80 il y a un 1 après le 100, cela signifie que c’est la calculatrice qui joue.

Donc mettez des 0 ou des 1 pour avoir 2 joueurs humains ou pour que la calculatrice joue toute seule.

Les touches sont les flèches gauche et droite et pour lancer la peinture, restez appuyé plus ou moins longtemps sur la flèche vers le bas (Flèche vers le haut pour le 2e joueur humain) pour définir la distance du jet.


from turtle import *
from time import *
from ion import *
from random import randint
from kandinsky import fill_rect, get_pixel, draw_string
from math import sqrt

def pause(a):
 setheading(a)
 sleep(0.02)

def dist(rvb1, rvb2):
 (r1, v1, b1), (r2, v2, b2) = rvb1, rvb2
 return sqrt((r1 - r2) ** 2 + (v1 - v2) ** 2 + (b1 - b2) ** 2)

def score(*joueurs):
 hideturtle()
 for c in range(320):
  for l in range(222):
   v = get_pixel(c, l)
   if v != BL:
    for j in joueurs:
     d = dist(v, j.rvb)
     if d < 100: j.score += 1 / (1 + d)
 total = sum(j.score for j in joueurs)
 for j in joueurs:
  draw_string("{0:.2f}".format(100 * j.score / total), 140, 100 - j.pos, BL, j.coul)

class joueur:
 def __init__(self, coul, pos, ia, mi, ma, jet, gau, drte):
  self.coul = coul
  self.pos = pos
  self.ia = ia
  self.dep = (mi + ma) / 2
  self.mi = mi
  self.ma = ma
  self.jet = jet
  self.gau = gau
  self.drte = drte
  self.score = 0  
  if pos > 0:
   fill_rect(0, 0, 320, 5, coul)
   self.rvb = get_pixel(0, 0)
  else:
   fill_rect(0, 217, 320, 5, coul)
   self.rvb = get_pixel(0, 217)

 def tour(self):
  hideturtle()
  color("black")
  penup()
  goto(0, self.pos)
  setheading(self.dep)
  showturtle()
  if self.ia:
   t = monotonic()
   a = self.dep
   while monotonic() - t < 0.4:
    a = max(self.mi, min(self.ma, a + randint(-10, 10)))
    pause(a)
   d = randint(1, 200)
  else:
   a = self.dep 
   while not keydown(self.jet):
    if keydown(self.gau):
     a = min(self.ma, a + 5)
     pause(a)
    elif keydown(self.drte):
     a = max(self.mi, a - 5)
     pause(a)
   d = 0
   while keydown(self.jet): d += 0.2
  fd(d)
  color(self.coul)
  pendown()
  pensize(randint(20, 80))
  for _ in range(6): goto(position())

j1 = joueur("purple", -100, 0, 0, 180, KEY_DOWN, KEY_LEFT, KEY_RIGHT)
j2 = joueur("orange", 100, 1, -180, 0, KEY_UP, KEY_RIGHT, KEY_LEFT)

BL = get_pixel(10, 10)
turn = 0

while turn < 10:
 j1.tour()
 j2.tour()
 turn += 1

score(j1, j2)

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our <a href="https://www.numworks.com/legal/cookies-policy/">cookies policy</a>.