snake.py

Created by rosepadilla546

Created on October 15, 2021

8.71 KB


# Type your text here#Version 1.7 STABLE
#Tip: You should try to press
#some keys in the menu...
from random import *
from kandinsky import *
from ion import *
from time import *
#from pomme import * 
def oscolor():
  try:
    get_keys()
  except:
    return 'orange'
  else:
    return 'red'
def lastPos(i,x,y):
  if i[-1]==3:
    pos=[x-10,y]
  elif i[-1]==2:
    pos=[x,y-10]
  elif i[-1]==0:
    pos=[x+10,y]
  elif i[-1]==1:
    pos=[x,y+10]
  pos[0],pos[1]=checkTeleport(pos[0],pos[1])
  return pos
def newApple(appleC,bgC):
  applex=randint(0,31)*10+4
  appley=randint(0,21)*10+5
  while get_pixel(applex,appley)!=bgC:
    applex=randint(0,31)*10+4
    appley=randint(0,21)*10+5
  fill_rect(applex-4,appley-4,10,10,appleC)
  return applex,appley
def checkTeleport(x,y):
  if x<4:
    x=314
  if x>314:
    x=4
  if y<5:
    y=215
  if y>215:
    y=5
  return x,y
def getMove(u):
  for k in range(4):
    if keydown(k)==True and u+k!=3: return k
  return u
def clearDraw(): fill_rect(0,0,320,222,(255,255,255))
def clearHome(): print("\n \n \n \n \n \n \n \n \n \n \n \n \n ")
def redraw():
  draw_string("(DELETE to exit)",0,0)
  printLetter([1,1,1,1,0,0,1,1,1,0,0,1,1,1,1],70,80,10,(0,204,0))
  fill_rect(95,80,2,4,(0,0,0))
  fill_rect(95,86,2,4,(0,0,0))
  fill_rect(100,84,4,2,(255,0,0))
  fill_rect(104,82,2,2,(255,0,0))
  fill_rect(104,86,2,2,(255,0,0))
  printLetter([1,1,1,1,0,1,1,0,1,1,0,1,1,0,1],110,80,10,(0,0,0))
  printLetter([1,1,1,1,0,1,1,1,1,1,0,1,1,0,1],150,80,10,(0,0,0))
  printLetter([1,0,1,1,0,1,1,1,0,1,0,1,1,0,1],190,80,10,(0,0,0))
  printLetter([1,1,1,1,0,0,1,1,1,1,0,0,1,1,1],230,80,10,(0,0,0))
def printLetter(letter,x,y,size,color):
  for yi in range(5):
    for xi in range(3):
      if letter[yi*3+xi]==1:
        fill_rect(x+(xi*size),y+(yi*size),size,size,color)
def menu():
  clearDraw()
  printLetter([1,1,1,1,0,1,1,0,1,1,0,1,1,0,1],110,80,10,(0,0,0))
  printLetter([1,1,1,1,0,1,1,1,1,1,0,1,1,0,1],150,80,10,(0,0,0))
  printLetter([1,0,1,1,0,1,1,1,0,1,0,1,1,0,1],190,80,10,(0,0,0))
  printLetter([1,1,1,1,0,0,1,1,1,1,0,0,1,1,1],230,80,10,(0,0,0))
  anim=[1,1,1,1,1,1,1,1,1,4,4,3,3,4,4,1,1]
  ax=0
  ay=120
  aendx=-110
  aendy=120
  u=1
  aback=0
  for i in range(len(anim)):
    ax=ax+((anim[i]==1)-(anim[i]==3))*10
    ay=ay+((anim[i]==2)-(anim[i]==4))*10
    if aendx<0:
      aendx=aendx+10
    else:
      aendx=aendx+((anim[i-11]==1)-(anim[i-11]==3))*10
      aendy=aendy+((anim[i-11]==2)-(anim[i-11]==4))*10
      fill_rect(aendx,aendy,10,10,(255,255,255))
    fill_rect(ax,ay,10,10,(0,204,0))
#    aback=lastPos(anim,ax,ay)
#    if u==26 or u==24:
#      fill_rect(ax-1,ay-1,3,1,(0,0,0))
#      fill_rect(ax-1,ay+1,3,1,(0,0,0))
#      fill_rect(aback[0],aback[1],10,10,(0,204,0))
#    elif u==34 or u==25:
#      fill_rect(ax-1,ay-1,1,3,(0,0,0))
#      fill_rect(ax+1,ay-1,1,3,(0,0,0))
#      fill_rect(aback[0]-2,aback[1]-2,5,5,(0,204,0))
    sleep(0.05)
  fill_rect(ax+5,ay,2,4,(0,0,0))
  fill_rect(ax+5,ay+6,2,4,(0,0,0))
  fill_rect(ax+10,ay+4,4,2,(255,0,0))
  fill_rect(ax+14,ay+2,2,2,(255,0,0))
  fill_rect(ax+14,ay+6,2,2,(255,0,0))
  draw_string("(DELETE to exit)",0,0)
  draw_string("> Play <",125,140,oscolor())
  draw_string("  Options  ",110,165)
  darkMode=0
  Speed=0.05
  power=5
  score=1
  exit=0
  sel=1
  while keydown(KEY_OK)!=True and exit==0:
    if keydown(KEY_DOWN) and sel==1:
      draw_string("  Play  ",125,140)
      draw_string("> Options <",110,165,oscolor())
      sel=2
    elif keydown(KEY_UP) and sel==2:
      draw_string("> Play <",125,140,oscolor())
      draw_string("  Options  ",110,165)
      sel=1
    if keydown(KEY_LEFTPARENTHESIS) and keydown(KEY_RIGHTPARENTHESIS):
      draw_string("Dark mode enabled !",80,195)
      darkMode=1
    if keydown(KEY_BACKSPACE):
      exit=1  
    sleep(0.1)
  if sel==2 and exit!=1:
    fill_rect(0,130,300,60,(255,255,255))
    Speed=0.05
    power=5
    score=1
    draw_string("Speed:"+str(Speed),50,140,oscolor(),'white')
    draw_string("Power:+"+str(power),200,140)
    draw_string("Score:+"+str(score),50,170)
    draw_string("Play",220,170)
    sel=1
    sleep(0.2)
    while keydown(KEY_OK)!=True or sel!=4:
      if keydown(KEY_RIGHT):
        sel=sel+1
      elif keydown(KEY_DOWN):
        sel=sel+2
      elif keydown(KEY_LEFT):
        sel=sel-1
      elif keydown(KEY_UP):
        sel=sel-2
      if sel<0:
        sel=0
      if sel>4:
        sel=4
      if sel==1:
        draw_string("Speed:"+str(Speed),50,140,oscolor(),'white')
        draw_string("Power:+"+str(power),200,140)
        draw_string("Score:+"+str(score),50,170)
        draw_string("Play",220,170)
        if keydown(KEY_OK):
          clearHome()
          Speed=input("Speed:")
          redraw()
      elif sel==2:
        draw_string("Speed:"+str(Speed),50,140)
        draw_string("Power:+"+str(power),200,140,oscolor(),'white')
        draw_string("Score:+"+str(score),50,170)
        draw_string("Play",220,170)
        if keydown(KEY_OK):
          clearHome()
          power=int(input("Power:+"))
          redraw()
      elif sel==3:
        draw_string("Speed:"+str(Speed),50,140)
        draw_string("Power:+"+str(power),200,140)
        draw_string("Score:+"+str(score),50,170,oscolor(),'white')
        draw_string("Play",220,170)
        if keydown(KEY_OK):
          clearHome()
          score=int(input("Score:"))
          redraw()
      elif sel==4:
        draw_string("Speed:"+str(Speed),50,140)
        draw_string("Power:+"+str(power),200,140)
        draw_string("Score:+"+str(score),50,170)
        draw_string("Play",220,170,oscolor(),'white')
      if (keydown(KEY_LEFTPARENTHESIS) and keydown(KEY_RIGHTPARENTHESIS)) or darkMode==1:
        draw_string("Dark mode enabled !",80,195)
        darkMode=1
      if keydown(KEY_BACKSPACE):
        exit=1
        break
      sleep(0.1)
  if exit!=1:
    if darkMode==1:
      launch(1,Speed,power,score)
    elif darkMode==0:
      launch(0,Speed,power,score)
  elif exit==1:
    clearDraw()
    return
def launch(darkmode=0,speed=0.05,applePower=5,appleScore=1):
  bgC=(248,252,248)
  borderC=(0,0,0)
  snakeC=(0,204,0)
  appleC=(248,0,0)
  if darkmode==1:
    bgC=(0,0,0)
    borderC=(0,0,204)
  fill_rect(0,0,320,222,bgC)
#  fill_rect(315,0,5,222,borderC)
#  fill_rect(0,0,5,222,borderC)
#  fill_rect(0,0,320,1,(197,52,49))
  fill_rect(0,221,320,1,(0,0,0))
  try:
    get_keys()
  except:
    fill_rect(0,0,320,1,(255,181,49))
  else:
    fill_rect(0,0,320,1,(197,52,49))
  snake=[3,3,3,3,3]
  x=154
  y=115
  endx=104
  endy=115
  u,v=3,3
  length=5
  applex,appley=newApple(appleC,bgC)
  score,touched=0,0
  while touched!=borderC and touched!=snakeC:
    if keydown(0) or keydown(1) or keydown(2) or keydown(3):
      u=getMove(u)
    if keydown(KEY_BACKSPACE):
      while keydown(KEY_BACKSPACE):
        sleep(0.1)
      while keydown(KEY_BACKSPACE)!=True:
        sleep(0.1)
      while keydown(KEY_BACKSPACE):
        sleep(0.1)
    snake.append(u)
    if x==applex and y==appley:
      length=length+float(applePower)
      applex,appley=newApple(appleC,bgC)
      score=score+int(appleScore)
    x=x+((u==3)-(u==0))*10
    y=y+((u==2)-(u==1))*10
    x,y=checkTeleport(x,y)
    if length:
      length=length-1
    else:
      snake.remove(snake[0])
      endx=endx+((v==3)-(v==0))*10
      endy=endy+((v==2)-(v==1))*10
      endx,endy=checkTeleport(endx,endy)
      v=snake[0]
      fill_rect(endx-4,endy-4,10,10,bgC)
    touched=get_pixel(x,y)
    if x<0 or x>320 or y<0 or y>220:
      touched=borderC
    if touched!=appleC and touched!=bgC:
      touched=borderC
    fill_rect(x-4,y-4,10,10,snakeC)
    back=lastPos(snake,x,y)
    if u==3 or u==0:
      fill_rect(x,y-4,2,4,(0,0,0))
      fill_rect(x,y+2,2,4,(0,0,0))
      fill_rect(back[0]-4,back[1]-4,10,10,snakeC)
    elif u==2 or u==1:
      fill_rect(x-4,y,4,2,(0,0,0))
      fill_rect(x+2,y,4,2,(0,0,0))
      fill_rect(back[0]-4,back[1]-4,10,10,snakeC)
    sleep(float(speed))
# EPILEPSY WARNING !!!
#    snakeC=(randint(0,255),randint(0,255),randint(0,255))
    while snakeC==appleC or snakeC==bgC:
       snakeC=(randint(0,255),randint(0,255),randint(0,255))
  #  beau()
    if len(snake)==640:
      if darkmode==1:
        draw_string("You win !",120,100,'white','black')
        draw_string("(You reached the max length)",20,120,'white','black')
      else:
        draw_string("You win !",120,100)
        draw_string("(You reached the max length)",20,120) 
      touched=borderC
  if darkmode==1:
    draw_string("Score:"+str(score),10,10,'white','black')
    draw_string("(OK=play again, DELETE=Menu)",10,30,'white','black')
  else:
    draw_string("Score:"+str(score),10,10)
    draw_string("(OK=play again, DELETE=Menu)",10,30)
  choice=0
  while choice==0:
    if keydown(KEY_OK):
      choice=1
      launch(darkmode,speed,applePower,appleScore)
    elif keydown(KEY_BACKSPACE):
      choice=2
      menu()
  print("Score:",score)
menu()

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 cookies policy.