karas.py

Created by yaya-cout

Created on November 29, 2022

1.99 KB

Nouvelle version du jeu disponible ici !

Jeu dont le but est d’éviter les voitures (carés noirs tombant du haut de l’écran) en jouant le carré vert. Le jeu est infini.

Les informations de score apparaissent lorsque que la première voiture a fini sa traversée. Les trois chiffres sont respectivement : le nombre total de voitures passées, le pourcentage de voitures évitées et le nombre de morts.

Le jeu peut être modifié en changeant les variables du début du script (désolé pour l’orthographe) : width sert à donner la taille des voitures et du joueur, space set à donner l’espace entre deux voitures, speed sert à donner la vitesse initiale (petit = rapide, grand = lent) et screen_x_end sert à donner la largeur de l’écran de jeu en pixels.

Le nom du jeu vient du mot “car race” en anglais, qui, écrit littéralement, donne “karas”


from kandinsky import *
from time import *
from random import *
from ion import *
width=10
heidth=width
#space=2
space=0
speed=.5
screen_x_end=250
class Car:
  def __init__(self,id):
    self.id=id
    self.x=self.id*(width+space)
    self.y=0
    try:
      self.iter+=1
    except:
      self.iter=0
    self.update_at=monotonic()+uniform(0,5)
    print("Car",id,"initialized")
    fill_rect(self.x,self.y,width,heidth,"black")
    
  def update(self):
    time_now=monotonic()
    if not time_now>self.update_at:
      return
    fill_rect(self.x,self.y,width,heidth,"white")
    self.y+=heidth
    fill_rect(self.x,self.y,width,heidth,"black")
    self.update_at=self.update_at+speed
    if self.y>222:
      self.__init__(self.id)
      
  def touching(self,x,y):
    if x>=self.x and x<(self.x+heidth):
      if y>=self.y and y<(self.y+width):
        return True
    return False

def draw_player(x):
  fill_rect(x,y,heidth,width,"green")

car_lst=[]
for id in range(int(screen_x_end/(width+space))):
  car_lst.append(Car(id))

x=0
y=200
lost=0
last_motion=monotonic()
while True:
  speed-=0.0001
  speed=max(0.02,speed)
#  speed=max(0.01,speed)
  total=0
  for car in car_lst:
    if car.touching(x,y):
      lost+=1
      print("You lose",lost,"times")
      car.__init__(car.id)
    total+=car.iter
    car.update()
  draw_player(x)
  print(lost,total)
  if total:
    draw_string(str(total-lost),screen_x_end,160)
    draw_string(str(round(100-lost/total*100,1))[:4]+"%     ",screen_x_end,180)
    draw_string(str(lost),screen_x_end,200)
  can_move=(monotonic()-last_motion)>speed
#  can_move=(monotonic()-last_motion)>0.1
  if can_move and keydown(KEY_LEFT):
    if x-width+space<0:
      continue
    fill_rect(x,y,heidth,width,"white")
    x-=width+space
    draw_player(x)
    last_motion=monotonic()
  if can_move and keydown(KEY_RIGHT):
    if x+width+space>(screen_x_end-width-space):
      continue
    fill_rect(x,y,heidth,width,"white")
    x+=width+space
    draw_player(x)
    last_motion=monotonic()