紅塵傳

# -*- 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()

小結:一款文字冒險類的小遊戲,能完整的運行起來還是挺高興的

亮點可能就是自己寫的兩款小遊戲吧,第二個遊戲可能好玩點



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章