这是一个简单的用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资源。)