新星计划python赛道pygame实现翻牌游戏的豆腐块,豆腐块也有春天
Posted dhjabc_1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新星计划python赛道pygame实现翻牌游戏的豆腐块,豆腐块也有春天相关的知识,希望对你有一定的参考价值。
pygame实现翻牌游戏的豆腐块,豆腐块也有春天。
大家好,稍微标题党一下下。
其实还是蛮好玩的,这个是个前奏,最近参加了新星计划,玩一下,然后我们的导师@梦想橡皮擦就提到,看能不能把我们赛道的博主的头像整成一个消消乐的翻牌游戏,我觉得挺好玩的,所以也就借这个机会试一把。
嗯,确实挺好玩的。
这个是前奏,先实现一个小小的豆腐块的功能吧
一、先看效果
二、实现逻辑
每次随机生成一个豆腐块,然后响应鼠标点击动作,然后金币旋转,旋转完之后显示该豆腐块的金钱,然后增加一个金币移动的动图效果,最后计入总得分。如此循环下去。
三、实现过程
(一)初始化first_image的头像资源
def init_image():
path = './user1/'
files = []
dirs = os.listdir(path)
for diretion in dirs:
files.append(path + diretion)
bglist = []
for file in files:
picture = pygame.transform.scale(pygame.image.load(file), (50, 50))
dSurface = picture.convert()
# dSurface = pygame.image.load(file).convert()
bglist.append(dSurface)
# bglist.append(pygame.image.load(file).convert_alpha())
return bglist
(二)初始化金币的图片资源
def init_score():
path = './score/'
files = []
dirs = os.listdir(path)
for diretion in dirs:
files.append(path + diretion)
bglist = []
for file in files:
bglist.append(pygame.image.load(file).convert_alpha())
return bglist
(三)实现主函数
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode((500,500))
pygame.display.set_caption("豆腐块也有春天V1.0")
clock = pygame.time.Clock()
bglist = init_image()
score_list = init_score()
p1 = Part(bglist,score_list,(100,100,50,50),screen)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT or event.type == pygame.K_F1:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
pos = x, y = pygame.mouse.get_pos() # 获取鼠标位置,鼠标就是需要打击的目标
if p1.getrect().collidepoint(pos):
if p1.flag==1:
p1.flag=2
screen.fill((0,0,0))
p1.run()
clock.tick(30)
pygame.display.flip()
然后在主函数中增加豆腐块类的对象实现及相关方法的调用。
(四)初始化豆腐块对象
p1 = Part(bglist,score_list,(100,100,50,50),screen)
(五)在循环中调用
p1.run()
四、实现豆腐块part类
(一)初始化豆腐块的变量
def __init__(self,bglist,scorelist,rect,screen,x,y):
self.rect = rect # 用于记录豆腐块的矩形框大小及显示位置(posx,posy,width、height)
self.flag = 1 # 1、显示初始的头像图;2、显示金币的旋转图;3、显示最终的数字图,并将金币移到结果区
self.score = random.randint(1, 10) # 金钱
self.times = 1 # 金币旋转的循环次数
self.run_flag = 0 # 记录显示金币的当前页面
# self.pos = None # 金币需要移动的位置
self.scale = 20 # 金币需要移动的位置时显示的大小
self.firstimage_list = bglist # 1、显示初始的头像图
self.firstimage = random.choice(bglist)
self.scorelist = scorelist # 2、显示金币的旋转图
self.screen = screen # 显示屏幕
self.font1 = pygame.font.Font(r'C:\\Windows\\Fonts\\simsun.ttc', 32)
self.resx = x+20
self.resy = y+10
self.initx = self.posx = self.rect[0]+self.rect[2]/2
self.inity = self.posy = self.rect[1]+self.rect[3]/2
self.r = random.randint(5,10)
self.angle = math.atan2(self.resy-self.posy,self.resx-self.posx)
self.fangle = math.degrees(self.angle)
(二)金币旋转函数实现
def score_run(self):
if self.times>0:
screen.blit(self.scorelist[self.run_flag], self.rect)
self.run_flag += 1
if self.run_flag==7:
self.run_flag=0
self.times -= 1
else:
self.flag = 3
(三)重置函数reset实现
def reset(self):
self.rect = (random.randint(100,400),random.randint(100,400),50,50) # 用于记录豆腐块的矩形框大小及显示位置(posx,posy,width、height)
self.flag = 1 # 1、显示初始的头像图;2、显示金币的旋转图;3、显示最终的数字图,并将金币移到结果区
self.score = random.randint(1, 10) # 金钱
self.times = 2 # 金币旋转的循环次数
self.run_flag = 0 # 记录显示金币的当前页面
self.pos = None # 金币需要移动的位置
self.scale = 20 # 金币需要移动的位置时显示的大小
self.firstimage = random.choice(bglist)
self.initx = self.posx = self.rect[0]+self.rect[2]/2
self.inity = self.posy = self.rect[1]+self.rect[3]/2
self.r = random.randint(5,10)
self.angle = math.atan2(self.resy-self.posy,self.resx-self.posx)
self.fangle = math.degrees(self.angle)
(四)金币移动到得分函数实现
def move(self):
if abs(self.posx-self.resx)>=10 or abs(self.posx-self.resx)>=10:
self.posx += self.r * math.cos(self.angle)
self.posy += self.r * math.sin(self.angle)
# self.xpos, self.ypos = (self.xpos + section * cosa, self.ypos - section * sina)
self.newRect = self.scorelist[5].get_rect(center=(self.posx, self.posy))
self.screen.blit(self.scorelist[5], self.newRect)
else:
self.flag = 4
(五)主体run函数实现
def run(self):
if self.flag==1:
self.screen.blit(self.firstimage,self.rect)
elif self.flag==2:
self.score_run()
elif self.flag==3:
text1 = self.font1.render('%s' % self.score, True, (251,174,63))
screen.blit(text1, (self.rect[0]+self.rect[2]/2-10,self.rect[1]+self.rect[3]/2-10))
self.move()
elif self.flag==4:
self.reset()
五、完整代码
import pygame,sys
import random
import os
import math
class Part:
def __init__(self,bglist,scorelist,rect,screen,x,y):
self.rect = rect # 用于记录豆腐块的矩形框大小及显示位置(posx,posy,width、height)
self.flag = 1 # 1、显示初始的头像图;2、显示金币的旋转图;3、显示最终的数字图,并将金币移到结果区
self.score = random.randint(1, 10) # 金钱
self.times = 1 # 金币旋转的循环次数
self.run_flag = 0 # 记录显示金币的当前页面
# self.pos = None # 金币需要移动的位置
self.scale = 20 # 金币需要移动的位置时显示的大小
self.firstimage_list = bglist # 1、显示初始的头像图
self.firstimage = random.choice(bglist)
self.scorelist = scorelist # 2、显示金币的旋转图
self.screen = screen # 显示屏幕
self.font1 = pygame.font.Font(r'C:\\Windows\\Fonts\\simsun.ttc', 32)
self.resx = x+20
self.resy = y+10
self.initx = self.posx = self.rect[0]+self.rect[2]/2
self.inity = self.posy = self.rect[1]+self.rect[3]/2
self.r = random.randint(5,10)
self.angle = math.atan2(self.resy-self.posy,self.resx-self.posx)
self.fangle = math.degrees(self.angle)
def move(self):
if abs(self.posx-self.resx)>=10 or abs(self.posx-self.resx)>=10:
self.posx += self.r * math.cos(self.angle)
self.posy += self.r * math.sin(self.angle)
# self.xpos, self.ypos = (self.xpos + section * cosa, self.ypos - section * sina)
self.newRect = self.scorelist[5].get_rect(center=(self.posx, self.posy))
self.screen.blit(self.scorelist[5], self.newRect)
else:
self.flag = 4
def run(self):
if self.flag==1:
self.screen.blit(self.firstimage,self.rect)
elif self.flag==2:
self.score_run()
elif self.flag==3:
text1 = self.font1.render('%s' % self.score, True, (251,174,63))
screen.blit(text1, (self.rect[0]+self.rect[2]/2-10,self.rect[1]+self.rect[3]/2-10))
self.move()
elif self.flag==4:
self.reset()
# if random.randint(0,10)==1:
# self.reset()
def score_run(self):
if self.times>0:
screen.blit(self.scorelist[self.run_flag], self.rect)
self.run_flag += 1
if self.run_flag==7:
self.run_flag=0
self.times -= 1
else:
self.flag = 3
def getrect(self):
return pygame.Rect(self.rect)
def reset(self):
self.rect = (random.randint(100,400),random.randint(100,400),50,50) # 用于记录豆腐块的矩形框大小及显示位置(posx,posy,width、height)
self.flag = 1 # 1、显示初始的头像图;2、显示金币的旋转图;3、显示最终的数字图,并将金币移到结果区
self.score = random.randint(1, 10) # 金钱
self.times = 2 # 金币旋转的循环次数
self.run_flag = 0 # 记录显示金币的当前页面
self.pos = None # 金币需要移动的位置
self.scale = 20 # 金币需要移动的位置时显示的大小
self.firstimage = random.choice(bglist)
self.initx = self.posx = self.rect[0]+self.rect[2]/2
self.inity = self.posy = self.rect[1]+self.rect[3]/2
self.r = random.randint(5,10)
self.angle = math.atan2(self.resy-self.posy,self.resx-self.posx)
self.fangle = math.degrees(self.angle)
def init_image():
path = './user1/'
files = []
dirs = os.listdir(path)
for diretion in dirs:
files.append(path + diretion)
bglist = []
for file in files:
picture = pygame.transform.scale(pygame.image.load(file), (50, 50))
dSurface = picture.convert()
# dSurface = pygame.image.load(file).convert()
bglist.append(dSurface)
# bglist.append(pygame.image.load(file).convert_alpha())
return bglist
def init_score():
path = './score/'
files = []
dirs = os.listdir(path)
for diretion in dirs:
files.append(path + diretion)
bglist = []
for file in files:
picture = pygame.transform.scale(pygame.image.load(file), (50, 50))
dSurface = picture.convert_alpha()
bglist.append(dSurface)
return bglist
def display(screen,total,x,y):
font1 = pygame.font.Font(r'C:\\Windows\\Fonts\\simsun.ttc', 22)
text1 = font1.render('得分:%s' % total, True, (255,0,0))
screen.blit(text1, (x,y))
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode((500,500))
pygame.display.set_caption("豆腐块也有春天V1.0")
clock = pygame.time.Clock()
bglist = init_image()
score_list = init_score()
dirx=400
diry=20
p1 = Part(bglist,score_list,(100,100,50,50),screen,dirx,diry)
total = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT or event.type == pygame.K_F1:
pygame.quit新星计划python赛道pygame实现翻牌游戏的豆腐块,豆腐块也有春天
新星计划python赛道pygame让你一步步实现翻牌游戏(金币旋转大头贴等),打造更有趣的新星之旅
新星计划python赛道pygame让你一步步实现翻牌游戏(金币旋转大头贴等),打造更有趣的新星之旅
新星计划python赛道pygame让你一步步实现翻牌游戏(金币旋转大头贴等),打造更有趣的新星之旅