the_snake_game.py

Created by antarctus

Created on November 07, 2021

5.07 KB

Une version amélioré (graphique) de “The_snake.py” aussi créée par moi.
Nécessite absolument ce module pour marcher. Alors voici un lien vers the_snake.py.
Les modes de jeu (une fois débloqué) se sélectionne avec les 6 boutons supérieurs de la calculatrice ou avec les flèches.
Un shop est disponible avec le bouton Shift .
Rejoignez le discord pour être au courant des dernières mise à jours : https://discord.gg/wNtEFdQgWD .
Ce programme est DE NOUVEAU à jour avec la modification du 7 Novembre.


try:
  from the_snake import *

except:
  print("je necessice un module nomme The_snake.py disponible a:\n https://my.numworks.com/python/antarctus/the_snake \n\n")
  raise

pommes_bouffe=0
niv=0
coefficient=2
b_score=0
score=0
mode_selectionne=0
marge_erreur=0
produit=0
s=None
KEY_QUIT=KEY_BACKSPACE
KEY_SHOP=KEY_SHIFT


mode_possible=(
((1,(255,0,0),1,1),), #best 125
((1,(170,0,0),-1,1),(2,(170,0,0),3,1)),
((1,(255,0,255),7,1,[(1,(50,50,50),-1000,1),]),),
((1,(255,0,0),1,2),(1,(255,200,0),5,1)),
((2,(0,255,255),8,1,[],3),),#best 192
((1,(255,0,0),1,1),(1,(170,0,0),-1,1),(2,(170,0,0),3,1),(1,(255,0,255),7,1,[(1,(0,0,0),-1000,1),]),(1,(255,0,0),1,2),(1,(255,200,0),5,1),(2,(0,255,255),8,1,[],3))
)

produits=[
[(0,255,0),0,True],
[(0,255,255),10,False],
[(0,0,255),20,False],
[(255,0,255),30,False],
[(255,0,0),40,False],
[(255,255,0),50,False],
[(0,0,0),80,False],
[[(0,250,0),(0,200,0),(0,150,0),(0,100,0),(0,150,0),(0,200,0),],160,False],
[[(0,250,250),(0,200,200),(0,150,150),(0,100,100),(0,150,150),(0,200,200),],180,False],
[[(0,0,250),(0,0,200),(0,0,150),(0,0,100),(0,0,150),(0,0,200),],200,False],
[[(250,0,250),(200,0,200),(150,0,150),(100,0,100),(150,0,150),(200,0,200),],220,False],
[[(255,0,0),(200,0,0),(150,0,0),(100,0,0),(150,0,0),(200,0,0)],240,False],
[[(250,250,0),(200,200,0),(150,150,0),(100,100,0),(150,150,0),(200,200,0),],260,False],
[[(0,0,0),(50,50,50),(100,100,100),(150,150,150),(100,100,100),(50,50,50),],280,False],
[[(0,255,0),(0,255,255),(0,0,255),(255,0,255),(255,0,0),(255,255,0)],500,False]
]


def cadenas(x,y,text,couleur=(50,50,50),condition=False):

  fill_rect(x+15,y+5,20,10,couleur)

  fill_rect(x+30,y+10,10,15,couleur)
  fill_rect(x+10,y+10,10,8,couleur)
  
  if not condition:
    fill_rect(x+10,y+18,10,7,couleur)

  fill_rect(x+5,y+25,40,25,couleur)

  draw_string(text,x+25-(5*len(text)),y+30,(255,255,255),couleur)


def man():
  global niv
  niv=int(pommes_bouffe**(1/coefficient))


def draw(arg=""):
  fill_rect(0,0,320,222,(255,255,255))

  draw_string("Niveau "+str(niv),100,10)

  fill_rect(68,28,154,14,(200,200,200))
  fill_rect(70,30,int(150*((pommes_bouffe-niv**coefficient)/((niv+1)**coefficient-niv**coefficient))),10,(240,0,0))

  fill_rect(265,15,40,30,(255,0,0))
  draw_string(str(pommes_bouffe),285-(5*len(str(pommes_bouffe))),20,(0,0,0),(255,0,0))

  if arg=="only_score":
    return

  draw_string("Score: "+str(score),80,60)
  draw_string("Meilleur score: "+str(b_score),80,80,(255*(b_score==score),0,0))

  draw_string("Shop: Shift",80,110)
  draw_string("Jouer: Ok",80,130)
  draw_string("Quitter: <X",80,150)

  fill_rect(10+mode_selectionne*50,172,50,50,(200,200,200))
  for i in range(6):
    cadenas(10+i*50,172,str(i*5),condition=niv>=i*5)

man()


while True:
  try:
    draw()
    sleep(0.5)

    while not(keydown(KEY_OK) or keydown(KEY_QUIT) or keydown(KEY_SHOP)):
      if keydown(KEY_PI):
        pommes_bouffe+=10
        man()
        draw()
      for i in range(12,18):
        if keydown(i) and niv>=(i-12)*5:
          mode_selectionne=i-12
          draw()
      if keydown(0) or keydown(3):
        mode_selectionne+=keydown(3)-keydown(0)
        mode_selectionne%=int(niv/5)+1
        if mode_selectionne>5:
          mode_selectionne=5
        draw()
      sleep(0.05)

    if keydown(KEY_QUIT):
      print("Total des pommes mangee: "+str(pommes_bouffe))
      break

    if keydown(KEY_SHOP):
      while keydown(KEY_SHOP):
        pass

      while not keydown(KEY_SHOP):

        draw("only_score")
        fill_rect(15+60*(produit%5),47+60*(produit//5),56,56,(200,200,200))

        for i in range(len(produits)):

          fill_rect(18+60*(i%5),50+60*(i//5),50,50,(220,220,100+120*(not produits[i][2])))

          draw_string(str(produits[i][1]),35+60*(i%5),80+60*(i//5))

          if type(produits[i][0])==type([2,3]):
            for j in range(6):
              fill_rect(20+[0,0,0,10,20,20][j]+(i%5)*60,50+60*(i//5)+[20,10,0,0,0,10][j],10,10,produits[i][0][j%len(produits[i][0])])

          if type(produits[i][0])==type((255,0,4)):
            for j in range(6):
              fill_rect(20+[0,0,0,10,20,20][j]+(i%5)*60,50+60*(i//5)+[20,10,0,0,0,10][j],10,10,produits[i][0])

        while not (keydown(0) or keydown(1) or keydown(2) or keydown(3) or keydown(KEY_OK)):
          pass

        if keydown(0) or keydown(3):
          produit+=keydown(3)-keydown(0)

        elif keydown(1) or keydown(2):
          produit+=5*(keydown(2)-keydown(1))

        produit%=len(produits)

        if keydown(KEY_OK):
          if pommes_bouffe>=produits[produit][1] and produits[produit][2]!=True:
            pommes_bouffe-=produits[produit][1]
            produits[produit][2]=True
            man()
            mode_selectionne=0
        sleep(0.1)
      sleep(0.2)
      continue

    commencer(m=mode_possible[mode_selectionne],c=produits[produit*(produits[produit][2])][0])
    draw_all()
    score=boucler(0.1)

    while not(keydown(KEY_OK) or keydown(KEY_QUIT)):
      sleep(0.05)
    pommes_bouffe+=score
    if score>b_score:
      b_score=score
    man()

  except KeyboardInterrupt:
    if marge_erreur>100:
      break
    else:
      marge_erreur+=1