# -*- coding:utf-8 -*-
from hometown import *
from koipondroom import *
from end import *
from suburb import *
from kunlun import *
# 記錄所有房間
class Map(object):
# 存儲所有房間
rooms = {
'home_town': HomeTown(),
'koipond_room': KoipondRoom(),
'ending': End(),
'suburb': Suburb(),
'kunlun': KunLun()
}
# 加載初始房間名
def __init__(self, start_room_name):
self.start_room_name= start_room_name
# 跟據函數的返回值進入下個房間
def next_room(self, next_room_name):
return self.rooms.get(next_room_name)
# 打開指定房間
def opening_room(self):
return self.next_room(self.start_room_name)
# -*- coding:utf-8 -*-
from sys import exit
# 所有房間的基類
class Room(object):
def enter(self):
print "room class."
exit(1)
# -*- coding:utf-8 -*-
# 用來存獲得的道具
class Player(object):
items = []
def get(self, item):
self.items.append(item)
print "獲得%s" % item
def get_player(self):
player = Player()
return player
# -*- coding:utf-8 -*-
# 寫完之後覺得這樣挺奇怪的
class Sgame(object):
def start(self):
print "small game."
exit(1)
# -*- coding:utf-8 -*-
from sys import exit
class Room(object):
def enter(self):
print "room class."
exit(1)
# -*- coding:utf-8 -*-
from sys import exit
from room import *
# 家鄉地圖
class HomeTown(Room):
def enter(self):
print "雲兒悠閒的飄蕩着,天空是那樣的藍。"
print "一陣微風拂過,帶着樹葉沙沙作響。"
print "感受着這四周熟悉的氣息,你深深的吸了一口"
print "'男兒志在四方,今天便要去外面闖蕩闖蕩'"
print "說罷,便頭也不回的向村外走去。"
print "不一會便到了村口,村口有一座神廟"
action = raw_input("進去上香嗎?(上香/不上) <> ")
if action == '上香':
return 'koipond_room'
elif action == '不上':
return 'suburb'
exit(1)
else:
print "選一下"
return 'home_town'
# -*- coding:utf-8 -*-
from gameone import *
from player import *
from room import *
from sys import exit
# 神廟地圖
class KoipondRoom(Room):
def enter(self):
print "神廟不大,現在裏面空無一人."
print "正中的神像法相莊嚴,你走至"
print "供臺旁,焚香祭拜。禮畢,青煙"
print "嫋嫋。正打算離開時,只聽到"
print "'牛娃子,你這一身打扮,是打算做什麼去?'"
print "回頭望去,說話的是一位皓首白髮的老者。"
action = raw_input("說謊/如實相告 <> ")
if action == '說謊':
print "-"*20
print "'伯伯,村口的王大娘讓我幫她帶點東西'"
print "你作勢便要向外走去."
print "'你想出村?'"
print "'無需騙我這個老頭子了,老夫我剛從王大娘"
print "那裏過來。我跟你們這羣毛頭小子說了,咳咳,"
print "說了多少遍了,村外兇險,與其讓你在外面送掉性命,"
print "不如現在就讓老夫打斷你的雙腿'"
print "'村長,就算丟掉性命,也總比在村子裏整日虛度來得強'。"
print "你就這樣緊緊盯着村長伯伯."
print "半晌,'哎,也罷,如果你等會能勝過老夫,"
print "我便不再阻攔你,否則,你便乖乖回家呆着,"
print "不能再起這樣的心思。'"
# 開始一個小遊戲
s_game = GameOne()
result = s_game.start()
if result:
return 'suburb'
else:
return 'ending'
elif action =='如實相告':
print "-"*20
print "'伯伯,我想出村。我知道您時常告誡我們,"
print "但我還是想出去看看',你頓了頓又接着說道:"
print "'村外雖然有危險,但我也不是什麼待宰的羔羊'"
print "老人嘆了口氣,隨後向你招了招手,'哎,"
print "知道攔不住你,我這有把劍送給你,給你防身用吧'"
# 獲得道具劍
Player().get_player().get('sword')
print "獲得村子裏最好的一把劍!"
print "'謝謝伯伯',你躬身向老者一拜便往村外走去"
return 'suburb'
else:
print "沒有其他滴選擇"
return 'koipond_room'
# -*- coding:utf-8 -*-
from player import *
from room import *
# 郊外地圖
class Suburb(Room):
def enter(self):
print "不知不覺在郊外走了幾個時辰了。"
print "你聽到不遠處有些動靜"
print "小心貼近之後發現有五人正圍住一人"
print "被圍那人全身浴血看不清相貌,"
print "在他們周圍還躺着不少屍體"
print "被圍那人漸漸不撐"
print "你決定:"
print "1.路見不平拔刀相助。"
print "2.閒事莫理,繞道而行。"
action = raw_input("<出手/離開>")
if action == '出手':
# 判斷是否獲得了劍
if 'sword' in Player().get_player().items:
print "拔劍衝將上去,劍吐白光,你一人力拼五人竟不落下風"
print "你與那人裏應外合打跑了那幾個人,救下的那人給了你一個信物"
print "拜託你去'崑崙山'幫他送信,然後便氣絕。"
return 'kunlun'
else:
print "手無寸鐵的你很快就被殺掉了"
return 'ending'
elif action == '離開':
print "你本想偷偷離開,其實早已被人發覺"
print "被圍攻的人倒下後,你也步了後塵。"
return 'ending'
else:
print "情勢危急,速做決定"
return 'suburb'
# -*- coding:utf-8 -*-
from room import *
from game_two import *
# 崑崙山地圖
class KunLun(Room):
def enter(self):
print "幾經辛苦終於來到崑崙山下"
print "先前打跑的那幾人回去通風報信"
print "以至於你一路被人追殺至此"
print "'進山或許能得到庇護吧'你心中這麼想着"
print "山下景色雖美,此時卻也沒有心思駐足,上山!"
print "行至半山腰,被一耄耋老人攔住了去路"
print "'年輕人,這裏不是你該來的地方,下山去吧'"
print "老者坐在一個石凳上,旁邊的石桌還放着幾摞銅錢"
print "'前輩,請恕晚輩叨擾,晚輩也是受人所託前來送信'"
print "說罷,遞出信物,老者仔細檢查一番說道,"
print "'信物倒是不假,但你並非我崑崙弟子,雖有信物,卻也不能上山。'"
print "'況且,吾也不能擅離此地幫你送信,你需得通過一個考驗方能上山'"
print "老者擡手示意你坐下"
print "*"*30
print "這裏有21枚銅幣"
print "你我二人分先後次序依次拿取錢幣"
print "每人每次可拿1或2或者3枚錢幣"
print "若你能先拿到第21枚錢幣就算你通過考驗"
print "*"*30
print "來者是客,先手還是後手拿銅錢,你自己選吧"
choose = raw_input('先手/後手 <>')
if choose != '先手' and choose != '後手':
print "沒看懂就再來一次"
return 'kunlun'
else:
game = GameTwo(choose)
return game.start()
# -*- coding:utf-8 -*-
from sys import exit
from random import randint
from room import *
# 遊戲結局
class End(Room):
endings = ["壯志凌雲幾分愁,大俠請重新來過",
"生當作人傑,死亦爲鬼雄,不要灰心,重新再來吧",
"不論結果如何,我已經嘗試過了,山高路遠,不枉此生"]
def enter(self):
print self.endings[randint(0, 2)]
exit(1)
# -*- coding:utf-8 -*-
from random import randint
from sgame import *
# 其實就是石頭剪刀布的遊戲
class GameOne(Sgame):
three = ['天', '地', '人']
# 村長隨機出牌
def cun_zhang(self):
return self.three[randint(0,2)]
def start(self):
print "*"*10
print "天勝地,地勝人,人勝天。"
print "*"*10
print "村長:等會我會出"+self.cun_zhang()
c_z = self.cun_zhang()
guess = raw_input('天/地/人 <>')
while guess not in self.three or guess == c_z: # 如果是亂輸或者平就重新猜拳
print "-"*20
print "你的是%s,村長的是%s." % (guess, c_z)
print "重來"
print "村長:等會我會出"+self.cun_zhang()
c_z = self. cun_zhang()
guess = raw_input('天/地/人 <>')
print "你的是%s,村長的是%s." % (guess, c_z)
if (guess =='天' and c_z == '地') or(guess =='地' and c_z == '人') or(guess =='人' and c_z =='天'): # 剩下這三種情況會贏
print "你贏了"
print "向村長告別只後便走出了村子"
return True
else: # 其他情況都是輸的
print "回家去吧"
return False
# -*- coding:utf-8 -*-
from sgame import *
from sys import exit
# 共有21枚錢幣,誰先拿到最後一枚就勝出
# 玩家老者按順序依次拿取1至3枚錢幣,玩家可選定先後手
class GameTwo(Sgame):
def __init__(self, choose):
self.choose = choose # 獲得選擇,先手還是後手
def start(self):
count = 21 # 設定錢幣的個數
# 先手有最優解法,用之後手必輸
if self.choose == '後手':
while count > 4:
a = count % 4
print "老者拿走%d枚" % a
b = int(raw_input('你準備拿1? 2? 3? >'))
# 每次只能拿1至3枚
while (b != 1) and (b != 2) and (b != 3):
b = int(raw_input('只能選擇拿1, 2, 3 >'))
print "你拿走%d枚" % b
count = count - (a + b)
print "還剩%d枚錢幣" % count
print "-"*10
print "你輸了"
return 'ending'
else:
while count > 0:
c = int(raw_input('你準備拿1? 2? 3? >'))
# 每次只能拿1至3枚,拿走的硬幣總數不能超過21
while (c != 1 and c != 2 and c != 3) or count - c < 0:
c = int(raw_input('請正確選擇拿1, 2, 3 >'))
count = count - c
print "你拿走了%d枚" % c
# 拿走第21枚,你贏
if count == 0:
print "你贏了,小友,上山去吧。"
print "開啓新篇章:拜師崑崙"
exit(1)
# 雖然可能會輸,嘗試使用最優解法
elif count % 4 != 0:
d = count % 4
# 最優失敗,湊3的倍數
elif c == 3:
d = c
else:
d = 3 - c
count = count - d
print "老者拿走%d枚" % d
print "還剩%d枚錢幣" % count
print "-"*10
# 拿走第21枚,老者贏
if count == 0:
print "終究棋差一招,你輸了"
print "離開崑崙山地界沒多遠,就被人襲擊,雖面;力突圍,但奈何人多勢衆。"
return 'ending'
# -*- coding:utf-8 -*-
from map import *
from hometown import *
class Engine(object):
# 加載地圖
def __init__(self, room_map):
self.room_map = room_map
# 開始遊戲
def play(self):
current_room = self.room_map.opening_room()
while True:
print "-"*20
next_room_name = current_room.enter()
current_room = self.room_map.next_room(next_room_name)
a_map = Map('home_town')
a_engine = Engine(a_map)
a_game = a_engine.play()
小結:一款文字冒險類的小遊戲,能完整的運行起來還是挺高興的
亮點可能就是自己寫的兩款小遊戲吧,第二個遊戲可能好玩點