game_class,熟悉sprite的使用
2013-11-12 16:36
190 查看
http://programarcadegames.com/python_examples/show_file.php?file=game_class_example.py
game_class_example.py # Sample Python/Pygame Programs # Simpson College Computer Science # http://programarcadegames.com/ # http://simpson.edu/computer-science/ # Explanation video: http://youtu.be/O4Y5KrNgP_c import pygame import random #--- Global constants --- BLACK = ( 0, 0, 0) WHITE = ( 255, 255, 255) GREEN = ( 0, 255, 0) RED = ( 255, 0, 0) SCREEN_WIDTH = 700 SCREEN_HEIGHT = 500 # --- Classes --- # This class represents a simple block the player collects class Block(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface([20,20]) self.image.fill(BLACK) self.rect = self.image.get_rect() # Called when the block is 'collected' or falls off # the screen def reset_pos(self): self.rect.y = random.randrange(-300, -20) self.rect.x = random.randrange(SCREEN_WIDTH) # Automatically called when we need to move the block def update(self): self.rect.y += 1 if self.rect.y > SCREEN_HEIGHT + self.rect.height: self.reset_pos() # This class represents the player class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface([20,20]) self.image.fill(RED) self.rect = self.image.get_rect() def update(self): pos = pygame.mouse.get_pos() self.rect.x = pos[0] self.rect.y = pos[1] # This class represents an instance of the game. If we need to # reset the game we'd just need to create a new instance of this # class. class Game(): # --- Class attributes. # In this case, all the data we need # to run our game. # Sprite lists block_list = None all_sprites_list = None player = None # Other data game_over = False score = 0 # --- Class methods # Set up the game def __init__(self): self.score = 0 self.game_over = False # Create sprite lists self.block_list = pygame.sprite.Group() self.all_sprites_list = pygame.sprite.Group() # Create the block sprites for i in range(50): block = Block() block.rect.x = random.randrange(SCREEN_WIDTH) block.rect.y = random.randrange(-300,SCREEN_HEIGHT) self.block_list.add(block) self.all_sprites_list.add(block) # Create the player self.player = Player() self.all_sprites_list.add(self.player) # Process all of the events. Return a "True" if we need # to close the window. def process_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: return True if event.type == pygame.MOUSEBUTTONDOWN: if self.game_over: self.__init__() return False # This method is run each time through the frame. It # updates positions and checks for collisions. def run_logic(self): if not self.game_over: # Move all the sprites self.all_sprites_list.update() # See if the player block has collided with anything. blocks_hit_list = pygame.sprite.spritecollide(self.player, self.block_list, True) # Check the list of collisions. for block in blocks_hit_list: self.score +=1 print( self.score ) if len(self.block_list) == 0: self.game_over = True # Display everything to the screen for the game. def display_frame(self, screen): screen.fill(WHITE) if self.game_over: #font = pygame.font.Font("Serif", 25) font = pygame.font.SysFont("serif", 25) text = font.render("Game Over, click to restart", True, BLACK) x = (SCREEN_WIDTH // 2) - (text.get_width() // 2) y = (SCREEN_HEIGHT // 2) - (text.get_height() // 2) screen.blit(text, [x, y]) if not self.game_over: self.all_sprites_list.draw(screen) pygame.display.flip() # --- Main Function --- def main(): # Initialize Pygame and set up the window pygame.init() size = [SCREEN_WIDTH, SCREEN_HEIGHT] screen = pygame.display.set_mode(size) pygame.display.set_caption("My Game") pygame.mouse.set_visible(False) # Create our objects and set the data done = False clock = pygame.time.Clock() # Create an instance of the Game class game = Game() # Main game loop while not done: # Process events (keystrokes, mouse clicks, etc) done = game.process_events() # Update object positions, check for collisions game.run_logic() # Draw the current frame game.display_frame(screen) # Pause for the next frame clock.tick(60) # Close window and exit pygame.quit() # Call the main function, start up the game if __name__ == "__main__": main()
相关文章推荐
- java Udp实现简单地发送接收信息
- SharePoint在线资源图文教程
- 了解GDAL的图像处理/Python
- iOS.-.cxx_destruct
- 【翻译】热门支持技巧
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Ruby on Rails中select使用方法
- 数组作为参数传递时
- 去掉文本的特殊符号,换行
- Pascal's Triangle II
- 网页图标
- 服务器swap
- 求两个数的最大公约数
- html5语音
- 二叉树的先序建立、遍历、镜像、节点数、深度的具体代码实现
- SSH端口转发
- CF #211 (Div. 2)--D. Renting Bikes
- [Qt教程] 第31篇 网络(一)Qt网络编程简介
- 手机开发中的AP与BP的概念
- Android常用URI收藏