最近刚开始学python,为了提高兴趣就先摸了pygame。
这个小游戏是这样:
1、窗口内会随机产生一个不断膨胀的方块。
2、一旦方块膨胀到碰到窗口边缘,游戏就结束了。
3、在方块膨胀的阶段可以用鼠标点击方块把他消除掉。
4、消除掉方块后会立刻刷新一个新的方块出来。
代码如下
import pygame
import sys
import random
FPS=20 # 游戏帧率
WINWIDTH = 600 # 窗口宽度
WINHEIGHT = 600 # 窗口高度
clock=pygame.time.Clock() #用于控制循环刷新频率的对象
screen=pygame.display.set_mode((WINWIDTH,WINHEIGHT)) #创建窗口
class fangkuai(pygame.sprite.Sprite):
#初始化方块,包含5个参数,坐标、宽高、颜色
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
#方块变大,只要没碰到窗口边缘就会一直膨胀
def growbig(self):
#print(self.x,self.y)
global WINWIDTH,WINHEIGHT
if self.x > 0 and self.y > 0 and self.x+self.width < WINWIDTH and self.y+self.height < WINHEIGHT: #判断方块的边缘是否触碰到窗口边缘
self.width += 2 #宽度+2
self.x -= 1 #左上坐标-1,这样方块才是以方块中心为中心膨胀
self.height += 2 #同上
self.y -= 1
else: #如果碰触到窗口边缘
self.color = (255,0,0) #变色
print('游戏结束') #打印游戏结束
global GAMEOVER #全局变量GAMEOVER
GAMEOVER = True #激活游戏的结束条件
pygame.time.wait(1000) #程序等待1000ms
#显示方块
def displayfangkuai(self):
pygame.draw.rect(screen, self.color, (self.x, self.y, self.width, self.height)) #直接绘制方块
def main():
global WINWIDTH,WINHEIGHT
#1 创建控制游戏结束的状态
GAMEOVER = False
pygame.init() # pygame初始化,必须有,且必须在开头
fx = random.randint(100,WINWIDTH-100) #随机x坐标
fy = random.randint(100,WINHEIGHT-100) #随机y坐标
color1 = (random.randint(0,255),random.randint(0,255),random.randint(0,255)) #随机颜色
fangkuai1 = fangkuai(fx,fy,1,1,color1) #初始化一个方块
while not GAMEOVER:
clock.tick(FPS) # 控制循环刷新频率,每秒刷新FPS对应的值的次数
for event in pygame.event.get():
if event.type == pygame.QUIT:
# 判断当前事件是否为点击右上角退出键
pygame.quit()
sys.exit() # 需要提前 import sys
elif event.type == pygame.MOUSEBUTTONDOWN:
#print('按下鼠标按键')
#print(event.pos)
mouse_x, mouse_y = event.pos
#print(mouse_x,mouse_y)
#print(a_leftup_x,a_leftup_y,a_rightdown_x,a_rightdown_y)
if mouse_x > a_leftup_x and mouse_x < a_rightdown_x and mouse_y > a_leftup_y and mouse_y < a_rightdown_y:
fangkuai1.x, fangkuai1.y = random.randint(100,WINWIDTH-100), random.randint(100,WINHEIGHT-100)
fangkuai1.width, fangkuai1.height = 1, 1
fangkuai1.color = (random.randint(0,255),random.randint(0,255),random.randint(0,255))
screen.fill((255,255,255))
fangkuai1.growbig()
fangkuai1.displayfangkuai()
#计算获得方块的左上角坐标和右下角坐标
a_leftup_x = fangkuai1.x
a_leftup_y = fangkuai1.y
a_rightdown_x = fangkuai1.x + fangkuai1.width
a_rightdown_y = fangkuai1.y + fangkuai1.height
pygame.display.update()
if __name__ == '__main__':
main()