WW2

개발 진행

조회: 233 댓글: 0개 2023.11.06 17:43 월요일

머리로 생각만 하면 잘 안 되니까 글로 써보자.

  1.  소켓과 django channels 라이브러리를 통한 실시간 웹 통신 구현
    게임 개발 준비 과정으로 웹 채팅, 가위바위보롤 스펠 체크를 개발한 적 있어서 구현에 어렵지 않다.

사실 위의 1번만 구현 가능하면 이후는 개발 역량에 달린 것 같다.

이번엔 특징을 적어보자.

  1. 간소화된 UI
    sisu2를 만들고 깨달은 것은 눈에 보이는 디자인이 제일 중요하다는 것이다.
    sisu2는 기존의 sisu보다 훨씬 고도화된 코드로 개발이 됐지만,
    디자인을 하지 않았더니 sisu보다 훨씬 볼품없어 보이고 보기 좋지도 않다.
    그래서 WW2는 아싸리 UI를 대충 만들 것이다.
    나중에 능력이 되면 예쁘게 다시 만들려고...

아이디어를 적어보자

  1. 채팅창 닉네임 옆에 자기 국가 표시
  2. 대응에 on off 기능 추가?

차례 진행

  1. 자원 재분배 단계
     
  2. 플레이 단계
    손에 든 카드 1장을 플레이하거나 버립니다.
  3. 공군 단계(선택)
    공군 기물을 배치하거나 이동시킵니다. 또는 제공권을 확보합니다.
    ¿제공권 확보: 공군 전력 카드를 사용하여 인근 적 공군 기물을 제거할수 있습니다.
  4. 보급 단계
    보급이 끊긴 기물을 게임판에서 모두 제거합니다.
  5. 승점 획득 단계
    승점을 획득합니다.
  6. 카드 버리기 단계
    손에 든 카드를 원하는 만큼 버립니다.
  7. 카드 뽑기 단계
    손에 든 카드가 7장이 될 때까지 뽑습니다.

게임 데이터

class 데이터:
	def __init__(self, *args, **kwargs):
		self.라운드		#0~20
		self.승점		#0~999
		self.현재국가	#0~5
		self.국가순서	#['독일', '영국', '일본', '소련', '이탈리아', '미국']
		self.유저데이터	#{count: 0, users: {class 유저}}
		self.진영		#
		self.국가		#
		self.지역들		#dict class 지역을 가진 지역들
		self.보급지		#[] 기본 별 달린 보급지들
		
	def 보급확인(self, 출발지=None):
        if 출발지 is None:
            for 지역 in self.보급지:
                if self.지역들[지역].했노 == False:
                    self.재기(self.지역들[지역], count+1)
        else:
            출발지.보급확인(True)
            print(출발지)
            for 인접지역 in 출발지.인접:
                try:
                    if self.지역들[인접지역].했노 == False:
                        self.재기(self.지역들[인접지역], count+1)
                except:
                    print('', end='')

플레이어

uuid
닉네임

보유 육군 기물 개수
보유 해군 기물 개수
현재 육군 기물 개수
현재 해군 기물 개수
본토
국가
진영

지역

class 지역:
	def __init__(self, *args, **kwargs):
		self.타입	#육지 or 해양
		self.지명	#지명 이름
		self.보급지	#True or False
		self.인접	#[] 인접 지명 이름들
		self.기물	#[] 기물 목록
		self.진영	#추축국 or 연합국 or ""
		self.보급확인#0~20 현재 라운드에 보급 확인을 했다는 의미로 라운드 넣기
		self.보급로	#True or False 현재 보급로인지 아닌지
	
	def 기물추가(self, 기물):
		#기물추가
	def 기물제거(self, 기물):
		#기물제거
	def 보급확인(self, 라운드):
		self.보급확인 = 라운드
	def 보급(self, 보급):
		self.보급로 = 보급
		
	"""
	#내가 그냥 육지인지, 해협 통제권을 가진 육지인지
	해협 통제권: True or False
	통제하는 해협 : ["지중해", "북해"] 기타 등등..

	#내가 그냥 해양인지, 해엽 의존성을 가진 해양인지
	해협 의존성 : True or False
	해협 통제 육지 : 지역의 ID값
	"""

기물

보급 : True of False		#boolean	보급로와 연결돼있는지
군종 : "육군" or "해군"		#string		기물 종류
진영 : "추축국" or "연합국"	#string		전쟁 진영
국가 : "국가"				#string		플레이어 국가
지역 : 지역					#class		"지역" 개체

보급 단계에서 쓰일 보급 확인 함수

"""
보급 단계에서 보급로 확인

재귀함수
"""
def 보급_단계(출발지=None):
	if 출발지 is None:
		for 지역 in 게임판.보급지:
			if 지역.보급확인했다 < 이번턴:
				if len(지역.기물['플레이어 나라']) != 0:
					보급_단계(지역)
				else:
					지역.보급확인했다 = 이번턴
					지역.보급로이어짐 = False
	else:
		출발지.보급확인했다 = 이번턴
		출발지.보급로이어짐 = True
		
		for 인접지역 in 출발지.인접:
			if 인접지역.보급확인했다 < 이번턴:
				if len(인접지역.기물) != 0:
					for 기물 in 인접지역.기물:
						if 기물.국가 == 플레이어.국가:
							보급_단계(인접지역)
							break
				인접지역.보급확인했다 = 이번턴
				인접지역.보급로이어짐 = False
					

육군 창설

"""
육군 창설 가능 지역인지 판별

@param "지역"
@return True or False
"""
def 육군_창설_가능_지역_활성화(지역):

	육지인가요 = False
	자리있나요 = False
	보급로인가요 = False
	
	if 지역.타입 == "육지":
		육지인가요 = True
		
		if len(지역.기물) < 1:
			자리있나요 = True
		else:
			if 지역.기물[0].진영 == 플레이어.진영:
				자국기물없나요 = True
				for i in range(지역.기물):
					if i.국가 == 플레이어.국가:
						자국기물없나요 = False
				if 자국기물없나요:
					자리있나요 = True
					
		if 지역.지명 == 플레이어.국가:
			보급로인가요 = True
		else:
			if 육지_보급로_확인():
				보급로인가요 = True
	
	결과 = 육지인가요 and 자리있나요 and 보급로인가요
	return 결과

육지 보급로 확인

"""
육지 보급로 확인하는 함수

@param None
@return True or False
"""
def 육지_보급로_확인():
	결과
	
	return 결과

해군 창설

def 해군 창설("지역" 로컬):
#현재 문제는 적이 있던 말던 본토면 true 리턴 시킨다

	if 로컬.타입 == "해양":
		return True
	#현재 해양 주변에 보급이 확보된 자국 기물이 있는가?
	if :
		return True
	#빈 지역인가요?
	if len(로컬.놓인 기물) == 0:
		return True:
	#빈 땅은 아닌데..
	else:
		#같은 진영인가요?
		if 로컬.놓인 기물[0]->"기물".기물 진영 == 플레이어.진영:
			#그리고 남의 기물인가요?
			if 로컬.놓인 기물[0]->"기물".국가 != 플레이어.국가:
				return True

육지 전투

def 육지 전투("지역" 로컬):
	if 로컬.타입 == "육지":
		return True
	#현재 육지 주변에 보급이 확보된 자국 기물이 있는가?
	if :
		return True
	#아군 아니지?
	if :
		return True

해양 전투

def 해양 전투("지역" 로컬):
	if 로컬.타입 == "해양":
		return True
	#현재 해양 주변에 보급이 확보된 자국 기물이 있는가?
	if :
		return True
	#아군 아니지?
	if :
		return True

이벤트

각 이벤트 카드에는 플레이할 때 일어나는 효과가 명시되어 있습니다.

대응

언제 사용 할 수 있는지, 무엇을 할 수 있는지가 명시되어 있습니다.

경제 전쟁

카드에 무엇을 할 지 명시되어 있습니다.
경제전쟁 대상이 되어도 경제 전쟁 플레이하는데에는 아무런 지장이 없다!

전술

captcha