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 -----------------------------------------------------
notes : I have a learning base here , There are a lot of learning materials in it , Interested +Q group :895 797 751 The source code is also in the group ------------------------------
----------------------- 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,
Digital rolling lottery program Keras Save and load model (JSON+HDF5) Remember once EventBus Project issues caused by memory leaks I've been drinking soft water for three years ? What is the use of soft water and water softener msf Generate Trojan horse attack android mobile phone Time conversion front desk will 2020-07-17T03:07:02.000+0000 Into 2020-07-17 11:07:02 Chuan Shen 1190 Reverses the substring between each pair of parentheses leetcodehive Summary of processing methods for a large number of small files SparkSQL Achieve partition overlay write Image format conversion