Python版推箱子

直接用制表符做的地图,用字典来存放地图,以及一些字符的坐标

用字典的坐标来判定实现的功能

有些地方还不完善,可以自行修改

不喜欢敲注释,有点烦这玩意。

game.py

import time
import map
import random

def main():
    wall=['╔','╦','╗','╠','╬','╣','╚','╩','╝','═','║']#不允许通过
    number_map = list(range(max(map.dict)))
    random.shuffle(number_map)
    try:
        W=int(input('请输入地图编号(输入错误或者不输入随机):'))
        dict_map=map.dict[W]
        print('加载地图:'+str(W))
    except:
        dict_map=map.dict[number_map[0]+1]
        print('随机地图')
    list_dict={}    #地图转换坐标产考
    dict_max=max(dict_map) #最大数
    number=0 #初始化数字
    count=0
    count_item=0
    count_list={}
    while int(number) <= int(dict_max):
        for i in range(len(str(dict_map[number]))):
            if dict_map[number][i]=='♀':
                player_x=int(number)+1
                player_y=int(i)+1
            if dict_map[number][i]=='■':
                count=count+1
                count_item=count_item+1
                try:
                    count_list[str(int(max(count_list))+1)]=str(str(int(number)+1)+'-'+str(int(i)+1))
                except:
                    count_list['0']=str(str(int(number)+1)+'-'+str(int(i)+1))
            if dict_map[number][i]=='□':
                count=count+1
                try:
                    count_list[str(int(max(count_list))+1)]=str(str(int(number)+1)+'-'+str(int(i)+1))
                except:
                    count_list['0']=str(str(int(number)+1)+'-'+str(int(i)+1))
            list_dict[str(str(number)+'-'+str(i))]=dict_map[number][i]
            number_x_max=int(i)
        number=number+1


    number_F='N'
    number_y_max=int(dict_max)


    while True:
        print('')
        print('')
        for item_y in range(int(number_y_max)+1): #屏幕上打印地图
            for item_x in range(int(number_x_max)+1):
                if int(item_x)<int(number_x_max):
                    print(list_dict[str(str(item_y)+'-'+str(item_x))],end='')
                else:
                    print(list_dict[str(str(item_y)+'-'+str(item_x))])
        if count==count_item:
            print("YOU WIN")
            break
        In=input('请输入移动方向:')
        if In=='6':
            item_play_x=int(player_x)
            item_play_y=int(player_y)+1
            if list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)] in wall:
                print('\n')
                print('\n')
                print('墙体不可移动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]==' ':
                list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                player_x=item_play_x
                player_y=item_play_y
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='⊙':
                if list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)]=='□':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀' #新位置变成人
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '   #原来的位置变成空
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)]='■'    #
                    player_x=item_play_x
                    player_y=item_play_y
                    count_item=count_item+1
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)]==' ':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y))]='⊙'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)] in wall:
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)]=='⊙':
                    print('\n')
                    print('\n')
                    print('无法推动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='■':
                if list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)]=='⊙':
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)]=='■':
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)]=='□':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y))]='■'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)+1)]==' ':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y))]='⊙'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                    count_item=count_item-1
                else:
                    print('\n')
                    print('\n')
                    print('无法推动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='□':
                list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                player_x=item_play_x
                player_y=item_play_y
                
            
        elif In=='4':
            item_play_x=int(player_x)
            item_play_y=int(player_y)-1
            if list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)] in wall:
                print('\n')
                print('\n')
                print('墙体不可移动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]==' ':
                list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                player_x=item_play_x
                player_y=item_play_y
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='⊙':
                if list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)]=='□':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀' #新位置变成人
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '   #原来的位置变成空
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)]='■'    #
                    player_x=item_play_x
                    player_y=item_play_y
                    count_item=count_item+1
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)]==' ':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-2)]='⊙'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)] in wall:
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)]=='⊙':
                    print('\n')
                    print('\n')
                    print('无法推动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='■':
                if list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)]=='⊙':
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)]=='■':
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)]=='□':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-2)]='■'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                elif list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-3)]==' ':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-2)]='⊙'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                    count_item=count_item-1
                else:
                    print('\n')
                    print('\n')
                    print('无法推动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='□':
                list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                player_x=item_play_x
                player_y=item_play_y
            
                
        elif In=='8':
            item_play_x=int(player_x)-1
            item_play_y=int(player_y)
            if list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)] in wall:
                print('\n')
                print('\n')
                print('墙体不可移动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]==' ':
                list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                player_x=item_play_x
                player_y=item_play_y
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='⊙':
                if list_dict[str(int(player_x)-3)+'-'+str(int(player_y)-1)]=='□':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀' #新位置变成人
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '   #原来的位置变成空
                    list_dict[str(int(player_x)-3)+'-'+str(int(player_y)-1)]='■'    #
                    player_x=item_play_x
                    player_y=item_play_y
                    count_item=count_item+1
                elif list_dict[str(int(player_x)-3)+'-'+str(int(player_y)-1)]==' ':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-2)+'-'+str(int(item_play_y)-1)]='⊙'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                elif list_dict[str(int(player_x)-3)+'-'+str(int(player_y)-1)] in wall:
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(player_x)-3)+'-'+str(int(player_y)-1)]=='⊙':
                    print('\n')
                    print('\n')
                    print('无法推动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='■':
                if list_dict[str(int(item_play_x)-2)+'-'+str(int(item_play_y)-1)]=='⊙':
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(item_play_x)-2)+'-'+str(int(item_play_y)-1)]=='■':
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(item_play_x)-2)+'-'+str(int(item_play_y)-1)]=='□':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-2)+'-'+str(int(item_play_y)-1)]='■'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                elif list_dict[str(int(item_play_x)-2)+'-'+str(int(item_play_y)-1)]==' ':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x)-2)+'-'+str(int(item_play_y)-1)]='⊙'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                    count_item=count_item-1
                else:
                    print('\n')
                    print('\n')
                    print('无法推动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='□':
                list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                player_x=item_play_x
                player_y=item_play_y

        elif In=='2':
            item_play_x=int(player_x)+1
            item_play_y=int(player_y)
            if list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)] in wall:
                print('\n')
                print('\n')
                print('墙体不可移动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]==' ':
                list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                player_x=item_play_x
                player_y=item_play_y
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='⊙':
                if list_dict[str(int(player_x)+1)+'-'+str(int(player_y)-1)]=='□':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀' #新位置变成人
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '   #原来的位置变成空
                    list_dict[str(int(player_x)+1)+'-'+str(int(player_y)-1)]='■'    #
                    player_x=item_play_x
                    player_y=item_play_y
                    count_item=count_item+1
                elif list_dict[str(int(player_x)+1)+'-'+str(int(player_y)-1)]==' ':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x))+'-'+str(int(item_play_y)-1)]='⊙'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                    print('Q')
                elif list_dict[str(int(player_x)+1)+'-'+str(int(player_y)-1)] in wall:
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(player_x)+1)+'-'+str(int(player_y)-1)]=='⊙':
                    print('\n')
                    print('\n')
                    print('无法推动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='■':
                if list_dict[str(int(item_play_x))+'-'+str(int(item_play_y)-1)]=='⊙':
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(item_play_x))+'-'+str(int(item_play_y)-1)]=='■':
                    print('\n')
                    print('\n')
                    print('无法推动')
                elif list_dict[str(int(item_play_x))+'-'+str(int(item_play_y)-1)]=='□':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x))+'-'+str(int(item_play_y)-1)]='■'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                    print(0)
                elif list_dict[str(int(item_play_x))+'-'+str(int(item_play_y)-1)]==' ':
                    list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                    list_dict[str(int(item_play_x))+'-'+str(int(item_play_y)-1)]='⊙'
                    list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                    player_x=item_play_x
                    player_y=item_play_y
                    count_item=count_item-1
                else:
                    print('\n')
                    print('\n')
                    print('错误,无法推动')
            elif list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]=='□':
                list_dict[str(int(item_play_x)-1)+'-'+str(int(item_play_y)-1)]='♀'
                list_dict[str(int(player_x)-1)+'-'+str(int(player_y)-1)]=' '
                player_x=item_play_x
                player_y=item_play_y
        elif In=='Q':
            break

        for i in range(len(count_list)):
            number_front=''
            number_behind=''
            YES=0
            for item in range(len(count_list[str(i)])):
                if YES == 0:
                    if count_list[str(i)][item] != '-':
                        if number_front=='':
                            number_front=count_list[str(i)][item]
                        else:
                            number_front=number_front+count_list[str(i)][item]
                    else:
                        YES=1
                elif YES == 1:
                    if number_behind=='':
                        number_behind=count_list[str(i)][item]
                    else:
                        number_behind=number_behind+count_list[str(i)][item]
            number_front=int(number_front)-1
            number_behind=int(number_behind)-1
            if list_dict[str(int(number_front))+'-'+str(int(number_behind))]=='♀':
                pass
            elif list_dict[str(int(number_front))+'-'+str(int(number_behind))]=='■':
                pass
            else:
                list_dict[str(int(number_front))+'-'+str(int(number_behind))]='□'
    while True:
        W=input('输入1重现开始')
        if W=='1':
            main()
main()

代码有些地方比较混乱,我也晕,if太多了

还需要下面这个文件,专门存放地图

□符号表示要把箱子推到的目标地点

♀符号表示玩家

■符号表示已经到位的箱子

⊙符号表示箱子

原谅我特殊符号穷QAQ

map.py最好用Python自带的edit whth IDLE打开来看,这样看起来比较正常

还可以继续添加地图,当然我懒

map.py

dict={
    1:{
             0:'╔════╗',
             1:'║    ║',
             2:'║ ♀⊙□║',
             3:'║ ╬⊙□║',
             4:'║   ■║',
             5:'╚════╝'
    },
    2:{
             0:'╔═════════════════════════════════════╗',
             1:'║                                     ║',
             2:'║                                     ║',
             3:'║                            □⊙      ⊙║',
             4:'║                ⊙            □■      ║',
             5:'║               ⊙□□⊙          ⊙■     □║',
             6:'║               ⊙□□⊙                  ║',
             7:'║                ⊙                    ║',
             8:'║                ♀                    ║',
             9:'║                                     ║',
            10:'║   ■■■                               ║',
            11:'║                                     ║',
            12:'║                                     ║',
            13:'║                                     ║',
            14:'║                                     ║',
            15:'║                                     ║',
            16:'║                                     ║',
            17:'║                                     ║',
            18:'║                                     ║',
            19:'║                                     ║',
            20:'║                                     ║',
            21:'║                                     ║',
            22:'║                                     ║',
            23:'╚═════════════════════════════════════╝'
    },
    3:{
             0:' ╔══╗   ',
             1:'╔╝  ╚══╗',
             2:'║ ⊙ ♀  ║',
             3:'║ ╬  ╬ ║',
             4:'║□ ■□⊙ ║',
             5:'╚═╗   ╔╝',
             6:'  ╚═══╝ '
    },
    
}   #地图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值