一、感悟
今天静心学习了一天的pythson,比起之前没日没夜地看海贼王更充足啊!!!而且一个人待在宿舍有点方,不过真心项以后有一间自己的小房子,没有其他人,做自己要做的事,可以持续到三更半夜,然后睡到日照三竿。
关于编写程序的:
先编写一个简单的程序,再不断添加功能。改进游戏的话,就把反复使用的部分放进函数中,并尝试在程序的不同部分提供接口。接口的任务是隐藏琐碎的细节,让程序的各部分使用起来更加简单。
二、代码
#caves's naem
cave_names=[
"Arched cavern",
"Twisty passages",
"Dripping passage",
"dusty crawlsapce",
"Undergroud lake",
"Black pit",
"Fallen cavern",
"Shallow pool",
"Icy underground river",
"Sandy hollow",
"Old Block",
"Tree root cave",
"Narrow ledge",
"Winding steps",
"Echoing chamber",
"Musty cave",
"Cloomy cave",
"Low ceiling cave",
"Happy cave",
"Shallow cave",
]
#create functions to offer convenience
def create_tunnel(cave_from,cave_to):
"""Create a tunnel between cave_from and cave_to"""
caves[cave_from].append(cave_to)
caves[cave_to].append(cave_from)
def visit_cave(cave_number):
"""mark a cave as visited"""
visited_caves.append(cave_number)
unvisited_caves.remove(cave_number)
def choosecave(cave_list):
"""Pick a cave from list,provided that cave has less than 3 tunnel."""
cave_number=choice(cave_list)
while len(caves[cave_number])>=3:
cave_number=choice(cave_list)
return cave_number
def print_caves():
"""Print out all the current cave structure"""
for number in cave_numbers:
print number,":",caves[number]
print '-----------------------------------------------------'
#functions are to create cave-net
def setup_caves(cave_numbers):
"""create the starting list of caves"""
caves=[];
for cave in cave_numbers:
caves.append([])
return caves
def link_caves():
"""Make sure all of the caves are connected with two tunnel """
while unvisited_caves!=[]:
this_cave=choosecave(visited_caves)
next_cave=choosecave(unvisited_caves)
create_tunnel(this_cave,next_cave)
visit_cave(next_cave)
def finish_caves():
"""Link the rest of the caves with one-way tunnel"""
for cave in cave_numbers:
while len(caves[cave])<3:
passage_to=choosecave(cave_numbers)
caves[cave].append(passage_to)
#functions are to communcation with player
def print_location(player_location):
"""Tell the palyer about where they are"""
print cave_names[player_location]
print "from here ,you can see:"
neighbors=caves[player_location]
for tunnel in range(0,3):
next_cave=neighbors[tunnel]
print" ",tunnel+1,"-",cave_names[next_cave]
if wumpus_location in neighbors:
print "I smell a wumpus !"
def ask_for_cave():
"""Ask the player to choose a cave from their current_direction """
print "which cave ?"
player_input=raw_input(">")
if player_input in ['1','2','3']:
index=int(player_input)-1
neighbors=caves[player_location]
cave_number=neighbors[index]
return cave_number
else:
print player_input+"?"
print "That's not a direction that you can choose !"
return False
def get_action():
"""Find out what player want to do next"""
print "what do you want to do next?"
print "a)fire an arrow"
print "m)moving"
action=raw_input(">")
if action=="m" or action=="a":
return action
else:
print action+"?"
print "that's not an action that you can do !"
return None
def do_movement():
print "Moving ..."
new_location=ask_for_cave()
if new_location is None:
return player_location
else:
return new_location
def do_shooting():
print"Firing...."
shoot_at=ask_for_cave()
if shoot_at==None:
return False
if shoot_at==wumpus_location:
print "You shot the wumpus !Contriuation !"
else:
print"You wasted your arrow !"
return True
#main function
from random import choice
cave_numbers=range(0,20)
unvisited_caves=range(0,20)
visited_caves=[]
caves=setup_caves(cave_numbers)
visit_cave(0)
print_caves()
link_caves()
print_caves()
finish_caves()
wumpus_location=choice(cave_numbers)
player_location=choice(cave_numbers)
while wumpus_location==player_location:
player_location=choice(cave_numbers)
while True:
print_location(player_location)
action=get_action()
if action==None:
continue
if action=="m":
player_location=do_movement()
if player_location==wumpus_location:
print "Aargh ! You are eaten by a wumpus !"
break
if action=="a":
game_over=do_shooting()
if game_over:
break