python 游戏(船只寻宝)

Posted 呆萌小朋友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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教程。

以上是关于python 游戏(船只寻宝)的主要内容,如果未能解决你的问题,请参考以下文章

Python中的战舰游戏 - 随机船舶放置

[BZOJ3991][SDOI2015]寻宝游戏

[SDOI2015]寻宝游戏

BZOJ3991 寻宝游戏

寻宝游戏(bzoj 3991)

BZOJ3991[SDOI2015]寻宝游戏 树链的并+set