Time to write Real Python Game

Sorry guys the code may looks lengthy, This code was Written when i started to learn python......
I still love the game by default available in NOKIA old phones. when i was kid i stick to this game

So thought to write using python


Features in python snake game...

1) MAZE
2) PYTHON LENGTH INCREASE AS IT EATS RATS
3) SCORE AND TIME DISPLAY

Screen shots

1. screenshot showing python in action


2. screenshot showing python after hits the maze


This Python snake game uses "CURSES" to display characters dynamically
 "MULTIPROCESSING" to spawn a process, "QUEUE" to pass data between processes
"LOCK"  for Mutex lock

Below is the code :)

  1. #!/usr/bin/python
  2. from multiprocessing import Process, Queue, Lock
  3. import os,time,curses,sys,random 
  4. def f():
  5.     stdscr.nodelay(1)
  6.     try:
  7.             while True:
  8.                 char = stdscr.getch()
  9.                 if char == 113break  # q
  10.                 elif char == curses.KEY_RIGHT:q.put(2)
  11.                 elif char == curses.KEY_LEFT:q.put(4)
  12.                 elif char == curses.KEY_UP:q.put(1)
  13.                 elif char == curses.KEY_DOWN:q.put(3)
  14.                 #time.sleep(0.1)
  15.     except KeyboardInterrupt:
  16.         stdscr.keypad(0)
  17.         curses.echo()
  18.         curses.nocbreak()
  19.         curses.endwin()
  20.         sys.exit(1)
  21.         print "END"
  22. if __name__ == '__main__':
  23.     stdscr = curses.initscr()
  24.     stdscr.border(0)
  25.     curses.cbreak()
  26.     stdscr.keypad(1)
  27.     stdscr.nodelay(1)
  28.     curses.noecho()
  29.     lock = Lock()
  30.     #curses.start_color()
  31.     #curses.color_pair(3)
  32.     q = Queue(1)
  33.     p = Process(target=f, args=())
  34.     p.start()
  35.     currtime = int(time.time())

  36. Python_length = 5
  37.     s = [[10,10],[10,11],[10,12],[10,13],[10,14]]               #         ^     |
  38.     orient = 2                                  # <-4--   1     3    --2-->        key and snake direction codes
  39.     new = [0,0]                                 #         |     V     a
  40.     snakelength = len(s)
  41.     ate = True
  42.     xrand = 0
  43.     yrand = 0
  44.     start = True
  45.     score = 0
  46.     sleeptime = 0.09
  47.     speedscore = 5
  48.     try:
  49.             while True:
  50.                 #key = 0
  51.                 if (speedscore == score):
  52.                     sleeptime = sleeptime - 0.005
  53.                     speedscore = speedscore+5
  54.                 stdscr.border(1)
  55.                 max = stdscr.getmaxyx()
  56.                 maxx = max[1]
  57.                 maxy = max[0]
  58.                 if q.full():
  59.                     key = q.get()
  60.                     #stdscr.addstr(0,20,str(key))
  61.                 else:
  62.                     key = 0
  63.                     #stdscr.addstr(20,20,"0")
  64.                 #key = q.get()
  65.                 #temp ="key = "+str(key)
  66.                 stdscr.refresh()
  67.                 sco = "score : "+str(score)
  68.                 stdscr.addstr(0,int(maxx/2),"PYTHON GAME")
  69.                 stdscr.refresh()
  70.                 stdscr.addstr(0,int((maxx*3/4)),sco)
  71.                 stdscr.refresh()
  72.                 #stdscr.refresh()
  73.                 #time.sleep(0.1)
  74.                 runtime = int(time.time())
  75.                 timestring = "Time : "+str(runtime-currtime)
  76.                 stdscr.addstr(0,int(maxx/4),timestring)
  77.                 stdscr.refresh()
  78.                 #time.sleep(0.1)
  79.                 #time.sleep(2)
  80.                 curr = s[len(s)-1]
  81.                 if (key ==1 )and (orient == 1):
  82.                     new[0] = curr[0]
  83.                     new[1] = curr[1]-1
  84.                     orient = 1
  85.                     #stdscr.addstr(20,20,"11")
  86.                 elif key ==1 and orient == 2:
  87.                     new[0] = curr[0]
  88.                     new[1] = curr[1]-1
  89.                     orient = 1
  90.                     #stdscr.addstr(20,20,"12")
  91.                 elif key ==1 and orient == 3:
  92.                     new[0] = curr[0]
  93.                     new[1] = curr[1]+1
  94.                     orient = 3
  95.                     #stdscr.addstr(20,20,"13")
  96.                 elif key ==1 and orient == 4:
  97.                     new[0] = curr[0]
  98.                     new[1] = curr[1]-1
  99.                     orient = 1
  100.                     #stdscr.addstr(20,20,"14")
  101.                 elif key ==2 and orient == 1:
  102.                     new[0] = curr[0]+1
  103.                     new[1] = curr[1]
  104.                     orient = 2
  105.                     #stdscr.addstr(20,20,"21")
  106.                 elif key ==2 and orient == 2:
  107.                     new[0] = curr[0]+1
  108.                     new[1] = curr[1]
  109.                     #stdscr.addstr(20,20,"22")
  110.                 elif key ==2 and orient == 3:
  111.                     new[0] = curr[0]+1
  112.                     new[1] = curr[1]
  113.                     orient = 2
  114.                     #stdscr.addstr(20,20,"23")
  115.                 elif key ==2 and orient == 4:
  116.                     new[0] = curr[0]-1
  117.                     new[1] = curr[1]
  118.                     orient = 4
  119.                     #stdscr.addstr(20,20,"24")
  120.                 elif key ==3 and orient == 1:
  121.                     new[0] = curr[0]
  122.                     new[1] = curr[1]-1
  123.                     orient = 1
  124.                     #stdscr.addstr(20,20,"31")
  125.                 elif key ==3 and orient == 2:
  126.                     new[0] = curr[0]
  127.                     new[1] = curr[1]+1                  #done
  128.                     orient = 3
  129.                     #stdscr.addstr(20,20,"32")
  130.                 elif key ==3 and orient == 3:
  131.                     new[0] = curr[0]
  132.                     new[1] = curr[1]+1
  133.                     orient = 3
  134.                     #stdscr.addstr(20,20,"33")
  135.                 elif key ==3 and orient == 4:
  136.                     new[0] = curr[0]
  137.                     new[1] = curr[1]+1
  138.                     orient = 3
  139.                     #stdscr.addstr(20,20,"34")
  140.                 elif key ==4 and orient == 1:
  141.                     new[0] = curr[0]-1
  142.                     new[1] = curr[1]
  143.                     orient = 4
  144.                     #stdscr.addstr(20,20,"41")
  145.                 elif key ==4 and orient == 2:
  146.                     new[0] = curr[0]+1
  147.                     new[1] = curr[1]
  148.                     orient = 2
  149.                     #stdscr.addstr(20,20,"42")
  150.                 elif key ==4 and orient == 3:
  151.                     new[0] = curr[0]-1
  152.                     new[1] = curr[1]
  153.                     orient = 4
  154.                     #stdscr.addstr(20,20,"43")
  155.                 elif key ==4 and orient == 4:
  156.                     new[0] = curr[0]-1
  157.                     new[1] = curr[1]
  158.                     orient = 4
  159.                     #stdscr.addstr(20,20,"44")
  160.                 elif key ==0 and orient == 1:
  161.                     new[0] = curr[0]
  162.                     new[1] = curr[1]-1
  163.                     orient = 1
  164.                     #stdscr.addstr(20,20,"01")
  165.                 elif key ==0 and orient == 2:
  166.                     new[0] = curr[0]+1
  167.                     new[1] = curr[1]
  168.                     orient = 2
  169.                     #stdscr.addstr(20,20,"first")
  170.                 elif key ==0 and orient == 3:
  171.                     new[0] = curr[0]
  172.                     new[1] = curr[1]+1
  173.                     orient = 3
  174.                     #stdscr.addstr(20,20,"03")
  175.                 elif key ==0 and orient == 4:
  176.                     new[0] = curr[0]-1
  177.                     new[1] = curr[1]
  178.                     orient = 4
  179.                     #stdscr.addstr(20,20,"04")
  180.                 #stdscr.refresh()
  181.                 #time.sleep(3)
  182.                 if ate:
  183.                     xrand = random.randint(2,maxx-2)
  184.                     yrand = random.randint(2,maxy-2)
  185.                     ate = False
  186.                 stdscr.addstr(yrand,xrand,"%")
  187.                 stdscr.refresh()
  188.                 fruit = [xrand,yrand]
  189.                 if (new[0]==maxx or new[1]==maxy or new[0] == 0 or new[1] == 0):
  190.                     if not start :
  191.                         endstring = "OHH NO YOU HIT WALL....!!!!!!! YOUR SCORE = "+str(score)
  192.                         stdscr.addstr(int(maxy/2),int(maxx/3),endstring)
  193.                         stdscr.refresh()
  194.                         time.sleep(30)
  195.                 if fruit == new:
  196.                     curses.beep()
  197.                     score =score+1
  198.                     ate = True
  199.                     Python_length = Python_length + 1
  200.                     sf = [[0,0]]* Python_length
  201.                     for ia in range(len(s)):
  202.                         sf[ia]=s[ia]
  203.                         pass
  204.                     sf[len(s)] = new
  205.                     s = sf[:]
  206.                 else:
  207.                     for i in range (0,(len(s)-1)):
  208.                         s[i] = s[i+1]
  209.                         s[len(s)-1] = new
  210.                     new = [0,0]
  211.                 start = False
  212.                 for indx in range(len(s)):
  213.                     for indy in range(len(s)):
  214.                         #print indy,indx
  215.                         #stdscr.addstr(30,30,"naren")
  216.                         stdscr.addstr(s[indy][1],s[indx][0],"@")
  217.                 stdscr.refresh()
  218.                 time.sleep(0.09)
  219.                 stdscr.erase()
  220.     except KeyboardInterrupt:
  221.         stdscr.keypad(0)
  222.         curses.echo()
  223.         curses.nocbreak()
  224.         curses.endwin()
  225.         print "END"