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