• python 游戏(船只寻宝)


    1. 游戏思路和流程图

    实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数)

    游戏流程图

    2. 使用模块和游戏提示

    import random
    ships_coordinates={} #船只坐标
    def game_info():
    '''游戏提示'''
    print('欢迎来到船只寻宝游戏')
    print('W(上) A(左) S(下) D(右) 来移动')
    print('船(B)的探测范围是一格,移动次数为九次')

    3. 双选验证

    def Double_choice(a,b,hint):
    '''双选择验证函数
    :param a 第一个选项值
    :param b 第二个选项值
    :param hint 选项信息
    :return 返回输入值'''
    choice=''
    while choice.lower() !=a and choice.lower() !=b:
    print(hint)
    choice=input()
    return choice

    4. 用户输入验证

    def letter_move_judge(letter,map_x,map_y):
    '''移动字母限制
    :param letter 用户输入字母
    :param map_x 地图x坐标
    :param map_y 地图y坐标
    :param 返回用户输入字符'''
    ships_x=ships_coordinates['x']
    ships_y =ships_coordinates['y']
    while True:
    if len(letter)!=1:
    print('请输入一个字母')
    elif letter.lower() not in 'w a s d':
    print('请输入W or A or S or D')
    else:
    if letter.lower()=='w' and ships_y-1 <0:
    print('超过界限了')
    elif letter.lower()=='a' and ships_x-1 <0:
    print('超过界限了')
    elif letter.lower()=='s' and ships_y+1 >map_y-1:
    print(ships_coordinates['y']-1)
    print('超过界限了')
    elif letter.lower()=='d' and ships_x+1 >map_x-1:
    print('超过界限了')
    else:
    break
    letter=input()
    return letter.lower()

    5. 海水列表 

    def get_seawater(x,y):
    '''生成海水列表
    :param x 每列的行数
    :param y 行数
    :return 返回海水列表'''
    seawater_map=[['~' for i in range(x)] for j in range(y)]
    return seawater_map

    6. 宝藏坐标列表 

    def treasure_location(x,y):
    '''随机宝藏坐标
    :param x 每列的行数
    :param y 行数
    :return 返回宝藏列表'''
    treasure_list=[]
    count=5
    while count:
    treasure_x=random.randint(0,x-1)
    treasure_y = random.randint(0, y-1)
    if (treasure_x,treasure_y) not in treasure_list:
    treasure_list.append((treasure_x,treasure_y))
    count-=1
    return treasure_list

    7.  海水界面显示

    def seawater_info(seawater_map):
    '''打印海水
    :param seawater_map 海水列表'''
    for i in seawater_map:
    print(' '.join(i))

    8. 初始化游戏开始船只位置

    def restarting_init(seawater_map):
    '''初始化船只的位置'''
    x=ships_coordinates['x']
    y=ships_coordinates['y']
    seawater_map[y][x]='B'
    return seawater_map

    9.  扫描船只范围内宝藏

    def treasure_tab(treasure_list,seawater_map):
    '''宝藏标记
    :param treasure_list 宝藏位置列表
    :param seawater_map 海水地图
    :return 返回海水地图'''
    ships_x=ships_coordinates['x']
    ships_y=ships_coordinates['y']
    treasure='$'
    scope=1 #扫描格数需要改良
    for i in range(1,scope+1):
    if (ships_x-i, ships_y) in treasure_list:
    seawater_map[ships_y][ships_x - i]=treasure

    if (ships_x-i,ships_y+i) in treasure_list:
    seawater_map[ships_y + i][ships_x - i] = treasure

    if (ships_x-i, ships_y - i) in treasure_list:
    seawater_map[ships_y-i][ships_x - i] = treasure

    if (ships_x + i, ships_y) in treasure_list:
    seawater_map[ships_y][ships_x + i] = treasure

    if (ships_x+i,ships_y+i) in treasure_list:
    seawater_map[ships_y+i][ships_x + i] = treasure

    if (ships_x+i,ships_y-i) in treasure_list:
    seawater_map[ships_y-i][ships_x + i] = treasure

    if (ships_x, ships_y +i) in treasure_list:
    seawater_map[ships_y+i][ships_x] = treasure
    if (ships_x, ships_y - i) in treasure_list:
    seawater_map[ships_y-i][ships_x] = treasure
    return seawater_map

    10.  判断船只地点是否有宝藏

    def treasure_judge(treasure_list):
    '''判断坐标是否有宝藏
    :param treasure_list 宝藏地图
    :return True 代表此地有宝藏'''
    if (ships_coordinates['x'], ships_coordinates['y']) in treasure_list:
    return True
    return False

    11.  移动船只

    def restarting(ships_remove,seawater_map):
    '''改变船的坐标
    :param ships_remove 移动的位置
    :param seawater_map 海水地图'''
    ships_x=ships_coordinates['x']
    ships_y=ships_coordinates['y']
    number=1
    seawater_map[ships_y][ships_x]='~'
    if ships_remove=='w':
    ships_y-=1
    elif ships_remove=='a':
    ships_x-=1
    elif ships_remove=='s':
    ships_y += 1
    elif ships_remove=='d':
    ships_x += 1
    seawater_map[ships_y][ships_x] = 'B'
    ships_coordinates['x']=ships_x
    ships_coordinates['y']=ships_y
    return seawater_map

    12.  游戏核心

    def game_start():
    '''游戏核心'''
    map_x=9
    map_y=5
    ships_coordinates['x']=map_x // 2
    ships_coordinates['y'] = map_y // 2
    treasure_count=0
    count=9
    seawater_map=get_seawater(map_x,map_y)
    treasure_list=treasure_location(map_x,map_y)
    seawater_map=restarting_init(seawater_map)
    while count:
    if treasure_judge(treasure_list):
    treasure_count+=1
    treasure_list.remove((ships_coordinates['x'],ships_coordinates['y']))
    print('成功打捞宝藏..(%d个)'%treasure_count)
    if treasure_count==5:
    break
    seawater_map=treasure_tab(treasure_list,seawater_map)
    seawater_info(seawater_map)
    print('请输入移动的位置(机会%d)'%count)
    ships_remove=letter_move_judge(input(),map_x,map_y)
    seawater_map=restarting(ships_remove,seawater_map)
    count -= 1
    seawater_info(seawater_map)
    if count:
    print('你寻找到了所有宝藏,提前结束了寻宝,今天收获%d个宝藏'%treasure_count)
    else:
    print('天黑了船只返回了船坞,今天收获%d个宝藏'%treasure_count)
    #结束条件宝藏打捞完毕或次数用光

    13. 游戏外壳

    def game_shell():
    '''外壳程序'''
    game_info() # 游戏开始提示
    game_start()
    while True:
    message='你想在玩一次吗(Y or N)'
    again_flag=Double_choice('y','n',message)
    if again_flag=='n':
    break
    game_start()

    14. 运行游戏

    game_shell()

     

    python学习途径

    本游戏参考书本 <<Python游戏编程快速上手>>

    友情推荐:  猿人学Python【https://www.yuanrenxue.com/】 由一群工作十余年的老程序员结合实际工作经验所写的Python教程。
  • 相关阅读:
    Hibernate5.2之一对一主键关联(四)
    Hibernate5.2关联关系之双向一对多(三)
    Hibernate5.2关联关系之单向多对一(二)
    Hibernate5.2关联关系之单向一对多(一)
    Hibernate5.2之原生SQL查询
    Hibernate5.2之HQL查询
    Winform 按键组合键
    当Bitmap的宽度大于ImageView的最大显示宽度时对ImageView的宽高重新计算来适应Bitmap的宽高(转)
    sqlserver 函數執行動態sql語句,取值
    时间格式化 字符串转时间(转)
  • 原文地址:https://www.cnblogs.com/gm332211/p/10731729.html
Copyright © 2020-2023  润新知