USB 메모리나 하드에 WIndows XP 설치하기 (USB에 XP설치) | 기술
2007/11/28 19:40

출처는 아래 영문사이트임니다

http://www.ngine.de/index.jsp?pageid=4176

그대로 따라 하시면 됨니다만 XP SP1는 잘되는 편이나 SP2는 시스템에 따라 부팅이 안되는 경우가 많습니다

저도 USB20G 외장 하드에 SP2로 설치를 시도했으나 제 컴퓨터에서는 윈도우 설치시 파일 Copy후재부팅

되면서 부팅이 되고 하드웨어를 잡아야 하는데, 재부팅이 안되고 파란화면이 나옴니다.

SP2 PRO 버젼이나 HOME 버젼 다 해봤는데 안되더군요. 그래서 SP1로 설치하니 잘되서, SP2 업데이트를하니

SP2로도 무사희 부팅이 됨니다. 그러니 처음 SP2로 적용해보시고 안되시는 분은, SP1으로 설치 하신다음

SP2 업데이트를 해보세요. 외장하드에 설치해서 체감속도도 쓸만하더군요.

외장하드에 메모리에 윈도우XP 설치를 하시려는 분들은 아마 속도빠른 USB메모리나 요즘 MySSD UX 를 노트북등에서

사용하시려는 분들이겠지요.

위 영문 사이트의 내용을 간단희 설명하고 첨부파일에 미리 적용한 파일을 올려놓으려 했으나 여러분이 가지고 계신 XP의

종류가 달라서 안되시는 분들이 있을까봐 첨부파일은 USBboot.inf 파일만 올리겠으니, 위 방법대로 수동으로 파일을 수정하시면 됨니다.

XP버젼은 Home이나 PRO는 상관없지만 기본버젼이 아니고 SP1이나 SP2버젼을 이용하셔야 함니다

그리고 컴퓨터는 당영희 USB부팅을 지원해야 함니다.

가. USB 부팅지원 XP CD 만들기

1.UltraISO 를 다운받아 설치함니다. 비슷한 winiso등의 ISO를 다룰수 있는 프로그램이면 됨니다

여기서는 UltraISO를 사용하겠습니다

http://www.ezbsystems.com/ultraiso/download.htmUltraISO 홈페이지

그다음 XP CD를 준비하시고 XP CD 안에 i386 폴더에서 아래 5개의 파일을 임의의 폴더에 복사후

알집이나 winrar등으로 USB.IN_ USBPORT.IN_ USBSTOR.IN_ 를 압축을 해제하면

USB.INF USBPORT.INF USBSTOR.INF 의 3개의 파일이 생김니다. 원래의 파일은 삭제해도 됨니다.

혹 XP를 ISO나 BIN파일등으로 가지고 계신분들은 Ultraiso 를 실행해서 ISO파일을 열고 i386 폴더에서

아래의 파일을 원하는 폴더에 드래그앤드롭 하면 됨니다

TXTSETUP.SIF

DOSNET.INF

USB.IN_

USBPORT.IN_

USBSTOR.IN_

2. XP CD를CD롬에 넣고UltraISO를 실행 후 F8키를 누르거나 도구-CD 이미지 만들기를 눌러서

XP CD를 ISO 파일로 만듬니다. 이미 ISO 파일로 가지시고 계신분은 3.번으로 넘어가면 됨니다

3.이제 위 5대의 압축해제한 파일들을 편집하면 됨니다 아래 방법대로 하시면 됨니다

a. TXTSETUP.SIF

노트패드나 울트라에디터등 에디터로 아래부분을 수정하시면 됨니다

아래 [InputDevicesSupport.Load] 부분을 찾아서 줄친 파일을 잘라내서[BootBusExtenders.Load]

부분에다가 붙혀넣기 하면 됨니다. 다른파일들도 마찬가지로 하시면 됨니다, 없는 부분은그대로 타이핑하시면됨니다

줄친글자는 삭제할 부분이고 굵은 글자는 타이핑칠 부분임니다

[InputDevicesSupport.Load]
usbehci = usbehci.sys
usbohci = usbohci.sys
usbuhci = usbuhci.sys
usbhub = usbhub.sys
usbccgp = usbccgp.sys
hidusb = hidusb.sys
serial = serial.sys
serenum = serenum.sys
usbstor = usbstor.sys

[BootBusExtenders.Load]
pci = pci.sys
acpi = acpi.sys
isapnp = isapnp.sys
acpiec = acpiec.sys
ohci1394 = ohci1394.sys
usbehci = usbehci.sys
usbohci = usbohci.sys
usbuhci = usbuhci.sys
usbhub = usbhub.sys
usbstor = usbstor.sys

[InputDevicesSupport]
usbehci = "Erweiterter Hostcontroller",files.usbehci,usbehci
usbohci = "Open Hostcontroller",files.usbohci,usbohci
usbuhci = "Universeller Hostcontroller",files.usbuhci,usbuhci
usbhub = "Standard-USB-Hubtreiber",files.usbhub,usbhub
hidusb = "HID-Parser",files.hidusb,hidusb
serial = "Treiber fr seriellen Anschluss",files.none,serial
serenum = "Enumerator fr seriellen Anschluss",files.none,serenum
usbstor = "USB-Speicherklassentreiber",files.usbstor,usbstor
usbccgp = "USB Generic Parent Driver",files.usbccgp,usbccgp

[BootBusExtenders]
pci = "PCI-Bustreiber",files.pci,pci
acpi = "ACPI Plug & Play-Bustreiber",files.acpi,acpi
isapnp = "ISA Plug & Play-Bustreiber",files.isapnp,isapnp
acpiec = "Integrierter ACPI-Controllertreiber",files.none,acpiec
ohci1394 = "IEEE-1394-Bus-OHCI-konformer Anschlusstreiber",files.ohci1394,ohci1394
usbehci = "Erweiterter Hostcontroller",files.usbehci,usbehci
usbohci = "Open Hostcontroller",files.usbohci,usbohci
usbuhci = "Universeller Hostcontroller",files.usbuhci,usbuhci
usbhub = "Standard-USB-Hubtreiber",files.usbhub,usbhub
usbstor = "USB-Speicherklassentreiber",files.usbstor,usbstor

[HiveInfs.Fresh]
AddReg = hivedef.inf,AddReg
AddReg = hivesys.inf,AddReg
AddReg = hivesft.inf,AddReg
AddReg = hivecls.inf,AddReg
AddReg = hiveusd.inf,AddReg
AddReg = dmreg.inf,DM.AddReg
AddReg = usbboot.inf,usbservices

[SourceDisksFiles]
usbboot.inf = 1,,,,,,_x,3,,3
bootvid.dll = 1,,,,,,3_,2,0,0,,1,2
kdcom.dll = 1,,,,,,3_,2,0,0,,1,2

b. DOSNET.INF

[Files]
d1,usbboot.inf
d1,_default.pif
d1,12520437.cpx
d1,12520850.cpx

c. usb.inf

[StandardHub.AddService]
DisplayName = %StandardHub.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbhub.sys
LoadOrderGroup = Boot Bus Extender

[CommonClassParent.AddService]
DisplayName = %GenericParent.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbccgp.sys
LoadOrderGroup = Boot Bus Extender

d. usbport.inf

[EHCI.AddService]
DisplayName = %EHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbehci.sys
LoadOrderGroup = Boot Bus Extender

[OHCI.AddService]
DisplayName = %OHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbohci.sys
LoadOrderGroup = Boot Bus Extender

[UHCI.AddService]
DisplayName = %UHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbuhci.sys
LoadOrderGroup = Boot Bus Extender

[ROOTHUB.AddService]
DisplayName = %ROOTHUB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbhub.sys
LoadOrderGroup = Boot Bus Extender

e. usbstor.inf

USBSTOR.AddService]
DisplayName = %USBSTOR.SvcDesc%
ServiceType = 1
StartType = 0
Tag = 3

ErrorControl = 1
ServiceBinary = %12%\USBSTOR.SYS
LoadOrderGroup = Boot Bus Extender

f.새로만드는 파일 USBBOOT.INF

아래부분을 복사해서 usbboot.inf 파일로 만들던지 첨부파일의 usbboot.inf 를 사용하세요 이 파일은 모든버젼의

XP CD 에 공통으로 사용되는 같은 파일임니다.

http://mfiles.naver.net/69bb5f8891c8a4123f59/data28/2007/10/19/117/usbboot-songdg55.rar

이파일을 받아도 됨니다.

[usbservices]

HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","DisplayName",0x00000000,"USB Mass Storage Driver"
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","ImagePath",0x00020000,"system32\DRIVERS\USBSTOR.SYS"
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","Type",0x00010001,1

HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","DisplayName",0x00000000,"USB 2.0 Enhanced Host Controller Miniport Driver"
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","ImagePath",0x00020000,"system32\DRIVERS\usbehci.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Type",0x00010001,1

HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","DisplayName",0x00000000,"USB2 Enabled Hub"
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","ImagePath",0x00020000,"system32\DRIVERS\usbhub.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Type",0x00010001,1

HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","DisplayName",0x00000000,"Microsoft USB Universal Host Controller Miniport Driver"
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","ImagePath",0x00020000,"system32\DRIVERS\usbuhci.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Type",0x00010001,1

HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","DisplayName",0x00000000,"Microsoft USB Open Host Controller Miniport Driver"
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","ImagePath",0x00020000,"system32\DRIVERS\usbohci.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Type",0x00010001,1

4. 이제 위 파일들중usb.inf usbport.inf usbstor.inf 를 압축할 차례임니다

http://download.microsoft.com/download/platformsdk/cab/2.0/w98nt42kmexp/en-us/Cabsdk.exe

위에 사이트에서 Cabsdk.exe 를 다운받아 실행하면 압축이 풀림니다 이중 bin 폴더의 파일을 위에서 압축해제한

파일들이 있는곳으로 Copy 후 cmd(DOS창) 창을열어서 파일들이 있는곳으로 이동 후 아래와 같은 명령을 내림니다

cabarc n USB.IN_ usb.inf
cabarc n USBPORT.IN_ usbport.inf
cabarc n USBSTOR.IN_ usbstor.inf

5. 이제 UltraISO 를 실행하고,만들어 논 XP의 ISO 파일을 연다음, 아래의 파일들을 드래그앤드롭해서 I386 폴더에

덮어쓰기 하고 저장하면 됨니다.

USBBOOT.INF

DOSNET.INF

TXTSETUP.SIF

USB.IN_

USBPORT.IN_

USBSTOR.IN_

6. 공CD나 CDRW를 넣고 5. 번에서 저장한 XP 를 구우면 됨니다.

UltraISO에서는 F7키를 눌러서 CD 이미지 레코딩을 하면 되고 아니면 Nero 등에서 구우면 됨니다

나. CD로 XP 설치하기

컴퓨터의 내장하드의 파워케이블을 제거해서 내장 하드를 인식 못하게 하거나, CMOS 에서 내장 하드를 인식못하게 함니다

그다음 USB 메모리나 하드를 컴퓨터에 연결하고 Cmos (바이오스)로 들어가서부팅운선순위를 1번째는 CD로 놓고 2번째는 USB

한다음 저장후 XP CD 부팅을해서 XP를 설치하면 됨니다.

XP CD를 넣고 부팅하면, 하드를 선택하는 부분이 있는데, 내장하드를 cmos에서만 인식 못하게 하면 USB 하드가 먼저 잡희고

그다음 내장하드도 IDE 호환모드등이면 2번째로 잡힘니다. 이때 USB하드를 선택하고 이왕이면 포멧을 하고 설치하면

XP파일을 USB하드에 Copy 후 몇초기다리거나 엔터를 치면 자동으로 재부팅되고 나머지 설치과정을 진행함니다.

만일 재부팅과정에서 파란화면이 나오면, XPCD를 SP2로 했다면 SP1으로 만들어서 다시 한번 해보세요

XP를 설치 후 나머지 드라이버나 프로그램을 설 치 한 다음 Cmos 에서 원래 내장하드를 연결하거나 Cmos에서 인식하게 고치고

USB 하드로 부팅하면 내장하드가 D: 드라이버로 인식을 하게 됨니다.

다. USB 하드로만 XP설치 하기

이 방법은 나. 의 CD로 설치 하는것 보다 시간이 더 많이 걸리고 안될 수도 있으니 CD 드라이브가 있다면 CD로 설치하고

없다면 마지막 방법으로 설치해보세요

1. HP USB TOOL 툴이나 FlashBootWizard 등으로 USB하드를 FAT32로 포멧하고 DOS로 부팅되게 함니다

DOS에서는 config.sys 에서는 himem.sys를 autoexec.bat에 반듯이 smartdrv.exe 를 로드하세요 안그러면 XP설치가 많이 느려짐니다
2. 위에서 수정한 XP.iso 파일를 UltraISO 등으로 열어서 I386 폴더만 USB 하드로 Copy함니다
3. 이제 재부팅해서 위 2.번과 같이 내장하드를 제거하거나Cmos에서 인식못하게 하고 저장한다음 USB 하드로 부팅함니다
4. DOS로 부팅되면
USB의 i386 폴더로 이동함니다
cd i386 엔터
Winnt 엔터
이렇게 하면 XP의 설치를 시작함니다
나머지는 위 CD 설치 방법과 비슷함니다
5. FAT32를 쓸거면 그냥 사용하면 되고 만일 NTFS로 사용할거면

a.시작, 실행을 차례로 누르고 cmd를 입력한 다음 확인을 누릅니다.
b.명령 프롬프트에서 CONVERT driveletter: /FS:NTFS를 입력합니다.
c.Convert.exe가 파티션을 NTFS로 변환하려고 시도합니다

d. c: 드라이브에 대한 단독 액세스를 얻을 수 없기 때문에 지금은 변환할 수 없습니다.

다음에 시스템이 다시 시작될 때 변환되도록 하시겠습니까?(Y/N)

가 나오면 Y를 누르고 재부팅하면 NTFS로 변환이 됨니다

라.팁

1. USB하드면 상관이 없으나 만일 USB 메모리라면 메인메모리가 충분하다면 가상메모리를 없에거나

내장 하드로 변경함니다

2. 작은 용량의 USB메모리에 XP를 설치했다면 위 가상메모리를 변경한것 만으로 많은 공간이 생기며

이 밖에 아래 공간의 파일들을 제가 하고 나면 WIndows는 1기가정도만을 차지 함니다

windows\system32\dllcache\*.*

windows\temp\*.*

windows\Driver Cache\*.*

windows\help\Tours\*.*

windows\SoftwareDistribution\Download\*.*

windows\$HF_MIG$\* 윈도우 업데이트파일
windows\$NTUNIN* 로 시작하는 폴더로 윈도우 업데이트파일

3. 제어판-인터넷 옵션-설정-폴더이동 부분을 내장하드로 이동 한다든지 하면 USB메모리를 좀더 오래

사용 할수 있을 검니다.

USB메모리는 쓰기제한 횟수가 있어서 어떤거는 1만번정도 어떤거는 10만번정도라고 함니다. 제품마다 다르지많요

4. 내컴퓨터-오른쪽마우스-속성-고급-환경변수 에서 Temp와 tmp폴더도 내장 하드등으로 변경하면 USB메모리에

쓰기횟수를 줄일수 있습니다.

5. USB에 XP를 설치하면기본으로 이동 디스크로 연결되어빠른 제거를 위해 최적화 되어 있어 쓰기 캐시가 안되어

있습니다. 그래서 쓰기시 느릴수가 있는데 USB에 쓰기를 많이 안한다면 모르지만 캐시를 설정하려면

내컴퓨터-오르쪽마우스-속성-하드웨어-장치 관리자-디스크 드라이브-USB 하드 선택하고 오르쪽 마우스 누르고 속성

-정책-성능을 위해 최적화에 선택 한다음 그 밑에 디스크 쓰기 캐시 사용을 체크함니다

시스템에 따라디스크 쓰기 캐시 사용이 활성화가 안되는 경우가 있습니다

6. 디스크 최대절전모드가 안된다고 하지만 방법이 있다고 함니다

http://www.msfn.org/board/Multiple_Partition_USB_Stick_Multi_Boo_t69211.html에 방법대로

USB 장치를 고정디스크로 만드는 방법을 사용하면 됨니다

a. http://www.xpefiles.com/download.php?id=88&sid=3653ceee7119d789678efb0f3654773e여기서 히다찌

드라이버를 다운 받습니다. 안받아지는경우에는아래서 받습니다

http://mfiles.naver.net/68ba5e8990c9a5133f59/data28/2007/10/19/152/xpfildrvr1224_320-songdg55.zip

b. regedit 실행해서 아래 키값중 USBSTOR 이하의 값을 알아냄니다. 아래 빨간친 부분으로 USB장치에 따라 값이 다름니다

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_Generic&Prod_USB_Flash_Disk&Rev_0.00

c. a, 에서 다운받은 파일이나 첨부파일(xpfildrvr1224_320) 을 압축을 해제하고 이중 cfadisk.inf 를 수정해야 함니다

[cfadisk_device] 에서

%Microdrive_devdesc% = cfadisk_install,IDE\DiskIBM ..... 생긴 문자열을 찾아서 아래와 같이 바꿈니다

(주의점은 8군데이고 USBSTOR\이하 부분은, 연결한 USB 장치에 따라 다르니 무턱되고

아래 빨간 글자를 넣으면 안됨니다)

%Microdrive_devdesc% = cfadisk_install,USBSTOR\Disk&Ven_Generic&Prod_USB_Flash_Disk&Rev_0.00

d. 수정한 cfadisk.inf 를 저장하고 아래 방법대로 USB 하드나 메모리의 드라이버를 이걸로 업데이트하면 됨니다

내컴퓨터-오른쪽마우스-속성-하드웨어-장치 관리자-디스크 드라이브-USB 하드 선택하고 오르쪽 마우스 누르고 속성-

드라이버-드라이버 업데이트 -목록 또는특정위치 ... -다음-검색 안함. 설치할 ..... -다음-디스크 있음-찾아보기-

경로를 Hitachi storage driver 있는 폴더로 지정-Hitachi Microdrive 선택하고 다음을 눌러서 드라이버를 업데이트 하면 됨니다

7. USB메모리에 XP를 설치하면, 자체적으로 레지등 변경하고 하는등의 작업을 해서 USB 메모리에 쓰기를 계속 한다고 함니다

영문에서 검색해보니 10만번 쓰기가 가능한 장치에서 하루에 8시간 컴을 쓴다고 할때 60일 정도면 USB메모리가

에러가 날 수가 있다고 함니다. (USB하드는 제외)

그러니 위 방법대로 임시 파일등의 쓰기를 행하는 작업은 내장 하드로 이동시키고 사용하시고 아래 방법의 EWF방법을

한번 사용해보세요. EWF란 MS에서 나온 XP Embedded라는 OS의 EWF(Enhanced Write Filter)라는 드라이버입니다.

EWF는 XP 사용시 변동 사항을 메모리에 저장해두었다가 사용자의 저장 명령이 있는 경우에만 한꺼번에 저장을 하는

드라이버라고 함니다. EWF는 XP Embedded에 포함된 드라이버로, 레지스트리 조작에 의해 일반 XP에서도 사용이

가능하다고 함니다

http://mason.gmu.edu/~sfiorito/eXPinstall.htm 영문원본 사이트임니다

http://pc4car.com/bbs/view.php?id=diy&no=374 번역해 놓은 사이트 임니다.

http://mfiles.naver.net/8052b66178214dffd7a5/data29/2007/10/19/79/ewf-songdg55.zip 첨부파일 EWF.zip

8. USB메모리나 CF메모리등 플래시메모리에 XP를 설치시는 파일 시스템은FAT32를 권장함니다 . 이유는 NTFS에서는

파일을읽는 경우에도 파일마다 마지막 액세스 기록시간을 남기게 되어 쓰기가 진행됨니다. 그러니 FAT32를 사용하시고 꼭

NTFS를 사용하시겠다면 아래 레지를 1로 해서 이 기능을 해제하세요

Registry Settings
System Key: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
Value Name: NtfsDisableLastAccessUpdate
Data Type: REG_DWORD (DWORD Value)
Value Data: (0 = disable, 1 = enable
9.플래시메모리에 XP를 설치하겠다면 이왕이면 웨어레벨링 (wear leveling)을 지원하는 플래시를 사세요
이기능은 쓰기를 할때 메모리의 섹터마다 쓰기 횟수를 기억해서 쓰기가 많이된 섹터에는 저장을 안하고 다른곳에
쓰기를해서 전체적으로 비슷하게 쓰기횟수를 만드는 기능으로 메모리릐 수명을 몇배 더 오래가게 함니다
CF중트랜센드 133x과 266x 모델은 사양서에 wear-leveling 이 지원된다고 하네요. 디직스 300X 메모리도요.
10. 플래시중에는 MYSSD UX가 빠른 속도를 지원하지만 이게 성능이 부족하다고 느끼시는분은
이런 상품들이 있네요 CF to IDE 나 CD to SATA 로 CF메모리를 IDE나 SATA에 직접 연결하는 제품들임니다
http://www.andico.co.kr/bbs/view.php?id=n_product&no=132요건3만원대로 값이 비싼데
트랜센드 266X CF 메모리는 평균읽기 40MB/sec 과액세스가 0.4ms 가 나오네요. 거기다가 RAID등으로 묶으면
더 높은 속도가 나와 SSD 보다 저렴한 가격으로 SSD 효과를 낼수 있다고 함니다
또 비슷한 거로는 5000원에서 1만원대의 CF 2 IDE 젠더들이 옥션에서 팔리고 있습니다. 속도는 잘 모르겠습니다
써보지를 않아서, CF 2 IDE로 검색해보세요

'기본 카테고리' 카테고리의 다른 글

정규표현식 기초  (0) 2008.02.01
에디터용 글꼴  (0) 2008.02.01
파이썬으로 EXCEL 파일 열고 쓰기  (0) 2008.01.31
제 1회 게임기획전문가 시험 실기  (0) 2008.01.19
CMap Class  (0) 2008.01.10

파이썬으로 EXCEL 파일 열고 쓰기

=======================================

import win32com.client
xl = win32com.client.dynamic.Dispatch("Excel.Application")
wb = xl.Workbooks.Open("c:\\temp.xls")
sh = wb.Sheets[0]
sh.Cells(1,1).Value = "test"
wb.Save()
xl.Quit()

=======================================

import win32com.client
xl = win32com.client.dynamic.Dispatch("Excel.Application")
wb = xl.Workbooks.Open("c:\\temp.xls")
sh = wb.Sheets[0]
sh.Cells(1,1).Value = "test"
wb.Save()
xl.Quit()

=======================================

게임기획전문가 실기 자격증

2005/07/12 09:15

http://blog.naver.com/dldlaldo/40015152976

노하우 : 게임기획전문가 실기 노하우! Knowhow
평점 :
+3 (5명)나도 평가하기조회: 2198
집필자 : min2__da(2004-12-30 15:13)신고하기 | 이의제기
노하우사전 분류 :게임

-----------------
제 1회 게임기획전문가 시험 필기.
-----------------

1번문제> 자신의 만들게임의 장르를 결정하고 그 이유에 대해서 200자 내외로 설명하시오.

-200자면 원고지 한장 분량이군요. 이른바 30초 마케팅용임을 염두에 둔다면 문제없을듯 합니다.
문제가 정확하다면, 중요한건 '장르의 결정'이고, 설명해야하는건 그 장르를 왜 결정했는지에
대한 이유일 것입니다. 만들게임에 대해 쓸 필요는 없어보이는 문제입니다. 왜 그 장르의 게임을
만들기로 했는지에 대한 이유에 대해서 집중하시면 문제될 것은 없어보입니다.
200자 내외라면 몇자나 초과해도 되느냐라고 궁금해하실 분이 있으실지 모르겠는데, 200자쯤 되는
그 '줄'에서 멈추시면 됩니다. 글자 맞추는 놀이는 아니고, 내외라고 했으니 앞뒤 10자 정도의
여유는 있다고 봐야겠죠.


2번문제>예시된 장르 RTSgame <실시간 전략시뮬레이션> 참고게임 ----->스타크래프트,워크래프트 시리즈..등등..
* 그에 따른 대상 연령층을 정하시오..
* 그 대상 연령층을 정한 이유가 무엇인가 (200자내외)

(예시를 들 필요가 있습니다만, 앞서 이야기한 이유로 예를 들 필요가 있다면 문제에 언급된 대로
스타크래프트로 하겠습니다. 하지만 수험자에게 스타크래프트를 분석하라는 문제는 아닙니다.)

-이건 전제를 조건으로 하는 문제입니다. 당신이 RTS를 만들기로 이미 결정된 것입니다. 이제부터
변명의 시간인거죠. 어라? 난 RTS 안할건데... 란 생각은 마시고, 문제에 충실하시길. RTS를 만들기로
했으니, 이제 거기에 입각해서 생각하면 됩니다.그래서 머리속에 당신이 만들 RTS를 하나 생각해두어야 합니다.
대상 연령층을 잡는거야 잡으시면 되고, 이유는 이 게임에 어떤 특징이나 이유때문에 그 연령층이 타겟이
되는지 설명해야합니다. 그 게임이 그 연령층(유아,10-15세,중고등학생,23-30세의 남성 등등..)에게 어떤
점에서 어필할 수 있는 지, 혹은 그 연령층 외에 계층은 어떤 이유로 이 게임의 타겟이 되지 못했는지에
대해 언급하면 됩니다.

* 게임의 제목을 정하시오.
* 그 제목을 정한 이유를 무엇인가? (200자 내외)

-앞서와 같습니다. 제목은 마케팅의 첫번째 무기입니다. 왜 그 제목을 정했으며, 그 제목은 어떤 의미를
가지고 어떻게 어필하는지 적어야합니다. 앞서 문제인 연령층에 그 제목이 어떻게 어필하는지에 대해 적
을수도 있을 겁니다. 독특한 언어가 사용되었다던가, 어감이 특정한 어감이라면 왜 그런 어감이 됐으며
어떤 이유가 있었는지, 그 제목이 보는 이로하여금 어떤 기대를 불러일으키는지 언급할 수 있습니다.
앞으로 편의상 수험자가 디자인하는 이 게임을 'It'이라고 부르겠습니다.

* 다른 게임에 비해서 특징이 되는 플레이상의 기술에 대해서 3가지 기술하시오..
-RPG의 스킬 이야기가 아닙니다. 워크래프트는 스타크래프트와 다르게 히어로라는 성장개념이 가미되어
있습니다. 이것은 분명 일반게임인 스타크래프트에 비해 특징이 되는 플레이상의 기술일 것입니다.
마찬가지로 'It'에서 유저가 느끼게될 게임방식의 차이점을 말하면 됩니다. 요는 아 이 부분은 다른
RTS(스타크래프트나 워크래프트 등등)랑 다르구나라고 생각할 수 있는 부분에 대한 이야기입니다.
문제에서 언급한 '다른 게임'상호간의 차이로서는 MS사의 어떤 RTS는 스타크래프트와 다르게
플레이어가 직접 컨트롤을 통해 지역공격등의 게임내 개입을 할 수 있습니다.
이런 식으로 '다른 RTS'들과 'It'의 플레이상의 차이점에 대해 3가지를 씁니다.


* 게임의 기술적 우위에 대해서 3가지 기술하시오.
* 위에 같은 기술이 있을경우 우려되는 문제를 기술하시오.
-문제의 문맥이 여러가지로 해석될 수 있어서, 자료부족을 탓할 수밖에 없군요.
어쨌든 무턱대고 유추한다면 개발환경이나 개발기술에 대한 이야기가 될 수 있을 겁니다.
아마 실제문제가 이렇게 무턱대고 나오리라고는 생각하지 않습니다. 좀 더 설명이 있기를
기대해야죠. --; 3D라거나, LOD가 적용됐다거나, 그런걸 언급해야할까요? 잘 모르겠습니다.--;



* 이 게임의 장,단점을 4분야에서 2가지 이상 기술하시오.<SOWT분석>

-SOWT는 전략경영기법입니다. Strength,Weakness,Opportunity,Therat의 약자입니다.
강점과 약점, 기회와 위기를 말합니다.
대체로 강점과 약점은 이 게임 자체의 내부적인 이야기이고,
기회와 위기는 외부적인 이야기를 말합니다.
이 강,약,기회,위기 4분야에서 2가지씩 써넣는 것입니다.

흠... 예를 들어야겠는데, 그럼 선을 넘는 것 같아서, 다른 이야기를 잠시 드리겠습니다.
SOWT에는 다른 4가지 전략이 있습니다. SO ST WO WT가 그것입니다.

SO는 강점+기회 전략으로서 이 기회에 이 게임 'It'의 강점을 밀어붙여서 시장에서 전략적 승리를 얻는 것입니다.
ST는 강점+위기 전략으로서 위기를 이 강점을 이용해 극복하는 것입니다.
WO는 약점+기회 전략으로서 '기회'때문에 '약점'이 축소되는 것, 약점이 있지만, 기회로 극복하는걸 말합니다.
WT는 약점+위기 전략으로서 위협을 피하고, 약점을 최소화하는 방법을 도출하기 위한 것입니다.

따라서 SOWT는 거꾸로 SO,ST,WO,WT를 도출할 수 있는 내용을 적으면 되며, 작성방법은 다음과 같습니다.

첫째. 강점부분에 이 게임이 가진 2가지 강점을 써 넣습니다. 주 관점은 시장에서의 승리. 유저의 호응입니다.
언급된 2가지 강점은 이 주 관점을 충족시키는 것이어야 합니다.

둘째. 약점부분은 강점의 반대입니다.

셋째. 기회부분에는 SO전략을 충족시킬 수 있도록 '강점'부분에서 언급한 2가지 강점이 어떤 외부적 요인에
의해 강점으로서 존재할 수 있는지 적으면 됩니다.
또 WO전략을 충족시킬 수 있도록, '약점'이 그리 큰 문제가 되지 않는 외부적 이유를 적으면 됩니다.

넷째. 위기부분에는 ST,WT를 충족시킬 수 있도록, 강점이 소실되고,약점이 도출될만한 외부적 요인을 적습니다.

다시 첫째. 강점은 SO,ST를 도출할 수 있도록, '기회'에 적은 2가지 요인에 상승할만한 것이어야 합니다.
또 위기에 적은 이유로 무의미해질 위험이 있는 것이어야 합니다.
다시 둘째- 약점은 WO,WT를 도출할 수 있도록, '기회'에서 감춰지며, '위기'에서 문제가 될만한 내용이어야합니다.

이렇게 4개가 상호보완적이 될 수있도록 적으면, 문제가 요구하는 답변을 적을 수 있습니다.

뜬금없이 저가형 에어콘에 대해서 적자면...(사실과 무관함. 그냥 예시를 위한 예시임)

강점 : 가격 초 저렴.
약점 : 성능은 더 저렴(--).
기회 : 경제불황으로 인해 저가형 상품 선호, 덥지않은 날씨이므로 이정도 성능으로 충분함.
위기 : 불황과 그리 덥지않은 날씨로 인한 매출 감소로 고가 에어콘 가격이 하락세임.

이런 식이 됩니다. 뜬금없이 적은 예라 좀 적절치 못한듯 하지만, 아무튼 이런 식입니다.




* 인터 페이스를 예시에 맞게 구성하시오..<그림 문제>
예시>자원:금,철강,기름,인구..
전체 맵, 메인메뉴 ,동맹 버튼 , 공격,이동,정지,순찰 버튼
힘 ,체력, 민첩 ,지능, 인벤토리 <6개저장> ,마법스킬,레벨
현재 경험치, 다음 레벨 필요 경험치, 캐릭터 얼굴 등등

- 수험자가 디자인한 게임인 'It'의 인터페이스를 그리면 됩니다. 기술적 특징과 플레이상의
차이점을 수용할 수 있어야 합니다. 직접 그리던가 컴퓨터로 그리던가하면 됩니다.


* 이 인테페이스의 특징을 기술하시오...<200자내외>
- 말 그대로입니다. 앞서 플레이상의 차이점을 수용했다면 그 부분을 쓰고, 또 다른게임들에
비해 발전된 다른 기능성향상 혹은 플레이 편의를 위한 아이디어가 들어갔다면 그점을 언급
하면 됩니다.



* 마케팅시 광고 카피를 정하시오.
- 뛰어난 카피라이터가 될 필요는 없습니다만, 좋으면 좋을수록 좋겠죠. 짧고 간결하게.
이 게임의 캣치프레이즈를 적으면 됩니다. 게임 잡지를 보고 다른 게임의 캣치프레이즈를
봐두면 도움이 될 것입니다.
대충 항간의 말로는 인칭은 2인칭 단수로 쓰고, 명사와 동사로 만들다거나, 압축해야하고,
대상이 앞에 있는 것처럼 대화체, 유행어로 말하거나, 드라마틱해야한다는 소리도 있습니다.
http://ilovecopy.com/ 에 가면 카피에 대한 많은 이야기가 있습니다. 제목이라던가,
바로 아래문제인 텍스트를 작성하는데도 도움이 될 겁니다.

* 마케팅시 주 광고 카피아래에 들어갈 게임을 간략하게 설명하는 글 3가지를 기술하시오.
-카피와 마찬가지. 카피보다는 좀 더 구체적이고, 직접적인 것이 되겠죠.

* 마케팅시 이벤트로한 아이템을 패키지와 함께 추가 하려고 한다..
어떤 아이템을 넣을 것인가? <5000원짜리 >
* 그 아이템을 선택하는 이유는 무엇인가?
-이건 따로 멘트할게 없군요. 팩키지게임 열어보면 들어있는 기념품같은 걸 뭘 넣을건지
왜 그걸 골랐는지 이유를 설명하는 것입니다.





*캐릭터 배경 설정 문제
보기>장보고라는 소년이 있다. 때는 제력 000년이고 무슨무슨 왕국이
왕권을 강화하기위해서 이제는 수인들이 사는곳으로 변해버린 성지를
되찾기 위한 전쟁을 일으킨 시대이다. 0 은 인간관 짐승이 반반씩
섞인 종속들로 결코 인간은 될수 없는 종속이다..

문제>여자 캐릭터를 정하고 그 캐릭터의 그래픽 디자인 특징을 13항목
이상 설명하시오..

- 미국에 있는 원화그리는 사람에게 메일로 여자 캐릭터를 그려달라고
부탁하면서 그 모양새를 설명한다고 생각하면 됩니다. 13가지 항목으로
주문하는 것이죠. 미니스커트를 입히라는둥, 단발머리라는 둥...


보기>장보고 일행이 설산을 향해 가던중 무슨 무슨 왕국의 지그프리트
왕자이 야만족 마을을 학살하는 것을 발견한다.. 장보고 일행은 그것
을 저지하기 위해 지그프리트 왕자 일행과 전투를 하게되고 지그프리
트 왕자 일행과 전투를 하게되고 지그 프리트 왕자 일행은 패하고 도
망을 간다..전투가 끝난뒤 장보고는 야만족 영웅을 만난다.
설산을 들어가는 입구에서 설산으로 들어가시 위해서는 협곡을 지
나가야 하는데 그러기 위해서는 수송계 부대가 필요하다. 그때 수송계
부대가 위기에 처했다는 소식을 듣고 수송계 부대를 구하기 위한 전투
를 벌인다. 이때 제시카라는 여자를 구하는 이벤트가 발생한다.
협곡을 지나서 설산 입구에 들어섰을때 지그프리트 왕자는 장보고
일행을 막기 위해 눈사태를 일으키고 지그프리트 왕자의 동생 제시카
의 도움으로 빠져나갈 입구를 찾게 된다.
그러나 눈사태가 멈추지 않고 계속되어서 위기에 빠질무렵 어디선가
동방의 닌자 일행이 나타나 함께 탈출한다. 달아난 지그프리트 왕자를
쫒다가 지그프리트 왕자의 마법 부대를 만나서 전투를 하려는 찰나 믿
었던 닌자 일행이 장보고가 지닌 용의 구슬을 탈취해서 달아나고 장보
고는 힘겹게 전투를 벌인다...

*각 장면대로 순서를 나열하시오.< 플로우 챠트 작성문제>
- 파랜드텍틱스같은 게임의 장면을 연상하십시오. 일종의 씬의 문제입니다.
비주얼이 나오고, 전투를 하고, 다시 비주얼이 나오고 전투를 하는 문제입니다.

예를 들자면 어떤 게임에서 "주인공이 길을 가다가 비명소리를 듣고 뛰어가니
늑대에게 둘러쌓인 여성이 있었다. 늑대를 해치우면 여성은 고맙다며 다리를
다쳤다고 근처의 마을에 데려다달라고 한다."라면..

비주얼 1 (주인공 걸어감. 비명소리대사출력,주인공 대사출력, 주인공이동)
전투 1 (늑대,여자NPC. 늑대가 전멸하면 비주얼2,주인공이 죽으면 종료)
비주얼 2 (여자 대사, 주인공 대사. 페이드아웃)

입니다. 플로차트 작성하는 문제는 따로 설명하지 않습니다.


*게임 진행시 등장한 캐릭터를 순서대로 나열하시오..
*게임 진해시 등장한 지면을 순서대로 나열하시오..
-설명 생략. 보기를 보고 추리면 됩니다.




<시나리오 작성문제>
*상황을 대본을 작성하시오.. (1000자 내외)
상황> 세계를 정복하려는 대마왕이 공주를 납치하고,주인공과 동료1,2는
모든 역결을 물리치고 마지막으로 공주가 납치되어 있는 대마왕 앞에
서 있다..
표정 1-->화난 표정
표정 2-->찡그린 모습
표정 3-->우는 모습
표정 4--> 웃는 모습
기호를 넣으며 작성..

-일반적 RPG에서 옆에 그림 나오면서 대사 나오는 비주얼씬을 말하는 것입니다.
작성의도는 이 답변을 보고 어떤 그림파일을 불러오고, 어떤 대사를 출력할 지를 정하는 것입니다.
아래 3가지 요소를 적어나가면 됩니다.

대상(주인공,동료1,2,대마왕,공주)
표정(표정1,2,3,4)
대사(좋을대로~)

표정은 문제에 횟수가 정해져있지 않는한 한번만 쓸 필요는 없습니다만, 골고루 써주는게 좋습니다.





* 어는 양식장에 물고기 5종류를 풀어 놓았다. 물고기 B를 잡을 확률을
구하라.
물고기 A --6마리 물고기 B-->12마리 물고기 C-->8마리
물고기 D -->10마리 물고기 E-->4마리
* 물고기 C를 잡을 확률을 구하라.
- 못풀면 기획시험을 보지 마십시오. 자격증 질 떨어집니다.




*다음표는 피보나치 수열이다.. 레벨 증가시 경험치가 늘어나는 상태를
수열로 나타내어라.
1 2 3 4 5 ..... _______> LV1 LV2 LV3 LV4 LV5 LV6 LV7..
1 1 2 3 5 .... _______> 10 10 20 30 50 80 120

-피보나치 수열은 앞의 두 수를 더하여 본수로 삼는 방법입니다.
1부터 시작하면 0+1=1, 1+1=2, 입니다. 그래서 처음엔
1 1 2 가 되고, 다음 수는 앞의 두 수인 1+2=3이 됩니다.
1 1 2 3 이 되고, 다음 수는 2+3은 5입니다.
1 1 2 3 5 가 되고, 다음수는 3+5인 8입니다.
1 1 2 3 5 8...

수열로 나타내는 부분은 알아서 공부하십시오. 기획의 방향성 문제는 아니니까요.
대충 말씀드리면 An=An-2+An-1 정도겠죠. (n번째 A) = (n-2번째 A) + (n-1번째 A)
우연찮게도 n은 레벨과도 같습니다. 레벨n의 경험치An은 An-2+An-1입니다만, 문제의
보기를 보면 아시겠듯 곱해줘야할게 있습니다.






* 레벨 증가시 경험치가 늘어나는 상태를 수식으로 나타내어라..
LV1 LV2 LV3 LV4 LV5 LV6 LV7......
10 20 40 80 160 320 640......
-해당레벨의 경험치 A= 레벨*2 라면 2레벨의 경험치는 4점입니다, 답이 아닙니다.
해당레벨의 경험치 A= (위의 보기에 나온 값이 정확히 나오는 식)이 들어가야합니다.





* 비공격형 몬스터가 있다. 그 몬스터의 행동 양식은 7가지되어있다.
몬스터 게이지 100%~30% ,30%~
PC 의 캐릭터 100%~65% ,65%~30% , 30%~0
상황에 따른 몬스터의 행동을 설명하여라..
-행동양식은 행동의 조건입니다. 아래와 같은 식으로 사용합니다.
몬스터의 HP가 100~30%면 전투
몬스터의 HP가 30%미만이면 도망친다.
단 이때 PC의 HP가 30%미만이면 도망치지 않는다.
몬스터게이지와 캐릭터 게이지를 어떤 행동의 지표로 삼는 것입니다. 잘 만들어보세요.





*스토리 보드 작성문제
주어진 시나리오를 주고,,,난뒤 스토리 보드작성하는 문제도 있음.

- 이 문제는 필기를 잘 준비하신 분이라면 문제 없을겁니다.





-----


1차는 여기까지입니다. 저도 게임기획전문가 자격의 수준을 알기위해 이 시험을 봤었죠.
다음의 2차는 게임과기획(http://cafe.daum.net/imgCon) Q&A 게시판. 194번글. 가을바람님의 글입니다.
무단 전제한 것에 대한 죄송한 말씀과 함께, 손수 정리해주신 가을바람님께 감사드립시다.^^

---------------------------------------
제 2회 게임기획전문가 실기문제
---------------------------------------


1.[창작성] 게임 컨텐츠 제작의 기초단계 [6점]
설명: 제작할 게임의 장르가 결정된 이후에는 도일 장르의 게임들과 비교해서 어떠한 독창성을 갖을 것인가에 대하여 구상해 두어야 한다.
다음의 주어진 장르에 따라 게임을 제작하게 될 경우 다음 문제들의 답안을 작성하라.

장르: 탑뷰 방식을 중심으로 한 슈팅게임.
조건: 제작인원 10명으로 10개월 이내에 제작할수 있을 것.
동일 장르의 게임 : (ex/라이덴, 기가윙스)

문제:
1-1) 동일 장르의 게임들과 비교해서 어떠한 요소로 차별화를 시도할 것인지에 대하여 작성하시오.(차별화된 요소 3가지 이상 기술)
1-2) 온라인 게임으로 기획할 경우 다수의 유저들이 서로 경쟁 할 수 있는 환경이 필요하다.
어떠한 환경을 조성하여 다수의 유저들이동시에 즐길 수 있게 할 것 인지 기술하시오.
(3가지 이상 기술)

2.[창작성] 주어진 조건에 맞는 스토리 구상과 세계관 설정 [15점]
설명: mmorpg장르의 게임을 만들 때 자연스러운 커뮤니티의 형성을 위하여 게임세계 안에서 여러 가지 단체와 세력이 존재할 필요가 있다. 다음의 주어진 조건에 맞는 게임의 세계관을 설정하라.

조건: 현대 내지는 미래으 ㅣ한반도에 위치한 항구도시, 과학문명과 초능력, 영혼, 악령, 주술 등이 공존하는 세계관.

문제
2-1) 게임의 무대가 되는 도시는 다른 도시와 철저히 교통과 통신이 두절된 상태이어야 하며 탈것(자동차, 오토바이등)들이 등장하기는 하지만 매우 귀한 아이템으로 등장하기 때문에 주 이동수단은 보행이 되어야한다. 어떠한 사건이 일어나서 그런 상황이 되었는지 간략한 배경스토리를 설정하라. (200자 이내)

2-2) 플레이어들이 임의로 결성 및 해체할 수 있는 혈맹 또는 길드 개념의 단체 이외의 게임세계의 흐름을 이끌어가는 (직업을 대표하며 해당직업을 지원해주는)커다란 세력을 지닌 단체들이 필요하다.
문제 2-1에서 설정한 스토리와 연계하여 4개의 세력들의 이름과존재 이유, 주요 목적 등을 서술하라. (100자 이내)

2-3 플레이어들이 가지게 될 직업의 이름과 개념을 정의해야 한다.
다음 조건에 맞는 직업의 이름과게임 상에서 그 직업이 생기게 된 유래를 간단히 정리하라.
조건1. 아이템 조합, 자원 채취에 능하고 전투에는 부적합 하지만 회피력이 뛰어나고 폭약을 사용할 때 추가 데미지를 가질 수 있는 직업.
조건2. 접근전용 무기 사용에 능하고 체력과 공격력 방어력 등이 잘 조화를 이루는 균형 잡힌 전사 타입의 직업
조건3. 원거리용 무기 사용에 능하고 각종 기계장비들을 사용할 때 보너스 포인트를 받는 직업
조건.4 여러 가지 주술을 사용하여 전투를 수행하고 주술아이템을 만들어내는 직업

3.[창작성] 캐릭터 설정 능력 [9점]
설명: 캐릭터와 직업에 대한 기본적인 배경스토리와 설정이 끝나면 어떠한 요소들을 사용하여 캐릭터의 개성을 나타낼 것인지 결정해야 한다.

문제: 2번에서 제시했던 게임에서 등장하는 필레이어 캐릭터들이 가질 수 있는 모든 능력치의 이름과 용도를 정의하여 표로 만들어라, 모든 능력치의 용도는 2가지 이상이 되어야 한다.
(2개 이상의 능력치 작성)
ex) 이름/용도
힘 / 1) 근접무기 공격력 상승 2) 체력 최대치 증가
집중력 / 1) 원거리 무기 공격력 상승 2) 모든 무기 명중률상승
지능 / 1) 주술 위력 상승 2)마력 최대치 증가

4. [창작성] 배경 설정 능력 [4점]
설명: 캐릭터들이 활동할 무대가 될 맵을 작성해야 한다. 타일구조로 맵을 구성 할 때는 타일 셋트의 개수와 조합 방식 등을 생각해보아야 한다.
조건: 800*600 해상도에 쿼터뷰(타일크기 128*84)구조의 게임배경을 제작해야 한다.

문제:
4-1) 작은 선착장이 잇는 해안 마을이 스타트 지점으로 결정되었다. 캐릭터가 한화면(800*600)을 직선으로 가로질러 가는데 걸리는 시간이평균 3초가량 걸린다고 가정 했을 때 마을안의 모든 편의시설을 방문하는데 걸리는 시간이 40초가 넘지 않도록 마을의 대략적인 지도를 제작하고 마을의 크기(픽셀사이즈)를 설정 하라.

4-2) 위의 문제에서 만들어진 지도대로 배경을 제작할 경우 타일은 몇 개의 셋트가 필요한지 결정하시오.

5. [분석 및 마케팅] 판매 전략 분석[4점]

5-1)2,3,4,번에서 설정한 게임이 기존의 mmorpg들과 어떠한 차이점을 가지고 있으며 게임상의 요소 중 어떤 부분을 강조하여 마케팅을 할 것인지에대한 보고서를 작성하라, 보고서에는 다음과 같은 요소가 포함되어 있어야 한다.



<b>문제5 답안에 포함되어야 하는것은 대략...
경쟁게임에는 어떤것이 있고, 이 경쟁게임의 특징과 2,3,4 에서 설정한 게임의 특징을 설명하는 것.
그리고 경쟁게임과 비교되는 특별한 점
어떤 계층을 대상으로 할 것인가 등...</b>

12[기술성] 캐릭터 행동 양식 설정[3점]
허드슨 소프트의 ‘봄버맨’과 유사한 게임을 만들고자 하는데 몬스터와 캐릭터 사이으 ㅣ거리와 위치, 장애물의 유무, 포탄의 위치에 따라서어떠한 행동을 보일 수 있는지하나의 몬스ㅓ가 최대 5개의 행동방식을 가질 수 있다고 가정 할 때 몬스터로 등장할 캐릭터들의 ai표를 작성해서 프로그래머에게 전달하고자 한다. 알기 쉽게 작성하라

13. [기술성] 게임 인터페이스 작성 [5점]
쿼터뷰 rpg게임의 인터페이스를 작성하려고 한다. 플레이어 캐릭터는 기본적으로 무장의 교환, 마법사용, 아이템 조합, 캐릭터간 거래, 용병(소환수) 관리 등이 가능해야 한다.
앞서 열거한 행동들이 메인화면에서 마우스 클릭 4버 이내에 모두 가능할수 있도록 인터페이스화면과 순서도를 작성하라.

14. [기술성] 각 팀의 역할 분담 및 PM[8점]
게임개발팀은 크게 분류해서 기획팀, 프로그래밍팀, 그래픽팀 으로 나뉘어 진다. 각 팀들의 역할을 각각 50자 이내로 서술하고, 기획팀중 pm의 자질과 역할에 대하여 기술하시오,

문제:
14-1) 기획팀의 역할에 대해서 50자 이내로 서술하시오.
14-2) 프로그램팀의 역할에 대해서 50자 이내로 서술하시오.
14-3) 그래픽팀의 역할에 대해서 50자 이내로 서술하시오.
14-4) PM의 역할에 대해서 50자 이내로 서술하시오.

15) [창작성] 초기 구상시 문제점해결[3점]
문제: 주사위를 던져서 보드 위를 움직이는 턴방식의 온라인 보드게임을 만들려고 한다. 동시 참여 하는 플레이어의 수가 최대 6인까지 가능하게 구상하려고 하는데, 동시 참여하는 플레이어의 수가 많아질수록 자신의 턴을 기다리는 동안 대기시간이 길어져서 지루해할 우려가 있다. 어떠한 방식으로 해결할 수 있는지에 대하여 자신의 생각을 서술하라.

16. [창작성] 현재 상황의 문제점 파악 [3점]
문제: 현재 대한민국의 게임시장에서 패키지게임은 거의 자취를 감추고 온라인 게임만이전성기를 맞이 하고 있다.
물론 세게적으로 보았을 때도 온라인 게임쪽에비중이 커지고 있는 추세이지만 이와 같은 현상은 유독 대한민국에만 두드러지게 나타난다고 한다. 현재 게임시장에 있어서 패키지 게임의 문제점은 무엇이고 이를 해결하기 위해서는 어떠한 환경이 준비되어야하는지에 대해서 서술하시오.

CMap Class
자료구조용으로 많이 사용하는데 CList, CArray 등이있다.
3가지의 장단점을 비교한 내용이다.

classOrderd?Indexed? Insert an elementSearch for specified elementDuplicate elements?
Listyesnofastslowyes
Arrsyyesby intslowslowyes
Mapnoby keyfastfastno(keys), yes(values)


표에서 나와있듯이 속도면에서는 CMap 클래스가 좋은것 같다.

원형은
template< class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObject
KEY : Map에 키로 사용될 오브젝트클래스
ARG_KEY : KEY참조값으로 사용된다
VALUE : 저장할 값을나타낸다.
ARG_VALUE : VALUE 참조값으로 사용된다.

사용예 :
// CMap 클래스 헤더 포함
#include "afxtempl.h"

// CMap 유형 정의
typedef CMap <CString, LPCSTR, StrType, StrType&> CMapTest;
// CMap 전역변수 선언
CMapTest m_Map;


// 해쉬 테이블 초기화 및 크기(권장 : 소수값) 설정
m_Map.InitHashTable(17);

// 키와 키값 해쉬 테이블에 저장
m_Map.SetAt(str1, mStr1);
m_Map.SetAt(str2, mStr2);
m_Map.SetAt(str3, mStr3);

// 각각의 저장된 값을 해쉬 테이블에서 읽음
StrType strVal;

strVal.hWnd = NULL;
m_Map.Lookup(str1, strVal);

strVal.hWnd = NULL;
m_Map.Lookup(str2, strVal);

strVal.hWnd = NULL;
m_Map.Lookup(str3, strVal);

// 모든 데이타 삭제
m_Map.RemoveAll();





2008년도 국가기술자격검정 시행공고



「국가기술자격법 시행령」제15조의 규정에 의거 2008년도 국가기술자격검정 시행계획을 다음과 같이 공고합니다.




2008년 1월 4 일








한국산업인력공단 이사장






Ⅰ. 검정시행일정 및 종목

1. 검정시행일정

등급

회별

필기시험 원서접수

필 기

시 험

필기시험

합격(예정)자 발 표

응시자격 서류제출

필기시험 합격자결정

실기(면접)

시 험

합격자

발 표

방문제출

실기(면접)시험 원서접수

인 터 넷

인 터 넷

기술사

제84회

1.18~1.24

2.17

3.31

3.31~4.3

4.26~5.8

6.2

제85회

5.2~5.8

5.25

7.7

7.7~7.10

8.2~8.13

9.8

제86회

8.1~8.7

8.24

10.6

10.6~10.9

11.1~11.13

12.8

기능장

제43회

3.7~3.13

3.30

4.11

4.14~4.17

5.17~6.6

6.23

제44회

6.20~6.26

7.13

7.25

7.28~7.31

8.23~9.12

9.29

기사

(산업기사

전문사무)

제1회

1.25~1.31

3.2

3.14

3.17/3.19~3.21

(3월18일 제외)

4.19~5.2

6.2

제2회

4.18~4.24

5.11

5.30

6.2~6.5

7.5~7.18

8.18

제3회

7.4~7.10

7.27

8.14

8.18~8.21

9.27~10.10

11.10

제4회

8.15~8.21

9.7

9.26

9.29~10.2

11.1~11.14

12.15

기능사

제1회

1.18~1.21

2.3

2..22

1차: 2.11~2.13 (필기시험 면제자 대상)

2차: 2.25~2.27

(당회 합격자 대상)

3.22~4.4

4.29

제2회

3.7~3.13

3.30

4.11

4.14~4.16

5.17~5.30

6.23

제3회

전문계고등학교(이에 준하는 각종 학교 포함)등 필기시험면제자 검정

일반 필기시험면제자는 해당하지 않음

5.13~5.15

6.14~6.29

7.21

제4회

6.20~6.26

7.13

7.25

7.28~7.30

8.23~9.5

9.29

제5회

9.5~9.11

10.5

10.17

10.20~10.22

11.22~12.5

12.29

유의 사항

원서접수시간 : 원서접수 첫날 00:00부터 마지막 날 18:00까지

필기시험 합격(예정)자 발표시간 : 해당 발표일 13:00

※ 단, 기술사의 경우는 00:00

최종합격자 발표시간 : 해당 발표일 00:00

종목에 따라 시행일정이 다르므로 해당 종목의 등급별․회별․시행종목 현황을드시 확인하시기 바람




/*************************************************************

오라클 SQL & SQL*PLUS & PL/SQL Syntax 정리

**************************************************************/


----------------------------------------------------

- * syntax 기호 -

- -

- [] : 대괄호 안의 내용이 생략가능 -

- | : 또는 -

- {} : 중괄호 안의 내용이 하나 이상 올 수 있다. -

- ... : 앞 표기와 같은 형식으로 더 올 수 있다. -

- , : 구분자 -

----------------------------------------------------




/***********************************************************************

SQL, SQL*PLUS

************************************************************************/



* SELECT
SELECT [DISTINCT] {*, COLUMN [ALIAS], . . .}
FROM TABLE_NAME
[WHERE CONDITION]
[ORDER BY {COLUMN, EXPRESSION} [ASC|DESC]];


* 비교연산자

= : 같다.

> : 보다 크다.

>= : 보다 크거나 같다.

< : 보다 작다.

<= : 보다 작거나 같다.

<>, !=, ^= : 같지 않다.

NOT Column_name = : 같지 않다.

NOT Column_name > : 보다 크지 않다.


* SQL연산자

between a and b : a와 b 사이에 있다. (a, b값 포함)

in (list) : list의 값 중 어느 하나와 일치한다.

like : 문자형태와 일치한다. (%, _ 사용)

%는 값이 없거나 하나이상, _는 하나의 문자

in null : null 값을 가졌다.

not between a and b : a와 b사이에 있지 않다. (a, b값 포함하지 않음)

not in (list) : list의 값과 일치하지 않는다.

not like : 문자 형태와 일치하지 않는다.

not is null : null 값을 갖지 않는다.


* 논리연산자

and : 양쪽 컴포넌트의 조건이 true이면 true를 리턴

or : 한쪽 컴포넌트의 조건만이 true이면 true를 리턴

not : 이후의 조건이 false이면 true를 리턴


* 우선순위 규칙

1) 괄호

2) 수치연산자 > 결합연산자 > 비교연산자

3) is[not] null, like, [not] in > [not] between

4) not > and > or


* 문자형 함수

1) 변환함수

lower : 알파벳값을 소문자로 변환

syntax -> lower(column|expression)

upper : 알파벳 값을 대문자로 변환

syntax -> upper(column|expression)

initcap : 첫번째 글자만 대문자로 변환

syntax -> initcap(column|expression)

2) 문자조작함수

concat : 두 문자열을 연결(합성)

syntax -> concat(column1|expression1, column2|expression2)

substr : 문자열 중 특정 문자 또는 문자열의 일부분을 선택

syntax -> substr(column|expression,m,[,n])

length : 문자열의 길이를 구함

syntax -> length(column|expression)

instr : 명명된 문자의 위치를 구함

syntax -> instr(column|expression,m[,n])

lpad : 왼쪽 문자자리 채움

syntax -> lpad(column|expression,n,'string')

rpad : 오른쪽 문자자리 채움

syntax -> rpad(column|expression,n,'string')

ltrim : 왼쪽 문자를 지움

syntax -> ltrim(column1|expression1, 'string')

rtrim : 오른쪽 문자를 지움

syntax -> rtrim(column1|expression1, 'string')

translate : 특정 문자열을 대체

syntax -> translate(column1|expression1, 'string1', 'string2')

replace : 특정 문자열을 대신

syntax -> replace(column1|expression1, 'string1', 'string2')


* 숫자형 함수

round : 숫자를 반올림

syntax -> round(column1|expression1, n)

trunc : 숫자를 절삭

syntax -> trunc(column1|expression1, n)

mod : 나머지를 구함

syntax -> mod(column1|expression1, n)

power : 거듭제곱

syntax -> power(column1|expression1, n)

sqrt : 제곱근

syntax -> sqrt(column1|expression, n)

sign : 양수, 음수, 0인지를 구분

syntax -> sign(column1|expression1)

chr : ascii값에 해당하는 문자를 구함

syntax -> chr(column1|expression1)


* 날짜연산

date + number : 결과는 date : 일수를 날짜에 더함

date - number : 결과는 date : 날짜에서 일수를 뺌

date - date : 결과는 일수(숫자) : 어떤 날짜에서 다른 날짜를 뺌

date + number/24 : 결과는 date : 시간을 날짜에 더함


* 날짜함수

months_between : 두 날짜사이의 월수를 계산

syntax -> months_between(date1, date2)

add_months : 월을 날짜에 더함

syntax -> add_months(date1, n)

next_day : 명시된 날짜로부터 다음 요일에 대한 날짜를 나타냄

syntax -> next_day(date1, 'string'|n)

last_day : 월의 마지막 날을 계산

syntax -> last_day(date1)

round : 날짜를 반올림

syntax -> round(date1 [,fmt]) -> fmt는 'month', 'year'

trunc : 날짜를 절삭

syntax -> trunc(date1 [,fmt])


* 암시적 형변환 (Oracle서버가 자동형변환)

varchar2 or char -> number

varchar2 or char -> date

number -> varchar2

date -> varchar2


* 변환함수

to_char : 숫자나 문자값을 지정한 형식의 varchar2문자열로 변환

syntax1 -> to_char(date, 'fmt') : 날짜를 문자로

syntax2 -> to_char(number, 'fmt') : 숫자값을 문자로

to_number : 숫자를 포함하는 문자열을 숫자로 변환

syntax -> to_number(char) : 숫자를 포함하는 문자열을 숫자로 변환

to_date : 날짜를 나타내는 문자열을 명시된 날짜로 변환

syntax -> to_date(char [,'fmt']) : 날짜를 나타내는 문자열을 명시된 날짜로 변환


* 날짜 형식

scc or cc : 세기(BC날짜에는 -를 붙임)

years indates yyyy of syyyy : 년(BC날짜에는 -를 붙임)

yyy or yy or y : 년의 마지막 3, 2 또는 1자리 수

y,yyy : 콤마가 있는 년

|yyy,|yy,|y,| : ISO표준에 바탕을 둔 4, 3, 2또는 1자리 수

syser or year : 문자고 표현된 년(BC날짜에는 _S를 붙임)

bc or ad : bc/ad 지시자

b.c or a.d : .이 있는 bc/ad지시자

q : 년의 4분의 1

mm : 두자리 값의 월

month : 9자리를 위해 공백을 추가한 월이름

mon : 세자리의 약어로 된 월이름

rm : 로마숫자 월

ww or w : 년이나 월의 주

ddd or dd or d : 년, 월 또는 주의 일

day : 9자리를 위해 공백을 추가한 요일 이름

dy : 세자리 약어로 된 요일 이름

j : Jilian day (bc4713년 12월 31일 이후의 요일 수)


* 시간형식

am or pm : 정오 지시자

a.m or p.m : .이 있는 정오 지시자

hh or hh12 or hh24 : 하루 중 시간(1-12, 0-23)

mi : 분(0-59)

ss : 초(0-59)

sssss : 자정 이후의 초(0-86399)

/ . , : 사용 문자가 결과에 다시 나타남

"문자" : 인용부호내의 문자(들)가 결과에 출력


* 숫자에 영향을 주는 접미사

th : 서수(ddth -> 4th)

sp : 명시한 수(ddsp -> four)

spth or thsp : 명시한 서수(ddspth -> fourth)


* 숫자형식

9 : 9의 수는 출력폭을 지정

0 : 맨 앞에 0을 출력

$ : $ 기호

L : 지역 화폐기호

. : 명시한 위치에 소수점

, : 명시한 위치에 콤마

mi : 우측에 마이너스 기호(음수 값)

pr : 음수를 ()로 묶음

eeee : 과학적인 부호 표기

v : 10을 n번 곱함

b : 0을 0아닌 공백으로 출력


* 기타함수

case, decode : case나 if-then-else-end if 문장의 조건적 조회

1) case

syntax -> case expr when 조건 then 반환값

[when 조건 then 반환값]

...

else 반환값

end

2) decode

syntax -> decode(col|expr, search1, result1[,search2, result2, ...][,default])


* 중첩함수 : 여러 단일행함수의 중첩

syntax -> f3(f2(f1()))


* 그룹함수

avg(distinct|all|n) : null값을 제외한 n개 행의 평균값

count(distinct|all|expr|*) : null이 아닌 행의 개수

max(distinct|all|expr) : 최대값

min(distinct|all|expr) : 최소값

stddev(distinct|all|n) : null값을 제외한 n의 표준편차

sum(distinct|all|n) : null값을 제외한 n의 합계

variance(distinct|all|n) : null값을 제외한 n의 분산


* 그룹함수

syntax : select group_function(column) [,group_function(column)...]

from table_name

[where condition]

[ order by column]


* 그룹핑

syntax : select group_function(column) [,group_function(column)...]

from table_name

[where condition]

[group by group_by_expression]

[having group_condition]

[ order by column]


* 조인

1) cartesian join : 모든 가능한 행들의 조인 (결과가 의미없는 경우가 대부분)

2) equi join(inner join) : 조인 조건이 정확히 일치하는 경우 사용 (일반적으로 PK, FK사용)

syntax : select table1.column1 [,table2.column2, ...]

from table1, table2

where table1.column1 = table2.column2;

3) non-equi join : 조인 조건이 정확히 일치하지 않는 경우에 사용

4) outer join : 조인 조건이 정확히 일치하지 않는 경우에도 모든 행들을 출력

조인시킬 값이 없는 쪽에 (+)연산자 적용

syntax : select table1.column1 [,table2.column2, ...]

from table1, table2

where table1.column1 = table2.column2(+);

5) self join : 하나의 테이블에서 행들을 조인하고자 할 경우에 사용


* SET연산자

syntax : select *|column1[,column2, column3, ...]

from table1

...

set operator

select *|column1[,column2, column3, ...]

from table2

...

[order by column|expression];

1) union : 각 결과의 합 (합집합:중복되는 값은 한번만 출력)

2) union all : 각 결과의 합 (합집합:중복되는 값 그대로 출력)

3) intersect : 각 결과의 중복되는 부분만 출력 (교집합)

4) minus : 첫번째 결과에서 두번째 결과를 뺌 (차집합)


* 서브쿼리

syntax : select select_list

from table

where expression

operator

(select select_list

from table

where expression)


* 서브쿼리에서의 연산자(operator)

1) in : 2개 이상의 값을 리턴하는 서브쿼리에 대해 비교연산자를

기술하면 에러가 발생. 이런 경우 서브쿼리에서 리턴된 목록의

각각과 비교하여 쿼리를 수행하는 연산자

2) any : 서브쿼리에서 리턴된 목록의 각각의 값과 비교

3) all : 서브쿼리에서 리턴된 목록의 모든 값과 비교

4) exists: 서브쿼리에서 적어도 1개의 행을 리턴하면 논리식은 참


* 다중열 서브쿼리

syntax : select *|column1[,column2, ...]

from table

where (column1, column2 ...)

in

(select column1, column2, ...

from table

where condition);


* SQL*PLUS 명령어

a[ppend] text : 현재 편집라인의 끝에 text를 추가

c[hange]/old/new:현재 편집 라인의 old문자를 new문자로 바꿈

del [n] : n라인을 삭제

i[nput] [text] : 현재 편집 라인 다음에 라인을 추가하여 text를 추가

l[ist] [n] : SQL문장을 보여주고, 편집 라인을 이동

n text : n번재 라인을 text로 바꿈

r[un] : buffer에 있는 명령어를 실행한다.(/와 동일)

edit [filename[.ext]] : 지정된 파일의 내용이나 버퍼의 내용을 운영체제의

문자편집기로 불러온다.

sav[e] [filename[.ext]] [rep[lace] | app[end]]

: SQL버퍼의 내용을 파일에 저장하고 기존 파일에 추가하기 위해서 append를,

기존 파일에 중복해서 쓰려면 replace를 사용한다. 기본적인 파일 확장자는 sql이다.

sta[rt] [filename[.ext]] : 지정된 파일을 수행한다. start라는 명열 대신에 @를

사용할 수 있다. 파일 확장자가 .sql이 아니면 파일 확장자를 명시

get [filename[.ext]] : SQL버퍼에 파일의 내용을 기록한다. 파일명의 기본적인 확장자는

.lis또는 .lst이다

spo[ol] [filename[.ext]] [off | out] : SQL*PLUS의 내용을 파일에 저장

host : sql*plus안에서 호스트 운영체제의 명령어를 실행한다.

! : 운영체제 shell로 나들이

!vi file_name.sql : file_name.sql을 vi편집기로 부름 (unix)


* set : sql*plus의 환경설정

syntax : set 시스템변수 값

- 앞 숫자는 기본값

array[size] {20|n} : 데이터베이스 데이터 패치의 크기를 설정

colsep { | text} : 열 사이에 출력되는 문자를 설정 (디폴트:공백하나)

feed[back] {6|off|on} : 질의가 최소한 n개이어야 row의 수를 출력

hea[ding] {off|on} : 열의 heading을 출력할지의 여부 결정

lin[esize] {80|n} : 라인당 문자의 수

long {80|n} : long값을 출력하기 위해 최대 폭을 설정

pages[ize] {24|n} : page당 line수를 지정

pau[se] {off|on|text} : 화면제어를 함

term[out] {off|on} : 결과를 화면에 출력할지의 여부를 결정

col[umn] [column_option] : 열 포맷을 제어

syntax : col[umn] [{column|alias} [option]]

option : cle[ar] : 어떤 열의 형식을 해제

for[mat] format : 열 데이터의 디스플레이를 변경

hea[ding] text : 열 헤딩을 설정, 수직 바(|)는 헤딩 라인을 한줄 띄움

jus[tify] [align] : 열 heading을 정렬(좌, 우, 중간)

nopri[nt] : 열을 숨김

nul[l] text : null일때 디스플레이할 텍스트 명시

pri[nt] : 열을 보여줌

tru[ncated] : 디스플레이 되는 첫번째 라인의 마지막 문자열을 절삭

wra[pped] : 문자열이 끝나면 다음 라인으로 이동

tti[tle] [text|off|on] : 리포트의 머리말을 명시

bti[tle] [text|off|on] : 리포트의 꼬리말을 명시

bre[ak] [on report_element] : 중복값을 제거하고 라인 피드로 행들을 단락지음

-> 해제시 clear break

syntax : break on column[|alias|row] [skip n|dup|page] on ... [on report]

page : break값이 변경될 대 새로운 page로 skip

skip n : break값이 변경될 때 n만큼 줄을 skip(column, row, page, report)

duplicate : 중복되는 값을 출력

compute : SQL*PLUS명령어를 이용하여 요약된 계산을 한다.

해제시 -> clear compute

syntax : compute function of compute_column on break_column

function : count, num, max, min, sum, avg, std, var중 하나

compute_column : 계산에 사용되는 column이나 식

break_column : break명령으로 기술된 column


* 치환변수

& : 리턴되는 데이터를 동적으로 제한, 변수를 인식


* 사용자 변수 정의

1) define variable = value : char데이터형 사용자 변수를 생성하고 값을 할당

2) define variable : 변수, 변수 값, 변수 데이터형을 출력

3) define : 값과 데이터형을 가진 모든 데이터형을 출력

4) accept : 사용자 입력 라인을 읽고 그것을 변수에 저장

syntax : accept variable [datatype] [for[mat] format] [prompt text] [hide]

variable : 값을 저장하는 변수의 이름

존재하지 않으면 SQL*PLUS가 그것을 생성하여 사용

datatype : number, char 또는 date, char는 최대 길이 240바이트

date는 형식 모델을 다시 검사하고 데이터형은 char

format : 형식 모델을 명시(예:a10, 9,999)

text : 사용자가 값을 입력하기 전에 값을 출력

hide : 사용자 입력을 숨긴다.(예:패스워드)


* 오라클 객체

1) table : 행과 열로 구성된 기본적인 저장 구조

2) view : 하나 이상의 테이블에서 데이터의 부분집합을 논리적으로 표현

3) sequence : 고유한 번호를 자동으로 발생시키는 객체로 주로 PK값 생성에 사용

4) index : 질의(select) 성능을 향상시키기 위하여 사용하는 물리적인 저장 구조

5) synonym : 객체에 대한 이름을 부여


* 테이블 생성

syntax : create table [schema.]table_name

(column datatype [default expr] [column_constraint],

...

[table_constraint]);


* 오라클 data type

varchar2(n) : 가변길이 문자 데이터 (1~4000byte)

char(n) : 고정 길이 문자 데이터 (1~2000byte)

number(p, s) : 전체 p자리 중 소수점 이하 s자리 (p:1~38, s:-84~127)

date : 7byte(bc4712년 1월1일부터 ad9999년 12월 31일)

long :가변길이 문자 데이터 (1~2Gbyte)

clob : 단일 바이트 가변 길이 문자 데이터 (1~4Gbyte)

raw(n) : n byte의 원시 이진 데이터 (1~2000)

long raw : 가변 길이 원시 이진 데이터 (1~2Gbyte)

blob : 가변 길이 이진 데이터 (1~4Gbyte)

bfile : 가변 길이 외부 파일에 저장된 이진 데이터 (1~4Gbyte)


* constraints (제약)

- primary key(pk) : 유일하게 테이블의 각행을 식별 (not null과 unique 동시 만족)

- foreign key(fk) : 열과 참조된 열 사이의 외래키 관계를 적용하고 설정합니다.

- unique key(uk) : 테이블의 모든 행을 유일하게 하는 값을 가진 열 (null을 허용)

- not null(nn) : 열은 null값을 포함할 수 없습니다.

- check(ck) : 참이어야 하는 조건을 지정함(대부분 업무 규칙을 설정)

1) column level

syntax : column datatype [constraint constraint_name] constraint_type

2) table level

syntax : column datatype,

...

[constraint constraint_name] unique(column1[,column2...])


* subquery를 사용한 테이블 생성

syntax : create table table_name [column1[,column2...]] as subquery


* 테이블 수정 (add 열추가, modify 열수정, drop 열삭제)

syntax : alter table table_name

add (column datatype [default expr]

[,column datatype [default expr]...]


* 제약조건 수정 (add 제약추가, drop 제약삭제) : 제약변경은 못함

syntax : alter table table_name

add [constraint constraint_name] constraint_type (column);

- add자리에 disable, enable로 제약조건활성화 결정할 수 있다.


* 객체 이름 변경

syntax : rename old_name to new_name


* truncate table (테이블 비움:롤백불가)

syntax : truncate table table_name


* 테이블에 주석문 추가

syntax : comment on table table_name | column table.column is 'text';


* 테이블 삭제

syntax : drop table table_name


* DML

insert : 테이블에 새로운 행 추가

syntax : insert into table_name [(column1[, column2, ...])]

values (value1[, value2 ...]);

update : 테이블의 행 내용을 변경

syntax : update table_name

set column1 = value1 [,column2 = value2, ...]

[where condition];

delete : 테이블의 행 삭제

syntax : delete [from] table_name

[where condition];

merge : 행이 존재하면 update, 새로운 행이면 insert

merge into table_name as table_alias

using (table/view/sub_query) as alias

on (join condition)

when matched then

update set

col1 = col1_val1, col2 = col2.val2

when not matched then

insert (column_list) values (column_values);

commit : 저장되지 않은 모든 변경 사항을 Database에 저장

syntax : commit;

savepoint : savepoint 설정

syntax : savepoint name;

rollback : 저장되지 않은 모든 변경 사항을 취소

syntax : rollback [to savepoint name]


* sequence (nextval, currval 사용)

syntax : create sequence sequence_name

[increment by n]

[start witn n]

[{maxvalue n | nomaxvalue}]

[{minvalue n | nominvalue}]

[{cycle | nocycle}]

[{cache | nocache}]

- sequence_name : sequence의 이름입니다.

- increment by n : 정수 값인n으로 sequence번호 사시의 간격을 지정.

이 절이 생략되면 sequence는 1씩 증가.

- start with n : 생성하기 위해 첫번째 sequence를 지정.

이 절이 생략되면 sequence는 1로 시작.

- maxvalue n : sequence를 생성할 수 있는 최대 값을 지정.

- nomaxvalue : 오름차순용 10^27 최대값과 내림차순용 -1의 최소값을 지정.

- minvalue n : 최소 sequence를 지정.

- nominvalue : 오름차순용 1과 내림차순용 -(10^26)의 최소값을 지정

- cycle | nocycle : 최대 도는 최소갑에 도달한 후에 계속 값을 생성할지의

여부를 지정, nocycle이 디폴트.

- cache | nocache : 얼마나 많은 값이 메모리에 오라클 서버가 미리 할당하고

유지하는가를 지정. 디폴트로 오라클 서버는 20을 cache


* sequence 수정

syntax : alter sequence sequence_name

... (생성과 같다)


* sequence 제거

syntax : drop sequence sequence_name


* view 생성 (simple view)

syntax : create [or replace] [force|noforce] view view_name [(alias[,alias, ...])]

as subquery

[with check option [constraint constraint_name]]

[with read only]

- or replace : 이미 존재한다면 다시 생성한다.

- force : base table유무에 관계없이 view를 만든다.

- noforce : 기본 테이블이 존재할 경우에만 view를 생성한다.

- view_name : view의 이름

- alias : subquery를 통해 선택된 값에 대한 컬럼명이 된다.

- subquery : select 문장을 기술한다.

- with check option : view에 의해 엑세스 될 수 있는 행만이 입력, 갱신될 수 있다.

- constraint : check option 제약 조건에 대해 지정된 이름이다.

- with read only : 이 view에서 DML이 수행될 수 없도록 한다.


* view 생성 (complex view)

syntax : create [or replace] [force|noforce] view view_name [(alias[,alias, ...])]

as subquery

[with check option [constraint constraint_name]]

[with read only]

- complex view에서는 둘이상의 테이블이 조인되어 view에 나타난다.


* view 제거

syntax : drop view view_name;


* inline view : from절에 subquery를 사용


* top-n analysis

syntax : select [column_list], rownum

from (select [column_list] from table order by top-n_column)

where rownum <= n;


* index 종류

- unique index : 지정된 열의 값이 고유함을 보장

- non-unique index : 데이터를 검색할 때 가장 빠른 결과를 보장

- single column index : 하나의 열만 인덱스에 존재

- composite index : 여러 열을 결합하여 하나의 인덱스를 생성(16개의 열까지)


* index 생성 (사용자정의)

syntax : create index index_name

on table_name (column1[,column2, ...]);


* index 제거

syntax : drop index index_name;


* synonym 생성

syntax : create [public] synonym synonym_name

for object_name;


* synonym 제거

syntax : drop [public] synonym synonym_name;


* user 생성

syntax : create user user_name

idntified by password;


* 권한부여

syntax : grant system_privilege1[,system_privilege2, ...]

to user_name1[,user_name2, ...]

[with admin option]

- with admin option을 주면 부여받은 권한을 다시 부여할 수 있다.


* 권한제거

syntax : revoke system_privilege1[,system_privilege2, ...] | role1[,role2, ...]

from {user1[,user2, ...] | role1[,role2 ...] | public};


* Role 생성 : Role은 권한(privilege의 모임)

syntax : create role role_name;


* Role 부여

syntax : grant role_name to user_name;




/***********************************************************************

PL/SQL

************************************************************************/


* 기본구조

declare : 실행부에서 참조할 모든 변수, 상수, 커서, exception을 선언

variables, cursor, user_defined, exception

begin : 데이터베이스의 데이터를 처리할 sql문과 pl/sql블록을 기술

sql, pl/sql statements;

exception : 실행부에서 에러가 발생했을때 수행될 문장을 기술

actions to perform wher erros occur

end;


* anonymous

syntax : [declare]

begin

statements;

statements;

statements;

[exception]

end;


* procedure

syntax : create procedure procedure_name

is

begin

statements;

statements;

[exception]

end;


* function

syntax : create function function_name

return datatype

is

begin

statements;

statements;

return value;

[exception]

end;


* Data Dictionary 조회

select * from system_privilege_map;

select * from table_privilege_map;

select * from role_sys_privs;

select * from user_free_space;

- 현재 세션을 이루고 있는 사용자가 소유하고 있는 테이블

select table_name, tablespace_name from user_tables;

- 현재 세션을 이루고 있는 사용자가 소유한 모든 객체

select object_name, object_type, timestamp from user_objects;

- 현재 세션을 이루고 있는 사용자가 소유한 테이블, 뷰, 동의어, 시퀀스 조회

select * from user_catalog;

- 현재 세션을 이루고 있는 사용자가 소유하고 있는 시퀀스 조회

select sequence_name, min_value, max_value, increment_by, last_number

from user_sequences;

- 현재 세션을 이루고 있는 사용자가 소유한 view를 조회하시오.

select * from user_views;

- object권한의 종류 확인

select * from table_privilege_map;

APM_Setup5를 활용한 모바일 서버 구축하기By [이지성]
-제1장 1과 모바일 서비스란?
-제1장 2과 APM_Setup5로 MIME Type 설정
-제1장 3과 OpenWave SDK 5.1 프로그램 소개
-제1장 4과 OpenWave SDK 5.1 프로그램 설치하기
-제1장 5과 또 다른 소프트웨어의 WML 에디터 소개
-제1장 6과 OpenWave SDK 5.1 실행
-제1장 7과 OpenWave SDK 5.1의 조작방법
eAccelerator - PHP Accelerator & EncoderBy [이근상]
-PHP의 속도를 빠르게! eAccelerator!!
-다운로드 & 설치
초보자를 위한 PHP 강좌By [mizzle]
-APM 설치
-PHP 기본 구조
-변수 사용법
-배열 변수
-전역 변수
-정적 변수
-가변 변수
-폼(Form)을 통한 변수의 전달
-산술 연산자, 대입 연산자
-비교 연산자, 논리 연산자
-조건 제어문(1)
-조건 제어문(2)
-반복 제어문(1)
-반복 제어문(2)
-그 밖의 제어문
-사용자 정의 함수(1)
-사용자 정의 함수(2)
-사용자 정의 함수(3)
-문자열 함수(1)
-문자열 함수(2)
-문자열 함수(3)
-문자열 함수(4)
-문자열 함수(5)
-날짜 및 시간 함수
-파일 처리 함수(1)
-파일 처리 함수(2)
-파일 처리 함수(3)
-수학 연산 함수
-기타 함수
-정규 표현식
-자바스크립트(1)
-자바스크립트(2)
-자바스크립트(3)
-자바스크립트(4)
초보자를 위한 PHP 강좌 - 간단한 게시판 만들기By [mizzle]
-간단한 게시판 만들기 - 준비작업
-간단한 게시판 만들기 - 글 목록 및 글 읽기
-간단한 게시판 만들기 - 글 쓰기
-간단한 게시판 만들기 - 글 수정
-간단한 게시판 만들기 - 글 삭제
navyism 의 PHP 강좌By [navyism]
-몇가지만 알면
-PHP의 특징
-PHP구문의 선언
-변수에 대한 이야기
-연산하기
-비교연산과 조건문
-반복실행문
-배열
-함수이야기
-form을 이용해 봅시다
-파일의 입출력 [퍼미션]
-파일의 입출력 [기록하기]
-파일의 입출력 [출력하기]
-include와 require
-사용자 인증...쿠키
-시간함수 활용하기
-mySQL이란
-mySQL사용하기
-mySQL접속하기
-mySQL테이블의 설계
-mySQL관련 함수이야기
-mySQL을 사용한 메모장만들기 계획
-mySQL테이블 만들기
-mySQL자료넣기
-mySQL자료꺼내오기
-페이지이동 로직
-mySQL자료삭제
-mySQL자료수정
-날짜 계산팁
-텍스트(숫자)를 이미지로 바꾸기
-게시판 프로그램의 간단한 구성
-현재 접속자 체크 로직
-예제에서 사용된 메모장소스
-GET에 대한 긴 이야기
-재미있는 정규표현식 I
Smarty - the compiling PHP template engineBy [이근상]
-Smarty template engine 소개와 대략적인 특징
PEAR DB_Pager ClassBy [이근상]
-PEAR DB_Pager Class 소개 & 설치
-PEAR DB_Pager Class 사용법
PHP.INI 설정하기By [이근상]
-PHP.INI 위치와 설정방법
-일반적인 구성
-전자메일 관련 구성
-에러 메세지 관련
-번역 (php.ini-recommended)
PHP 범용 함수 만들어 보기By [이근상]
-파일 종류에 따른 아이콘 나타내기
PEAR DB, HTML_Template_Sigma Class 이용한 방명록 만들기By [이근상]
-PEAR DB, HTML_Template_Sigma Class 이용한 방명록 만들기 :: 시작
-PEAR DB, HTML_Template_Sigma Class 이용한 방명록 만들기 :: 글쓰기
-PEAR DB, HTML_Template_Sigma Class 이용한 방명록 만들기 :: 리스트
-PEAR DB, HTML_Template_Sigma Class 이용한 방명록 만들기 :: 글 수정
-PEAR DB, HTML_Template_Sigma Class 이용한 방명록 만들기 :: 글 삭제
-PEAR DB, HTML_Template_Sigma Class 이용한 방명록 만들기 :: 마치며
PEAR HTML_Template_Sigma ClassBy [이근상]
-PEAR HTML_Template_Sigma Class 소개 & 설치
-PEAR HTML_Template_Sigma Class 형식
-PEAR HTML_Template_Sigma Class 처음 사용해 보기
PEAR DB ClassBy [이근상]
-PEAR DB Class 소개
-PEAR DB Class 데이터베이스에 접근하기
-PEAR DB Class 데이터베이스에 Query & Fetch
PEARBy [이근상]
-PEAR 소개
-PEAR 설치
Windows 2003 + IIS + PHP 를 세팅해보자By [이근상]
-Windows 2003 에 IIS 설치하기
-Windows 2003 에 IIS 에 PHP 세팅하기 (ISAPI)
-Windows 2003 에 IIS 에 PHP 세팅하기 (CGI) PHP4 Setup for IIS
-Windows 2003 에 IIS 에 MIME 형식 추가
-Windows 2003 에 IIS 에 웹 사이트 추가하기
PHP 와 플레쉬(FLASH)를 이용한 카운터 프로그램 만들기By [이근상]
-PHP 로 카운터 프로그램 제작하기
-Flash 작성하기
정규 표현식이란? 정규 표현식에 대해 알아보자By [김태성]
-정규 표현식의 정의와 구조
-메타캐릭터
PHP 와 친해질 수 있다..By [이근상]
-PHP의 역사와 지원 기초적인 스크립트 형식에 대해 알아 보자.
-PHP의 변수와 변수형태에 대해 알아보자.
-변수의 하용범위에 대하여 알아보자
-연산자에 대해 알아보자.
-제어문에 대해 알아보자.
PHP 기본을 배우자 !!!By [써니루루☆]
-웹프로그래밍의 이해.
-HTML Form Tag 의 간략한 사용 예.
-웹프로그래밍의 제일 기초 - 페이지사이의 값 넘기고 받기
-연산자 다루기와 간략한 소개
기사 입력시간 : 2007-12-30 오후 4:01:27
“리더가 설치면 조직은 침묵한다”
잭 웰치 부부의 성공 어드바이스
중앙SUNDAY

Q: 어떤 사람을 형편없는 리더라고 부를 수 있을까요.(크로아티아 자그레브에서 고란 밀리치)

A: 언젠가 뿌리깊은 ‘상사 혐오증’을 보이는 직원들 얘기를 쓴 적이 있습니다. 참 논란이 많았던 글이죠. 그런데 나쁜 상사들에 대해선 제대로 쓴 적이 없네요. 이번 기회에 흔히 접하게 되는 잘못된 리더십의 몇 가지 유형을 정리해 봅시다.

첫째, 무엇이든 다 아는 체하며 나서는 리더들입니다. 가장 사람을 지치게 하는 경우지요. 그들은 세상과 회사가 어떻게 돌아가는지, 당신이 이런 저런 일을 했을 때 어떤 역풍을 맞을 수 있는지, 왜 제품의 사소한 부분도 바꿔서는 안 되는지에 대해 끊임없이 떠들어댑니다. 심지어 당신에게 어떤 차를 타야 한다고 간섭하기도 합니다.

이런 사람들의 허풍이 맞아떨어지는 경우도 있습니다. 하지만 대부분 그들 스스로가 나쁜 인성의 희생자가 됩니다. 당신과 당신의 회사 또한 희생이 될 수도 있습니다. 이런 부류들은 단순히 눈꼴사나운 정도가 아니라 아주 위험하기 때문입니다.

그들은 절대로 다른 사람들의 의견을 듣지 않습니다. 자연히 회사 내에서 창의적인 아이디어가 솟구치고, 이를 토론하고, 한걸음 더 나아가는 데 걸림돌이 됩니다. 어떤 한 사람이 아무리 똑똑하다 해서 혼자 사업을 이끌어갈 수는 없는 법입니다. 다른 사람들의 목소리도 들어야 합니다. 하지만 나서기 좋아하는 리더가 있는 조직에는 오로지 침묵만 흐르게 됩니다.

모든 걸 간섭하는 리더들이 너무 나서서 탈이라면 너무 나서지 않아 탈인 리더들도 있습니다. 형편없는 리더의 두 번째 유형인데요, 바로 남과 섞이지 않으려는 사람들입니다. 이런 부류는 조직원들과 함께 협력해서 일하는 것보다는 사무실 문을 닫아놓고 혼자 있는 걸 편안해 합니다. 물론 그런 리더들도 회의에 참석하고 꼭 필요한 일을 하기는 합니다. 하지만 자기 방에서 컴퓨터 들여다보는 데 시간을 보내고, 성가시고 사람과 부딪쳐야 하는 일들은 인사부서 담당자에게 떠넘겨 버립니다.

나서기 좋아하는 사람들처럼 이런 부류의 리더들도 위험하기는 마찬가지입니다. 그들은 조직원들을 고무시키지 못합니다. 이건 큰 문제입니다. 리더는 결국 조직원들이 무엇을 하도록 만드는 사람입니다. 그렇게 하자면 그들에게 끊임없이 열정을 불러일으켜 줘야 합니다.
세 번째 유형은 사람들에게 호감을 얻지 못하는 스타일입니다. 비열한 성격이거나, 부하를 학대하거나, 지독히 둔감하거나 혹은 셋 모두인 경우입니다. 이런 리더들은 대개 부하를 닦달해 성과를 내는 것으로 자신을 보호합니다. 하지만 이런 파괴적인 인성으로는 사람들의 신임을 얻지 못합니다. 이런 리더들은 결국 스스로를 파괴합니다. 물론 당신이 바라는 것처럼 빨리 무너지지는 않겠지요. 하지만 스스로 자신의 단점을 발견하고 인정하지 않는다면 결국은 그렇게 됩니다.

네 번째 유형은 이와는 정반대의 스타일입니다. 조직원들에게 너무 잘 보이려 하는 경우지요. 보통 이런 사람들은 어렵지만 반드시 해야 할 결정을 내릴 능력이 없습니다. 그들은 언제 어디서나 ‘예스’만 연발합니다. 자연히 사무실은 혼란에 빠지고 이를 바로잡는 데 상당한 시간을 허비하곤 합니다. 이런 리더들은 흔히 합의를 이루기 위해 노력하는 것이라고 자기 변명을 하곤 하지요. 하지만 사실은 겁을 내는 겁니다.

마지막 유형도 이와 관련이 있습니다. 중요도를 따져 구별을 지을 배짱이 없는 리더들이죠. 모든 투자와 사람이 동일한 성과를 거둘 수는 없습니다. 하지만 어떤 이들은 이런 현실을 직시하지 않습니다. 그저 ‘좋은 게 좋다’는 식으로 기업의 한정된 자원을 여기저기 분산시켜 버립니다.

특히 사람의 문제에서 심각한 결과를 초래합니다. 그들은 개개인의 성과를 엄밀하게 평가하는 대신 모든 직원에게 “잘했다”고 하고 맙니다. 보상을 할 때도 최고와 최저의 차이를 크게 내지 않습니다. 이런 평등주의적 접근을 두고 ‘인간적이다’ ‘공평하다’고 포장하는 사람도 있습니다. 하지만 그 본질은 나약함일 뿐입니다. 그런 리더십으로는 기업을 번성시키고 직원들을 성장시킬 수 없습니다.

형편없는 리더들이 이 칼럼을 읽는다고 해서 자신을 돌아보게 될 것이라고 기대하지 않습니다. 그들은 어떤 유형이든 공통적으로 자각능력이 떨어지기 때문입니다.
만약 당신의 보스가 위의 유형들에 속한다면 부디 마음을 다잡으시길. 그리고 당신이 리더가 됐을 때, 뭘 하지 말아야 할지 반면교사로 삼길 바랍니다.

정리=조민근 기자

중앙SUNDAY 구독신청

공고번호 제2007-49호

2008년도 제45회 변리사시험 시행계획 공고

2008년도 제45회 변리사시험 시행계획을 다음과 같이 공고합니다.

2007년 12월 24일

한국산업인력공단 이사장

1. 선발예정인원

일 반

응 시 자

제1차 시험

최소합격인원의 3배수

동점자는 합격처리

제2차 시험

최소합격인원 200명

특 허 청

경 력 자

변리사법시행령 제4조제3항의 합격자 결정방법에 의하여 합격자로 결정되는 인원

2. 시험과목 및 시험방법

가. 제1차 시험(4과목) : 객관식 선택형

산업재산권법(특허법․실용신안법․상표법․디자인보호법 및 조약포함)

민법개론(친족․상속편 제외)

자연과학개론(물리․화학․생물․지구과학 포함)

영어(민간어학능력검정시험으로 대체)

나. 제2차 시험(4과목 : 필수3, 선택1) : 주관식 논술형

필수과목 (3과목)

특허법(조약포함)․상표법(조약포함)․민사소송법

선택과목 (1과목)

자인보호법(조약포함)․저작권법․산업디자인․기계설계․열역학․금속재료유기화학․화학반응공학․전기자기학․회로이론․반도공학․제어공학․데이터구조론․발효공학․분자생물학․약제학․약품제조화학․섬유재료학․콘크리트 및 철근콘크리트공학 중 1과

다. 시험 과목별 시험시간

□ 제1차 시험

일 자

교시

과 목

시 간

3. 9 (日)

1

산업재산권법

10:00 ~ 11:10 (70분)

2

민법개론

11:50 ~ 13:00 (70분)

3

자연과학개론

14:30 ~ 15:30 (60분)

□ 제2차 시험

일 자

교시

과 목

시 간

8. 9 (土)

1

특허법(조약포함)

10:00 ~ 12:00 (120분)

2

상표법(조약포함)

14:00 ~ 16:00 (120분)

8. 10 (日)

1

민사소송법

10:00 ~ 12:00 (120분)

2

선택과목 (19과목 중 본인선택 1과목)

14:00 ~ 16:00 (120분)

3. 합격자 결정 방법

가. 제1차 시험

영어능력 검정시험의 기준 점수 이상 취득자로서, 영어과목을 제외한 나머지 과목에 대하여 매과목 100점을 만점으로 하여 매과목 40점 이상, 전과목 평균 60점 이상을 득점한 자 중에서 전과목 총득점에 의한 고득점자 순으로 결정합니다.(변리사법시행령 제4조제1항)

나. 제2차 시험

일반 응시자

매과목 100점을 만점으로 하여 매과목 40점 이상, 전과목 평균 60점 이상인 자를 합격자로 하되, 최소합격인원에 미달할 경우 매과목 40점 이상을 득점한 자 중 전과목 평균 득점에 의한 고득점순으로 결정합니다. (변리사법시행령 제4조제2항)

특허청 경력자

매과목 100점을 만점으로 하여 매과목 40점 이상을 득점한 자 중 응시과목 평균득점이 일반 응시자 최종 순위 합격자의 합격 점수 이상 득점한 자를 합격자로 결정합니다.(변리사법시행령 제4조제3항)

4. 변리사 결격사유(변리사법 제4조)

다음 각호의 어느 하나에 해당하는 자는 변리사시험에 합격하여도 변리사자격을 취득할 수 없습니다.

1) 금고이상의 실형을 선고받고 그 집행이 종료(집행이 종료된 것으로 보는 경우를 포함한다)되거나 집행이 면제된 날부터 3년이 경과되지 아니한 자

1)의2. 금고이상의 형의 집행유예선고를 받고 그 유예기간 중에 있는 자

2) 미성년자·금치산자 또는 한정치산자

3) 파산선고를 받은 자로서 복권되지 아니한 자

4) 탄핵 또는 징계처분에 의하여 면직되거나 이 법 또는 변호사 법에 의하여 등록취소 또는 제명된 자로서 면직·등록취소 또는 제명된 후 2년을 경과하지 아니한 자

5. 시험시행일정

구 분

응시원서

접 수

시험장소

공 고

시험지역

시험일자

시 험 과 목

합격자

발 표

제1차

시 험

1.7(月)

~ 1.16(水)

응시원서

접 수 시

시 험 장

사전선택

서 울

대 전

3.9(日)

산업재산권법

민법개론

자연과학개론

5.7(水)

제2차

시 험

1.7(月)

~ 1.16(水)

7.21(月)

서 울

8.9(土)

특허법

상표법

12.5(金)

8.10(日)

민사소송법

선택과목

※ 제1차 시험과 제2차 시험의 원서접수기간이 같으며, 제1차 시험 시험장소는 응시원서 접수시 응시자 본인이 직접 선택하여 입력하여야 함

6. 시험의 일부 면제

다음의 경우에 해당하는 자는 2008년도 변리사 제1차 시험이 면제됩니다.

○ 2007년 제1차 시험에 합격한 자

○ 2002년 제1차 시험에 추가합격한 자(특허청 공고 제2006-91호)

특허청소속의 7급이상 공무원으로서 10년이상 특허행정사무에 종사한 경력이 있는 자(기준일 : 제2차 시험 초일)

음의 경우에 해당하는 자는 2008년도 변리사 제1차 시험의 전 과목과 제2차 시험 과목 중 일부를 면제합니다.

특허청의 5급 이상 공무원 또는 고위공무원단에 속하는 일반직공무원으로서 5년 이상 특허행정사무에 사한 경력이 있는 자(기준일 : 제2차 시험 초일)

□ 전년도 제1차 시험 합격자 또는 2002년도 제1차 시험 추가 합격자(특허청 공고 제2006-91호)의 2008년도 제1차 시험 재응시 가능 여부

○ 2008년도 제1차 시험에 응시 가능하며, 인터넷 원서접수시 일반응시자로 접수하여야 합니다.

○ 제1차 시험 면제자가 일반응시자로 접수하여 제1차 시험에 재응시한 경우 합불여부에 관계없이 당회 제2차 시험에 응시가능하고, 당회 제2차 시험에 합격하면 최종합격 처리됩니다.

< 2008년도 변경시행 사항 (특허청 경력 제출 대상자)>

변리사법 제4조의3 제1항 또는 제2항에 해당하는 자는 시험의 일부면제를 위하여 특허청 경력증명서 원본을 원서접수 기간 내에 수험자 본인이 선택할 시험응시지역을 관할하는 한국산업인력공단 서울지역본부 또는 대전지역본부에 제출한 이후에만 인터넷 원서접수가 가능합니다.

원서접수 마감일(1. 16)까지 경력요건이 부족하여 소명이 되지 않는 경우, 요건 만족시 다시 한번 소명자료를 제2차 시험의 전일까지 제출하셔야 합니다.

7. 민간 영어능력 검정시험

□ 제1차 시험 중 영어과목 시험은 아래의 영어능력검정시험으로 대체합니다.

○ 기준점수

시 험 명

TOEFL

TOEIC

TEPS

G-TELP

FLEX

PBT

CBT

IBT

기준점수

560

220

83

775

700

77(level-2)

700

당해 검정시험기관의 정기시험 성적만 인정하고, 수시 또는 특별시험 성적은 인정하지 않습니다.

○ 국외에서 취득한 영어성적표도 인정하나, TOEIC시험에 한해서는 대한민국일본에서 시행하는 시험의 성적만 인정합니다.

○ 민간 영어능력 검정시험의 인정범위는 2006년 1월 1일 이후 실시된 시험으로서 제1차 시험 전일(2008. 3. 8)까지 성적이 발표․통지된 시험 중 기준점수 이상인 경우에 한합니다.

청각장애 2․3급 응시자의 경우, 듣기 및 말하기 부분을 제외한 점수가 TOEFL PBT 373, CBT 146, IBT 41, TOEIC 387, TEPS 420, G-TELP 51(level-2), FLEX 350점 이상이 기준점수입니다.

시험 응시자는 제1차 시험 당일 유효한 영어성적표 원본을 해당 시험실 감독관에게 제출하여야 합니다.

○ 영어 성적표를 위․변조하여 제출하는 경우 당해시험은 무효처리되며 변리사법시행령에 따라 3년간 응시자격이 정지될 수도 있습니다.

제출한 영어 성적표 원본은 반환하지 않으며, 제출한 영어성적표가 차년시험에서도 계속 유효할 경우 차년도 시험 응시 시 별도로 영어 성적표를 제출하지 않아도 됩니다.

8. 응시원서 접수

○ 접수 기간(시간) : 2008. 1. 7(月) 09:00 ~ 1. 16(水) 18:00

※ 제2차 시험 응시자도 제1차 시험과 동일한 접수기간 내에 응시원서를 접수하여야 함

접수 방법

- 한국산업인력공단 국가자격시험 홈페이지(www.Q-net.or.kr) 를 통한 인터넷 접수만 가능

○ 응시 수수료 : 30,000원 (신용카드 및 계좌이체만 가능합니다)

제1차 시험 응시자는 응시원서 접수시 응시지역(서울 또는 대전) 및 시험장을 선택하여야 하며, 수험표에 기재된 입실시간 및 시험장에서만 시험을 보실 수가 있습니다.

○ 제2차 시험장소는 7월 21일 한국산업인력공단 국가자격시험 홈페이지(www.Q-net.or.kr)에 사후공고 할 예정이니 시험 응시에 착오 없으시기 바랍니다.

원서 접수시 사진은 최근 6개월 내에 촬영한 탈모 상반신 사진만을 인정하며 반드시 규격(3.5㎝ × 4.5㎝)을 맞추어 업로드 하시기 바랍니다.

○ 원서접수 마감일(2008. 1. 16, 18:00) 이후부터는 취소 및 변경이 불가합니다.

※ 선택과목 등의 변경은 원서접수 기간 내에 원서접수를 취소한 후 다시 접수하여야 함

○ 응시원서 접수시 영어성적 입력

- 수험자가 인터넷 원서접수 시 취득점수 및 시험일자를 해당 항목에 직접 입력하여야 합니다.

- 원서접수 기간 중 성적이 미발표(미통지)된 경우에는 취득예정자로 입력하여야 합니다.

9. 기 타 사 항

가. 합격자 발표는 특허공보 및 한국산업인력공단 국가자격시험 홈페이지(www.Q-net.or.kr)를 통해 이루어집니다.

나. 전신마비자․뇌성마비자․시각장애인 등은 인터넷 응시원서 접수 시 해당 장애를 표기하시고, 희망하는 요구 사항을 입력하여야 합니다.

※ 해당 장애를 입증할 수 있는 증빙서류 등 제출(원서접수기간 안에 우편, 방문, FAX 등 이용)

10. 수험자 유의사항

가. 수험자는 시험전일까지 반드시 시험장 위치 및 교통편을 확인하여야 하며(단, 시험실 출입은 할 수 없음), 시험당일 09:30까지 신분증(주민등록증, 유효기간 내 여권 및 외국인 등록증, 운전면허증, 공무원증만 허용), 응시표, 컴퓨터용 사인펜, 영어성적표 원본을 소지하고 해당 시험실의 지정된 좌석에 착석하여야 합니다.

수험자는 시험당일 유효한 영어성적표 원본을 반드시 제출해야하며 제출하지 않는 경우 시험에 응시할 수 없습니다.

(단, 과년도에 제출한 영어성적이‘08년도 시험에서도 유효한 경우 별도로 영어성적을 제출할 필요가 없습니다.)

답안지는 반드시 컴퓨터용 사인펜으로 작성하여야 하며, 컴퓨터용 사인펜으로 작성하지 않은 답안지는 무효로 처리될 수 있습니다.

나. 수험자는 매 과목 시험시간표와 수험자 입실시간을 반드시 확인하시기 바랍니다.

※ 입실시간 : 1교시 09:30, 2교시 11:40, 3교시 14:00

다. 본인이 응시원서 접수 시 선택한 지역이 아닌 다른 지역이나 지정된 시험실 이외에는 응시할 수 없으며, 제1교시 시험에 응시하지 않은 자는 이후의 시험에 응시할 수 없습니다.

라. 시험 당일 시험장 내에는 주차공간이 협소하므로 가급적 대중 교통을 이용하여 주시고, 교통 혼잡이 예상되므로 미리 입실할 수 있도록 준비하시기 바랍니다.

마. 시험장 내에는 별도의 식당이 없으므로 수험자는 가급적 중식을참하시기 바랍니다. 중식을 지참하지 않으신 경우 점심시간에 외부출입이 가능하나, 시험시간 30분 전(14:00)에는 반드시 입실하여 주시기 바랍니다.

바. 시험이 시작되면 휴대폰 등 통신장비와 전산기기는 일절 휴대할 수 없으며 만약 시험 중 휴대폰 등 통신장비 및 전산기기를 휴대하고 있다가 적발될 경우 실제 사용 여부와 관계없이 부정행위자 처리될 수 있음을 유의하시기 바랍니다.

※ 1차 시험에서는 전자계산기 사용이 불가하므로 전자계산기는 소지하여서는 안 됨.

사. 시험실에 별도로 시계가 준비되지 않으므로 각자 손목시계 등을 준비하시기 바랍니다.

아. 시험시작 전 20분부터는 화장실 출입이 불가하며, 시험시작 후 종료시까지 어떠한 이유로도 퇴실하실 수 없으니, 과다한 수분 섭취를 자제하고 배탈예방 등 건강관리에 유의하시기 바랍니다.

자. 부정행위를 하거나 답안카드에 기재된 수험자 주의사항답안카드 작성요령에 따르지 않아 무효가 되지 않도록 주의하시기 바랍니다.

차. 시험 종료후 시험감독위원의 답안카드 제출지시에 불응한 채 계속 답안카드를 작성하는 경우 부정행위자로 간주 될 수 있습니다.

카. 답안카드 양식이 금번 제 45회 시험부터 견본과 같이 변경되었으니 답항 작성에 착오 없으시기 바랍니다.

타. 금번 제 45회 시험부터 영어성적은 답안카드에 기재하지 않고, 원서 접수시에 수험자가 직접 인터넷에 입력하고 영어시험 성적표 원본제1차 시험 시행당일에 해당 시험실 감독관에게 제출하여야 합니다.

11. 한국산업인력공단 서울지역본부 및 대전지역본부

기관명

주 소

우편번호

담당팀

연락처

서울지역본부

서울 마포구 표석길 14

(공덕동 370-4)

121-757

검정1팀

02-3273-9651

대전지역본부

대전 중구 보리3길 72

(문화동 165)

301-748

검정1팀

042-580-9132

한국산업인력공단 문의처 :

- HRD 고객센터 ☎ 1644-8000

2008년 제45회 변리사 국가자격시험부터 시행주체가 특허청에서

한국산업인력공단으로 변경됨에 따라 인터넷 접수프로그램 등의

차이로 수험자 여러분께 불편을 끼쳐 드린 점 죄송스럽게 생각합니다.

우리공단에서는 수험자 여러분께 보다 나은 서비스를 제공하기 위해

변리사 자격시험 전용 홈페이지를 운영하는 신 전산시스템을 2008년 10월부터 개통할 계획입니다.

현행 공단에서 시행중인 타 자격 시험과 공용 홈페이지를 사용하는 것이 불편하시더라도 양해하여 주시면 감사하겠습니다.

< 답안카드 견본 >

<인터넷원서접수 순서도>

< 2008년도 제45회 변리사 자격시험 변동사항 >

구 분

제44회(2007년)

제45회(2008년)

사 유

제2차 시험

선택과목

■31개 과목 중 택일

■19개 과목 중 택일

‘06. 12월 특허청 공고

영어성적 기준점수

■TOEFL PBT : 530

560

‘06. 12월 특허청 공고

■TOEFL CBT : 197

220

■TOEFL IBT : -

83

■TOEIC : 700

775

■TEPS : 625

700

■G-TELP (level-2) : 65

77

■FLEX : 625

700

답안카드

■변리사 답안카드

■국가자격 통합 답안카드

통합관리 효율화

■영어성적 득점 및 취득일자 답안카드에 마킹

인터넷 원서접수시 수험자가 영어성적 및 취득일자를 직접 입력

답안카드 마킹착오

사전 배제

시험 홈페이지

■변리사시험 홈페이지

http://pt.uway.com

공단 국가자격시험 홈페이지

www.q-net.or.kr

통합관리

전년도 제1차 시험 합격자의 제1차 시험 재응시

■제1차 재응시를 원할경우 중복 접수함: 일반응시자제1차 시험 면제자 두 가지로 접수(접수비도 두 번 납부함)

■제1차 재응시를 원할경우 일반응시자로 접수 (제1차 시험 합불 여부 관계없이 당회년도 제2차 합격시 최종합격 처리됨)

동일 수험자 중복접수 방지

제1차 시험

장소공고

■사후(접수 후) 공고

(‘07. 2. 22)

■사전(인터넷 직접 입력) 공고 (‘08. 1. 7)

수험자 편의 도모

제1차 시험 이의제기

시험 종료 후 2일부터 9일간 인터넷으로 신청

시험익일부터 7일간 인터넷 신청하되, 본인만 열람가능며 개별회신은 하지 않고 최종 정답게시로 통보 갈음

통합 관리로 변경

시험일부 면제자 경력서류 제출

■원서접수가 속한 달의 말일까지 제출

(‘07. 1. 31)

■원서접수 기간내제출

(‘08. 1. 7 ~ 1. 16)

■미제출시 원서접수 불가

서류접수 합리화

제출시 경력요건이 미흡한 경우 요건 완료시 다시 제출

■ 원서접수 기간내 경력요건 미흡시 제2차시험 전일까지 다시 제출

'기본 카테고리' 카테고리의 다른 글

PHP 강좌가 있는 싸이트  (0) 2008.01.05
“리더가 설치면 조직은 침묵한다”  (0) 2007.12.30
플래쉬 3d 연습  (0) 2007.12.07
LUA Serious-code.net  (0) 2007.12.06
Homunculus AI Script User’s Guide  (0) 2007.12.06
serious-code.net Lua UserPreferences
Private HelpContents Search Diffs Info Edit Subscribe XML Print View

1 개요

    Lua는 스크립트 언어의 일종이다. 다른 스크립트 언어와 비교해서 장단점을 열거해 보자면 다음과 같다.

    • 장점
      • C/C++ 코드에 쉽게 임베딩할 수 있다.
      • 속도가 매우 빠르다.
    • 단점
      • 비교적 간단한 작업을 하는 데에도 많은 코딩이 필요하다.
      • 관련 문서가 부족하다.
      • 사용할 수 있는 외부 모듈이 적다.


2 목록

3 링크

4 다운로드



PythonPowered
페이지찾기 : 제목으로 , 본문에서 , 또는 색인을 보세요
그 외에 다음 액션도 있습니다 : AttachFile, DeletePage, LikePages, LocalSiteMap, RenamePage, SpellCheck
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)

Homunculus AI Script User’s Guide

Table of Contents

1.- Introduction

2- Script Performance Properties

3- Ragnarok Client Built-In Functions

4- Ragnarok Client Built-In Constant Values

5- Basic Script

6- Miscellaneous

7- Update History

1 – Introduction

We developed the Homunculus AI System to enable RO gamers to customize Homunculus behaviors by creating their own, unique AI files that they can share with the RO community. Homunculus AI scripts are written in the LUA programming language and processed by a program embedded in the RO client. For more information on the LUA language, please visit http://www.lua.org. Homunculus action is controlled by the AI.lua and Util.lua files inside the AI folder in the Ragnarok Client program folder. We plan to add more functions to the Homunculus AI scripts to enhance Homunculus behavior customization. For users who are unfamiliar with scripting or computer programming, we will provide official AI scripts that all players can employ as a reference.

2- Script Performance Properties

Three files located in the AI folder in the Ragnarok Online client program directory (C:\Program Files\Gravity\Ragnarok Online\AI by default) are central to the Homunculus AI script performance: AI.lua, Const.lua and Util.lua.

● AI.lua

AI.lua contains the AI(id) functions that dictate a Homunculus’s action. You can modify your Homunculus’s behavior by editing the contents of this file. The RO client requires a working AI.lua file for Homunculus operation and if the RO client finds any grammatical or logical errors in this file, a message noting the location of the error will be displayed and the program will halt.

● Const.lua

This file contains constant variables used in Homunculus scripting and operation, and it refers to both AI.lua and Util.lua. The RO client doesn’t require this file for Homunculus operation, but const.lua is necessary for enabling Homunculus behaviors of greater complexity.

● Util.lua

This file contains the data structure for the Homunculus AI, which we will call a List, and a few basic computation functions. The RO client doesn’t require this file for Homunculus operation, but Util.lua is necessary to enable the Homunculus AI to queue commands and to store lists of information for Homunculus operation, such as specific enemy monsters or characters.

Each time before a Homunculus spawns, the RO client automatically processes the AI.lua and Util.lua files. If there are any errors in AI.lua or Util.lua files, the RO client will halt and display an error message detailing the location of the error. Otherwise, the RO client will execute the AI(id) functions that are scripted in the AI.lua file, activating the Homunculus AI. A Homunculus spawns when the following situations occur.

1) Creating a Homunculus

2) Reviving a dead Homunculus

3) Starting the game with a character that possesses a Homunculus

4) Using Fly Wing or Butterfly Wing with a character that possesses a Homunculus

5) Using a Warp Portal with a character that possesses a Homunculus

6) Using the Kafra Teleport Service with a character that possesses a Homunculus

3- Ragnarok Client Built-In Functions

The AI(id) functions are already built into the RO client and include fundamental actions such as movement, attacking, eating and skill usage. These functions use id numbers to identify in-game objects such as specific Homunculi, monsters or characters. The following is a reference list of basic functions that Homunculi can perform.

1) MoveToOwner (id)

id: Homunculus ID

Return value: None

Function: Homunculus moves to the spot closest to its owner.

2) Move (id,x,y)

id: Homunculus ID

x: x-axis coordinates on current map

y: y-axis coordinates on current map

Return value: none

Function: Homunculus moves to a specific destination on the current map

3) Attack (id1,id2)

id1: Homunculus ID (Attacker)

id2: Target ID

Return value: none

Function: Commands Homunculus (id1) to attack a target (id2).

4) GetV (V_,id) end

V_...: A constant variable that displays the property of the targeted object

id: Target object

Return value: The constant variable used in this function determines which return value is used. The return value for V_POSITION is x,y coordinates, and the return value for V_HP is an HP value.

Function: Gains id’s property (V_...). Constant value of property is defined in Util.lua file.

Refer to “4- Ragnarok Client Built-In Constant Value” for more details about these properties.

5) GetActors ()

Return value: A set of IDs that are returned in LUA format.

Function: Views the IDs of characters, NPCs, monsters, items and skills within the character’s screen.

6) GetTick ()

Return value: 1/1000 second unit numbers

Function: Displays a timer that starts at 0 and increases by 1 each 1/1000 seconds.

7) GetMsg (id)

id: Homunculus ID

Return value: Direct message from RO client that is returned in LUA format.

Function: Deliver user’s commands input through RO client interface (Homunculus Window) as a message string to the AI script

8) GetResMsg (id)

id: Homunculus ID

Return value: A reserved message string from the RO client that is returned in LUA format.

Function: Delivers user’s reserved message as script language.

10) SkillObject (id, level, skill, target)

id: Homunculus ID

Return value: none

Function: Homunculus performs a skill of a specific level on a target.

11) SkillGround (id, level, skill, x, y)

Function: Homunculus performs a skill of a specific level on the ground. The x,y coordinates input in this function determines where the ground targeting skill will be cast.

13) IsMonster (id)

id: An in-game object

Return value: The id will have a return value of 1 if the object is a monster; all other objects have a return value of 0.

Function: Recognizes monsters.

14) TraceAI (string)

string: String that is recorded in the TraceAI.txt file.

Function: Records the status of the script as it is processed and analyzed.

4- Ragnarok Client Built-In Constant Values

The following is a list of the built-in constant variables defined in the Const.lua file.

4-1. Constant Values used for GetV function

V_OWNER = 0 -- Returns the Homunculus owner’s ID

V_POSITION = 1 -- Returns the current location’s x,y coordinates

V_TYPE = 2 -- Defines an object (Not implemented yet)

V_MOTION = 3 -- Returns the current action

V_ATTACKRANGE = 4 -- Returns the attack range (Not implemented yet; temporarily set as 1 cell)

V_TARGET = 5 -- Returns the target of an attack or skill

V_SKILLATTACKRANGE = 6 -- Returns the skill attack range (Not implemented yet)

V_HOMUNTYPE = 7 -- Returns the type of Homunculus

V_HP = 8 -- Current HP amount of a Homunculus or its owner

V_SP = 9 -- Current SP amount of a Homunculus or its owner

V_MAXHP = 10 -- The maximum HP of a Homunculus or its owner

V_MAXSP = 11 -- The maximum SP of a Homunculus or its owner

4-2. Return values for GetV (V_MOTION, id)

MOTION_STAND = 0 : Standing

MOTION_MOVE = 1 : Movement

MOTION_ATTACK = 2 : Attack

MOTION_DEAD = 3 : Dead

MOTION_ATTACK2 = 9 : Attack

4-3. Return values for GetV (V_HOMUNTYPE, id)

LIF = 1 : Lif

AMISTR = 2 : Amistr

FILIR = 3 : Filir

VANILMIRTH = 4 : Vanilmirth

LIF_H = 5 : Advanced Lif

AMISTR_H = 6 : Advanced Amistr

FILIR_H = 7 : Advanced Filir

VANILMIRTH_H = 8 : Advanced Vanilmirth

4-4. Return values of GetMsg (id), GetResMsg (id), i.e. Homunculus commands performed through RO client interface

NOME_CMD = 0 -- No Command

{Command Number}

MOVE_CMD = 1 -- Move

{Command Number, x coordinate, y coordinate}

STOP_CMD = 2 -- Stop

{Command Number}

ATTACT_OBJET_CMD = 3 -- Attack

{Command Number, Target ID}

ATTACK_AREA_CMD = 4 -- Area Attack

{Command Number, x coordinate, y coordinate}

PATROL_CMD = 5 -- Patrol

{Command Number, x coordinate, y coordinate}

HOLD_CMD = 6 -- Mark

{Command Number}

SKILL_OBJECT_CMD = 7 -- Use Skill

{Command Number, Selected Level, Type, Target ID}

SKILL_AREA_CMD = 8 -- Use Area Attack Skill

{Command Number, Selected Level, Type, x coordinate, y coordinate}

FOLLOW_CMD = 9 -- Follow Its Owner

{Command Number}

5- Basic Script

5-1. The Essentials of AI Scripting

Homunculus AI scripts can written using text format files through a text editor such as Notepad. The script’s file name extension must be “.lua” for it to be recognized as a LUA format file. Before experimenting with Homunculus AI or implementing a new AI script, you should save a copy of the official AI script in another folder for backup purposes. But first we need to understand Homunculus states and actions before we can begin scripting actual Homunculus functions.

5-2. Finite State Machine (FSM)

The Homunculus AI System is based on the Finite State Machine a.k.a. FSM theory, a model of behavior defined by states, transitions between states, and actions. For the purposes of Homunculus AI, we will be using four very basic states.

IDLE

In the IDLE state, the Homunculus will rest; and does not perform any actions.

This state may be desirable when there are no monsters around and the owner is doing nothing, giving the Homunculus an opportunity to rest.

When a Homunculus spawns, it is initially in the IDLE state.

CHASE

In the CHASE state, the Homunculus will follow the targeted object.

This state may be desirable when an enemy attacks the Homunculus or its owner so that the Homunculus can approach its target close enough to ATTACK it.

When encountering monsters that are too powerful for the Homunculus within a specific distance, users can deactivate the CHASE stat in order to evade these monsters.

ATTACK

In the ATTACK state, the Homunculus will continuously perform the action of attacking the targeted object.

This state may be desirable when an object causes damage to the Homunculus’s owner or if any monsters are in the Homunculus’s vicinity.

FOLLOW

In the FOLLOW state, the Homunculus will travel towards its owner.

This state may be desirable when a Homunculus defeats an enemy or when an enemy is too far away from the owner.

If we want the Homunculus to stay a certain distance away from the owner, we change to the IDLE state at a certain distance.

When creating a Homunculus AI script, consider which battle situations you and your Homunculus are likely to encounter and which actions the Homunculus should take in response to battle outcomes and other situational changes. This diagram illustrates the scripted behavior of a Homunculus, how it accordingly transitions between different states in different situations.

IDLE

CHASE

ATTACK

FOLLOW

1. Enemy is no longer in sight.

2. Enemy is defeated.

3. Enemy is out of range.

Close to its owner

3. Enemy is out of range.

1. Owner is being attacked

2. Homunculus is being attacked.

1. Enemy is defeated.

2. Enemy is no longer in sight.

Homunculus is too far away from its owner.

4. Enemy’s location changes

4. Rest for another battle

5-3 Util.lua

Before creating the actual AI script, let’s create a “Util.lua” file that will contain additional functions for the Homunculus. If you wish to create your own “Util.lua” from scratch, simply create a text file, rename it as “Util.lua,” and then add the following text.

require “./AI/Const.lua” --Placing this line at the very top of the file makes this file refer to the Const.lua file.

A data structure in which data is saved in a certain order is useful in scripting. For the purposes of Homunculus AI, we will be using a data structure, classified as a List, in order to store queued commands to the Homunculus, targets, and other information that may be useful in Homunculus operation.

(Refer Util.lua)

List.new () -- Returns a new list

List.pushleft (list, value) -- Adds a component to the left side of list

List.pushright (list, value) -- Adds a component to the right side of list

List.popleft (list) -- Summons the first value at the left side of list

List.popright (list) -- Summons the first value at the right side of list

List.clear (list) -- Empties the current list

List.size (list) -- The total numbers of components saved in the list

The following is a list of computation functions that are frequently used.

GetDistance (x1,y1,x2,y2) -- Cell distance between two coordinates (Positive number value)

GetDistance2 (id1, id2) -- Cell distance between two objects (Positive number value)

GetOwnerPosition (id) -- Owner’s location

GetDistanceFromOwner (id) -- Distance from the owner

IsOutOfSight (id1,id2) -- If id1 and id2 are within visual range, this function will return the “true” value; otherwise, it will return the “false” value.

IsInAttackSight (id1,id2) -- If id2 is within id1’s attack range, this function return the “true” value; otherwise, it will return the “false” value.

5-4 AI.lua Tutorial

Now, let’s create a new AI.lua. Create a new text file and rename it to “AI.lua.” Open this new AI.lua file using Notepad and enter the following text at the very top of the file.

require “./AI/Const.lua”

require “./AI/Util.lua”

This will enable the AI.lua file to refer to the Const.lua and Util.lua files located in the AI directory. Without this script, the Homunculus AI cannot access the functions and computations in the Const.lua and Util.lua files. Afterwards, add the most essential function required in the “AI.lua.”

function AI (myid)

end

This simple script is the minimum requirement for the Homunculus AI to execute without any errors. However, no behaviors have yet been coded and therefore, your Homunculus is only capable of standing still. For the Homunculus to exhibit actual behaviors, we will need to define the Homunculus states that we have planned earlier: IDLE, FOLLOW, CHASE, and ATTACK.

IDLE_ST = 0 --- Idle

FOLLOW_ST = 1 --- Follow

CHASE_ST = 2 --- Chase

ATTACK_ST = 3 --- Attack

You will need to include a variable for remembering the Homunculus’s current state into your AI script.

You must also know your Homunculus’s id, enemy’s id and the destination coordinates for issued commands.

------------------------------------------

-- Global variables

------------------------------------------

MyState = IDLE_ST -- Initial state

MyEnemy = 0 -- Enemy’s ID

MyDestX = 0 -- x coordinate of a destination

MyDestY = 0 -- y coordinate of a destination

MyPatrolX = 0 -- x coordinate of a scouting location

MyPatrolY = 0 -- y coordinate of a scouting location

ResCmdList = List.new() -- List of queued commands

MyID = 0 -- Homunculus ID

MySkill = 0 -- Homunculus skills

MySkillLevel = 0 -- Homunculus skill level

------------------------------------------

function AI (myid)

MyID = myid

end

The OnIDLE_ST() function defines the Homunculus’s behaviors when it enters the IDLE status.

In the following script, the Homunculus will check if any monsters are attacking the owner. The Homunculus defines a monster that targets its owner for an attack as the owner’s enemy. It will then define the owner’s enemy as its own enemy, transition to the CHASE state and chase the monster until is further than 3 cells away from its owner. After reaching a distance of three cells, the Homunculus will transition to the FOLLOW state and return to its owner’s location.

function OnIDLE_ST ()

local object = GetOwnerEnemy (MyID) -- Defines the owner’s enemies as “object.”

if (object ~= 0) then -- If any of the owner’s enemies are present

MyState = CHASE_ST -- Homunculus transitions to CHASE state

MyEnemy = object -- Remember the enemy’s ID; Owner’s enemy is now Homunculus’s enemy

return -- Finish the function

end

object = GetMyEnemy (MyID) -- Defines the Homunculus’s enemies as “object.”

if (object ~= 0) then -- If any enemies are present

MyState = CHASE_ST -- Homunculus transitions to CHASE state

MyEnemy = object -- Remembers the enemy’s ID

return

end

local distance = GetDistanceFromOwner(MyID) -- Masks distance between Homunculus and owner as a variable named “distance”

if ( distance > 3 or distance == -1) then -- When the Homunculus is further than 3 cells away from its owner, or out of the owner’s sight

MyState = FOLLOW_ST -- Homunculus transitions to FOLLOW state

return;

end

end

function AI (myid)

MyID = myid

if (MyState == IDLE_ST) then

OnIDLE_ST ()

end

end

In this sample script, the Homunculus will remember human characters that attack its owner and define them as its own enemies.

function GetOwnerEnemy (myid) -- Find the owner’s enemy.

local result = 0

local owner = GetV (V_OWNER,myid) -- The owner

local actors = GetActors () -- Objects within the owner’s sight

local enemys = {} --A table that records the owner’s

enemies

local index = 1

local target

for i,v in ipairs(actors) do -- Patrol around every object within

the owner’s sight.

if (v ~= owner and v ~= myid) then -- Target of an object

target = GetV (V_TARGET,v)

if (target == owner) then -- If the target is the owner

if (IsMonster(v) == 1) then -- and if the object is a monster

enemys[index] = v -- add it on the owner’s enemy list

index = index+1

else -- If the object is not a monster,

local motion = GetV(V_MOTION,i) -- check the current action of the

object

if (motion == MOTION_ATTACK or motion == MOTION_ATTACK2) then

– If the action is attack

enemys[index] = v -- add the object on the owner’s

enemy

index = index+1

end

end

end

end

end

local min_dis = 100 -- Define the initial distance as 100

local dis

for i,v in ipairs(enemys) do -- Patrol around every enemy

of the owner

dis = GetDistance2 (myid,v) -- Distance between the owner and

an enemy

if (dis < min_dis) then -- If the distance is closer than the

initial distance (100 cells)

result = v -- Define the final enemy

min_dis = dis -- Define the minimum distance

end

end

return result -- Return the result

If the result value is 0, none of the owner’s enemies are present. Otherwise, the owner is being attacked.

end

A Homunculus can define specific monsters or characters as enemies, record them into a list, and then determine if they are present. Users can then script the AI so that a Homunculus can take action on a predefined enemy before the enemy attacks. The previous scripts are suitable for a passive Homunculus that will only battle after it is attacked. For an aggressive Homunculus AI, you can create a script in which your Homunculus will define monsters as enemies so long as they are on the screen.

function GetMyEnemy (myid) -- Check for Homunculus’s enemies

local result = 0

local type = GetV (V_HOMUNTYPE,myid) -- Type of Homunculus used in this script

if (type == LIF or type == LIF_H or type == AMSTR or type == AMSTR_H) then

result = GetMyEnemyA (myid) -- Function for finding non-aggressive enemies

elseif (type == FILIR or type == FILIR_H or type == VANILMIRTH or type == VANILMIRTH_H) then

result = GetMyEnemyB (myid) -- Function for finding aggressive enemies

end

return result

end

-------------------------------------------

-- non-aggressive GetMyEnemy

-------------------------------------------

function GetMyEnemyA (myid)

local result = 0

local owner = GetV (V_OWNER,myid)

local actors = GetActors ()

local enemys = {}

local index = 1

local target

for i,v in ipairs(actors) do

if (v ~= owner and v ~= myid) then

target = GetV (V_TARGET,v)

if (target == myid) then

enemys[index] = v -- Define objects attacking Homunculus as its enemies

index = index+1

end

end

end

local min_dis = 100

local dis

for i,v in ipairs(enemys) do

dis = GetDistance2 (myid,v)

if (dis < min_dis) then

result = v

min_dis = dis

end

end

return result

end

-------------------------------------------

-- Aggressive GetMyEnemy

-------------------------------------------

function GetMyEnemyB (myid)

local result = 0

local owner = GetV (V_OWNER,myid)

local actors = GetActors ()

local enemys = {}

local index = 1

local type

for i,v in ipairs(actors) do

if (v ~= owner and v ~= myid) then

if (1 == IsMonster(v)) then

enemys[index] = v -- Define every monster around Homunculus as its enemy

index = index+1

end

end

end

local min_dis = 100

local dis

for i,v in ipairs(enemys) do

dis = GetDistance2 (myid,v)

if (dis < min_dis) then

result = v

min_dis = dis

end

end

return result

end

A Homunculus’s owner directly issues commands to the Homunculus, via the Mouse or Shortcut keys or RO client interface, that are sent to the Homunculi AI script as message strings. The following lines must be added under the AI(myid) function in the AI.lua file for the Homunculi AI to receive and interpret message strings from the RO client so that the Homunculus can perform direct commands from its owner.

MyID = myid

local msg = GetMsg (myid) -- Receive messages

local rmsg = GetResMsg (myid) -- Receive reserved message, i.e. queued command

ProcessCommand (msg) -- Perform user’s commands

-- Save reserved message

if msg[1] == NONE_CMD then

if rmsg[1] ~= NONE_CMD then

if List.size(ResCmdList) < 10 then -- Set maximum number of messages that can be saved

List.pushright (ResCmdList,rmsg)

end

end

else

List.clear (ResCmdList) -- Cancel previous reserved commands each time a new command is received

end

Note that the ProcessCommand (msg) function handles message strings such as OnMOVE_CMD (msg[2],msg[3]). The command status functions in this script, such as OnMOVE_CMD_ST (), are necessary for the Homunculus AI to confirm whether the Homunculus has completed performing a direct command.

5-5. Grammatical Error Check and Writing TraceAI.txt

Sometimes, a complete script file may contain grammatical errors that will cause the RO client to display an error message while processing the script. However, you can check an AI script for errors before running the RO client by using the lua.exe program included with the latest version of the iRO client program. Double-click the lua.exe file in the RO client folder and enter the following line into the command prompt:

dofile ‘./AI/AI.lua’

The lua.exe file will process the AI.lua file and display a message detailing an error if one is present. If the script does not contain any technical errors, no message will be displayed. Even if you have checked the AI.lua script beforehand, you may occasionally receive an error from the RO client if you begin the game with a character that possesses a Homunculus. In this case, simply open the AI script and correct the error prior to restarting the RO client. Keep in mind that a technically perfect AI script may contain logical errors resulting in different Homunculus behavior than was intended.

In correcting logical errors in the Homunculus AI, you will need to note the Homunculus’s state transitions and analyze its behavior. For example, when an enemy is in the vicinity, you may want your Homunculus to CHASE it and then attack it. If the Homunculus is chasing the enemy but is not attacking it as intended, this would be considered a logical error in the script. The following is an example script that illustrates this Homunculus behavior.

function OnCHASE_ST ()

TraceAI ("OnCHASE_ST")

if (true == IsOutOfSight(MyID,MyEnemy)) then -- ENEMY_OUTSIGHT_IN

MyState = IDLE_ST

MyEnemy = 0

MyDestX, MyDestY = 0,0

TraceAI ("CHASE_ST -> IDLE_ST : ENEMY_OUTSIGHT_IN")

return

end

if (true == IsInAttackSight(MyID,MyEnemy)) then -- ENEMY_INATTACKSIGHT_IN

MyState = ATTACK_ST

TraceAI ("CHASE_ST -> ATTACK_ST : ENEMY_INATTACKSIGHT_IN")

return

end

local x, y = GetV (V_POSITION,MyEnemy)

if (MyDestX ~= x or MyDestY ~= y) then -- DESTCHANGED_IN

MyDestX, MyDestY = GetV (V_POSITION,MyEnemy);

Move (MyID,MyDestX,MyDestY)

TraceAI ("CHASE_ST -> CHASE_ST : DESTCHANGED_IN")

return

end

TraceAI (string.format(“OnChase_ST end MyEnemy: %d, EnemyX : %d, EnemyY:%d, MyDestX:%d, MyDestY:%d\n”,MyEnemy,x,y,MyDestX,MyDestY))

end

You can monitor the correlation between Homunculus response and the AI script by creating a log in the TraceAI.tx file. Execute the RO client and enter “/traceai” into the Chat Window to begin recording Homunculus functions into the TraceAI.txt file in the RO folder. To stop recording, simply entering the /traceai command into the Chat Window again. If you want to record variables, make sure to include the string “string.format” as illustrated in the sample script above.

6- Miscellaneous

LUA site : http://www.lua.org

7- Update History

2005.09.27

1) New Homunculus types have been added. Homunculus type definitions in the Const.lua file and the GetMyEnemy function in the AI.lua file have been updated. You must edit the Const.lua and AI.lua files to customize your Homunculus AI.

2005-07-19

1) You can now queue movement or attack commands while the Homunculus is performing another action.

Right-click on a cell while pressing the Shift and Alt keys to queue a movement destination.

Right-click on a target while pressing the Shift and Alt keys to queue attacks.

In this sample script, the Homunculus will check for queued commands and then perform them if it is not carrying out any commands. Recently queued commands will be added to the very last line in the Reserve Command List (ResCmdList).

function AI (myid)

if msg[1] == NONE_CMD then

if rmsg[1] ~= NONE_CMD then

if List.size(ResCmdList) < 10 then

List.pushright (ResCmdList,rmsg) – Save reserved commands

end

end

else

List.clear (ResCmdList) -- Delete previous reserved commands when a new command is entered.

ProcessCommand (msg) -- Perform a command.

end

This sample script enables your Homunculus to perform queued commands when it is in the IDLE state. Specifically, it checks the ResCmdList for any queued commands that have been recorded and will try to perform them upon entering the IDLE state.

function OnIDLE_ST ()

TraceAI ("OnIDLE_ST")

local cmd = List.popleft(ResCmdList)

if (cmd ~= nil) then

ProcessCommand (cmd) -- Perform a reserved command

return

end

The following script is useful if you command the Homunculus to move to a destination that is too far away for the server to process. The Homunculus will move to a midpoint that between the destination at the first line of the reserved command list and the Homunculus’s current location.

function OnMOVE_CMD (x,y)

local curX, curY = GetV (V_POSITION,MyID)

if (math.abs(x-curX)+math.abs(y-curY) > 15) then -- If a destination is further than a specific distance, in this case, a distance that is too long for the server to process

List.pushleft (ResCmdList,{MOVE_CMD,x,y}) -- Coordinates of the original destination are saved in the first line of ResCmdList.

x = math.floor((x+curX)/2) -- New location is calculated as a midpoint between original destination and current location.

y = math.floor((y+curY)/2) --

end

end

2) Incorrect command number NOME_CMD in Const.lua file has been corrected as NONE_CMD.

3) User AI folder added

Shortcut key and Chat Window commands that enable users to switch between basic AI and custom AI added

Command to toggle between basic and custom AI: /hoai

Custom AI in User AI folder will not be affected by any changes made in basic AI.

The AI(myid) function must be defined in the AI.lua file in the User AI folder to activate a custom AI script

If you wish to use someone else’s AI script, copy that script into the USER_AI folder inside the existing AI folder.

4) Pressing the Alt+T keys or clicking the [Standby] button in the Homunculus information window during the Standby status, FOLLOW_CMD_ST, will change the Homunculus’s state to IDLE (IDLE_ST). For this update, the OnFOLLOW_CMD used in the AI.lua file has been modified.

'기본 카테고리' 카테고리의 다른 글

플래쉬 3d 연습  (0) 2007.12.07
LUA Serious-code.net  (0) 2007.12.06
스타크래프트 게임 무비 동영상 2/2  (0) 2007.12.05
스타크래프트 게임 무비 동영상 1/2  (0) 2007.12.05
어처구니가 없네! 쩝..  (0) 2007.11.19

+ Recent posts