pygame开发的"雷电"游戏雏形

本文分享了一款使用pygame库开发的‘雷电’游戏原型,包括关键代码和初步测试的视觉效果。
摘要由CSDN通过智能技术生成
资源文件上传到个人资源里了

源代码:

stars.py

#-*- coding=utf-8 -*-
#!/usr/bin/python

import pygame
from pygame.locals import *
from random import randint
import math
 
class Star(object):
    def __init__(self, x, y, speed, color=(255,255,255)):
 
        self.x = x
        self.y = y
        self.speed = speed
        self.color = color

class Stars(object):
    '''
        用于绘制星星背景
    '''
    def __init__(self, num = 0, SCREEN_SIZE=(800,600), color=(255,255,255)):
        self.stars = []
        self.MIN_SPEED = 10
        self.MAX_SPEED = 300
        self.SCREEN_SIZE = SCREEN_SIZE
        if num > 0:
            self.create_star(num, color)

    def set_min_speed(self,speed):
        self.MIN_SPEED = speed
    def set_max_speed(self,speed):
        self.MAX_SPEED = speed

    def create_star(self,num = 1, color = (255,255,255)):
        '''创建一个或多个星星,颜色可选'''
        for i in xrange(0,num):
            x = float(randint(0, self.SCREEN_SIZE[0]))
            y = float(randint(0, self.SCREEN_SIZE[1]))
            speed = float(randint(self.MIN_SPEED, self.MAX_SPEED))
            self.stars.append( Star(x, y, speed, color) )

    def move(self,time_passed_seconds):
        '''移动星星并过滤'''
        for star in self.stars:
            star.y = star.y + time_passed_seconds * star.speed
        #过滤跑出画面的星星
        self.stars = filter(lambda one: one.y<=self.SCREEN_SIZE[1], self.stars)

    def draw(self, surface):
        '''将星星画到指定图像对象'''
        for star in self.stars:
            #pygame.draw.aaline(surface, star.color,\
            #        (star.x, star.y), (star.x+1., star.y))
            surface.set_at((int(star.x),int(star.y)),star.color)
 

def test():
 
    pygame.init()
    screen = pygame.display.set_mode((800, 600)) #, FULLSCREEN)
 
    stars = Stars()
    #stars.set_max_speed(1000)
    #stars.set_min_speed(300)
 
    # 在第一帧,画上一些星星
    stars.create_star(200)
     
    clock = pygame.time.Clock()
 
    white = (255, 255, 255)
     
    while True:
 
        for event in pygame.event.get():
            if event.type == QUIT:
                return
            if event.type == KEYDOWN:
                return

        time_passed = clock.tick(30)
        time_passed_seconds = time_passed / 1000.
 
        #update_background(stars, screen, time_passed_seconds)
        # 增加一颗新的星星
        stars.create_star(1)
        stars.move(time_passed_seconds)
 
        screen.fill((0, 0, 0))
 
        # 绘制所有的星
        stars.draw(screen)
 
        pygame.display.update()
 
if __name__ == "__main__":
    test()

game.py

#-*- coding=utf-8 -*-
#!/usr/bin/python

import pygame
from pygame.locals import *
from random import randint
#from gameobjects import vector2
import math
import time

SCREEN_RECT = pygame.Rect(0,0,800,600)

class Player(pygame.sprite.Sprite):
    '''玩家类'''
    speed  = 10
    images = []
    def __init__(self):
        pygame.sprite.Sprite.__init__(self, self.containers)
        self.image = Player.images[0]
        self.rect  = self.image.get_rect(midbottom=SCREEN_RECT.midbottom)
        self.health= 4
        #self.time  = 0
        #self.reloading = False

    #def update(self, time_passed_seconds=0.0): if not self.reloading: super(Player,self).update(time_passed_seconds) else: self.time += time_passed_seconds if self.time > 1.5: print self.time self.time = 0.0 self.reloading = False self.groups()[0].remove(self)

    def move(self, directions):
        '''移动,direction == 'up' or 'down' or 'left' or 'right' '''
        for direction in directions:
            if direction == 'up':
                self.rect.move_ip(0, -1 * Player.speed)
            elif direction == 'down':
                self.rect.move_ip(0, 1 * Player.speed)
            elif direction == 'left':
                self.rect.move_ip(-1 * Player.speed, 0)
            elif direction == 'right':
                self.rect.move_ip(1 * Player.speed, 0)
            else:
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值