Making a third-order puzzle in Python

Keywords: Programming Python

The function of the program is very simple. It's still the knowledge of pygame and random number that we used before. The whole process is very clear. But we need to pay attention to: if the game is randomly scrambled directly on the two-dimensional array of the map, it's very likely that there will be no solution. Therefore, I use the idea of random movement (moving according to the rules of the game) to scramble the map on the basis of good spelling.

Concrete realization

Randomly find a photo and code file in the same file folder.

import random
import pygame
# Initialization
pygame.init()
# Window title
pygame.display.set_caption('Ahab Grocery store puzzle')
# Window size
s = pygame.display.set_mode((1200, 600))

Then initialize the game, set the title and the size of the game interface.

# Cartographic map
imgMap = [
 [0, 1, 2],
 [3, 4, 5],
 [6, 7, 8]
]
# Map of victory
winMap = [
 [0, 1, 2],
 [3, 4, 5],
 [6, 7, 8]
]

Draw the initial map and set the victory map, which is processed in the way of array.

# Click event for game
def click(x, y, map):
 if y - 1 >= 0 and map[y - 1][x] == 8:
 map[y][x], map[y - 1][x] = map[y - 1][x], map[y][x]
 elif y + 1 <= 2 and map[y + 1][x] == 8:
 map[y][x], map[y + 1][x] = map[y + 1][x], map[y][x]
 elif x - 1 >= 0 and map[y][x - 1] == 8:
 map[y][x], map[y][x - 1] = map[y][x - 1], map[y][x]
 elif x + 1 <= 2 and map[y][x + 1] == 8:
 map[y][x], map[y][x + 1] = map[y][x + 1], map[y][x]

Here you need to set the click event of the game. In short, it is the logic of mouse clicking the picture to move. The main logic code is to make if judgment, which is easy to understand.

# Disrupt maps
def randMap(map):
 for i in range(1000):
 x = random.randint(0, 2)
 y = random.randint(0, 2)
 click(x, y, map)

Use random numbers to scramble the map.

# Loading pictures
img = pygame.image.load('2.jpg')
# Random map
randMap(imgMap)
# Game main cycle
while True:
 # Delay 32 ms, equivalent to FPS=30
 pygame.time.delay(32)
 for event in pygame.event.get():
 # Window close event
 if event.type == pygame.QUIT:
 exit()
 elif event.type == pygame.MOUSEBUTTONDOWN: 
 if pygame.mouse.get_pressed() == (1, 0, 0): 
 mx, my = pygame.mouse.get_pos() 
 if mx < 498 and my < 498: 
 x = int(mx / 166) 
 y = int(my / 166)
 click(x, y, imgMap) 
 if imgMap == winMap:
 print("Success!")

Load our photos and randomly scramble the map. Set the main cycle of the game, obtain the coordinates of the mouse, judge whether the mouse is within the operation range, calculate the blocks clicked by the mouse, and judge whether the operation is successful.

 # Background color filled with green
 s.fill((0, 255, 0))
 # Mapping
 for y in range(3):
 for x in range(3):
 i = imgMap[y][x]
 if i == 8: # Block 8 does not need to be drawn
 continue
 dx = (i % 3) * 166 # Calculate plot offset
 dy = (int(i / 3)) * 166
 s.blit(img, (x * 166, y * 166), (dx, dy, 166, 166))
 # Draw reference picture
 s.blit(img, (500, 0))
 # Refresh interface
 pygame.display.flip()

Fill the background, draw pictures and set reference pictures.

If you are interested in Python programming, remember to come to the python learning group of Xiaobian: 1017759557, where there are resource sharing and technical solutions. You can exchange python programming experience together, and a python learning tutorial organized by Xiaobian, hoping to help you learn Python better.

Posted by sayedsohail on Sun, 03 Nov 2019 11:20:52 -0800