#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package SubjectLib  
 | 
# @todo: ´ðÌâ¶ÁÌâ¹ÜÀíÆ÷  
 | 
#  
 | 
# @author: panwei  
 | 
# @date 2010-04-20  
 | 
# @version 1.1  
 | 
#  
 | 
# @note:   
 | 
#Ä£¿éÏêϸ˵Ã÷  
 | 
#ΪÁ˱ÜÃâͬһ¸öÍæ¼ÒÈ¡µ½ÏàͬÌâÄ¿µÄÇé¿ö:  
 | 
#Ìâ¿â·ÖΪ: ÔʼÌâ¿âºÍ¶¯Ì¬Ìâ¿â, ÔʼÌâ¿â¶ÁÈ¡ÌâÄ¿,  
 | 
#  
 | 
#1. ¶¯Ì¬Ìâ¿â ¸ù¾ÝÔʼÌâ¿âÉú³ÉËæ»úÌâ¿â  
 | 
#2. Ìâ¿â´Ó¶¯Ì¬Ìâ¿âÀïÃæÈ¡  
 | 
#3. Ã¿È¡Ò»Ìâ, ´Ó¶¯Ì¬Ìâ¿âÖÐɾ³ýÕâÒ»Ìâ  
 | 
#4. Èç¹û¶¯Ì¬Ìâ¿âÈ¡ÍêÁË, ÔòÖØÐÂÉú³É¶¯Ì¬Ìâ¿â  
 | 
#---------------------------------------------------------------------  
 | 
# @change: "2011-01-20 17:30" panwei ¸ñʽ»¯½Å±¾  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2011-01-20 17:30"""  
 | 
#---------------------------------------------------------------------  
 | 
import random  
 | 
import os  
 | 
import LogUI  
 | 
import ChConfig  
 | 
import GameWorld  
 | 
import copy  
 | 
import QuestManager  
 | 
#---------------------------------------------------------------------  
 | 
#ËùÓеÄÌâ¿â,keyΪÌâÄ¿ÀàÐÍ,µ¥¶ÀÌâ¿âΪ[] -> ÔʼÌâ¿â  
 | 
__AllSubject = {}  
 | 
#¶¯Ì¬Ìâ¿â  
 | 
__DelicacySuject = {}  
 | 
#---------------------------------------------------------------------  
 | 
## Ëæ»ú»ñµÃÒ»µÀÌâÄ¿  
 | 
#  @param key ×Ö·û´®  
 | 
#  @return chinSuject Ò»¸öÌâÄ¿  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GetSubject(key):  
 | 
    global __DelicacySuject  
 | 
      
 | 
    if len(__AllSubject) == 0:  
 | 
        QuestManager.ReadSubjectLib()  
 | 
      
 | 
    key = key.lower()  
 | 
  
 | 
    #µÚÒ»´Î¼ÓÔØÌâÄ¿,³õʼ»¯  
 | 
    if len(__DelicacySuject) == 0:  
 | 
        __DelicacySuject = copy.deepcopy(__AllSubject)  
 | 
  
 | 
    #»ñµÃÌâ¿â  
 | 
    sujectList = __DelicacySuject.get(key)  
 | 
    #ÅׯúÒì³£  
 | 
    if sujectList == None:  
 | 
        GameWorld.Log("###Òì³£»ñµÃÌâÄ¿´íÎó,ÎÞÕâÀàÌâÄ¿key = %s"%(key))  
 | 
        return  
 | 
      
 | 
    #ÎÞÌâÄ¿ÁË,ÖØÐ¼ÓÔØÔʼÌâ¿â  
 | 
    if len(sujectList) == 0:  
 | 
        __DelicacySuject = copy.deepcopy(__AllSubject)  
 | 
          
 | 
    #ÖØÐ¼ÓÔØÌâ¿â  
 | 
    sujectList = __DelicacySuject.get(key)  
 | 
    #Ëæ»úÑ¡ÔñÒ»µÀÌâÄ¿(·µ»ØÖµÎªÀàclass ChinSubject µÄʵÀý)  
 | 
    chinSuject = random.choice(sujectList)  
 | 
    #ɾ³ýÕâ¸öÌâÄ¿  
 | 
    sujectList.remove(chinSuject)  
 | 
    return chinSuject  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
## µ¥¶ÀÒ»µÀÌâ  
 | 
#  
 | 
#  PyClassÀàµÄÏêϸ˵Ã÷.  
 | 
class ChinSubject:  
 | 
    ID = 0  
 | 
    Subject = ""  
 | 
    Answer = 0  
 | 
    Option = []  
 | 
    line = ""  
 | 
    ## ³õʼ»¯º¯Êý  
 | 
    #  @param line ×Ö·û´®  
 | 
    #  @return None  
 | 
    #  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
    def __init__(self , line):  
 | 
        self.Clear()  
 | 
        self.line = line  
 | 
        return  
 | 
      
 | 
    ## ³õʼ»¯  
 | 
    #  @param   
 | 
    #  @return None  
 | 
    #  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
    def Clear(self):  
 | 
        self.ID = 0  
 | 
        self.Subject = ""  
 | 
        self.Answer = 0  
 | 
        self.Option = []  
 | 
        self.line = ""  
 | 
        return  
 | 
      
 | 
    ## ´Ó×Ö·û´®Àï¶ÁÈ¡  
 | 
    #  @param   
 | 
    #  @return None  
 | 
    #  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
    def ReadFromStr(self):  
 | 
        lineList = self.line.split('\t')  
 | 
        self.ID = int(lineList[0])  
 | 
        self.Subject = lineList[1]  
 | 
        self.Answer = lineList[2]  
 | 
        for i in range(3, len(lineList)):  
 | 
            curStr = lineList[i].strip()  
 | 
            if curStr == '':  
 | 
                continue  
 | 
            self.Option.append(curStr)  
 | 
              
 | 
        return  
 | 
      
 | 
    ## ÌâÄ¿ID  
 | 
    #  @param   
 | 
    #  @return ÌâÄ¿ID  
 | 
    #  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
    def GetID(self):  
 | 
        return self.ID  
 | 
      
 | 
    ## ÌâÄ¿  
 | 
    #  @param   
 | 
    #  @return ÌâÄ¿  
 | 
    #  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
    def GetSubject(self):  
 | 
        return self.Subject  
 | 
      
 | 
    ## ´ð°¸  
 | 
    #  @param   
 | 
    #  @return ´ð°¸  
 | 
    #  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
    def GetAnswer(self):  
 | 
        return self.Answer  
 | 
      
 | 
    ## Ñ¡Ïî  
 | 
    #  @param   
 | 
    #  @return Ñ¡Ïî  
 | 
    #  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
    def GetOption(self):  
 | 
        return self.Option  
 | 
#---------------------------------------------------------------------  
 | 
## ¶ÁÈ¡Êý¾Ý  
 | 
#  @param ÎÞ  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ReadData():  
 | 
    global __AllSubject  
 | 
      
 | 
    mapID = GameWorld.GetMap().GetMapID()  
 | 
    #²»ÐèÒªÖØ¶ÁµÄµØÍ¼  
 | 
    if mapID not in ChConfig.Def_Subject_Map:  
 | 
        return  
 | 
      
 | 
    curPath = ChConfig.GetAppPath() + "QUESTDATAGb\\SubjectLib"  
 | 
      
 | 
    if not os.path.isdir(curPath):  
 | 
        GameWorld.Log("·¾¶ = %s , ÎÞ·¨²éÕÒµ½´ðÌâÌâ¿â!"%(curPath))  
 | 
        return  
 | 
      
 | 
    files = os.listdir(curPath)  
 | 
    for file in files:  
 | 
        ext = os.path.splitext(file)  
 | 
        postfix = ext[1]  
 | 
        if postfix != ".txt":  
 | 
            continue  
 | 
          
 | 
        fileName = ext[0]  
 | 
          
 | 
        file = open(os.path.join(curPath, file),'r')  
 | 
          
 | 
        for line in file.readlines():  
 | 
            #È¥³ýͷβÎÞÓõÄ×Ö·û  
 | 
            line = line.strip()  
 | 
              
 | 
            if line == '':  
 | 
                continue  
 | 
              
 | 
            curSubject = ChinSubject(line)  
 | 
            curSubject.ReadFromStr()  
 | 
  
 | 
            if __AllSubject.has_key(fileName):  
 | 
                __AllSubject.get(fileName).append(curSubject)  
 | 
                  
 | 
            else:  
 | 
                __AllSubject.update({fileName:[curSubject]})  
 | 
      
 | 
    return  
 | 
  
 | 
## ½âÎöÌâÄ¿Êý¾Ý  
 | 
#  @param curData ÌâÄ¿Êý¾Ý  
 | 
#  @param fileName ÎļþÃû  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ReadSubjectData(curData, fileName):  
 | 
    curData = curData.split('\r\n')  
 | 
    for line in curData:  
 | 
        #È¥³ýͷβÎÞÓõÄ×Ö·û  
 | 
        line = line.strip()  
 | 
          
 | 
        if line == '':  
 | 
            continue  
 | 
          
 | 
        curSubject = ChinSubject(line)  
 | 
        curSubject.ReadFromStr()  
 | 
  
 | 
        if __AllSubject.has_key(fileName):  
 | 
            __AllSubject.get(fileName).append(curSubject)  
 | 
              
 | 
        else:  
 | 
            __AllSubject.update({fileName:[curSubject]})      
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
     
 |