Пример #1
0
def show(m, k, b):
    """Affiche un monstre en effacant la case sur laquelle il était auparavant"""

    x0, y0 = Background.getOrigin(b)
    ROWS, COLS = Background.getDimension(b)
    kx, ky = Knil.getPos(k)
    x, y = getPos(m)
    mx, my = x - x0, y - y0

    # efface la case précédente
    if 'previous_case' in m.keys() and m['previous_case'] is not None:
        px, py = m['previous_case']
        if (px, py) != (mx, my):
            case = Background.getCase(b, px, py)
            if px >= x0 and px < x0 + COLS and py >= y0 and py < y0 + ROWS:
                bgcolor = Background.getBgcolor(case)
                if "brightness" in case.keys():
                    if Item.exist("flashlight") and Flashlight.isActivated(
                            Item.getFlashlight()):
                        highlighted_case_pos = Flashlight.get_highlighted_case_pos(
                            Item.getFlashlight(), b['map'], x0 + kx, y0 + ky)
                        if (px, py) in highlighted_case_pos:
                            case = Background.highlight_case(
                                case, Item.getFlashlight())
                            bgcolor = Background.getBgcolor(case, False)

                color(fontcolor=getColor(m), bgcolor=bgcolor)
                goto((py - y0) + 1, (px - x0) * 2 + 1)
                for c in case["c"]:
                    if isinstance(c, str):
                        w(c)
                    else:
                        w(Background.special_carac[c])
Пример #2
0
def show(b, k):
	"""Affiche la zone de la map à afficher à l'écran, en tenant compte des
differents cas particuliers comme la luminosité, ou encore les toits des maisons"""

	x0, y0 = getOrigin(b)
	kx, ky = Knil.getPos(k)
	knil_case = getCase(b, kx+x0, ky+y0)
	ROWS, COLS = getDimension(b)
	special_attrib = bool("special_case" in knil_case.keys())
	if special_attrib:
		special_ID = knil_case["special_case"]["attrib"]["id"]
	if Item.exist("flashlight") and Flashlight.isActivated(Item.getFlashlight()):
		highlighted_case_pos = Flashlight.get_highlighted_case_pos(Item.getFlashlight(), b['map'], x0+kx, y0+ky)
	for j in range(ROWS):
		goto((j+1), 1)
		for i in range(COLS):
			case = getCase(b, x0+i, y0+j)
			if "special_case" in case.keys():
				if special_attrib:
					if special_ID != case["special_case"]["attrib"]["id"]:
						if "object" in case.keys() and case["object"]:
							caracs = '!!'
						case = case["special_case"] # Si la case à un "toit", et si Knil n'est pas sous ce "toit"
													# Alors la case à afficher est ce "toit" et non la case en dessous
						# Par contre, si Knil est sous le "toit", il faut enlever tous les "toits" correspondants
				else:
					case = case["special_case"]
Пример #3
0
def move(m, k, b):
    """Fait bouger un monstre dans la direction de Knil s'il est en vue. Sinon le
fait érrer aléatoirement."""

    mx, my = getPos(m)
    x, y = Knil.getPos(k)
    x0, y0 = Background.getOrigin(b)
    kx, ky = x + x0, y + y0
    v = mx - kx, my - ky
    if is_Knil_in_room(m, k, b):
        if Item.exist("flashlight") and Flashlight.isActivated(
                Item.getFlashlight()):
            highlighted_case_pos = Flashlight.get_highlighted_case_pos(
                Item.getFlashlight(), b["map"], kx, ky)
            if (mx, my) in highlighted_case_pos:
                return None, False
        if is_Knil_in_sight(m, k, b):
            if mx != kx and my != ky and Background.isCrossable(
                    Background.getCase(b, mx - v[0] / abs(v[0]),
                                       my - v[1] / abs(v[1]))):
                m['position'] = mx - v[0] / abs(v[0]), my - v[1] / abs(v[1])
            elif mx == kx and my != ky:
                m['position'] = mx, my - v[1] / abs(v[1])
            elif mx != kx and my == ky:
                m['position'] = mx - v[0] / abs(v[0]), my
            return (mx, my), m["position"] != (mx, my)
        else:
            return wander(m, k, b)
    else:
        return None, False
Пример #4
0
def is_case_highlighted(b, k, x, y):
	"""Teste si une case est éclairée par la lampe"""

	x0, y0 = getOrigin(b)
	kx, ky = Knil.getPos(k)
	if Item.exist("flashlight") and Flashlight.isActivated(Item.getFlashlight()):
		highlighted_case_pos = Flashlight.get_highlighted_case_pos(Item.getFlashlight(), b['map'], x0+kx, y0+ky)
		return (x, y) in highlighted_case_pos
	else:
		return False
Пример #5
0
def point(k, steer):
    """Change le sens de Knil"""

    global translation
    direction, sens = translation[steer]
    front = (sens + 1) + int(direction == "y")
    if front != k["front"]:
        k["front"] = front  # Change le sens
        k["c"] = k["graphism"][front]  # Met à jour le caractère
        if is_in_inventory(k, "flashlight"):
            Flashlight.setAlpha(Item.getFlashlight(),
                                -(k["front"] * pi / 2.) - pi)
        return True
Пример #6
0
def execute(execution, k, b, d, q, g):
    """Execute le(s) résultat(s) d'un évènement"""

    assert isinstance(execution, str)
    execution = execution.split("_")

    assert execution[0] == "execute"

    if execution[1] == "give":
        item_name = execution[2]
        values = execution[3:]
        Knil.add_inventory(k, Item.summon_item(item_name, values), b, d)
        generate('event_having_{item_name}'.format(item_name=item_name), q, k,
                 b, d, g)

    elif execution[1] == "dialog":
        if execution[2] == 'path':
            path = "_".join(execution[3:])
            file = open(path, 'r')
            txt = file.read()
            file.close()
            speaker = ''
        else:
            if len(execution) == 4:
                speaker = execution[2]
                txt = execution[3]
            else:
                txt = execution[2]
                speaker = ''
        Dialog.run_dialog(d, txt=txt, speaker=speaker)

    elif execution[1] == "grid":
        if execution[2] == "crossable":
            x, y = int(execution[3]), int(execution[4])
            value = int(execution[5])
            Background.setCrossable(Background.getCase(b, x, y), value)
        elif execution[2] == "addObject":
            x, y = int(execution[3]), int(execution[4])
            id = execution[5]
            Background.add_object(b, x, y, id)
        elif execution[2] == "removeObject":
            x, y = int(execution[3]), int(execution[4])
            id = execution[5]
            Background.remove_object(b, x, y, id)
    elif execution[1] == "upFashlight":
        t = float(execution[2])
        Flashlight.improve(Item.getFlashlight(), t)

    elif execution[1] == "endGame":
        Game.end_game(g)
Пример #7
0
Файл: Item.py Проект: WexyR/KNIL
def summon_item(item_name):
    global items
    if item_name == "flashlight":
        item = Flashlight.create(8, 0, pi/4.)
    else:
        item = dict()
        item['name'] = item_name
    items[item_name] = item
    return item
Пример #8
0
def summon_item(item_name, values):
    """Crée un item"""

    global items
    if item_name == "flashlight":
        item = Flashlight.create(8, 0, pi/4.)
    else:
        if exist(item_name):
            item_name += '@' + str(len([i for i in items.keys() if item_name in i]))
        item = dict()
        item['name'] = item_name
        if values:
            item['values'] = values
    items[item_name] = item
    return item
Пример #9
0
Файл: Game.py Проект: WexyR/KNIL
def update_Flashlight(g, t):
    """Fait la mise à jour de la batterie de la lampe. Renvoie True si elle s'eteint
à cause d'une panne de batterie, afin de mettre à jour l'écran"""

    if Knil.is_in_inventory(g['knil'], 'flashlight'):
        f = Item.getFlashlight()
        if Flashlight.isActivated(f):
            Flashlight.update(f, t)
            Flashlight.show(f, 1, g['ROWS'] + 3)
            return not Flashlight.isActivated(f)
        else:
            False
    else:
        return False
Пример #10
0
# -*- coding: utf-8 -*-

import Flashlight
import Knil
import Background
import Dialog

from math import pi

functions = {"flashlight":lambda flashlight, **kwargs:Flashlight.exe(flashlight),
             "key":lambda key, k, b, d, **kwargs:open_door(key, k, b, d),
             "bomb":lambda key, k, b, d, **kwargs:explode(key, k, b, d),
             "powder": lambda key, k, d, **kwargs:uplife(key, k, d)}
items = {}


def summon_item(item_name, values):
    """Crée un item"""

    global items
    if item_name == "flashlight":
        item = Flashlight.create(8, 0, pi/4.)
    else:
        if exist(item_name):
            item_name += '@' + str(len([i for i in items.keys() if item_name in i]))
        item = dict()
        item['name'] = item_name
        if values:
            item['values'] = values
    items[item_name] = item
    return item
Пример #11
0
                goto((py - y0) + 1, (px - x0) * 2 + 1)
                for c in case["c"]:
                    if isinstance(c, str):
                        w(c)
                    else:
                        w(Background.special_carac[c])

    # affiche le monstre en tenant compte de la couleur et de la luminosité de la case sur laquelle il se trouve
    # si et seulement si il se trouve dans l'écran
    if x >= x0 and x < x0 + COLS and y >= y0 and y < y0 + ROWS:
        if is_Knil_in_room(m, k, b):
            goto(my + 1, mx * 2 + 1)
            case = Background.getCase(b, x, y)
            bgcolor = Background.getBgcolor(case)
            if "brightness" in case.keys():
                if Item.exist("flashlight") and Flashlight.isActivated(
                        Item.getFlashlight()):
                    highlighted_case_pos = Flashlight.get_highlighted_case_pos(
                        Item.getFlashlight(), b['map'], x0 + kx, y0 + ky)
                    if (x, y) in highlighted_case_pos:
                        case = Background.highlight_case(
                            case, Item.getFlashlight())
                        bgcolor = Background.getBgcolor(case, False)
            color(fontcolor=getColor(m), bgcolor=bgcolor)
            for c in m["c"]:
                if isinstance(c, str):
                    w(c)
                else:
                    w(Background.special_carac[c])


def is_Knil_in_room(m, k, b):
Пример #12
0
Файл: Item.py Проект: WexyR/KNIL
# -*- coding: utf-8 -*-

import Flashlight
from math import pi

functions = {"flashlight":lambda flashlight:Flashlight.exe(flashlight)}
items = {}


def summon_item(item_name):
    global items
    if item_name == "flashlight":
        item = Flashlight.create(8, 0, pi/4.)
    else:
        item = dict()
        item['name'] = item_name
    items[item_name] = item
    return item

def exe(item):
    global functions
    functions[getName(item)](item)

def exist(item_name):
    global items
    return item_name in items

def getName(item):
    return item["name"]

def getItem(item_name):
Пример #13
0
							caracs = '!!'
						case = case["special_case"] # Si la case à un "toit", et si Knil n'est pas sous ce "toit"
													# Alors la case à afficher est ce "toit" et non la case en dessous
						# Par contre, si Knil est sous le "toit", il faut enlever tous les "toits" correspondants
				else:
					case = case["special_case"]

			if "object" in case.keys() and case["object"]:
				caracs = '!!' # S'il y a au moins un objet sur la case, alors les caractères à afficher sont des points d'exclamations
			else:
				caracs = case['c'] # Sinon les caractères normaux

			fontcolor = getFontcolor(case) 	# On récupère les couleurs de la case
			bgcolor = getBgcolor(case)		# en tenant compte de la luminosité si besoin
			if "brightness" in case.keys():
				if Item.exist("flashlight") and Flashlight.isActivated(Item.getFlashlight()):
					if (x0+i, y0+j) in highlighted_case_pos: 	# Mais si elle est éclairée par la lampe
						case = highlight_case(case, Item.getFlashlight())				# Alors on augmente la luminosité
						fontcolor = getFontcolor(case, False)
						bgcolor = getBgcolor(case, False)

			if "object" in case.keys() and case["object"]:	# Si un objet est présent
				red, green, blue = fontcolor				# On l'affiche en augmentant sa dose de rouge
				fontcolor = (min(red*3, 255), green, blue)	# (proportionnellement à la luminosité)
			color(fontcolor=fontcolor, bgcolor=bgcolor)

			for c in caracs:
				if isinstance(c, int):	# Si le caractère à afficher est un nombre et non un chaîne de caractères
					w(special_carac[c]) # Alors c'est donc un caracère spécial (encodage différent) correspondant au nombre qu'il faut afficher
				else:
					w(c)