红尘传

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

小结:一款文字冒险类的小游戏,能完整的运行起来还是挺高兴的

亮点可能就是自己写的两款小游戏吧,第二个游戏可能好玩点



猜你喜欢

转载自blog.csdn.net/qq_38935390/article/details/80654248
今日推荐