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

스타크래프트 게임 무비 동영상 2/2

더 게임 스타크래프트 (the starcraft) 게임 삽입 Movie

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

LUA Serious-code.net  (0) 2007.12.06
Homunculus AI Script User’s Guide  (0) 2007.12.06
스타크래프트 게임 무비 동영상 1/2  (0) 2007.12.05
어처구니가 없네! 쩝..  (0) 2007.11.19
기술지도사 준비????  (0) 2007.11.17

스타크래프트 게임 무비 동영상 1/2

더 게임 스타크래프트 (the starcraft) 게임 삽입 무비입니다.

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

Homunculus AI Script User’s Guide  (0) 2007.12.06
스타크래프트 게임 무비 동영상 2/2  (0) 2007.12.05
어처구니가 없네! 쩝..  (0) 2007.11.19
기술지도사 준비????  (0) 2007.11.17
추억의 Z건담????  (0) 2007.11.10

어처구니가 없네! 쩝..



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

스타크래프트 게임 무비 동영상 2/2  (0) 2007.12.05
스타크래프트 게임 무비 동영상 1/2  (0) 2007.12.05
기술지도사 준비????  (0) 2007.11.17
추억의 Z건담????  (0) 2007.11.10
글씨교정  (0) 2007.11.09

기술지도사 준비????



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

스타크래프트 게임 무비 동영상 1/2  (0) 2007.12.05
어처구니가 없네! 쩝..  (0) 2007.11.19
추억의 Z건담????  (0) 2007.11.10
글씨교정  (0) 2007.11.09
바르고 예쁜글씨를 위한 악필교정과 글씨체  (0) 2007.11.09

추억의 Z건담????

1. 글씨를 쓰실때 손에 힘을 빼세요

어린이들이 꾹꾹 글씨를 눌러쓰면서 연필을 많이 부러뜨리죠?

아직 자세가 바르지 못하고 서툴기 때문에 힘이 많이 들어가는 거랍니다.

바른자세로 앉아 어깨와 손목에 힘을 빼서 써보세요

2. 집필법(펜을 잡는방법) 이 굉장히 중요합니다.

문방구에가면 연필에끼는 교정기가 있어요. 몇백원안하니 구해서 연습하세요.

처음엔 매우 불편해도 크게 도움이 된답니다.

또한 대부분 집필법이 틀리는 사람들은 젖가락도 제대로 못쥐는 경우가 많습니다.

혹시 젓가락질이 서투르신지요? 그렇다면 평소 식사하실때 바르게 쥐도록 노력하세요

4. 신문지교정법

신문지 글씨를 똑같이 따라쓰세요

글씨를 쓸 때 한 자 한 자를 정성드려 쓰면 어느정도 괜찮아 보이는데 길게 이어서 썼을 때 글씨가 예쁘게 잘 안되는분이 많이 있습니다
신문지 교정법은 글씨를 길게 이어서 썼을 때 보기가 흉한 글씨를 예쁘게 잡아주는 것인데, 이를 신문지에 낙서 하듯이 편하게 자주 연습하시면 길게 이어서 쓴 글씨가 바르고 예쁘게 변하게 됩니다

이 방법은 글씨를 잘 못써도 길게 이어쓴 글씨의 크기가 모두 같아지기 때문에 보기가 좋은데 한 자 한 자를 잘 쓰면서 이어서 쓴 글씨도 크기가 고르면 더욱 아름답게 보입니다

대부분의 글씨를 배우시는 분들이 글씨 한 자씩 잘 쓰는 것만 중요시 하는데 아무리 한 자씩 잘 써도 이어서 쓴 글씨의 크기가 고르지 않으면 글씨가 흉하게 나옵니다


5. 필기구사용

수성펜,중성펜 종류가 좋으며 굵기는 0.5mm이하가 좋습니다


6. 처음모음부분을 너무 크게 시작하지 마세요

예를 들면 "한"에서 ㅎ 을 크게 쓰고 ㅏ를 작게 쓰고 ㄴ 도 작게 쓰거나 크게 쓰시면 글자가 미워보여요

7. 받힘을 이쁘게 쓰는 노하우

예를들어 '싱' 이라는 글자를 쓸 경우에

자음'ㅅ'의 중앙부분과 내려긋는'ㅣ' 사이에 꼭맞게 'ㅇ'을 쓰면 글자가 이뻐보입니다.

※ 가장 중요한건 글씨를 쓰는 자세와 집필법 이랍니다.

항상 바르고 곧은 자세로 쓰도록 노력하세요 ^^

바르고 예쁜글씨를 위한 악필교정과 글씨체

나도 평가하기

145

13

집필자 nkh0226 (2007-05-17 00:17)

조회32,212

신고|

이의제기

내려 긋는 선이 삐뚤삐뚤하고 내려 긋는 선을 그을 때 처음 시작은

글씨에 힘이 없다. 강하게 시작해서 아래로 내려오면서

힘을 점점 빼면서 끝부분에는 가볍게

들어올려야 한다.

받침을 크게 써서 위,아래의 위,아래로 자음이 있을 때는 같은

크기가 맞지않아 부자연스럽고크기로 써야 안정감 있고 센스있는

둔해 보인다.예쁜 글씨가 된다.

밑의 "ㄴ"을 길게 써서 벗어난 밑의 "ㄴ"을 위의 "ㄴ"과 위치와

느낌과 흘려쓴 느낌이 든다.

크기를 맞추어 쓰니 단정한

옷을 입은 기분이 든다.

글씨 한자 한자를 아무리 잘 써도 크기가 고르지 못하고

위, 아래 선이 고르지 못하면 보기 흉한 글씨가 되어

지저분하게 보인다.

글자 한자 한자를 잘못써도 크기가 고르고 위, 아래 간격이

고르면 보기가 좋아 잘 쓴 글씨로 보여진다.

원본 위치 <http://kin.naver.com/open100/db_detail.php?d1id=8&dir_id=813&eid=WOpRXm9w6X7+LGPfOhDITCmv4ECvfwDS&qb=vsfHyiCxs8Gk>

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

추억의 Z건담????  (0) 2007.11.10
글씨교정  (0) 2007.11.09
악필교정과 바르고 예쁜 글씨를 위한 자세와 필기구  (0) 2007.11.09
악필교정을 위한 백강 고시 글씨체  (0) 2007.11.09
동영상 강좌 URL  (0) 2007.10.15

바르고 예쁜 글씨를 쓰기 위한 가장 기본은 자세이다.

우선 허리를곧게 펴고, 어깨는 편안하게 힘을뺀 상태에서 몇 초간 눈을 감고 마음을

스려 보자. 혹은 크게 숨을 한번 내쉬어 나를 컨트롤해 보는 것도 괜찮을 것 같다.

어느 정도 마음이 추스려졌다면, 배가 책상에 닿지 않도록 앉은 후, 상체는 앞으로 약간

숙여 눈이 지면에서 30cm 정도 떨어지게 하고 왼손은 종이를 가볍게 눌러 몸이 삐뚤어

지지 않게 바른 자세를 유지한다.

바르고 예쁜 글씨를 쓰려면 필기구 잡는 법을 의식적으로 바꾸어라.

필기구를 제대로 잡아야 손놀림이 자유롭고 글씨체가 부드러워진다.

필기구를 잘못 잡으면 손,팔,어깨에 힘을 주게 되어 손가락과 팔이 아프고 어깨와 목이

뭉쳐 내가 의도한 글씨체가 나오지 않을 뿐만 아니라 정성과 노력에 비해 그 결과물은

내 기대에 미치지 못하니 능률도 오르지 않고 더더욱 글씨쓰기를 회피하게 되는 결과를

가져온다.

나도 초등1학년 때, 그 때 당시는 체계적인 글씨교본이 없었기 때문에 담임선생님

참고서를 보고 계속 연습하고 평가 받고 다시 써 보기를 반복했었는데, 잘 써야지하는

편지 않은 마음과 노하우가 없어서 글씨에 힘이 많이 들어가 지금은 그 흔적으로 중지

손가락이 밉게 변했다.

그래서 경험 덕분에 더 큰 노하우로 이렇게 자신있게 전문 블로그를 만들 수 있지

않을까?

손모양은 필기구 맨 아래에서 2.5cm - 3cm 정도 위치에 엄지,검지를 필기구 위쪽으로

가볍게 잡고 중지 옆 부분에 살짝 옮겨 놓은 듯 잡으면 된다.

글씨연습에 가장 좋은 필기구는 연필이다.

종이와 연필과의 마찰에 의해 수직선을 긋는데 다소 까칠한 그 느낌, 그 느낌을 살리면

힘의 강약 조절이 가능하고, 아울러 그 감각을 미세하게 손이 기억한다.

샤프나 기타 다른 필기구는 내가 손의 강약을 조절하기도 전에 이미 나의 의도와는

다르게 글씨가 앞서 나가 있고 수월하게 쓰여지는 반면 나만의 글씨체를 갖기는

힘들다.

기본에 충실히, 꾸준히 연습하다 보면 글씨를 써야할 때가 왔을 때 더욱 당당한 나

자신이 되지 않을까? 미소를 머금으면서

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

글씨교정  (0) 2007.11.09
바르고 예쁜글씨를 위한 악필교정과 글씨체  (0) 2007.11.09
악필교정을 위한 백강 고시 글씨체  (0) 2007.11.09
동영상 강좌 URL  (0) 2007.10.15
LUA Tutorial  (0) 2007.10.10
<<악필교정을 위한 백강 고시 글씨체>>
백강 고시 글씨체의 특성
1. 쓰기 쉬운 글씨체
2. 읽기 편한 글씨체
3. 속도가 나는 글씨체

《특강 1》백강 고시답안지 작성론

오늘 여러분의 합격을 도와 드리고자 왔습니다.
여러분! “답안지를 알고 나를 알면 공부방법과 합격이 보입니다.”

1. 실력과 답안지
수험생 여러분! 실력이 있다고 답안지를 잘 쓰는 것이 아닙니다. 그런데 그동안 수험생들께서는 답안작성의 중요성을 알면서도 시간을 투자하는데 인색하였거나 애써 중요성을 외면하려고 하였습니다.
“지금 공부(정독)할 시간도 없는데 어떻게 글씨 교정이나 답안지 연습을 하냐?”
“야! 실력이 있으면 합격하는 것이지 꼭 답안지 연습하여야 하냐?”
“그리고 글씨 교정이나 답안지 연습 안한 사람이 합격한 사람도 많더라.!!!”
그런데 많은 수험생들이 자신의 실력을 50%도 답안지에 담아내지 못하거나 답안 작성에 대한 두려움을 안고 있습니다.
여러분! “구슬이 서 말이라도 꿰어야 보배”라는 속담이 있습니다. 시험이라는 특수한 조건에서는 제 아무리 실력이 있다하여도 답안지에 실력을 담아내지 못한다면 합격이라는 보배는 얻을 수 없을 것입니다. 또한 알고 있는 내용도 평가하기 좋게 구성하여 깨끗한 글씨로 답안지를 작성하지 않는다면 ‘다듬지 않은 다이아몬드’와 같을 것이며 그 가치(평가점수)를 높게 바랄 수 있겠습니까.
자신의 실력을 최대한 끌어내고 정성껏 다듬어서 한 올 한 올 꿰신다면 합격이라는 답안지를 얻을 수 있을 것입니다.
그래서 한 가지 제언을 드리면 ‘백강고시답안지 작성론’을 시험 필수과목으로 삼고 1차 공부 때부터 수련하십시오.

2. 속도
답안지 작성에서 중요한 것이 속도입니다.
그 보다 더 중요한 것은 자신의 속도감을 아는 일입니다.
그런데 속도란 빨리만 쓴다고 되는 것이 아닙니다. 수험생의 대부분은 속도 앞에서 거의 대책이 없었습니다. 더욱이 자신의 글쓰기 속도감을 아는 사람은 거의 없습니다. 그러니 제한 된 시간을 어떻게 분배하여 써야 되는지에 대한 대책이나 쓸 분량은 많은데 시간이 부족한 경우는 그저 운명에 맡기고 따라가는 무대책뿐이었습니다. 시험에는 제한된 시간이 있기 때문에 속도가 필요한 것입니다. 그래서 고시에 있어서 글씨 평가는 속도에 기준을 둔 글씨의 상태를 평가하는 것입니다.
수험생 여러분!
여러분은 모두 답안지 속도에 대하여 진단을 받으시고 검증을 얻으셔야 할 것입니다. 지금 자신이 글씨를 잘 쓴다고 생각하는 수험생은 특히 검증을 받으셔야 합니다.(진정 내가 빨리 쓰면서도 잘 쓸 수 있는지를 말입니다.)

3. 백강 고시체(고시 글씨체)
글씨는 문자언어입니다.
언어는 언어의 개념인 의사소통 목적에 충족되어야 합니다.
그래서 고시 답안지 글씨는 ‘읽기 편하고, 쓰기 쉽고, 속도를 내도록’ 연구된 필체입니다. 답안지의 핵심은 속도를 낼 수 있는 글씨를 수련하는 것입니다.
속도가 있는 글씨를 습득하여야 지면의 분배와 시간의 분배를 통하여, 답안지 구성을 여유 있고 효과적으로 할 수 있는 것입니다.
여러분 지금 시작하십시오.
지금 당장 글씨부터 고시체로 교정하여 합격으로 통하는 지름길을 가십시오.

4. 답안지 구성
답안지는 초안 작성에서부터 목차 배열 및 공간구성에 이르기까지 공감각적으로 이루어져야 합니다. 답안지 구성의 핵심은 가독성을 높여 채점하기 용이하도록 하여 답안지의 실력을 100% 평가 받을 수 있도록 하는 역할을 하는 것입니다.

5. 답안지 틀과 꾸러미
답안지 수련을 마치고 나면 매 1시간마다 10분씩 틈을 내어 120자 내외의 요약 정리를 하십시오. 처음 1차 공부할 때부터 하셔야 합니다. 그렇게 습관이 되면 정독할 때 답안지 틀이 머릿속에 생겨나서 읽으면서 핵심정리가 되어 정독의 효과를 배로 높일 수 있습니다.

수험생 여러분!
오늘 이 시간이 여러분의 합격을 앞당겨 드리는데 도움이 되었으면 합니다.

감사합니다.



<<내용>> 백강 고시답안지 작성론

Ⅰ. 서론
본 연구는 사법․행정․외무 고시 및 각종 시험에 대비하는 수험생을 위한 교육과정으로 답안지 작성에 관한 교수․학습이다.
답안지를 작성한다는 것은 문자 언어의 활동으로 자신의 의사(意思)를 지면 위에 표현하는 의사소통의 한 과정이다.
그러므로 답안지 작성과정에서 많은 지식의 내용을 조탁하여 한정(限定)된 답안지에 쓸 있도록 글자 수(數)까지 맞추어야 하고, 읽기 편하도록 글씨를 쓰는 것이 가장 중요하다.
그런데 시험이라는 상황의 중압감, 필체의 졸렬(拙劣), 시간 분배의 실수 등으로 글씨 표기 형태는 생각하지 않고 정신없이 답안지를 채우고 나오기 급급한 경우가 많다.
물론 글씨를 잘 썼다고 점수를 더 주는 것은 아닐 것이며, 글씨를 못 썼다고 점수를 깍지는 않겠지만 ‘읽기 편한 글씨의 답안지는 채점하기 쉽다는 점은 사실이며 그만큼 내 실력을 정확하게 평가받을 수 있다는 것은 진리이다.’
한편 답안지 논문 작성법 연구를 통하여 잉여(剩餘) 소득(所得)이 발생되었는데, 그것은 바로 ‘고시 공부 방법론’의 발견이다. 1차 시험 공부를 할 때부터 매일 매일 공부한 몇몇 중요 부분을 정독 시간의 10%정도에서 반드시 답안지의 한 단락에 해당하는 글자 수인 75~100자 이내로 요약 정리하여 많은 지식의 양(量)을 축소하는 능력과 함께 답안지 글씨 쓰기 필력을 기르는 것이다.(답안지 작성 학습을 1차 시험 합격한 후에 2차 시험 공부할 때 시작한다는 생각은 가장 큰 잘못이다.)
그래서 실력이 있다하여도 답안지 작성에 있어서 자신의 실력을 답안지에 50%도 표현하지 못하는 경우가 많다는 점을 명심하여야 할 것이다.
“이미 답안지 작성의 틀은 주어져 있다.”(처음 1차 준비부터 적응하라!)
따라서 답안지 작성에 적합하여 쓰기 쉽고, 읽기 편하고, 빨리 쓸 수 있는 고시체를 창안하여 “균형과 정확한 획, 문장의 일관성, 지면과 글씨 및 문장의 공간 조화, 빠른 속도”를 겸한 글씨체로써 답안지 논문 작성을 할 수 있도록 ‘백강 답안지 작성론’을 연구하였다.
이 연구 안은 실제 10여 년 동안 고시 수험생들을 현장에서 지도하면서 마련된 경험론으로써 현장 기능 학습 방법론이다.
실제 답안지 작성은 ‘실력과 논리적 함축성 + 읽기 편한 글씨 + 답안지 짜임 + 속도’ 등이 종합적으로 이루어져야 한다.

Ⅱ. 백강 고시체 이론
1. 고시체 특성
백강 고시체는 ‘쓰기 쉽고, 읽기 편하고, 속도를 낼 수 있는’ 글씨체이다. 또한 답안지에 적합한 직사각형 글씨체로 지면과 조화를 이루면서도 자획을 정확하고 바르게 쓸 수 있도록 창안되었는데 그 이론을 간단하게 살펴본다.
① 내려 긋기는 짧게(초성 자음보다 높거나 짧지 않게 한다.)
② 자음의 획을 정확하게 쓴다.(의미 전달에서의 역할은 중요하다.)
③ 가로 모양 직사각형 글씨체 틀
④ 가로 획은 우측 상향으로 쓴다.
⑤ 속도와 속도감을 수련한다.
⑥ 일관성을 유지하여 글씨체나 크기가 처음부터 끝까지 같아야 된다.
2. 고시 글씨체 자획의 구성과 짜임
( 백강 이태희(1999), 『백강 고시체 교수․학습』, 백강 문자연구원. p.41.)
3. 고시 글씨체 서법
( 백강 이태희(1999), 『백강 고시체 교수․학습』, 백강 문자연구원. p.p.10~16.)

Ⅲ. 답안지 구성 방법과 새 답안지 적용
1. 지면과 글씨체
글씨를 잘 쓰는 사람이란 어떤 지면의 상황에서나 적절하게 쓸 수 있느냐 하는 것이다. 또한, 글씨 한 글자의 빼어남도 중요하지만 지면과 조화를 이루어 읽기 편하여야 한다.
고시 답안지의 경우를 살펴보면 지면이 가로 줄 선으로 되어있다. 좁은 가로 줄 선은 직사각형 지면으로 글씨체를 가로 모양 직사각형 글씨로 써야한다. 바로 고시체를 사용하여야 한다.

2. 답안지 구성
① 글씨 크기
글씨는 한 줄에 25~30자 정도 들어갈 크기로 쓰면 된다.
② 공간 구성
답안지의 공간을 알맞게 확보하여야 보기에도 깨끗하고 정연하여 보이며 읽기가 편하다.
첫째, 큰 제목 다음 줄은 띄워 공간을 확보한다.(작은 제목 다음 줄은 띄지 않는다.)
둘째, 앞 공간은 둘째손가락 반 폭 만큼 띄워 준다.
셋째, 한 단락(의미)을 5 ~ 6줄로 하고 다음 줄을 공란으로 한다.(새 답안지 기준)
이와 같이 공간미를 활용하면 글씨가 다소 불안하여도 전체가 깨끗하여 보이는 것이다.

3. 답안지 분석과 적용
답안지가 아무리 변화하여도 원리를 알고 적용한다면 걱정할 필요가 없다. 백강 고시체 답안지 작성의 원리를 터득하고 응용하여 적용하면 된다.
① 사법시험 답안지 분석
한 문제당 4면{30(1면)+34(2~3면)×3=132줄}, 1줄은 약19㎝(가)×0.8㎝(세)
한 과목당 총 8면(1문 4면, 2문 4면) 2장에 264줄

이에 대한 대책은 글씨를 좀더 명확하게 쓰고, 내용을 축약하여 축소된 지면을 질로써 대
응하여야 된다.
속도 적응 대책은 “백강 이태희(1999), 『백강 고시체 교수․학습』, 백강 문자연구원. p.p.145~155”를 한 페이지 당 6분 정도 속도로 쓸 수 있도록 수련하여야 한다.

② 고등고시 답안지
한 권당 5장(10쪽), 쪽 당 32줄(좌철), 1줄의 내용을 쓸 지면은 약18.2㎝(가)×0.8㎝(세)

이에 대한 대책은 한 줄에 25자 내외로 하고, 한 단락을 5~6줄 내외로 하는 답안지 작성 수련을 하여야 할 것이다.
속도 적응 대책은 “백강 이태희(1999), 『백강 고시체 교수․학습』, 백강 문자연구원. p.p.145~155”를 한 페이지 당 5분 정도 속도로 쓴다.

Ⅳ. 속도 적응과 속도감 체득
“글씨 속도감의 중요성은 백 번을 강조하여도 지나치지 않다.”
자신의 글씨 속도를 안다는 것은 아주 중요한 일이다. 자기 속도를 안다면 답안지를 작성하면서 여유 있게 내용을 조직화하여 쓸 수 있다.
속도감 체득은 고시체 답안지 과정을 수련 하는 가운데 속도 측정을 하면서 자연스럽게 체득되는 것이다. ≪欲速不達≫, ≪過猶不及≫

“백강 이태희(1999), 『백강 고시체 교수․학습』, 백강 문자연구원. p.p.145~155”
자신이 보는 실제 시험지 양식 준비
1단계 : 10분 완성(내 실력 찾기⇒ 2분씩 단축⇒ 12분까지)
2단계 : 20분 완성[10분(14분으로) 매일⇒ 20분 내 실력 찾기 ⇒ 2분씩 단축⇒ 22분까지]
3단계 : 30분 완성[10분 매일⇒ 20분(22분) 월, 수, 금⇒ 30분 내 실력 찾기⇒ 33분까지]
4단계 : 1시간 완성[10분 매일⇒1시간 내 실력 찾기⇒ 1시간 10분까지]
5단계 : 실전 1시간 완성[10분 매일⇒ 교과 1시간(월, 수, 금)⇒ 실전 1시간(화, 목, 토)
6단계 : 실전 2시간 완성[10분 매일⇒ 교과 1시간(월, 수, 금)⇒ 실전 2시간(화, 목, 토)

Ⅴ. 마무리
글씨체를 단 시간에 바꾸거나 교정하는 일은 쉬운 일은 아니지만 과학적인 교정 학습 과정을 이수한다면 바라는 바 목적을 달성할 수 있을 것이다.
그런데, 몇 달 정도 교정하면 되겠지 하는 자만심이나 글씨의 중요성 인식 결여 및 자신감의 부족이 교정을 어렵게 만드는 것이다. 또한, 교정을 단 시간에 완성하려는 욕심이 문제가 된다. 그러므로 ‘백강 고시체 교수․학습’을 한 단계 한 단계 서둘지 말고 성실하게 실천하는 길이 우수 답안지 작성의 지름길이라 할 수 있다.
고시체는 직사각 가로형 모양으로 우측 상향의 필체로써 리듬과 연속성의 효과를 얻었다. 또한 자음과 모음의 자형에서 획 줄임을 하여 글씨 쓰는 속도를 낼 수 있게 하였다.
글씨 쓰기가 바르지 못한 교정 대상자를 교정하기 위하여 고시체를 적용하고 체계적인 교수․학습 방법으로 교정지도 한다면 효과를 높일 수 있을 것이다.
수험생의 지식이 아무리 높고 깊다 하여도 지면에 바르게 쓰지 못하면 평가자에게 제대로 내용(실력)을 전달하지 못하여 올바른 평가를 받을 수 없을 것이다.
따라서 고시체는 균형과 짜임의 안정성, 획의 정확성, 글씨 크기와 속도, 글씨의 일관성, 지면과 글씨의 조화를 이루면서 쓰기 쉽고 읽기 편하며 빠르게 쓸 수 있는 장점으로 고시 답안지 논문 작성의 글씨로서 역할을 다 할 것이다.

(교재 구입처: 신림동 고시서점, 강좌: 한림법학원)
내용출처 : [직접 서술] 이태희(1998), 백강 고시체 교수학습, 백강문자연구원

+ Recent posts