带有程序框图的python小游戏_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【https://www.yuanrenxue.com/】 由一群工作十余年的老程序员结合实际工作经验所写的Python教程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值