rorshi commited on
Commit
97627cd
·
1 Parent(s): 46f4aff

테스트 진행 중

Browse files
npc_social_network/maps/villages/town_hall.py CHANGED
@@ -2,7 +2,8 @@
2
  # 메인 실행 파일
3
  import pygame
4
  import sys
5
- from npc_social_network.simulation_manager import save_simulation, load_simulation
 
6
  from npc_social_network.maps.manager.image_loader import ImageLoader
7
  from npc_social_network.maps.manager.village_map import VillageMap
8
  from npc_social_network.maps.engine.game_engine import GameEngine
@@ -27,10 +28,8 @@ def run_town_hall_simulation():
27
  npc_manager = load_simulation() # 저장된 상태를 불러오기 시도
28
 
29
  if npc_manager is None:
30
- # 저장된 파일이 없으면 새로 시작
31
- npc_manager = NPCManager()
32
- # 여기에 초기 NPC들을 추가하는 로직을 넣습니다.
33
- # 예시: npc_manager.add_npc(NPC(name="엘라", ...))
34
 
35
  # 로딩
36
  image_loader = ImageLoader(tile_size)
 
2
  # 메인 실행 파일
3
  import pygame
4
  import sys
5
+ from npc_social_network.scenarios.scenario_setup import setup_initial_scenario
6
+ from ..manager.simulation_manager import save_simulation, load_simulation
7
  from npc_social_network.maps.manager.image_loader import ImageLoader
8
  from npc_social_network.maps.manager.village_map import VillageMap
9
  from npc_social_network.maps.engine.game_engine import GameEngine
 
28
  npc_manager = load_simulation() # 저장된 상태를 불러오기 시도
29
 
30
  if npc_manager is None:
31
+ # 저장된 파일이 없으면 새로운 시나리오 시작
32
+ npc_manager = setup_initial_scenario(image_loader)
 
 
33
 
34
  # 로딩
35
  image_loader = ImageLoader(tile_size)
npc_social_network/npc/npc_manager.py CHANGED
@@ -1,6 +1,6 @@
1
  # portfolio/npc_social_network/npc/npc_manager.py
2
  import random
3
- from typing import TYPE_CHECKING
4
 
5
  if TYPE_CHECKING:
6
  from .npc_base import NPC
@@ -11,19 +11,19 @@ class NPCManager:
11
  self.npcs: list['NPC'] = []
12
  self.npc_dict: dict[str, 'NPC'] = {}
13
 
14
- def add_npc(self, npc: NPC):
15
  """NPC를 매니저에 추가합니다."""
16
  if npc.name not in self.npc_dict:
17
  self.npcs.append(npc)
18
  self.npc_dict[npc.name] = npc
19
 
20
- def get_npc_by_name(self, name: str):
21
  """
22
  NPC 이름을 통해서 NPC의 정보를 반환
23
  """
24
  return self.npc_dict.get(name)
25
 
26
- def get_random_npc(self, exclude: "NPC"=None) -> "NPC":
27
  """
28
  특정 NPC를 제외하고 랜덤한 NPC를 선택
29
  - 추후 수정 내용: 상대 NPC가 랜덤이 아니라, 상호작용할 만한 근거가 있어야한다.
 
1
  # portfolio/npc_social_network/npc/npc_manager.py
2
  import random
3
+ from typing import TYPE_CHECKING, List, Optional
4
 
5
  if TYPE_CHECKING:
6
  from .npc_base import NPC
 
11
  self.npcs: list['NPC'] = []
12
  self.npc_dict: dict[str, 'NPC'] = {}
13
 
14
+ def add_npc(self, npc: 'NPC'):
15
  """NPC를 매니저에 추가합니다."""
16
  if npc.name not in self.npc_dict:
17
  self.npcs.append(npc)
18
  self.npc_dict[npc.name] = npc
19
 
20
+ def get_npc_by_name(self, name: str) -> Optional['NPC']:
21
  """
22
  NPC 이름을 통해서 NPC의 정보를 반환
23
  """
24
  return self.npc_dict.get(name)
25
 
26
+ def get_random_npc(self, exclude: ["NPC"]=None) -> Optional["NPC"]:
27
  """
28
  특정 NPC를 제외하고 랜덤한 NPC를 선택
29
  - 추후 수정 내용: 상대 NPC가 랜덤이 아니라, 상호작용할 만한 근거가 있어야한다.
npc_social_network/scenarios/scenario_setup.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ..npc.npc_manager import NPCManager
2
+ from ..npc.npc_base import NPC
3
+ from ..npc.npc_memory import Memory
4
+
5
+ def setup_initial_scenario(image_loader) -> NPCManager:
6
+ """
7
+ 테스트를 위한 초기 NPC 월드를 설정하고 NPCManager를 반환합니다.
8
+ - 5명의 NPC 생성
9
+ - 각기 다른 초기 성격 및 기억 부여
10
+ - NPC 간의 초기 관계 설정
11
+ """
12
+ print("새로운 시나리오를 설정합니다.: '시작의마을'")
13
+ npc_manager = NPCManager()
14
+
15
+ # --- 1. NPC 객체 생성 ---
16
+ # 엘린: 호기심 많고 감정적인 마법사
17
+ personality_elin = {"sensitive": 0.8, "stoic": 0.3, "cognitive_bias": 0.7}
18
+ elin = NPC("엘린", "마법사", [[2,3], [3,3], [4,3], [5,3], [5,4], [5,5]], image_loader.load("npc", "default"), personality=personality_elin)
19
+
20
+ # 밥: 무뚝뚝하지만 정직한 대장장이
21
+ personality_bob = {"sensitive": 0.2, "stoic": 0.8, "cognitive_bias": 0.4}
22
+ bob = NPC("밥", "대장장이", [[1,1], [1,2], [2,2], [3,2], [3,1]], image_loader.load("npc", "default"), personality=personality_bob)
23
+
24
+ # 앨리스: 사교적이고 계산적인 상인
25
+ personality_alice = {"sensitive": 0.5, "stoic": 0.5, "cognitive_bias": 0.8}
26
+ alice = NPC("앨리스", "대장장이", [[8,8], [9,8], [9,9], [8,9]], image_loader.load("npc", "default"), personality=personality_alice)
27
+
28
+ # 찰리: 성실하고 평화로운 농부
29
+ personality_charlie = {"sensitive": 0.6, "stoic": 0.6, "cognitive_bias": 0.3}
30
+ charlie = NPC("찰리", "농부", [[10,3], [11,3], [12,3], [12,4]], image_loader.load("npc", "default"), personality=personality_charlie)
31
+
32
+ # 다이애나: 조용하고 관찰력 있는 사서
33
+ personality_diana = {"sensitive": 0.7, "stoic": 0.7, "cognitive_bias": 0.9}
34
+ diana = NPC("다이애나", "사서", [[7,7], [7,8], [8,8]], image_loader.load("npc", "default"), personality=personality_diana)
35
+
36
+ # --- 2. 초기 기억 주입 ---
37
+ elin.remember(content="어젯밤 앨리스와 시장 가격 때문에 크게 다퉜다.", importance=8, emotion="anger")
38
+ alice.remember(content="어젯밤 엘라가 내게 무례하게 소리쳤다.", importance=8, emotion="resentment")
39
+ bob.remember(content="찰리가 어제 우리 집 지붕을 고쳐주어서 고맙다.", importance=7, emotion="gratitude")
40
+ charlie.remember(content="밥의 대장간 일을 도와주고 빵을 얻었다. 그는 좋은 친구다.", importance=6, emotion="joy")
41
+ diana.remember(content="도서관에서 밥이 책을 빌려가며 거칠게 다루어 조금 기분이 상했다.", importance=5, emotion="disgust")
42
+
43
+ # --- 3. NPC 매니저에 추가 ---
44
+ npc_manager.add_npc(elin)
45
+ npc_manager.add_npc(bob)
46
+ npc_manager.add_npc(alice)
47
+ npc_manager.add_npc(charlie)
48
+ npc_manager.add_npc(diana)
49
+
50
+ # --- 4. 초기 관계 설정 ---
51
+ # 엘라 <-> 앨리스 (나쁜 관계)
52
+ elin.relationships.update_relationship("앨리스", "anger", strength=5.0)
53
+ alice.relationships.update_relationship("엘라", "resentment", strength=4.0)
54
+
55
+ # 밥 <-> 찰리 (좋은 관계)
56
+ bob.relationships.update_relationship("찰리", "gratitude", strength=6.0)
57
+ charlie.relationships.update_relationship("밥", "joy", strength=7.0)
58
+
59
+ # 다이애나 -> 밥 (약간 부정적)
60
+ diana.relationships.update_relationship("밥", "disgust", strength=3.0)
61
+
62
+ print("✅ '시작의 마을' 시나리오 설정이 완료되었습니다.")
63
+ return npc_manager