U E D R , A S I H C RSS

Project Virush/Idea

프로젝트에 직접 참여하지 않으시더라도 다양한 의견을 환영합니다. 특히 생물학 지식에 대해서는 오류수정이나 추가정보를 기다립니다!
----

조현태 의견

이 란의 모~~~든 내용은 지.극.히. 주.관.적. 이며 전혀 객관적인 자료가 없음을 밝힙니다.
따라서 전체 기각 이여도 전혀 지장이 없습니다.^^
필체는 서적 번역투??ㅎㅎ

세균 키우기..... 이른바 '실시간 멀티 온라인 게임' 이다. 이걸 만들기로 결정하는 순간 우리는 커다란 문제에 직면하였다! ;;ㅁ;;
첫째 '실시간'이다. 실시간으로 돌아가는 프로그램은 커다란 제약을 가지게 된다. 무엇보다 '슈퍼 울트라 복잡한 연산을 해서는 안된다.'는 것이다. 맵이 너무나도 큰 나머지, 또는 맵을 검색하는 알고리즘이 너무 자세한 나머지 "왼쪽 끝에서 오른쪽 끝까지 이동하도록 명령하니 1분동안 길을 찾느라 멈추었어요." 라는 소리를 들어서는 안된다. 물런 이런 과장된 일은 없겠지만, 실시간으로 진행되는 만큼 끊김없이 느껴질 수 있는 부드러운 연산이 가능해야 한다는 것이다. 더욱이 멀티플레이인 만큼 이 문제는 더욱더 중요해 진다. 플레이어 1이 복잡한 연산을 수행시켜버렸다고 해서 플레이어2까지도 버벅되서는 조금 곤란해 진다. 이러한 문제를 감안해서 어떻게든 연산을 빠르게 만들어야 한다.
또한 실시간이라는 점은 사용자가 접속하지 않아도 돌아가는 것을 의미한다. 사용자가 하루, 이틀 쉬었다가 접속하였을때 플레이어의 바이러스들이 전부 죽어있는 광경을 연출해서는 안된다. 그렇기 때문에 바이러스들은 플레이어가 없어도 꿋꿋하게 살아나갈 수 있는 인공지능을 가지고 있어야 한다.

둘째 '온라인 멀티'플레이이다. 한명의 사용자가 접속해서 사용하는 것이 아니기 때문에 여러명이 접속해서 사용하게 된다. 그러한 만큼 여러 플레이어가 행동을 한다는 것을 염두에 두어야 한다. 한명 한명에게는 적절한 난이도이지만, 협동을 하니 난이도가 대폭 하락해서 금새 이길 수 있었다 라던가 하는 이야기가 나와서는 안된다.
이 문제는 위의 '실시간'이라는 점과도 연계가 된다. 다른 플레이어들이 잠자러 간사이... 올빼미족의 한 플레이어가 나타나서 전 플레이어의 바이러스를 사살해 버리고 도망가 버린다거나, 타 플레이어의 바이러스를 포위해 버려서 더이상 증식이 불가능하게 만드는 난처한 상황이 발생해서도 안된다. 물런 '상대방의 바이러스를 사살할 수 있다.' 와 같은 규칙은 정해진 바 없지만, 다른 플레이어가 자리를 비웠을때 한 플레이어가 다른플레이어의 캐릭터에게 영향을 미칠 수 있다는 점도 고려를 해야한다.

셋째 '게임' 이다. 게임은 무엇보다도 재미가 있어야 한다. 이것이 어떻게 보면 가장 큰 난제라고도 할 수 있다. 이게 쉽다면 그 많은 게임들이 도데체 왜 사장되었겠는가... 우리
의 게임도 이런 길을 걷지 않도록 노력은 해보아야 할것이다. 실시간이라고 해서 강한 인공지능을 부여했더니 몇년동안 자리를 비워도 꿋꿋하게 성장해서도 안된다. 또 규칙이 단순해서 오늘은 '성장' 내일은 '정지' 이런식으로 반복하면 수학적으로 최적화된 성장 알고리즘이 나온다. 와 같이 되면 재미가 없어질 것이다.
다시 정리를 하면 우리가 만들어야 할 것은

  1. 빠르고 단순한 연산이어야 한다. 그러면서도
    B. 높은 AI를 가지고 있어야 한다. 또
    C. 너무 AI가 좋아서 플레이어가 할게 없어서도 안된다.
    D. 난이도가 쉬워서도 안된다. 그렇다고
    E. 너무 어려워서도 안된다.
    F. 어느정도 돌발적인 상황이 있어야 한다.
    G. 너무 돌발적이어서 플레이어가 적응하지 못해서도 안된다.
    H. 다른 플레이어와 연계가 있어서 즐겁게 진행할 수 있어야 한다. 하지만
  2. 연계가 너무 심해서 타인의 플레이를 쉽게 방해할 수 있어서도 안된다.

대충.. 이정도인 것이다. 뭐 충분히 더 있을수도 있겠지만.. 이정도만 보아도 쉽게 만들 수 없다는것은 눈에 보인다. ....OTL..
이런 험난한 상황을 해결할 비책이.... 아쉽게도 나에게는 없다.
그렇지만 몇가지 아이디어는 내어 볼 수 있다. 그래서 요 며칠간 짬짬이 생각한 아이디어를 서술해 보겠다. 많이 부실해도 예쁘게 봐주고 보충해 주면 좋겠다.

위의 조건들과
J. 생물학적인 사람들이 플레이를 즐겨 해야하며, 그렇다고 너무 심오해서
K. 일반인이 플레이를 못할 정도가 아니어야 한다는 점을 대강 고려해서 만든 규칙은..

  1. 자신의 모든 바이러스는 AI를 가지고 있다. (B)
  2. 이 바이러스들은 자신의 염기서열(이하 DNA)을 바탕으로 AI를 구성하여 움직이고, 분열하고, 다른 세포에 침투한다. (J)
  3. 바이러스를 잡는 면역체계AI(이하 백혈구)가 존재한다. (D)
  4. 백혈구는 각 인간의 고유한 DNA의 일부를 통해서 적, 아 를 구분한다. (J)
  5. 백혈구의 일부는 유전자 알고리즘을 통해 바이러스를 잘 잡도록 진화한다. (D)
    (이는 플레이에 잘 대응하기 위해서이기도 하지만, 이렇게 진화 한다면 오래 플레이해서 세력이 큰 플레이어는 고생하고, 막 시작한 플레이어는 비교적 덜 고생할 것이다.)
  6. 백혈구는 진화할때 일부의 성능이 떨어지는 DNA를 그대로 복제한다 (E)
  7. 백혈구는 더듬이 알고리즘과 유사한 간단한 알고리즘을 통해 길을 찾고 바이러스를 찾는다. (A)
  8. 백혈구는 플로킹과 같은 간단한 알고리즘(A)을 통해 뭔가 있어 보이게끔 움직여야 한다. (F)
    ( 꿈틀거리는 백혈구들이 무언가(?)있어 보이는 편대를 이루어 움직이는 듯한 모습을 플레이어가 본다면, 실제로는 무언가(?)가있는 편대는 없어도 플레이어는 그렇게 느낄 것이다.)
  9. 백혈구는 기습, 매복과 같은 간단한(G) 전술을(F) 가끔(G, A) 구사할 수 있다.
  10. 백혈구의 떨어지는 DNA는 아군 세포를 구분하지 못하여 공격할 수 있다. (F, E)
  11. 플레이어는 선택한 바이러스에게 상점에서 구입하듯이 간단하게(K) DNA를 주입, 변경, 삭제할 수 있다.(J)
    (이는 다양한 DNA를 통해서 여러 종류의 유닛을 생산하는 것과 같은 효과를 낼 수 있다. 수비용 바이러스.. 공격용 바이러스.. 생산용...)
  12. 바이러스는 세포에서 얻은 영양소를 바탕으로 분열하며(D), 많은 DNA는 많은 영양소를 필요로 하게 된다.(D)
  13. 바이러스의 일부도 가끔 예측 불가능한 돌연변이를 일으킨다. (D, E, F)
  14. 바이러스도 서로의 DNA를 바탕으로 서로를 알아보기때문에 이를 수정해서 타 플레이어와 동맹을 취하거나 숙주의 세포로 위장할 수 있다. (H)
    (동맹을 취하기 위해 같은 일부 DNA를 같게 만든다면 이익을 볼 수도 있지만, DNA가 같아서 다형성이 떨어지기 때문에 백혈구로 부터 다같이 죽을 수도 있다.)
  15. 플레이어가 플레이를 하는 동안에 한해서, 플레이어는 단 한마리의(I) 바이러스를 자유롭게 조작할 수 있다. (E)
  16. 바이러스가 분열하여 세포를 탈출하면, 해당 세포는 죽어버린다. (D)
  17. 만일 바이러스가 DNA에 의해 분열할 때가 되었음에도 불구하고, 해당 세포의 영양소가 부족하다면 바이러스는 부족한 DNA만을 가지고 분열한다. (D)
    ( 이를 막기위해 플레이어는 DNA에 분열할 조건을 추가할 수 있지만 이는 추가적인 영양소의 소모를 의미한다.)
  18. 전체의 세포는 일정 시간마다 분열을 한다. (E) (단 바이러스에 감염된 세포는 바이러스의 DNA구조에 따라 바이러스를 같이 분열시킬 수 있다.)(E)
  19. 각각의 세포는 종류 및 만들어진 시간, 공급받은 영양분에 따라 서로 다른 영양소를 가지고 있다. (D)
  20. 특정 기관을 구성하고 있는 숙주의 세포가 각 기관의 최소 필요양 이하로 줄어들게 되면 숙주는 점차 죽어간다. 숙주가 죽으면 해당 숙주의 바이러스는 전부 소멸한다.(D)
  21. 만일 숙주가 사망하기 이전에 다른 숙주로 옮겨간 바이러스가 잘 살고 있다면 플레이어는 해당 숙주를 선택해서 플레이 할 수 있다. (E)
    ( 이는 특정 플레이어가 같이 죽자는 식의 플레이를 해도 다른 플레이어가 충분히 대비 할 수 있게 하기 위해서이다.)
  22. 다른 숙주로 DNA특성에 따라 이동할 수 있지만 (E) 이는 아주 낮은 확률이며, 다른 숙주의 바이러스는 현재 플레이중인 숙주가 죽을 때 까지 플레이, 볼 수 없다. (D)
    ( 숙주가 너무 많아질 경우 서버가 감당하기 힘들 수 있기 때문이다. )
  23. 게임은 플레이어의 재미와 편리를 위해서 멋진 그래픽과 편리한 인터페이스를 제공해야 한다. (이를 위해 미소녀가 등장해도 뭐라하지는 않겠....퍽!)
  24. 화려하고 박진감 넘치는 게임을 제작하는 것이 불가능 하다면, 반대로 가볍고 명령을 내리는 간격이 길어서 다른걸 하면서 할 수 있는 게임을 만든다.

전체적으로 플레이어가 고생하는 요소가 많지만.. 이는 플레이어가 너무 똑똑하고 돌발적이기 때문이다..ㅠ.ㅜ 플레이어를 저지하기 위해 AI들이 살포시 치트를 한다고 해도 뭐라하진 않겠다.^^ (단, 티내지 말것! 플레이어가 백혈구에게 들키지 않기 위해 구석에서 가슴을 조리며 은둔 생활을 하는것도 묘미!)
게임의 요소는 뽀대(?)와 흥미 이기때문에 뭔가 AI가 있어 보이고 플레이어가 고생을 하지만, 그래도 뭔가 보람있는 플레이를 하도록 노력을 했습니다.^^
그리고 한마리의 바이러스는 자유조작을 함으로써 게임을 오래 플레이 하도록 하는 센스도..(휘익~ 거기 A양 바이러스~ 알고리즘이 멋진데 어디가서 DNA교환이라도*^^*)
플레이어는 DNA를 사용해서 자신의 바이러스의 알고리즘을 만들고.. 백혈구는 자신의 DNA를 DNA알고리즘으로 진화시키고.. DNADNA...GATACA인가;;ㅁ;;
여기까지가 본인의 의견입니다.^^ 이래저래 부실한 요소가 많지만.. 머리속 가상 시뮬레이션으로는 이정도 밖에 생각나지 않아서.. 잘못된점 지적해 주세욧!!

정수민 의견


조잡한 DNA 0,1 코드
0,1 이2가지 숫자로 죄다 암호화
모양 크기 이동속도 번식방법 등등현태의 의견 다수 표절하면됨
예를 들어

모양부분
0(1번또는 0번꺽이면 0, 2번꺽이면1)0(직선)1(꺽임)0(한쪽1다른쪽)0(직선)0(직선)
(태트리스?)

크기(굵기?)
큰(굵은)순
1(크다)1(크다) - 그러니까 큰것중에 크다.
1(크다)0(작다) - 그러니까 큰것중에선 작다.
0(작다)1(크다) - 그러니까 작은것 치고는 크다.
0(작다)0(작다) - 그러니까 작디작은놈

이동속도(근력에 해당할태죠 크기나 모양에 영향을 받을듯?)
빠른순
1(빠르다)1(빠르다)
1(빠르다)0(느리다)
0(느리다)1(빠르다)
0(느리다)0(느리다)

번식방법(약속을 정하는 수밖에 없네요)
1(암수가있는)1(자웅동체)
1(암수가있는)0(자웅이체 - 이런말이 있나요?;)
0(암수가없는)1(분열)
0(암수가없는)0(포자-이건 사기에가까운데 -_-;; 제약을둬야겠죠 뭐 정해진건 없으니까 '~';)

백신
위의 코딩방법으로 하나의 코드를 완성했다고 가정 그코드가 다음과 같다.

00000
01
11
00

그럼 백신은
제일 앞에있는 숫자인 0010 이라는 암호를 알아내야 이 바이러스를 사살할수있다.

의견이라고는 해놨지만
그냥 이런식으로 소스를 짜면 좋겠다 ... 싶고 백신은 또 어떻게 만들까아... 하고 생각하다가 한번 생각해봤습니다.
크기가 다 똑같을 수도 있고 번식방법또한 그냥 분열만 택할수도있는
그냥 세균녀석 인공지능부분을 제외한 외관(?)의견이였슴미다. -_-;;

-- 수민이 나뽕..ㅠ.ㅜ 그 쪼그만 바이러스에 암수를 나누다닛..;;ㅁ;; 단세포를 너무 과대 취급 하는거 아냥?? ㅎㅎ - 조현태
-그냥 방법이라고 했잖냐 ㅋ 각각 바이러스를 유저마다 고유특성을 가지게 만들어서 그 고유특성에따른 암호를 나타내서 DNA흉내를 내는거라고 ㅋ 유전자 길이를 길게하고 상동유전자를 만들어서 우열의 법칙을 적용시키는것도 재미있겠지 ? +_+ 암수를 구분한건 생각으로적용시킨 유전자가 환경에 얼마나 적응 할수있을까? 해서 만들어 본거다 ㅋ 한번 창발적 세계를 만들어 보아요 >.<)b - 정수민

정수민 의견


백혈구의 뭔가 있어보이는 움직임으로

플러킹보단

조건에 따라 뭉치고 흩어지는 면역채제와 유사한 방식이 좋을꺼 같슴미다.

플러킹으로 백혈구를 유도하면

일종의 자연재해가 되어버리는거 같슴미다.

운이 없어서 쓸리기보단

조심성없어서 쓸리는게 덜억울하잖아요 +_+

백혈구가 바이러스와 같이 죽으면

다른 백혈구를 불러 들이는 페르몬(?)이 같이 터지는검미다 +_+

이 페르몬(?)의 남아있는 시간/범위를 적당히 조절하면

적절하게 바이러스에 대처할 수 있을꺼 같슴미다. +_+
-수정했씀

또한 백혈구의 총수는 일정하니까

잡힌 바이러스의 빈도에따라 그 바이러스를 잡는 백혈구수를 늘리는 검미다.

진화대신 방식으로 해도 괜찮을꺼같아서요 ;

방법은 아직 떠오르지 않습니다.-_-;;

그냥 잡히는 빈도만큰 비율을 맞추는 방법도 있슴미다만...

암튼 의견이였슴미다 -_-/

의견 고마워요~ 궁금한 점이 몇가지 있는데...
페로몬 방법에서는 사용자가 홀로 떨어진 백혈구를 습격하고 도망가는 게릴라 수법을 쓴다면 당해내지 못할 것 같기도 하네요. 일단 알려진 바이러스는 다음번에 무조건 잡을 수 있게 하는 걸까요?
바이러스 빈도에 따라 해당 백혈구를 늘리는 방법도 생각 중인데, 무조건 잡게 하면 백혈구에 노출된 바이러스가 너무 취약할 것 같다는 의견이 있습니다.
- 어제 지방에 있어서 학교를 못갔어요 ;; 죄송함미다 -_-;; 암튼 첫번째 문제는 약간 난해 하네요 '~' 여러 의견을 조율해야 할듯 ;ㅡ; 백혈구를 일정범위 안에 있는 것들만 검색이 가능하게 한다던가 아니면 하이딩이 가능하다던가 (;;;) 하는 방법이 가장 먼저 떠오릅니다만 게임이 조금 어려워질 우려가 있네요 -_-;
그리고 바이러스를 잡는건 제가 생각하기에는 무조건 잡았으면 합니다.
대신 백혈구에 제약을 둬야 겠죠 이동속도가 느린다던가 하는.
근데 백혈구가 가지 못하는 지역이나 통과하지 못하는 구간이 있으면 안된다는거지요 =ㅅ= 바이러스가 못지나 가고 검색이 불가능해도 백혈구는 지나가고 검색이 가능해야 할겁니다 ;;
그리고 게임의 본격적인 시작은 자신의 유전자코드가 발각된 후라고 생각합니다 +_+
그전에는 그냥저냥 세력을 어느정도 기반을 만들정도로만 키우면 되겠지요 ㅎ;
전이랑 게임 규칙이 많이 바뀌어서 이제는 항체의 개별적인 움직임은 이제 그다지 고려하지 않아도 되겠군요. 그보다는 항체를 형성하고 숙주가 이동해서 바이러스에 잘 대항할 수 있도록 하는 것이 필요합니다.

한줄 의견

백신이라는 요소를 추가하면 어떨까 - 김정현
사용자가 백신역할을 하는 사용자를 두는 방법도 있겠고, 게임 안에서 NPC나 거꾸로 생각해서 바이러스가 퇴치해야 하는 적으로 생각할 수 있겠네요. -- Leonardong
저 생물에 관심많아용!! 어떤언어로 만드실건가요? - 허아영
전에 만들어 놓은 것이 파이썬이라서 이번에도 파이썬으로 할 예정이에요. -- Leonardong
저도 생물에 관심많아요!!!! ㅎㅎ;;;- 정수민
참여하려면 12워 27일 화요일 1시 7피로!
----
ProjectVirush 
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.1941 sec