DanielHannon

RCUBE pygame

Jun 27th, 2017
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.93 KB | None | 0 0
  1. import pygame
  2. """
  3. Rubicks cube in python
  4. test
  5. version 0.001
  6. 2017 Daniel Hannon
  7.  
  8.  
  9. Layout
  10.  
  11.      top1
  12.      top2
  13.      top3
  14. left1 front1 right1 back1
  15. left2 front2 right2 back2
  16. left3 front3 right3 back3
  17.      bottom3
  18.      bottom2
  19.      bottom1
  20.  
  21. """
  22.  
  23. # colors
  24. BLACK = (0, 0, 0)
  25. WHITE = (255, 255, 255)
  26. RED = (255, 0, 0)
  27. GREEN = (0, 255, 0)
  28. BLUE = (0, 0, 255)
  29. YELLOW = (255, 255, 0)
  30. ORANGE = (248, 156, 83)
  31. """BLACK = 'B'
  32. WHITE = 'W'
  33. RED = 'R'
  34. GREEN = 'G'
  35. BLUE = 'B'
  36. YELLOW = 'Y'
  37. ORANGE = 'O'"""
  38.  
  39. #Game grid
  40. grid = []
  41. for row in range(10):
  42.     #add empty array
  43.     grid.append([])
  44.     for column in range(11):
  45.         grid[row].append(BLACK)
  46.        
  47. # static Width and Height
  48. WIDTH = 30
  49. HEIGHT = 30
  50.  
  51. #Distance between cells
  52. MARGIN = 5
  53.  
  54. """ Defining front """
  55. front1 = [RED, RED, RED]
  56. front2 = [RED, RED, RED]
  57. front3 = [RED, RED, RED]
  58. front = [front1,front2,front3]
  59.  
  60. """defining left side """
  61. left1 = [YELLOW, YELLOW, YELLOW]
  62. left2 = [YELLOW, YELLOW, YELLOW]
  63. left3 = [YELLOW, YELLOW, YELLOW]
  64. left_side = [left1,left2,left3]
  65.  
  66. """defining right side"""
  67. right1 = [GREEN, GREEN, GREEN]
  68. right2 = [GREEN, GREEN, GREEN]
  69. right3 = [GREEN, GREEN, GREEN]
  70. right_side = [right1,right2,right3]
  71.  
  72. """defining back"""
  73. back1 = [BLUE, BLUE, BLUE]
  74. back2 = [BLUE, BLUE, BLUE]
  75. back3 = [BLUE, BLUE, BLUE]
  76. back = [back1,back2,back3]
  77.  
  78. """defining top"""
  79. top1 = [ORANGE, ORANGE, ORANGE]
  80. top2 = [ORANGE, ORANGE, ORANGE]
  81. top3 = [ORANGE, ORANGE, ORANGE]
  82. top_row = [top1,top2,top3]
  83.  
  84. """defining bottom"""
  85. bottom1 = [WHITE, WHITE, WHITE]
  86. bottom2 = [WHITE, WHITE, WHITE]
  87. bottom3 = [WHITE, WHITE, WHITE]
  88. bottom_row = [bottom1,bottom2,bottom3]
  89.  
  90. """defining the layout"""
  91. def refresh():
  92.     front = [front1,front2,front3]
  93.     left_side = [left1,left2,left3]
  94.     right_side = [right1,right2,right3]
  95.     back = [back1,back2,back3]
  96.     top_row = [top1,top2,top3]
  97.     bottom_row = [bottom1,bottom2,bottom3]
  98.     row1 = [right_side[0],front[0],left_side[0],back[0]]
  99.     row2 = [right_side[1],front[1],left_side[1],back[1]]
  100.     row3 = [right_side[2],front[2],left_side[2],back[2]]
  101.     rows = [row1,row2,row3]
  102.     grid[0][3:5] = top1
  103.     grid[1][3:5] = top2
  104.     grid[2][3:5] = top3
  105.     grid[3] = row1
  106.     grid[4] = row2
  107.     grid[5] = row3
  108.     grid[6][3:5] = bottom3
  109.     grid[7][3:5] = bottom2
  110.     grid[8][3:5] = bottom1
  111.  
  112. """Face rotations"""
  113. def face_left(row):
  114.     buffer1 = row[2]
  115.     buffer2 = row[1]
  116.     buffer3 = row[0]
  117.     row[0] = [buffer1[0],buffer2[0],buffer3[0]]
  118.     row[1] = [buffer1[1],buffer2[1],buffer3[1]]
  119.     row[2] = [buffer1[2],buffer2[2],buffer3[2]]
  120.  
  121. def face_right(row):
  122.     buffer1 = row[2]
  123.     buffer2 = row[1]
  124.     buffer3 = row[0]
  125.     row[0] = [buffer1[2],buffer2[2],buffer3[2]]
  126.     row[1] = [buffer1[1],buffer2[1],buffer3[1]]
  127.     row[2] = [buffer1[0],buffer2[0],buffer3[0]]
  128.  
  129. """
  130. up/down side rotations
  131. these can NOT be used for rows 7, 8, or 9 as those include eight lists rather than 12
  132. """
  133.  
  134. """Bringing side up"""
  135. def up(row_num):
  136.     row_num = row_num - 1
  137.     back_row_num = 3 - row_num
  138.     buffer1 = [front[0][row_num],front[1][row_num],front[2][row_num]]
  139.     buffer2 = [top_row[0][row_num],top_row[1][row_num],top_row[2][row_num]]
  140.     buffer3 = [back[2][back_row_num],back[1][back_row_num],back2[0][back_row_num]]
  141.     buffer4 = [bottom_row[2][row_num],bottom_row[1][row_num],bottom_row[0][row_num]]
  142.  
  143.     front[0][row_num] = buffer4[0]
  144.     front[1][row_num] = buffer4[1]
  145.     front[2][row_num] = buffer4[2]
  146.  
  147.     top_row[0][row_num] = buffer1[0]
  148.     top_row[1][row_num] = buffer1[1]
  149.     top_row[2][row_num] = buffer1[2]
  150.  
  151.     back[2][back_row_num] = buffer2[0]
  152.     back[1][back_row_num] = buffer2[1]
  153.     back[0][back_row_num] = buffer2[2]
  154.  
  155.     bottom_row[0][row_num] = buffer3[0]
  156.     bottom_row[1][row_num] = buffer3[1]
  157.     bottom_row[2][row_num] = buffer3[2]
  158.  
  159. """Bringing side down"""
  160. def down(row_num):
  161.     row_num = row_num - 1
  162.     back_row_num = 3 - row_num
  163.     buffer1 = [front[0][row_num],front[1][row_num],front[2][row_num]]
  164.     buffer2 = [top_row[0][row_num],top_row[1][row_num],top_row[2][row_num]]
  165.     buffer3 = [back[2][back_row_num],back[1][back_row_num],back2[0][back_row_num]]
  166.     buffer4 = [bottom_row[2][row_num],bottom_row[1][row_num],bottom_row[0][row_num]]
  167.  
  168.     front[0][row_num] = buffer2[0]
  169.     front[1][row_num] = buffer2[1]
  170.     front[2][row_num] = buffer2[2]
  171.  
  172.     top_row[0][row_num] = buffer3[0]
  173.     top_row[1][row_num] = buffer3[1]
  174.     top_row[2][row_num] = buffer3[2]
  175.  
  176.     back[2][back_row_num] = buffer4[0]
  177.     back[1][back_row_num] = buffer4[1]
  178.     back[0][back_row_num] = buffer4[2]
  179.  
  180.     bottom_row[0][row_num] = buffer1[0]
  181.     bottom_row[1][row_num] = buffer1[1]
  182.     bottom_row[2][row_num] = buffer1[2]
  183.  
  184. """Rows 7 - 9 up/down rotations"""
  185.  
  186. def side_up(row_num):
  187.     row_num = row_num - 1
  188.     back_row_num = 3 - row_num
  189.     buffer1 = [left_side[0][row_num],left_side[1][row_num],left_side[2][row_num]]
  190.     buffer2 = [top_row[row_num]]
  191.     buffer3 = [right_side[2][back_row_num],right_side[1][back_row_num],right_side[0][back_row_num]]
  192.     buffer4 = [bottom_row[row_num]]
  193.  
  194.     left_side[0][row_num] = buffer4[0]
  195.     left_side[1][row_num] = buffer4[1]
  196.     left_side[2][row_num] = buffer4[2]
  197.  
  198.     top_row[row_num][0] = buffer1[0]
  199.     top_row[row_num][1] = buffer1[1]
  200.     top_row[row_num][2] = buffer1[2]
  201.  
  202.     right[2][back_row_num] = buffer2[0]
  203.     right[1][back_row_num] = buffer2[1]
  204.     right[0][back_row_num] = buffer2[2]
  205.  
  206.     bottom_row[row_num][0] = buffer3[0]
  207.     bottom_row[row_num][1] = buffer3[1]
  208.     bottom_row[row_num][2] = buffer3[2]
  209.  
  210. def side_down(row_num):
  211.     row_num = row_num - 1
  212.     back_row_num = 3 - row_num
  213.     buffer1 = [left_side[0][row_num],left_side[1][row_num],left_side[2][row_num]]
  214.     buffer2 = [top_row[row_num]]
  215.     buffer3 = [right_side[2][back_row_num],right_side[1][back_row_num],right_side[0][back_row_num]]
  216.     buffer4 = [bottom_row[row_num]]
  217.  
  218.     left_side[0][row_num] = buffer2[0]
  219.     left_side[1][row_num] = buffer2[1]
  220.     left_side[2][row_num] = buffer2[2]
  221.  
  222.     top_row[row_num][0] = buffer3[0]
  223.     top_row[row_num][1] = buffer3[1]
  224.     top_row[row_num][2] = buffer3[2]
  225.  
  226.     right[2][back_row_num] = buffer4[0]
  227.     right[1][back_row_num] = buffer4[1]
  228.     right[0][back_row_num] = buffer4[2]
  229.  
  230.     bottom_row[row_num][0] = buffer1[0]
  231.     bottom_row[row_num][1] = buffer1[1]
  232.     bottom_row[row_num][2] = buffer1[2]
  233.  
  234.  
  235.    
  236. """defining rotations"""
  237. def rotate(row,direction):
  238.     direction = direction.lower()
  239.     if row <= 3 and row > 0:
  240.         if direction == 'left' or direction =='l':
  241.             buffer1 = rows[row][0] #Buffer exists in order to ensure no data is lost
  242.             rows[row][0] = rows[row][3]
  243.             rows[row][3] = rows[row][2]
  244.             rows[row][2] = rows[row][1]  #rotates all left
  245.             rows[row][1] = buffer1
  246.             if row == 1: #checks if top row
  247.                 top_row = face_left(top_row)
  248.             elif row == 3: #checks for bottom row
  249.                 bottom_row = face_right(bottom_row)
  250.         elif direction == 'right' or direction =='r':
  251.             buffer1 = rows[row][0]
  252.             rows[row][0] = rows[row][1]
  253.             rows[row][1] = rows[row][2]
  254.             rows[row][2] = rows[row][3]
  255.             rows[row][3] = buffer1
  256.             if row == 1: #checks if top
  257.                 top_row = face_right(top_row)
  258.             if row == 3: #checks if bottom row
  259.                 bottom_row = face_left(bottom_row)
  260.         else:
  261.             print 'command not recognised'
  262.     elif 3<row<=6:
  263.         if direction == 'up' or direction == 'u':
  264.             up(row)
  265.             if row == 4:
  266.                 left_side = face_right(left_side)
  267.             elif row == 6:
  268.                 right_side = face_left(right_side)
  269.         if direction  =='down' or direction == 'd':
  270.             down(row)
  271.             if row == 4:
  272.                 left_side = face_left(left_side)
  273.             elif row == 6:
  274.                 right_side = face_right(right_side)
  275.         else:
  276.             print 'command not recognised'
  277.     elif 6<row<=9:
  278.         if direction == 'up' or direction == 'u':
  279.             if row == 7:
  280.                 side_up(1) #uses slightly modified up function code
  281.                 front = face_left(front)
  282.             elif row == 8:
  283.                 side_up(2)
  284.             elif row == 9:
  285.                 side_up(3)
  286.                 back = face_right(back)
  287.         if direction == 'down' or direction == 'd':
  288.             if row == 7:
  289.                 side_down(1) #uses slightly modified down function code
  290.                 front = face_right(front)
  291.             elif row == 8:
  292.                 side_down(2)
  293.             elif row == 9:
  294.                 side_down(3)
  295.                 back = face_left(back)
  296.             else:
  297.                 print 'command not recognised'
  298.     else:
  299.         print 'number out of bounds'
  300.  
  301. refresh()
  302. #starting pygame
  303. pygame.init()
  304.  
  305. #Setting window dimensions
  306. WINDOW_SIZE = [425,320]
  307. screen = pygame.display.set_mode(WINDOW_SIZE)
  308.  
  309. #Giving window a title
  310. pygame.display.set_caption("Rubicks Cube in python test v0.0001")
  311.  
  312. #manage refresh rate
  313.  
  314. clock = pygame.time.Clock()
  315.  
  316. #variable that declares whether the game is running or not
  317. stopped = False
  318. while not stopped:
  319.     for event in pygame.event.get():
  320.         if event.type == pygame.QUIT:
  321.             stopped = True
  322.         elif event.type == pygame.MOUSEBUTTONDOWN:
  323.             pos = pygame.mouse.get_pos()
  324.             column = pos[0] // (WIDTH + MARGIN)
  325.             row = pos[1] // (HEIGHT + MARGIN)
  326.     screen.fill(BLACK)
  327.     refresh()
  328.  
  329.     #draw grid
  330.     for row in range(10):
  331.         for column in range(11):
  332.             Color = grid[row][column]
  333.             pygame.draw.rect(screen,Color,
  334.                              [((MARGIN + WIDTH) * column + MARGIN, (MARGIN + HEIGHT) * row + MARGIN),
  335.                               (WIDTH ,HEIGHT)])
  336.     clock.tick(60)
  337.  
  338.     pygame.display.flip()
  339.        
  340.        
  341. pygame.quit()
  342. """for i in range(10):
  343.    print grid[i]"""
Advertisement
Add Comment
Please, Sign In to add comment