鱼C论坛

 找回密码
 立即注册
查看: 936|回复: 2

[技术交流] 大家来看下呢,占卜小游戏(已经解决在三楼)

[复制链接]
发表于 2023-7-19 20:53:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 fffccc8080 于 2023-7-20 08:58 编辑









图片素材及代码在百度盘,这里最多把代码能贴出来

https英文冒号//pan点baidu点com/s/10PUCktCq1S-vDiT8LWWvNQ?pwd=2i4j 提取码: 2i4j





2个py文件,  dbc12a.py      dbc12f.py
dbc12a.py    这个按鼠标左键擦试水晶球时,只有显示一张的占卜图片,Alpha透明能正常从无到有。

dbc12f.py     这个呢,已经加入了所有图片了,所有图片可以正常的,但就是Alpha透明失效了,找不到原因呢。






以下两个文件的代码都能正常运行的,游戏能正常游戏,就是第二个透明问题失效了。




dbc12a.py 代码如下:
# 占卜术小游戏(鼠标事件)
import pygame,sys
WIDTH=800
HEIGHT=600
pygame.init()
root=pygame.display.set_mode((WIDTH,HEIGHT),0,32)
clock=pygame.time.Clock()
bj0=pygame.image.load("./bj0.jpg")
bj1=pygame.image.load("./bj1.jpg")
but0=pygame.image.load("./but0.png").convert_alpha()
but1=pygame.image.load("./but1.png").convert_alpha()
but=but0
fh=pygame.image.load("./fh6.png").convert_alpha()
num=0
alnum=0
fh.set_alpha(num)
kg=0 # 开关

while True:
        for event in pygame.event.get():
                if event.type==pygame.QUIT:
                        pygame.quit()
                        sys.exit()
                elif event.type==pygame.MOUSEMOTION: # 鼠标移动
                        if 662<=event.pos[0]<=662+102 and 62<=event.pos[1]<=62+35 and kg==0: # 按钮宽、高: 102  35    按钮坐标: 662  62
                                but=but1
                        elif kg==0:
                                but=but0
                        elif 175<=event.pos[0]<=175+450 and 63<=event.pos[1]<=63+513 and kg==1: # 第二张水晶球的图片的时候
                                #print(event.buttons)
                                if event.buttons[0]==1: # buttons[]=(0,0,0) 分别代表左,中,右键,按下即为1,放开为0
                                        num+=1
                                        if 200<=num<455:
                                                alnum+=1
                                elif num<200:
                                        alnum=0
                                # elif 200<=num<455: # 这两行好像多此一举
                                #         alnum=alnum
                                elif num>=455:
                                        alnum=255

                elif event.type==pygame.MOUSEBUTTONUP: # 鼠标放开
                        if 662<=event.pos[0]<=662+102 and 62<=event.pos[1]<=62+35 and kg==0 and event.button==1: # 还要判断左键(1)
                                kg=1
        if kg==0:        
                root.blit(bj0,(0,0))
                root.blit(but,(662,62))
        elif kg==1 and 0<=num<200:
                root.blit(bj1,(0,0))
        elif kg==1 and 200<=num<455: # 200帧往后,alpha由0-255渐变,200+255帧
                fh.set_alpha(alnum)
                root.blit(bj1,(0,0))
                root.blit(fh,(216,104))
        elif kg==1 and num>=455:
                num=455
                fh.set_alpha(alnum)
                root.blit(bj1,(0,0))
                root.blit(fh,(216,104))

        pygame.display.update()
        clock.tick(60)
        #print(num,alnum) # num 帧数    alnum alpha变化值





dbc12f.py 代码如下:

# 占卜术小游戏(鼠标事件)
import pygame,sys
WIDTH=800
HEIGHT=600
pygame.init()
root=pygame.display.set_mode((WIDTH,HEIGHT),0,32)
clock=pygame.time.Clock()
bj0=pygame.image.load("./bj0.jpg")
bj1=pygame.image.load("./bj1.jpg")
but0=pygame.image.load("./but0.png").convert_alpha()
but1=pygame.image.load("./but1.png").convert_alpha()
font=pygame.font.Font("ziti.ttf",15)
font_color=(192,192,192)
but=but0
# fh=pygame.image.load("./fh6.png").convert_alpha()
kg=0 # 开关
fhs = []
index = 0
num=0
alnum=0
for index in range(9):
        path="./fh"+str(index)+".png"
        fh = pygame.image.load(path).convert_alpha()
        fh.set_alpha(num)
        fhs.append(fh)
        index+=1
# print(len(fhs))
# fh.set_alpha(num)
# fhs_i=0
# for fhs_i in range(len(fhs)):
#         fhs[fhs_i].set_alpha(num)
#         fhs_i+=1

def inputNum():
        while True:
                n = input("请输入一个两位数:\n")
                if len(n)==2 and  n.isdigit(): # 判断两位数长度,判断是不是数字
                        return n
                        break
                else:
                        print("您的输入有误需要重新输入!:\n")

inpNum=int(inputNum())
#print(type(inpNum)) # str

# iNum - (iNum//10 + iNum%10) 的结果,弄个变量result初始化为0
result=0
def rel_Num(iNum):
        result=iNum-(iNum//10+iNum%10)
        return result
result=rel_Num(inpNum) # 从10到99算出来其实都是9的倍数
relNum=int(result/9)
path="./fh"+str(relNum)+".png"

text="您输入的2位数是:" + str(inpNum) +" !  " + str(inpNum) + "-(" + str(inpNum//10) + "+" + str(inpNum%10) + ")=" + str(result) + " 都是9的倍数!因此您的幸运数字是 " + str(relNum) + ",对应的幸运图案在下面水晶球里!"
text_surf=font.render(text,False,font_color)
text_rect=text_surf.get_rect(center=(400,20))


while True:
        for event in pygame.event.get():
                if event.type==pygame.QUIT:
                        pygame.quit()
                        sys.exit()
                elif event.type==pygame.MOUSEMOTION: # 鼠标移动
                        if 662<=event.pos[0]<=662+102 and 62<=event.pos[1]<=62+35 and kg==0: # 按钮宽、高: 102  35    按钮坐标: 662  62
                                but=but1
                        elif kg==0:
                                but=but0
                        elif 175<=event.pos[0]<=175+450 and 63<=event.pos[1]<=63+513 and kg==1: # 第二张水晶球的图片的时候
                                #print(event.buttons)
                                if event.buttons[0]==1: # buttons[]=(0,0,0) 分别代表左,中,右键,按下即为1,放开为0
                                        num+=1
                                        if 200<=num<455:
                                                alnum+=1
                                elif num<200:
                                        alnum=0
                                # elif 200<=num<455: # 这两行好像多此一举
                                #         alnum=alnum
                                elif num>=455:
                                        alnum=255

                elif event.type==pygame.MOUSEBUTTONUP: # 鼠标放开
                        if 662<=event.pos[0]<=662+102 and 62<=event.pos[1]<=62+35 and kg==0 and event.button==1: # 还要判断左键(1)
                                kg=1
        if kg==0:        
                root.blit(bj0,(0,0))
                root.blit(but,(662,62))
        elif kg==1 and 0<=num<200:
                root.blit(bj1,(0,0))
                root.blit(text_surf,text_rect)
        elif kg==1 and 200<=num<455: # 200帧往后,alpha由0-255渐变,200+255帧
                fhs[relNum].set_alpha(num)
                root.blit(bj1,(0,0))
                root.blit(text_surf,text_rect)
                root.blit(fhs[relNum],(216,104))
        elif kg==1 and num>=455:
                num=455
                fhs[relNum].set_alpha(num)
                root.blit(bj1,(0,0))
                root.blit(text_surf,text_rect)
                root.blit(fhs[relNum],(216,104))

        pygame.display.update()
        clock.tick(60)
        print(relNum,num,alnum) # num 帧数    alnum alpha变化值

评分

参与人数 1荣誉 +4 贡献 +2 收起 理由
python爱好者. + 4 + 2 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-19 22:52:22 | 显示全部楼层
可惜我对**盘深恶痛绝
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 08:52:51 | 显示全部楼层
本帖最后由 fffccc8080 于 2023-7-20 11:28 编辑

dbc12f.py 代码里面,最后还是自己解决了。




[b]大家还是回复下吧,处理过的内容,已经修复了透明问题。好了下面是Final最终版。


不放百度盘了,最终版,放在了蓝奏云。重新发一下,上一个删了,因为打包时的问题,我这个不能加 -w 参数,打包时加了-w控制台出不来就报错了。



最后再一次修复了个显示幸运数字的小细节:   zong123.lanzouw.com/ihZox12zltva






# 占卜术小游戏(鼠标事件)Final版
import pygame,sys
WIDTH=800
HEIGHT=600
pygame.init()
root=pygame.display.set_mode((WIDTH,HEIGHT),0,32)
pygame.display.set_caption('神奇的占卜')
logo=pygame.image.load("./logo.png")
pygame.display.set_icon(logo)
clock=pygame.time.Clock()
bj0=pygame.image.load("./bj0.jpg")
bj1=pygame.image.load("./bj1.jpg")
but0=pygame.image.load("./but0.png").convert_alpha()
but1=pygame.image.load("./but1.png").convert_alpha()
font=pygame.font.Font("ziti.ttf",15)
font_color=(192,192,192)
but=but0

kg=0 # 开关
fhs = []
index = 0
num=0
alnum=0
for index in range(9):
        path="./fh"+str(index)+".png"
        fh = pygame.image.load(path).convert_alpha()
        fhs.append(fh)
        fhs[index].set_alpha(alnum)
        index+=1

def inputNum():
        while True:
                n = input("请输入一个两位数:\n")
                if len(n)==2 and  n.isdigit(): # 判断两位数长度,判断是不是数字
                        return n
                        break
                else:
                        print("您的输入有误需要重新输入!:\n")

inpNum=int(inputNum())

# iNum - (iNum//10 + iNum%10) 的结果,弄个变量result初始化为0
result=0
def rel_Num(iNum):
        result=iNum-(iNum//10+iNum%10)
        return result
result=rel_Num(inpNum) # 从10到99算出来其实都是9的倍数
relNum=int(result/9) 
newrelNum=relNum-1 # relNum(1-9) 和 fhs列表的下标0-8对应起来需要减 1

text="您输入的2位数是:" + str(inpNum) +" !  " + str(inpNum) + "-(" + str(inpNum//10) + "+" + str(inpNum%10) + ")=" + str(result) + " 都是9的倍数!因此您的幸运数字是 " + str(relNum) + ",对应的幸运图案在下面水晶球里!"
text_surf=font.render(text,False,font_color)
text_rect=text_surf.get_rect(center=(400,20))


while True:
        for event in pygame.event.get():
                if event.type==pygame.QUIT:
                        pygame.quit()
                        sys.exit()
                elif event.type==pygame.MOUSEMOTION: # 鼠标移动
                        if 662<=event.pos[0]<=662+102 and 62<=event.pos[1]<=62+35 and kg==0: # 按钮宽、高: 102  35    按钮坐标: 662  62
                                but=but1
                        elif kg==0:
                                but=but0
                        elif 175<=event.pos[0]<=175+450 and 63<=event.pos[1]<=63+513 and kg==1: # 第二张水晶球的图片的时候
                                #print(event.buttons)
                                if event.buttons[0]==1: # buttons[]=(0,0,0) 分别代表左,中,右键,按下即为1,放开为0
                                        num+=1
                                        if 200<=num<455:
                                                alnum+=1
                                elif num<200:
                                        alnum=0
                                elif num>=455:
                                        alnum=255

                elif event.type==pygame.MOUSEBUTTONUP: # 鼠标放开
                        if 662<=event.pos[0]<=662+102 and 62<=event.pos[1]<=62+35 and kg==0 and event.button==1: # 还要判断左键(1)
                                kg=1
        if kg==0:        
                root.blit(bj0,(0,0))
                root.blit(but,(662,62))
        elif kg==1 and 0<=num<200:
                root.blit(bj1,(0,0))
                root.blit(text_surf,text_rect)
        elif kg==1 and 200<=num<455: # 200帧往后,alpha由0-255渐变,200+255帧
                fhs[newrelNum].set_alpha(alnum)
                root.blit(bj1,(0,0))
                root.blit(text_surf,text_rect)
                root.blit(fhs[newrelNum],(216,104)) # relNum(1-9) 和 fhs列表的下标0-8对应起来需要减 1
        elif kg==1 and num>=455:
                num=455
                fhs[newrelNum].set_alpha(alnum)
                root.blit(bj1,(0,0))
                root.blit(text_surf,text_rect)
                root.blit(fhs[newrelNum],(216,104))


        pygame.display.update()
        clock.tick(60)
        # print(relNum,num,alnum) # num 帧数    alnum alpha变化值

评分

参与人数 1贡献 +1 收起 理由
python爱好者. + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表