Development ideas

1. Introduce the required modules , Configure image path , Setting the background color of interface width and height , Create game main entrance .
#1 Introduce the required modules import pygame import random #1 Configure image address IMAGE_PATH = 'imgs/' #1 Set page width and height
scrrr_width=800 scrrr_height =560 #1 Create a state that controls the end of the game GAMEOVER = False #1 main program class
MainGame(): #1 Load game window def init_window(self): #1 Call the initialization of display module pygame.display.init()
#1 create a window MainGame.window = pygame.display.set_mode([scrrr_width,scrrr_height]) #
#1 Start the game def start_game(self): #1 Initialization window self.init_window() #1 As long as the game is not over , It's just a cycle while
not GAMEOVER: #1 Render a white background MainGame.window.fill((255, 255, 255)) #1 Real time update
pygame.display.update() #1 Start the main program if __name__ == '__main__': game = MainGame()
game.start_game()
2. Text drawing , Create properties to be dynamically changed , Where to render
#2 Create a level , score , Remaining score , Amount of money shaoguan = 1 score = 0 remnant_score = 100 money = 200 #2
Text drawing def draw_text(self, content, size, color): pygame.font.init() font =
pygame.font.SysFont('kaiti', size) text = font.render(content, True, color)
return text #2 Load help tips def load_help_text(self): text1 =
self.draw_text('1. Left click to create sunflower 2. Right click to create pea shooter ', 26, (255, 0, 0))
MainGame.window.blit(text1, (5, 5)) #2 Rendered text and coordinate location
MainGame.window.blit(self.draw_text(' Current amount of money $: {}'.format(MainGame.money), 26,
(255, 0, 0)), (500, 40)) MainGame.window.blit(self.draw_text(
' Current level {}, score {}, Not far from Xiaguan {} branch '.format(MainGame.shaoguan, MainGame.score,
MainGame.remnant_score), 26, (255, 0, 0)), (5, 40)) self.load_help_text()
3. Create map class , Initializing maps and coordinates
#3 Create map class class Map(): #3 Store two different color picture names map_names_list = [IMAGE_PATH +
'map1.png', IMAGE_PATH + 'map2.png'] #3 Initialize map def __init__(self, x, y,
img_index): self.image = pygame.image.load(Map.map_names_list[img_index])
self.position = (x, y) # Can it be planted self.can_grow = True #3 Load map def
load_map(self): MainGame.window.blit(self.image,self.position) #3 Store all map coordinates
map_points_list = [] #3 Store all map blocks map_list = [] #3 Initialization coordinate point def
init_plant_points(self): for y in range(1, 7): points = [] for x in range(10):
point = (x, y) points.append(point) MainGame.map_points_list.append(points)
print("MainGame.map_points_list", MainGame.map_points_list) #3 Initialize map def
init_map(self): for points in MainGame.map_points_list: temp_map_list = list()
for point in points: # map = None if (point[0] + point[1]) % 2 == 0: map =
Map(point[0] * 80, point[1] * 80, 0) else: map = Map(point[0] * 80, point[1] *
80, 1) # Add the map block to the window temp_map_list.append(map) print("temp_map_list",
temp_map_list) MainGame.map_list.append(temp_map_list)
print("MainGame.map_list", MainGame.map_list) #3 Load the map into the window def load_map(self):
for temp_map_list in MainGame.map_list: for map in temp_map_list:
map.load_map() #3 Initializing coordinates and maps self.init_plant_points() self.init_map() #3 The map needs to be loaded repeatedly
self.load_map()
4. Create a plant class , Image loading error handling , Loading plants method
#4 Image loading error handling LOG = ' file :{} Methods in :{} error '.format(__file__,__name__) #4 Plants class
Plant(pygame.sprite.Sprite): def __init__(self): super(Plant, self).__init__()
self.live=True # Load picture def load_image(self): if hasattr(self, 'image') and
hasattr(self, 'rect'): MainGame.window.blit(self.image, self.rect) else:
print(LOG) #4 Stores a list of all plants plants_list = []
5. Create sunflower class
#5 Sunflower class Sunflower(Plant): def __init__(self,x,y): super(Sunflower,
self).__init__() self.image = pygame.image.load('imgs/sunflower.png') self.rect
= self.image.get_rect() self.rect.x = x self.rect.y = y self.price = 50 self.hp
= 100 #5 time counter self.time_count = 0 #5 function : Generate sunlight ( Production money ) def produce_money(self):
self.time_count += 1 if self.time_count == 25: MainGame.money += 5
self.time_count = 0 #5 Sunflowers join the window def display_sunflower(self):
MainGame.window.blit(self.image,self.rect)
6. Create pea shooters
#6 Pea shooters class PeaShooter(Plant): def __init__(self,x,y): super(PeaShooter,
self).__init__() # self.image For one surface self.image =
pygame.image.load('imgs/peashooter.png') self.rect = self.image.get_rect()
self.rect.x = x self.rect.y = y self.price = 50 self.hp = 200 #6 Transmit counter
self.shot_count = 0 #6 Increase shooting method def shot(self): #6 Record whether you should shoot should_fire = False
for zombie in MainGame.zombie_list: if zombie.rect.y == self.rect.y and
zombie.rect.x < 800 and zombie.rect.x > self.rect.x: should_fire = True #6 If alive
if self.live and should_fire: self.shot_count += 1 # Counter to 25 One launch if
self.shot_count == 25: #6 Based on the current pea shooter's position , Creating bullets peabullet = PeaBullet(self) #6
Store bullets in bullet list MainGame.peabullet_list.append(peabullet) self.shot_count = 0 #6
How to add pea shooter to window def display_peashooter(self):
MainGame.window.blit(self.image,self.rect) #6 Add pea shooter launch handling def load_plants(self):
for plant in MainGame.plants_list: #6 Optimize the processing logic of loading plants if plant.live: if
isinstance(plant, Sunflower): plant.display_sunflower() plant.produce_money()
elif isinstance(plant, PeaShooter): plant.display_peashooter() plant.shot()
else: MainGame.plants_list.remove(plant) #6 Call the method to load the plant self.load_plants()
7. Create bullet class
#7 Pea bullet class PeaBullet(pygame.sprite.Sprite): def
__init__(self,peashooter): self.live = True self.image =
pygame.image.load('imgs/peabullet.png') self.damage = 50 self.speed = 10
self.rect = self.image.get_rect() self.rect.x = peashooter.rect.x + 60
self.rect.y = peashooter.rect.y + 15 def move_bullet(self): #7 Within screen range , Move to the right if
self.rect.x < scrrr_width: self.rect.x += self.speed else: self.live = False #7
newly added , Bullet and zombie collision def hit_zombie(self): for zombie in MainGame.zombie_list: if
pygame.sprite.collide_rect(self,zombie): # After hitting zombies , Modify the state of the bullet , self.live = False
# Zombies shed blood zombie.hp -= self.damage if zombie.hp <= 0: zombie.live = False
self.nextLevel() #7 How to break through the barrier def nextLevel(self): MainGame.score += 20
MainGame.remnant_score -=20 for i in range(1,100): if MainGame.score==100*i and
MainGame.remnant_score==0: MainGame.remnant_score=100*i MainGame.shaoguan+=1
MainGame.produce_zombie+=50 def display_peabullet(self):
MainGame.window.blit(self.image,self.rect) #7 Store a list of all pea bullets peabullet_list = []
#7 How to load all bullets def load_peabullets(self): for b in MainGame.peabullet_list: if
b.live: b.display_peabullet() b.move_bullet() #7 Call the method of whether the bullet hits the zombie b.hit_zombie()
else: MainGame.peabullet_list.remove(b) #7 Call the method that loads all bullets self.load_peabullets()
8. event processing
#8 event processing def deal_events(self): #8 Get all events eventList = pygame.event.get() #8
Traverse event list , judge for e in eventList: if e.type == pygame.QUIT: self.gameOver() elif
e.type == pygame.MOUSEBUTTONDOWN: # print(' Press the mouse button ') print(e.pos) #
print(e.button)# Left key 1 Press the scroll wheel 2 The upper roller is 4 The down turning roller is 5 Right click 3 x = e.pos[0] // 80 y = e.pos[1] //
80 print(x, y) map = MainGame.map_list[y - 1][x] print(map.position) #8
Add map loading judgment and money judgment when creating if e.button == 1: if map.can_grow and MainGame.money >= 50:
sunflower = Sunflower(map.position[0], map.position[1])
MainGame.plants_list.append(sunflower)
print(' Current plant list length :{}'.format(len(MainGame.plants_list))) map.can_grow = False
MainGame.money -= 50 elif e.button == 3: if map.can_grow and MainGame.money >=
50: peashooter = PeaShooter(map.position[0], map.position[1])
MainGame.plants_list.append(peashooter)
print(' Current plant list length :{}'.format(len(MainGame.plants_list))) map.can_grow = False
MainGame.money -= 50 #8 Call the method of event handling self.deal_events()
9. Create a zombie class
#9 Zombies class Zombie(pygame.sprite.Sprite): def __init__(self,x,y):
super(Zombie, self).__init__() self.image =
pygame.image.load('imgs/zombie.png') self.rect = self.image.get_rect()
self.rect.x = x self.rect.y = y self.hp = 1000 self.damage = 2 self.speed = 1
self.live = True self.stop = False #9 Zombie movement def move_zombie(self): if self.live
and not self.stop: self.rect.x -= self.speed if self.rect.x < -80: #8 Call the end of game method
MainGame().gameOver() #9 Determine if zombies hit plants , If there is a collision , Call the method of attacking the plant def hit_plant(self): for
plant in MainGame.plants_list: if pygame.sprite.collide_rect(self,plant): #8
Modification of zombie movement state self.stop = True self.eat_plant(plant) #9 Zombies attack plants def
eat_plant(self,plant): #9 Plant life decreased plant.hp -= self.damage #9
State modification after plant death , And the modification of map status if plant.hp <= 0: a = plant.rect.y // 80 - 1 b =
plant.rect.x // 80 map = MainGame.map_list[a][b] map.can_grow = True plant.live
= False #8 Modify zombie movement status self.stop = False #9 Loading zombies into the map def display_zombie(self):
MainGame.window.blit(self.image,self.rect) #9 Add a list to store all zombies zombie_list = []
count_zombie = 0 produce_zombie = 100 #9 New method to initialize zombies def init_zombies(self): for
i in range(1, 7): dis = random.randint(1, 5) * 200 zombie = Zombie(800 + dis, i
* 80) MainGame.zombie_list.append(zombie) #9 Load all zombies into the map def load_zombies(self):
for zombie in MainGame.zombie_list: if zombie.live: zombie.display_zombie()
zombie.move_zombie() # v2.0 Call the method of whether to collide with the plant zombie.hit_plant() else:
MainGame.zombie_list.remove(zombie) #9 Call the method to initialize the zombie self.init_zombies() #9
Call the method to show the zombie self.load_zombies() #9 Counter growth , Count to 100, Call the method to initialize the zombie MainGame.count_zombie
+= 1 if MainGame.count_zombie == MainGame.produce_zombie: self.init_zombies()
MainGame.count_zombie = 0 #9 pygame Their own dormancy pygame.time.wait(10)
10. How to end the game
#10 Procedure ending method def gameOver(self): MainGame.window.blit(self.draw_text(' game over ',
50, (255, 0, 0)), (300, 200)) pygame.time.wait(400) global GAMEOVER GAMEOVER =
True

Technology
©2019-2020 Toolsou All rights reserved,
Java Swing JList: List box components Accurate mobile phone number capture , Big data of operators The difference between memory overflow and memory leak , Causes and Solutions Website mobile phone number capture method stay Vue Use in Web Worker3 species Python data structure ,13 Creation methods , This is the conclusion , Great ! What's the difference in server prices ? Basic definition and use of function ‘ To be continued SQL Server Database Glossary Chrome OS, For programmers and Windows What does it mean ? Internet Marketing