你是否还记得有一款游戏叫做“魔塔”?(二)

简介: 你是否还记得有一款游戏叫做“魔塔”?

3.5 等待 1 秒让 mixer 完成初始化


pygame.time.delay(1000)

3.6 加载字体


       这些个都可以自己选哈。

my_FontCH=pygame.font.Font('【春田】小火锅安卓.ttf',30)
my_FontCHs=pygame.font.Font('方正正中黑简体.TTF',30)
my_FontEN=pygame.font.Font('KeeponTruckin.ttf',30)

3.7 最上面一格


text_surface0=my_FontCH.render('小游戏',True,(0,0,0),(191,191,191))

3.8 加载属性框,包括矩形的四个参数 left,top,width,height


att_rect1=pygame.Rect(0,50,200,600)
att_rect2=pygame.Rect(750,50,200,600)
att_rect3=pygame.Rect(200,600,550,50)
att_rect4=pygame.Rect(0,0,950,50)

3.9 获得钥匙图片所在得位置得矩形对象


ykey_rect=ykey.get_rect()
ykey_rect.left,ykey_rect.top=0,400
bkey_rect=bkey.get_rect()
bkey_rect.left,bkey_rect.top=0,450
rkey_rect=rkey.get_rect()
rkey_rect.left,rkey_rect.top=0,500

3.10 人物类


class character:
    def __init__(self,tuple):
        self.floor=1
        self.attack=tuple[0]
        self.defend=tuple[1]
        self.life=tuple[2]
        self.gold=0
        #物品栏
        self.property={'Yellow_key':0,'Blue_key':0,'Red_key':0}
        #图像
        self.image=pygame.transform.scale(pygame.image.load('character.png').convert_alpha(),(50,50))
        self.bg=pygame.transform.scale(pygame.image.load('w2.png').convert_alpha(),(50,50))
        self.image_rect=self.image.get_rect()
        self.image_rect.left=450
        self.image_rect.top=550

3.11 一些其它判断机制


3.11-1 门在没有对应钥匙时不可通过

if str=="UP":
    FORBID=0
    rect_new=self.image_rect.copy()
    rect_new.move_ip(0,-50)

3.11-2 判断是否撞墙

for wall_ in wallL[:]:
    if rect_new.colliderect(wall_):
        FORBID=1

3.11-3 检测是否在没有钥匙时通过门

for y_door in ydoorL[:]:
    if rect_new.colliderect(y_door) and self.property["Yellow_key"]==0:
        FORBID=1
for b_door in bdoorL[:]:
    if rect_new.colliderect(b_door) and self.property["Blue_key"]==0:
        FORBID=1
for r_door in rdoorL[:]:
    if rect_new.colliderect(r_door) and self.property["Red_key"]==0:
        FORBID=1

3.11-4 打不过怪时不可通过

for monster_ in list_morect[:]:
    if rect_new.colliderect(monster_):
        x=list_morect.index(monster_)
        if(fight(CAIXUKUN,eval(list_moname[x]+"_"),1))==[0]:
            sound5.play()
            FORBID=1
if FORBID==1:
    pass

3.11-5 判断是否出界

else:
    if self.image_rect.top<100:
        pass
    else:
        self.image_rect.move_ip(0,-50)

3.12 怪物类


class monster:
    def __init__(self,tuple):
        self.attack=tuple[0]
        self.defend=tuple[1]
        self.life=tuple[2]
        self.gold=tuple[3]

3.13 铺地板:范围从(200,50)到(700,550)


ground_L=[]
for i in range(4,14+1):
    for j in range(1,11+1):
        ground_L.append((50*i,50*j))

3.14 墙壁的位置(矩形左上角(left,top))


wall_L=[(200,100),(250,100),(300,100),(350,100),(400,100),(450,100),(500,100),(550,100),(600,100),(650,100),(450,150),(450,200),(450,250),(450,350),
        (500,250),(550,250),(650,250),(650,150),(650,200),(600,350),(550,350),(500,350),(650,350),(650,300),(350,200),(350,250),(350,300),(350,350),
        (350,400),(350,450),(350,500),(350,550),(300,250),(200,250),(300,400),(200,400),(400,450),(550,450),(600,450),
        (500,450),(550,500),(550,550),(700,450)]

3.15 门的位置


dict_door={(350,150):'yellow',(250,250):'blue',(600,250):'yellow',(450,300):'yellow',(250,400):'yellow',(450,450):'yellow',(450,450):'yellow',
           (650,450):'red',(600,250):'red'}

3.16 宝物的位置


dict_trea={(550,150):'ykey',(200,350):'ykey',(300,500):'ykey',(400,500):'ykey',(400,550):'bkey',(400,250):'rkey',(600,150):'rkey',(400,200):'ykey',(200,150):'ykey',(300,550):'ykey',(200,150):'rbottle',(100,350):'rbottle',(500,150):'rgem',(500,200):'bgem',(550,200):'rbottle',(200,550):'rbottle',(200,500):'bbottle',(650,550):'bbottle',(650,500):'bgem',}
#楼梯

3.17 怪物的位置


dict_monster={(300,50):'gSlime',(400,50):'gSlime',(600,550):'sBat',(700,550):'sBat',(350,50):'gSlime',(500,300):'rSlime',(500,300):'rSlime',
(250,300):'hWitch',(250,450):'ghost',(550,300):'ghost',(600,300):'rSlime'}

3.18 门,楼梯,宝物


List_temp1=[k for k,v in dict_door.items() if v=='yellow']
List_temp2=[k for k,v in dict_stair.items() if v=='up']
List_temp3=[k for k,v in dict_trea.items() if v=='rbottle']
List_temp4=[k for k,v in dict_trea.items() if v=='bbottle']
List_temp5=[k for k,v in dict_trea.items() if v=='rgem']
List_temp6=[k for k,v in dict_trea.items() if v=='bgem']
List_temp7=[k for k,v in dict_trea.items() if v=='ykey']
List_temp8=[k for k,v in dict_door.items() if v=='blue']
List_temp9=[k for k,v in dict_trea.items() if v=='bkey']
List_temp10=[k for k,v in dict_door.items() if v=='red']
List_temp11=[k for k,v in dict_trea.items() if v=='rk']

3.19 创建矩形对象的列表——用于判断所遇到的事件


def build_List(LIST1,LIST2):
    for i in range(1,len(LIST2)+1):
        LIST1.append(pygame.Rect(LIST2[i-1][0],LIST2[i-1][1],50,50))
wallL=[]
build_List(wallL,wall_L)
ydoorL=[]
build_List(ydoorL,List_temp1)
bdoorL=[]
build_List(bdoorL,List_temp8)
rdoorL=[]
build_List(rdoorL,List_temp10)
stairupL=[]
build_List(stairupL,List_temp2)
rbottleL=[]
build_List(rbottleL,List_temp3)
bbottleL=[]
build_List(bbottleL,List_temp4)
rgemL=[]
build_List(rgemL,List_temp5)
bgemL=[]
build_List(bgemL,List_temp6)
ykeyL=[]
build_List(ykeyL,List_temp7)
bkeyL=[]
build_List(bkeyL,List_temp9)
rkeyL=[]
build_List(rkeyL,List_temp11)

3.20 将怪物放入列表


guideL=[]
guideL.append(pygame.Rect(Guide[0][0],Guide[0][1],50,50))
liftL=[]
liftL.append(pygame.Rect(Lift[0][0],Lift[0][1],50,50))

3.21 键盘控制


for event in pygame.event.get():
    if event.type==pygame.QUIT:
        sys.exit()
    elif event.type==pygame.KEYDOWN:
        if event.key==pygame.K_w:
            CAIXUKUN.move("UP")
        if event.key == pygame.K_s:
            CAIXUKUN.move("DOWN")
        if event.key==pygame.K_a:
            CAIXUKUN.move("LEFT")
        if event.key==pygame.K_d:
            CAIXUKUN.move("RIGHT")

3.22 设置一个简单外挂,鼠标点击左键钥匙 + 1 ,右键钥匙 - 1,中键归 0


elif event.type==pygame.MOUSEBUTTONDOWN:
    if ykey_rect.collidepoint(event.pos):
        if event.button==1:
            CAIXUKUN.property["Yellow_key"]+=1
            sound4.play()
        elif event.button==2:
            CAIXUKUN.property["Yellow_key"]=0
        elif event.button==3:
            CAIXUKUN.property["Yellow_key"]-=1
    elif bkey_rect.collidepoint(event.pos):
        if event.button==1:
            CAIXUKUN.property["Blue_key"]+=1
            sound4.play()
        elif event.button==2:
            CAIXUKUN.property["Blue_key"]=0
        elif event.button==3:
            CAIXUKUN.property["Blue_key"]-=1
    elif rkey_rect.collidepoint(event.pos):
        if event.button==1:
            CAIXUKUN.property["Red_key"]+=1
            sound4.play()
        elif event.button==2:
            CAIXUKUN.property["Red_key"]=0
        elif event.button==3:
            CAIXUKUN.property["Red_key"]-=1

3.23 电梯功能


elif up_lift_rect.collidepoint(event.pos):
    if event.button==1 and get_lift and CAIXUKUN.floor<66 and CAIXUKUN.floor!=42:
        CAIXUKUN.floor+=1
elif down_lift_rect.collidepoint(event.pos):
    if event.button==1 and get_lift and CAIXUKUN.floor>1 and CAIXUKUN.floor!=44:
        CAIXUKUN.floor-=1
目录
相关文章
|
Prometheus Kubernetes 安全
5 款漏洞扫描工具:实用、强力、全面(含开源)(一)
5 款漏洞扫描工具:实用、强力、全面(含开源)
4952 1
5 款漏洞扫描工具:实用、强力、全面(含开源)(一)
|
监控 安全 API
5 款漏洞扫描工具:实用、强力、全面(含开源)(二)
5 款漏洞扫描工具:实用、强力、全面(含开源)
1540 0
5 款漏洞扫描工具:实用、强力、全面(含开源)(二)
|
存储 前端开发 Java
相册管理系统|基于Springboot+Vue实现前后端分离的相册管理系统
相册管理系统|基于Springboot+Vue实现前后端分离的相册管理系统
1167 1
|
存储 Kubernetes 监控
Kubernetes(K8s)基础与入门指南
【8月更文挑战第15天】Kubernetes作为云原生时代的基石,正在逐步改变软件的开发、部署和管理方式。通过掌握Kubernetes的基础知识和核心功能,开发者可以更加灵活地构建和管理容器化应用。未来,随着技术的不断发展和完善,Kubernetes将在更多领域发挥重要作用,推动云原生技术的普及和应用。
2037 2
|
数据采集 云安全 SQL
数字化时代下的网络安全,漏洞扫描工具提供更好的保障
在数字化时代,企业的网络安全对于其成功实现数字化转型具有重要意义。漏洞扫描工具作为网络安全防护的重要组成部分,能够帮助企业快速发现漏洞,提高数字化转型的安全性和稳定性。
|
弹性计算 大数据 测试技术
2024新版阿里云服务器收费价格表汇总:一键查看阿里云服务器最新报价!
今天,我们就来详细解析一下阿里云新版云服务器的收费价格,帮助大家更好地选择适合自己的云服务器。2024年阿里云服务器租用费用价格表更新,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服务器30元3个月,幻兽帕鲁4核16G和8核32G服务器配置,云服务器ECS可以选择经济型e实例、通用算力u1实例、ECS计算型c7、通用型g7、c8i、g8i等企业级实例规格。今天分享阿里云服务器租用费
7055 1
|
运维 监控 Cloud Native
“论云原生架构及其应用”写作框架,系统架构设计师
近年来,随着数字化转型不断深入,科技创新与业务发展不断融合,各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下,以容器和微服务架构为代表的云原生技术作为云计算服务的新模式,已经逐渐成为企业持续发展的主流选择。云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。云原生架构有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用
1589 0
|
存储 Linux Windows
Linux挂载硬盘的详细步骤与实例
Linux挂载硬盘的详细步骤与实例
1680 0
|
安全 Linux iOS开发
【漏洞扫描工具】Acunetix-Web应用系统漏扫工具
Acunetix-Web应用系统漏扫工具,下载安装包以及破解补丁。
975 1
|
SQL 安全 Oracle
5 款漏洞扫描工具:实用、强力、全面(含开源)(三)
5 款漏洞扫描工具:实用、强力、全面(含开源)
1912 0
5 款漏洞扫描工具:实用、强力、全面(含开源)(三)