灭霸的宝石游戏源代码pygame

灭霸的宝石游戏源代码pygame


这是一个简单的用pygame制作的接宝石小游戏。你需要用鼠标操作灭霸去接宝石。下面是部分代码预览:

"""
   灭霸的宝石,这是一个简单的接物小游戏。
   在这个游戏中,宝石用彩色的圆圈表示,它们会不断地落下来。
   用鼠标指针左右操作灭霸去接这些宝石,当接到一定数量的宝石后,
   游戏就应该结束,请自行设计结束游戏代码。
"""

import pygame
from pygame.locals import *
from random import randint

def random_color():
    """产生随机RGB颜色"""
    r = randint(0,255)
    g = randint(0,255)
    b = randint(0,255)    
    return r,g,b

def random_circle():
    """产生一个圆形图"""
    radius = randint(10,20)                # 随机半径
    image = pygame.Surface((radius*2,radius*2))
    image.set_colorkey((0,0,0))
    # 随机RGB颜色 
    color = random_color()
    pygame.draw.circle(image,color,(radius,radius),radius)
    return image
    
class Gemstone(pygame.sprite.Sprite):
    """宝石类,继承自角色类"""
    def __init__(self,screen,group):
        """
           screen:所在屏幕,group:所在组
        """        
        pygame.sprite.Sprite.__init__(self)    # 初始化父类
       .........................

    def update(self):
        """更新坐标"""
        self.rect.move_ip(self.dx,self.dy)     # 移动矩形
        self.bottom_detect()                   # 碰到底检测
        
    def bottom_detect(self):
        """碰到边缘就从组中移除自己"""
        if self.rect.top>self.sh : self.kill()

class Player(pygame.sprite.Sprite):
    """
       玩家类,继承自角色类
    """
    
    def __init__(self,image,screen):
        """
           image:图像,screen:所在屏幕
        """        
        pygame.sprite.Sprite.__init__(self)    # 初始化父类
        self.sw = screen.get_width()           # 屏幕宽席
        self.sh = screen.get_height()          # 屏幕高度        
        self.image = image                     # 代表它的图形        
        self.rect = self.image.get_rect()      # 获取矩形对象
        position = 0,self.sh - 40              # 初始坐标
        self.rect.center = position            # 定矩形的位置      

    def update(self):
        """更新坐标,用鼠标操作玩家"""
        pos = pygame.mouse.get_pos()          # 获取鼠标指针坐标  
        self.rect.centerx = pos[0]            # 设定矩形中央x坐标 
 
         
def main():
    """主要函数"""
    score = 0                                # 得分
    frame_counter = 0                        # 帧计数器
    width,height = 843,463                   # 定义宽高
    white = (250,250,250)                    # 定义白色 
    background = "星空背景.png"              # 背景图片
    player_image = "灭霸x.png"               # 玩家图片 
    ..................
    
    clock = pygame.time.Clock()            # 时钟对象
    running = True                         # 控制循环的逻辑变量    
    while running :
        # 以下是不定时产生宝石
        frame_counter += 1
        ........................        
                                           
        screen.blit(background,(0,0))            # 画背景图   
        stone_group.draw(screen)                 # 重画所有宝石           
        screen.blit(player.image,player.rect)    # 重画玩家图片
        screen.blit(score_image,(width//2-50,40))# 重画得分

        pygame.display.update()                  # 更新屏幕显示
        clock.tick(30)   
    
    pygame.quit()    
    
if __name__ == "__main__":

    main()       
        

 
main函数简要说明:
main函数设计了一个frame_counter变量,它用来做帧计数器。宝石可以通过自定义事件每隔一定的时间自动生成一个,也可以通过上面while循环里的方法不定时生成。当宝石和玩家的坐标都更新后,我们对它们进行了碰撞检测。其结果可能是碰到了,也可能是没有碰到。碰到了就返回那颗宝石,否则返回None。最后就是重画所有的对象并刷新屏幕显示了。作者是完全可以制作一个精美的有趣得多的接宝石游戏的。为了读者才能的发挥,所以就抛了这块砖,希望能引出玉来。

下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

李兴球

李兴球的博客是Python创意编程原创博客

评论已关闭。