带有程序框图的python小游戏_python 游戏(船只寻宝)

探索游戏设计:玩家操控船只在9x5海图上移动,通过WASD键扫描并打捞宝藏。船只每次移动一格,宝藏随机分布,需在9次机会内找到5个。游戏包含验证、移动限制及关键函数如地图生成和宝藏查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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教程。

移动2048小游戏Python程序通常会包含以下几个关键部分: 1. **游戏界面**:首先,你需要创建一个简单的用户界面,这可能使用`pygame`库,它允许你在屏幕上绘制方块,并处理用户的键盘输入。 ```python import pygame # 初始化pygame pygame.init() screen = pygame.display.set_mode((800, 600)) ``` 2. **网格管理**:接下来,你会有一个2D数组来表示游戏棋盘,每个元素代表一个方块。需要函数来更新方块的位置和合并操作。 ```python grid = [[0] * 4 for _ in range(4)] move_directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] ``` 3. **事件循环**:在这里,你需要不断检查玩家输入和游戏状态变化,比如合并、边界条件等。 ```python running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 更新逻辑... ``` 4. **逻辑处理**:包括判断是否有新的方块生成,以及当两个相同的方块相邻时进行合并。 5. **显示结果**:将新的棋盘状态渲染到屏幕上,然后更新显示。 ```python for row in grid: for cell in row: pygame.draw.rect(screen, cell_color, cell_rect) pygame.display.update() ``` 6. **循环直到游戏结束**:当达到特定的游戏结束条件(如棋盘满或无法移动)时,退出循环。 以上是一个简化的架,实际代码可能更复杂,涉及到数据结构的选择(例如使用`numpy`数组)、游戏规则的具体实现以及可能的优化算法。如果你想了解更多关于2048的具体代码实现,可以参考已有的开源项目如`https://github.com/gabrielecirulli/2048-python`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值