您的位置:首页 > 其它

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: