예제 #1
0
def find_other_name(context, known):		

	if known in first_names:
		known_str = 'first_name'
		unknown_str = 'last_name'
	else:
		known_str = 'last_name'
		unknown_str = 'first_name'
		
	if context is None:
		unknown_query = no_context_query.format(unknown_str, known_str, known)
	elif context[0] == 'room':
		unknown_query = context_room_query.format(unknown_str, known_str, known, context[1])
	elif context[0] == 'clue':
		unknown_query = context_clue_query.format(unknown_str, known_str, known, context[1])
	elif context[0] == 'murder':
		unknown_query = context_murder_query.format(unknown_str, known_str, known, context[1])
		
	unknown_names = sql.column_as_list(sql.run_query(unknown_query), 0)
	
	if len(unknown_names) == 1:
		unknown = unknown_names [0]
	elif context is None:
		unknown = None
	elif context[0] in ['clue', 'murder']:
		unknown = find_other_name(['room', player.location], known)
	elif context[0] == 'room':
		unknown = find_other_name (None, known)
	else:
		#this shouldn't ever occur
		DEBUG ("Context WTF?")
		unknown = None
	
	return unknown
예제 #2
0
    def voice_text(self):
        """ Convert voice to text and appear the text into chatbox """
        
        current_lang = self.combo.currentText() # collect selected language from combo box

        if conf.NEW_COMMAND:
            update_commands = sql.run_query(query='SELECT * FROM COMMANDS')
            self.all_commands = update_commands
            conf.NEW_COMMAND = False
            
        self.text = stt.stt_func(selected_lang=current_lang) 

        self.text_append(self.text)

        self.send_to_command(current_lang)
예제 #3
0
    def show_table(self):
        """ Show all command list into table """

        if conf.NEW_COMMAND:
            update_commands = sql.run_query(query='SELECT * FROM COMMANDS')
            self.all_commands = update_commands
            conf.NEW_COMMAND = False

        column_names = tuple(self.all_commands.keys())
        row_values = tuple(self.all_commands.values())
        col_size = len(column_names)
        row_size = len((row_values)[0])

        ab = TableWindow(row_values, column_names, row_size, col_size)
        if ab.exec_():
            ab.quit()
예제 #4
0
def blame(murderer, victim):

    DEBUG("Blame")
    message = ""

    id_m = sql.npc_id_from_name(murderer)
    id_v = sql.npc_id_from_name(victim)
    m_location = blamed_location(id_m)

    if m_location == player.location:

        query = "SELECT murderer FROM murder WHERE victim = {0};".format(id_v)
        right_murderer = sql.query_single(query)

        if right_murderer:
            if right_murderer == id_m:
                message = murder_solved(id_m)
            else:
                query = (
                    "select player_clue.detail "
                    "from player_clue "
                    "inner join npc_detail on player_clue.detail = npc_detail.detail "
                    "inner join mapped_npc on npc_detail.npc = mapped_npc.npc "
                    "and mapped_npc.mapped_id in ("
                    "select murderer "
                    "from murder where victim = {0}"
                    ");").format(id_v)

                details = sql.column_as_list(sql.run_query(query), 0)

                if len(details) < 3:
                    message = "They didn't kill that person!"
                else:
                    message = escaper(right_murderer)
        else:
            message = "They ain't even dead yet!"
    else:
        message = "You can't blame them, they're not here."
    return message
예제 #5
0
    def initUI(self):

        try:
            with open('config.local.json') as f:
                conf.JSON_DATA = json.load(f)
        except FileNotFoundError:
            with open('config.json') as f:
                conf.JSON_DATA = json.load(f)

        # {'task': [...], 'english': [....], 'chinese': [....], 'security': [....], 'custom': [....]}
        self.all_commands = sql.run_query(query='SELECT * FROM COMMANDS')
        self.profile_info = sql.run_query(query="SELECT * from USER")

        conf.USER_NAME = self.profile_info['name'][0]

        languages = ["english", "chinese"]
        query_result = sql.run_query(
            query="select language from user")  # Return type: Dictionary
        print(query_result)

        selected_lang = query_result['language'][0]
        index_no = languages.index(
            selected_lang.lower())  # Raise : Valuerror unless item is found
        """ ------------------- Design Main Window -------------------- """
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        """ ------------------- Combo Box -------------------- """
        self.combo = QComboBox()
        self.combo.addItems(languages)
        self.combo.setCurrentIndex(index_no)
        """ ------------------- Label -------------------- """
        self.language_label = QLabel('Dialog Box', self)
        self.language_label.setGeometry(50, 50, 900, 100)
        pixmap = QPixmap(
            "/Users/duzheng/Desktop/VCUI/icons/voice1.png").scaled(
                self.language_label.width(), self.language_label.height())
        self.language_label.setPixmap(pixmap)
        """ ------------------- Text -------------------- """
        # Create Chat Box
        self.chat = QPlainTextEdit()
        self.chat.setFixedSize(600, 300)
        self.chat.setReadOnly(True)
        """ ---------------- Button ---------------------- """
        # voice_btn not triggered when enter key pressed
        self.voice_btn = QPushButton(default=False, autoDefault=False)
        self.voice_btn.setFixedSize(80, 80)
        self.voice_btn.setStyleSheet("background-color:#3399FF;")

        pixmap2 = QPixmap("/Users/duzheng/Desktop/VCUI/icons/voice2.jpg")
        self.voice_btn.setIcon(QIcon(pixmap2))
        self.voice_btn.setIconSize(PyQt5.QtCore.QSize(75, 75))

        self.commands_btn = QPushButton('Commands',
                                        default=False,
                                        autoDefault=False)
        #self.folder_btn = QPushButton("Folder", default=False, autoDefault=False)
        #self.forget_pass_btn = QPushButton('Forget Password', default=False, autoDefault=False)
        """ -------------------- Layout -------------------------- """
        # Add vertical layout
        self.v_layout = QVBoxLayout()
        self.setLayout(self.v_layout)

        self.dia_h_layout = QHBoxLayout()
        self.dia_h_layout.addWidget(self.language_label)

        # Add horizontal layout
        self.h_layout = QHBoxLayout()
        self.h_layout.addWidget(self.chat)
        self.h_layout.addWidget(self.voice_btn)

        # Tools horizontal layout
        self.tools_h_layout = QHBoxLayout()
        self.tools_h_layout.addWidget(self.combo)
        self.tools_h_layout.addWidget(self.commands_btn)

        self.v_layout.addLayout(self.dia_h_layout)
        self.v_layout.addLayout(self.h_layout)
        self.v_layout.addLayout(self.tools_h_layout)
        """ ------------------ triggered button ---------------"""
        self.voice_btn.clicked.connect(self.voice_text)
        self.commands_btn.clicked.connect(self.show_table)

        self.show()
예제 #6
0
def ask_other(target1, target2):
	target = target1 or target2

	if target in sql.get_rooms():
		destination_id = sql.room_id_from_name(target)
	
		if destination_id == player.location:
			message = "You are already there!"
	
		else:
			path = sql.find_path(player.location, destination_id)	
			npcs = sql.live_npcsid_in_room(player.location)
			if len(npcs) > 0:
				name = format_npc(sql.npc_name_from_id(random.choice(npcs)))
				message = "{0} tells you the way:\n".format(name)
				for item in path:
					room_name = format_room(sql.room_name_from_id(item[0]))
					direction = sql.to_long_direction(item[1])
					message += "@i\t{0:20} {1}\n".format(room_name, direction)
			else:
				room_name = format_room(sql.room_name_from_id(path[0][0]))
				message = "There's no one here to help you, but you feel you should go first to the {0}.".format(room_name)
				
	elif target in sql.all_npcs():
		
		target_alive = target in sql.live_npcs()
		target_present = target in sql.npcs_in_room(player.location)
		player_has_clue = sql.npc_id_from_name(target) in sql.column_as_list(sql.run_query("SELECT DISTINCT victim FROM player_clue;"), 0)

		if target1:
			if target_alive and target_present:
				message = "Who do you want to ask about from {0}?".format(format_npc(target))
				
			elif not target_present and (target_alive or not player_has_clue):
				message = "{0} is not here. Go ask somebody else.".format(format_npc(target))
			
			elif not target_alive and target_present:
				message = "You see {0} dead on ground. They don't say anything.".format(format_npc(target))
			
			elif not target_alive and not target_present and player_has_clue:
				message = "{0} is not here. As well as not alive.".format(format_npc(target))
		
		else:	
			message = "Whom do you want to ask about {0}?".format(format_npc(target))
	
	elif target in sql.get_all_directions():
	
		target = sql.to_long_direction(target)
		if target1:
			if  target == 'up':
				if sql.room_name_from_id(player.location) in ['front yard', 'back yard']:
					target = 'sky'
				else:
					target = 'ceiling'
			elif target == 'down':
				target = 'floor'
			message = "{0} doesn't tell you anything.".format(target.title())
		else:
			message = "But... Why? Don't do that."
	
	elif target in sql.get_specials():
		if target == 'notes':
			message = "You keep notes of clues you have collected. Type 'memo' or 'notes' to view them."
	
	else:
		message == "This is secret development question. You shold not ever again ask it."
	
	return message


	
	
	
	
	
	
예제 #7
0
	elif len (sql.get_living_npcs()) == 1:
		DEBUG ("Game Over")
		playing = False
		end_state = 'one murderer left'
	
## END GAME LOOP	

points_for_survivor = 10
points_for_solved = 5
points_for_unsolved = 0
	
points = 0

if end_state == 'out of murderers':
	fprint ("You've gotten rid of all the killers. But at what price! {0} people died today.".format (sql.query_single("SELECT COUNT(*) FROM murder")))
	murders = sql.column_as_list(sql.run_query("SELECT state FROM murder INNER JOIN mapped_npc ON mapped_id = murderer;"), 0)

	for item in murders:
		if item == 'arrested':
			points += points_for_solved
		elif item == 'escaped':
			points += points_for_unsolved

	points += (len(npcs) - len(murders)) * points_for_survivor

	max_points = len(npcs) * points_for_survivor - int(len(npcs) / 10) * points_for_solved
	fprint("You got {0} points of {1}.".format(points, max_points))
	
elif end_state == 'one murderer left':
	last_murderer = sql.get_active_murderers()[0]
	formatted_name = format_npc(sql.npc_name_from_id(last_murderer))
예제 #8
0
def escaped_npcs():
    query = "SELECT mapped_id FROM mapped_npc WHERE state = 'escaped';"
    return sql.column_as_list(sql.run_query(query), 0)
예제 #9
0
def single_npc_details(target_id):
    query = ("SELECT detail.name from detail, npc_detail,mapped_npc "
             "WHERE detail.detail_id = npc_detail.detail "
             "AND npc_detail.npc = mapped_npc.npc "
             "AND mapped_npc.mapped_id = '") + str(target_id) + "';"
    return sql.column_as_list(sql.run_query(query), 0)
예제 #10
0
def all_npcids_in_room(room_id):
    query = "SELECT mapped_npc.mapped_id FROM npc, mapped_npc WHERE npc.npc_id = mapped_npc.npc AND mapped_npc.location = '" + str(
        room_id) + "';"
    result = sql.column_as_list(sql.run_query(query), 0)
    return result
예제 #11
0
			else:
				has_target1 = 0
			query += " AND has_target1 = {0}".format(has_target1)
				
			
			if target2:
				has_target2 = 1
			else:
				has_target2 = 0
			query += " AND has_target2 = {0}".format(has_target2)
			#---------------------------------------------------------------
			query += ";"
			
			# Get Action id
			action = sql.query_single(query)
			DEBUG((action, sql.column_as_list(sql.run_query("SELECT * FROM actions"), 0), query))
			# Do action, and spend action points
			if (action):
				super = int(action / 10)
				sub = action - super * 10
				
				# DEBUG("super: {0}, sub: {1}".format(super, sub))
				use_action_point = False
				if super == 1: # MOVE
					movement = move.move(target2)
					messages.append(movement[1])
					if movement [0]:
						messages.append(look.look(sql.room_name_from_id(player.location)))
						use_action_point = True
					
				elif super == 2: # LOOK