SyntaxHighlighter 적용하기 위한 태그입니다.


<pre class="brush:언어명">

소스 코드

</pre>


언어명에 들어갈 수 있는 언어의 종류는 다음과 같습니다.


applescript
actionscript3 as3
bash shell
coldfusion cf
cpp c c# c-sharp csharp
css
delphi pascal pas
diff patch
erl erlang
groovy
java
jfx javafx
js jscript javascript
perl Perl pl
php
text plain
powershell ps
py python
ruby rails ror rb
sass scss
scala
sql
vb vbnet
xml xhtml xslt html


테스트 버전 : SyntaxHighlighter 3.0.83


,


PyOpenGL

Python용 OpenGL 라이브러리.


http://pyopengl.sourceforge.net/



PGU

pyGame과 함께 쓰일 수 있는 확장 라이브러리. 타일 에디터/엔진(tile/isometric/hexagonal), 레벨 에디터, 확장된 GUI/HTML 렌더링/텍스트 렌더링, 상태 엔진 등을 제공


https://code.google.com/p/pgu/



Soya3D

Python용 high-level 3D 엔진.


http://home.gna.org/oomadness/en/soya3d/



,


http://www.mclaren.com/formula1/downloads/



,


Sprite를 사용하면 이미지, 위치, 충돌 처리를 통합해서 처리할 수 있습니다.


Sprite를 단독으로 사용하는 경우

# 스프라이트 클래스 정의
class SimpleSprite(pygame.sprite.Sprite):

    def __init__(self, image, position): # 생성자 파라미터로 스프라이트에 사용될 이미지 경로와 스프라이트 초기 위치를 받는다
        pygame.sprite.Sprite.__init__(self)
        self.user_src_image = pygame.image.load(image) # 스프라이트에 사용될 이미지를 저장할 사용자 변수
        self.user_position = position # 스프라이트의 위치를 저장할 사용자 변수
        self.user_rotation = 30 # 스프라이트의 회전 각도를 저장할 사용자 변수

    def update(self): # 스프라이트의 상태를 업데이트 하는 함수. 필요에 따라 파라미터가 추가될 수도 있다.

        # 여기에 게임 상태에 따라 스프라이트의 위치(user_position), 회전 각도(user_rotation), 이미지(user_src_image)를 변경시키는 코드가 들어가야 한다.
        # {{
        # ...
        # }}

        # 출력에 사용될 이미지, 위치를 정한다
        self.image = pygame.transform.rotate(self.user_src_image, self.user_rotation) # 이미지를 회전 각도 만큼 회전시킨다
        self.rect = self.image.get_rect()
        self.rect.center = self.user_position # 이미지의 출력 위치를 정한다

...

# 초기화시 해야할 부분
simple = SimpleSprite('simple.png', (100, 100))
simple_group = pygame.sprite.RenderPlain(simple)

# -> RenderPlain 클래스는 여러개의 스프라이트를 묶어주는 역활을 하며,
# 상태 업데이트나 화면에 그릴 때에 RenderPlain 클래스를 통해서 하게된다.

...

# 게임 상태 업데이트시 해야할 부분
simple_group.update() # RenderPlain 객체를 통해 업데이트한다

...

# 게임 상태 화면에 출력시 해야할 부분
simple_group.draw(screen) # RenderPlain 객체를 통해 출력한다




Sprite를 그룹으로 사용하는 경우

# 스프라이트 클래스 정의
class SimpleSprite(pygame.sprite.Sprite):

    def __init__(self, image, position): # 생성자 파라미터로 스프라이트에 사용될 이미지 경로와 스프라이트 초기 위치를 받는다
        pygame.sprite.Sprite.__init__(self)
        self.user_src_image = pygame.image.load(image) # 스프라이트에 사용될 이미지를 저장할 사용자 변수
        self.user_position = position # 스프라이트의 위치를 저장할 사용자 변수
        self.user_rotation = 30 # 스프라이트의 회전 각도를 저장할 사용자 변수

    def update(self): # 스프라이트의 상태를 업데이트 하는 함수. 필요에 따라 파라미터가 추가될 수도 있다.

        # 여기에 게임 상태에 따라 스프라이트의 위치(user_position), 회전 각도(user_rotation), 이미지(user_src_image)를 변경시키는 코드가 들어가야 한다.
        # {{
        # ...
        # }}

        # 출력에 사용될 이미지, 위치를 정한다
        self.image = pygame.transform.rotate(self.user_src_image, self.user_rotation) # 이미지를 회전 각도 만큼 회전시킨다
        self.rect = self.image.get_rect()
        self.rect.center = self.user_position # 이미지의 출력 위치를 정한다

...

# 초기화시 해야할 부분
multiple = [
         SimpleSprite('simple.png', (100, 100)),
         SimpleSprite('simple.png', (100, 200)),
         SimpleSprite('simple.png', (100, 300))
]
multiple_group = pygame.sprite.RenderPlain(*multiple) # 그룹으로 사용시 * 연산자가 들어가야 한다

# -> RenderPlain 클래스는 여러개의 스프라이트를 묶어주는 역활을 하며,
# 상태 업데이트나 화면에 그릴 때에 RenderPlain 클래스를 통해서 하게된다.

...

# 게임 상태 업데이트시 해야할 부분
multiple_group.update() # RenderPlain 객체를 통해 업데이트한다

...

# 게임 상태 화면에 출력시 해야할 부분
multiple_group.draw(screen) # RenderPlain 객체를 통해 출력한다




Sprite와 Sprite 그룹 사이의 충돌 체크

class BlockSprite(pygame.sprite.Sprite):

    def __init__(self, position):
        pygame.sprite.Sprite.__init__(self)
        self.user_image_normal = pygame.image.load("block_normal.png"); # 보통 상태에서 표시할 이미지를 로딩
        self.user_image_hit = pygame.image.load("block_hit.png"); # 충돌시에 표시할 이미지를 로딩
        self.user_position = position;

        # 충돌을 체크하는 spritecollide 함수 호출시 rect 정보가 사용되는데
        # udpate가 spritecollide 이후에 호출되기 때문에 생성자에서 rect 초기값을 설정하여야 한다.
        self.image = self.user_image_normal
        self.rect = self.image.get_rect()
        self.rect.center = self.user_position

    def update(self, hit_list): # 충돌된 객체 리스트를 파라미터로 추가한다

        if self in hit_list: # 자기 자신의 리스트에 포함 여부에 따라 상태 업데이트를 한다
            self.image = self.user_image_hit # 이미지를 충돌 상태 이미지로 설정
        else:
            self.image = self.user_image_normal # 이미지를 보통 상태 이미지로 설정

        self.rect = self.image.get_rect()
        self.rect.center = self.user_position

...

blocks = [
         BlockSprite((100, 100)),
         BlockSprite((100, 200)),
         BlockSprite((100, 300))
]
block_group = pygame.sprite.RenderPlain(*blocks)

...

collisions = pygame.sprite.spritecollide(simple, block_group, False)
# 첫번째 파라미터로 단일 스프라이트 객체가, 두번째 파라미터로 스프라이트의 그룹 객체가 온다.
# 두번째 파라미터의 스프라이트 그룹에 포함된 객체 중에서 첫번째 파라미터의 객체와 충돌하는
# 객체의 리스트를 반환한다.
# 세번째 파라미터는 스프라이트 그룹내 충돌된 스프라이트의 자동 제거 여부로,
# True로 할 경우, 충돌 발생시 바로 그룹에서 제거된다.

block_group.update(collisions) # 충돌된 객체 리스트를 스프라이트 객체로 넘겨서 처리한다.

...

block_group.draw(screen)




Sprite 객체 외부에서 충돌 처리


다른 스프라이트 객체를 참조하거나 전체 스프라이트에 공통으로 처리해야하는 경우, 다음과 같은 방법으로 스프라이트 객체 외부에서 처리할 수 있다.

collisions = pygame.sprite.spritecollide(simple, block_group, False)
if collisions:
    for block in block_group.sprites():
        block.image = block.user_image_hit # 그룹내 모든 스프라이트의 이미지를 바꾼다




배경 이미지 사용시

배경 이미지 사용시, 매번 전체 이미지를 blit하지않고, 다음과 같은 방법으로 Sprite에 해당하는 영역만 효율적으로 복원할 수 있다.

# 메인 루프 바깥에서 배경 이미지를 출력
background = pygame.image.load('background.png')
screen.blit(background, (0,0))

...

# 메인 루프 안에서 Sprite 영역만 복원해줌. (기존에 screen.fill(...) 호출하던 부분)
simple_group.clear(screen, background)
block_group.clear(screen, background)




종합 예제


플레이어를 이동시켜 장애물에 충돌시켜 볼 수 있는 예제 소스이다.

다음의 이미지 파일들이 소스와 같은 경로에 있어야 한다.


simple.png : 플레이어 이미지

block_normal.png : 장애물 이미지 (보통 상태)

block_hit.png : 장애물 이미지 (충돌 상태)

background.png : 배경 이미지


# -*- coding: utf-8 -*-

import math, sys
import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((1024, 768), DOUBLEBUF)
clock = pygame.time.Clock()

class SimpleSprite(pygame.sprite.Sprite):

    def __init__(self, image, position):
        pygame.sprite.Sprite.__init__(self)
        self.user_src_image = pygame.image.load(image)
        self.user_position = position
        self.user_rotation = 30
        self.user_speed = 0
        self.user_rotation_speed = 0

    def update(self, deltat):
        # 속도, 회전 속도에 따라 위치 정보를 업데이트한다
        self.user_rotation += self.user_rotation_speed
        x, y = self.user_position
        rad = self.user_rotation * math.pi / 180
        x += -self.user_speed * math.sin(rad)
        y += -self.user_speed * math.cos(rad)
        self.user_position = (x, y)

        self.image = pygame.transform.rotate(self.user_src_image, self.user_rotation)
        self.rect = self.image.get_rect()
        self.rect.center = self.user_position

class BlockSprite(pygame.sprite.Sprite):

    def __init__(self, position):
        pygame.sprite.Sprite.__init__(self)
        self.user_image_normal = pygame.image.load("block_normal.png");
        self.user_image_hit = pygame.image.load("block_hit.png");
        self.user_position = position;

        self.image = self.user_image_normal
        self.rect = self.image.get_rect()
        self.rect.center = self.user_position

    def update(self, hit_list):
       
        if self in hit_list:
            self.image = self.user_image_hit
        else:
            self.image = self.user_image_normal

        self.rect = self.image.get_rect()
        self.rect.center = self.user_position

rect = screen.get_rect()
simple = SimpleSprite('simple.png', rect.center)
simple_group = pygame.sprite.RenderPlain(simple)

blocks = [
    BlockSprite((200, 200)),
    BlockSprite((800, 200)),
    BlockSprite((200, 600)),
    BlockSprite((800, 600))
]
block_group = pygame.sprite.RenderPlain(*blocks)

background = pygame.image.load('background.png')
screen.blit(background, (0,0))

while True:
    deltat = clock.tick(30)
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

        # 키입력에 따라 속도, 회전 속도를 설정
        if hasattr(event, 'key'):
            down = event.type == KEYDOWN
            if event.key == K_RIGHT:
                simple.user_rotation_speed = down * -5 # 시계 방향이 마이너스인 것에 유의
            elif event.key == K_LEFT:
                simple.user_rotation_speed = down * 5
            elif event.key == K_UP:
                simple.user_speed = down * 10
            elif event.key == K_DOWN:
                simple.user_speed = down * -10

    simple_group.update(deltat)

    collisions = pygame.sprite.spritecollide(simple, block_group, False)
    block_group.update(collisions)

    simple_group.clear(screen, background)
    block_group.clear(screen, background)
    simple_group.draw(screen)
    block_group.draw(screen)
    pygame.display.flip()




<테스트 환경>
OS : Windows 7
Python 버전 : 2.7
pyGame 버전 : 1.9.1


,

Python에서 게임 제작에 사용할 수 있는 pyGame 라이브러리 기본 기능에 대해 긴 설명없이 빠르게 훓어볼 수 있도록 정리해보았습니다.


우선 Python에서 UTF-8 한글로 된 주석을 사용하기 위해서는 소스 앞부분에 다음 구문을 추가하여야 한다

# -*- coding: utf-8 -*-


->



모듈 import

import pygame                   # pygame 모듈을 import
from pygame.locals import *     # pygame.locals 하위 모듈을 import


pyGame 라이브러리 초기화

라이브러리 초기화를 하지 않을 경우, 일부 기능이 정상 동작하지 않을 수 있다.

pygame.init()


디스플레이 초기화

# 1) 화면 해상도를 480*320으로 초기화. 윈도우 모드, 더블 버퍼 모드로 초기화하는 경우
screen = pygame.display.set_mode((480, 320), DOUBLEBUF)
pygame.display.set_caption('Hello World!')  # 타이틀바의 텍스트를 설정

# 2) 화면 해상도를 480*320, 전체 화면 모드, 하드웨어 가속 사용, 더블 버퍼 모드로 초기화하는 경우
screen = pygame.display.set_mode((480, 320), FULLSCREEN | HWSURFACE | DOUBLEBUF)


두번째 파라미터는 다음과 같은 flag들을 | 연산자로 조합하여 사용할 수 있다.


FULLSCREEN : 전체 화면 모드를 사용
HWSURFACE : 하드웨어 가속 사용. 전체 화면 모드에서만 가능
OPENGL : OpenGL 사용 가능한 디스플레이를 초기화
DOUBLEBUF : 더블 버퍼 모드를 사용. HWSURFACE or OPENGL에서 사용을 추천



메인 루프

pyGame의 메인 루프는 아래와 같이 크게 세 부분으로 나뉘어진다.

while True:
  for event in pygame.event.get():
      # 이벤트를 처리하는 부분 -> 키보드, 마우스 등의 이벤트 처리 코드가 들어감
      ...

  # 게임의 상태를 업데이트하는 부분
  ...

  # 게임의 상태를 화면에 그려주는 부분 -> 화면을 지우고, 그리고, 업데이트하는 코드가 들어감
  ...


종료 이벤트 처리

import sys


# 윈도우의 닫기 버튼이 눌렸을 때, 프로그램을 종료하도록 처리
for event in pygame.event.get():
  if event.type == QUIT:
    pygame.quit()
    sys.exit()


키 이벤트 처리

for event in pygame.event.get():
  if not hasattr(event, 'key'):                    # 키 관련 이벤트가 아닐 경우, 건너뛰도록 처리하는 부분
    continue
  if event.type == KEYDOWN:
    if event.key == K_RIGHT:
      # 오른쪽 키에 대한 처리
      ...
    elif event.key == K_LEFT:
      # 왼쪽 키에 대한 처리
      ...
    elif event.key == K_UP:
      # 위쪽 키에 대한 처리
      ...
    elif event.key == K_DOWN:
      # 아래 키에 대한 처리
      ...
    elif event.key == K_ESCAPE:
      # ESC 키에 대한 처리
      ...


마우스 이벤트 처리

LEFT = 1  # 왼쪽 버튼에 대한 버튼 인덱스
RIGHT = 3  # 오른쪽 버튼에 대한 버튼 인덱스

if event.type == MOUSEBUTTONDOWN and event.button == LEFT:
  # 왼쪽 버튼이 눌렸을 때의 처리
  print "left mouse up (%d, %d)" % event.pos
elif event.type == MOUSEBUTTONUP and event.button == LEFT:
  # 왼쪽 버튼이 떨어졌을 때의 처리
  print "left mouse down (%d, %d)" % event.pos
elif event.type == pygame.MOUSEMOTION:
  # 마우스 이동시의 처리
  print "mouse move (%d, %d)" % event.pos


색 정의

BLACK = (0, 0, 0)  # R, G, B
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
BLUE_A = (0, 0, 255, 127)  # R, G, B, Alpha(투명도, 255 : 완전 불투명)


사각형 정의

rectangle = (0, 10, 100, 100)  # 왼쪽 X, 위 Y, 너비, 높이


화면의 업데이트

# 전체 화면을 업데이트할 경우
pygame.display.flip()                           # 화면 전체를 업데이트

# 화면의 일부만 업데이트할 경우
pygame.display.update(rectangle)                # 업데이트할 rectangle을 지정
pygame.display.update(rectangle_list)           # 업데이트할 rectangle을 여러개 지정


프레임 수 맞추기

메인 루프 안에서 FPS(초당 프레임수)를 맞추기 위한 딜레이를 추가해주는 코드. 파라미터로 딜레이 시간이 아닌 목표로 하는 FPS 값이 들어간다.

TARGET_FPS = 30
clock = pygame.time.Clock()

while True:
  ...

  clock.tick(TARGET_FPS)  # 30 FPS를 맞추기 위한 딜레이를 추가


화면 지우기

# 화면을 그리기에 앞서 지우기 위해 호출한다

screen.fill(BLACK)


기본 도형 그리기

# 네 점을 지나는 폴리곤을 그린다
pygame.draw.polygon(screen, RED, ((10, 10), (20, 10), (30, 20), (10, 20)))     

# 두 점을 지나는 선을 그린다
pygame.draw.line(screen, BLUE, (10, 10), (20, 20))                             

# 사각형을 그린다 (왼쪽, 위, 너비, 높이 순)
pygame.draw.rect(screen, RED, (10, 10, 100, 50))                               

# (100, 100)을 중심으로 하는 반지름 10인 원을 그린다
pygame.draw.circle(screen, BLUE, (100, 100), 10)                               

# 사각형 안을 지나는 타원을 그린다
pygame.draw.ellipse(screen, RED, (10, 10, 100, 50))                            

# 두 점을 지나는 두께 4의 선을 그린다 (모든 그리기 함수에 두께가 추가될 수 있다)
pygame.draw.line(screen, BLUE, (10, 10), (20, 20), 4)                          


점 찍기

pixelArray = pygame.PixelArray(screen)
pixelArray[10][100] = RED
pixelArray[50][100] = BLUE
del pixelArray  # 사용 후, 반드시 PixelArray를 del해줘야 Surface가 lock되는 것을 방지할 수 있다


이미지 파일 다루기

# 이미지 파일 그리기
img = pygame.image.load('image.jpg')
screen.blit(img, (50, 100))             # 지정한 좌표가 이미지의 왼쪽 위에 위치하도록 출력된다

# 이미지 파일 회전하여 그리기
img = pygame.image.load('image.jpg')
x = 100
y = 100
degree = 45                             # 회전할 각도를 도(degree) 단위로 지정
rotated = pygame.transform.rotate(img, degree)
rect = rotated.get_rect()
rect.center = (x, y)                    # 지정한 좌표가 이미지의 중심에 오도록 출력된다
screen.blit(rotated, rect)


투명도 처리

pygame.display.set_mode()로 얻어진 기본 Surface에 출력할 경우 투명도는 적용되지 않기 때문에, 아래와 같이 별도의 Surface를 생성하여 처리하여야 한다.

t_surface = screen.convert_alpha()              # 기본 Surface(screen)로부터 투명도 처리를 위한 Surface 생성

...


t_surface.fill((0, 0, 0, 0))                    # t_surface 전체를 투명한 검정색으로 지운다

pygame.draw.rect(t_surface, (0, 0, 255, 127), (30, 30, 40, 40))  # t_surface에 투명도를 적용하여 그려줌
screen.blit(t_surface, (0, 0))                  # t_surface를 기본 Surface에 blit


텍스트 출력하기

fontObj = pygame.font.Font('myfont.ttf', 32)                  # 현재 디렉토리로부터 myfont.ttf 폰트 파일을 로딩한다. 텍스트 크기를 32로 한다
textSurfaceObj = fontObj.render('Hello Font!', True, GREEN)   # 텍스트 객체를 생성한다. 첫번째 파라미터는 텍스트 내용, 두번째는 Anti-aliasing 사용 여부, 세번째는 텍스트 컬러를 나타낸다
textRectObj = textSurfaceObj.get_rect();                      # 텍스트 객체의 출력 위치를 가져온다
textRectObj.center = (150, 150)                               # 텍스트 객체의 출력 중심 좌표를 설정한다
screen.blit(textSurfaceObj, textRectObj)                      # 설정한 위치에 텍스트 객체를 출력한다


# Font 객체 생성의 다른 예
fontObj = pygame.font.Font(None, 32)                                    # 폰트 파일에 None을 지정할 경우 기본 폰트가 사용된다
fontObj = pygame.font.Font('C:\\Windows\\Fonts\\tahoma.ttf', 32)        # 윈도우 경로에 있는 폰트를 사용할 경우

# render 함수 사용의 다른 예
textSurfaceObj = fontObj.render('Hello font!', True, GREEN, BLUE)       # 텍스트 색을 녹색, 배경색을 파란색으로 설정한다


사운드 출력하기

Wav, Ogg 형식의 사운드 파일을 지원한다.

soundObj = pygame.mixer.Sound('beeps.wav')              # 사운드 파일을 로딩한다
soundObj.play()                                         # 사운드 파일을 플레이한다 (플레이가 끝나는 것을 기다리지 않고 바로 리턴된다)


# 5초 후에 플레이를 정지하는 경우
import time

soundObj.play()
time.sleep(5)
soundObj.stop()


# 반복해서 플레이하는 경우 (BGM)
pygame.mixer.music.load('background.mp3')
pygame.mixer.music.play(-1, 0, 0)



종합 예제

# -*- coding: utf-8 -*-

import sys
import pygame
from pygame.locals import *

# 초당 프레임수를 정의
TARGET_FPS = 30

clock = pygame.time.Clock()


# 색 정의
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


# 마우스 버튼 인덱스 정의
LEFT = 1  # 왼쪽 버튼에 대한 버튼 인덱스
RIGHT = 3  # 오른쪽 버튼에 대한 버튼 인덱스

# 라이브러리 및 디스플레이 초기화
pygame.init()
screen = pygame.display.set_mode((480, 320), DOUBLEBUF)

# 이미지 파일을 로딩
img = pygame.image.load('image.jpg')

# 폰트 로딩 및 텍스트 객체 초기화
fontObj = pygame.font.Font('myfont.ttf', 32)
textSurfaceObj = fontObj.render('Hello Font!', True, GREEN)
textRectObj = textSurfaceObj.get_rect();
textRectObj.center = (150, 200)

# 사운드 파일을 로딩
soundObj = pygame.mixer.Sound('beeps.wav')

# 메인 루프
while True:
  for event in pygame.event.get():
    # 이벤트를 처리하는 부분
    if event.type == QUIT:
      pygame.quit()
      sys.exit()


    # 키보드 이벤트 처리
    if event.type == KEYDOWN:
      if event.key == K_RIGHT:
        # 오른쪽 키가 눌리면 사운드를 플레이한다
        soundObj.play()


    # 마우스 이벤트 처리
    if event.type == MOUSEBUTTONDOWN and event.button == LEFT:
      # 왼쪽 버튼이 눌렸을 때의 처리
      print "left mouse up (%d, %d)" % event.pos
    elif event.type == MOUSEBUTTONUP and event.button == LEFT:
      # 왼쪽 버튼이 떨어졌을 때의 처리
      print "left mouse down (%d, %d)" % event.pos
    elif event.type == pygame.MOUSEMOTION:
      # 마우스 이동시의 처리
      print "mouse move (%d, %d)" % event.pos


  # 게임의 상태를 업데이트하는 부분

  # 게임의 상태를 화면에 그려주는 부분


  screen.fill(BLACK)  # 화면을 검은색으로 지운다

  pygame.draw.line(screen, GREEN, (10, 0), (20, 10))  # 두 점을 지나는 선을 그린다

  # 수동으로 점 찍기
  pixelArray = pygame.PixelArray(screen)
  pixelArray[5][5] = RED
  pixelArray[10][10] = RED
  del pixelArray

  # 이미지 파일 그리기
  screen.blit(img, (50, 100))
 
  # 이미지 파일 회전하여 그리기
  x = 200
  y = 100
  degree = 30
  rotated = pygame.transform.rotate(img, degree)
  rect = rotated.get_rect()
  rect.center = (x, y)
  screen.blit(rotated, rect)

  # 텍스트 오브젝트를 출력
  screen.blit(textSurfaceObj, textRectObj)

  pygame.display.flip()  # 화면 전체를 업데이트
  clock.tick(TARGET_FPS)  # 프레임 수 맞추기



<테스트 환경>
OS : Windows 7
Python 버전 : 2.7
pyGame 버전 : 1.9.1


,

1. 한국도로공사 홈페이지에 들어갑니다.

http://www.ex.co.kr



2. 중간에 있는 하이패스 버튼을 누릅니다.




3. ex card 서비스 화면이 나타나는데, 로그인을 안하고 진행하면 화면이 닫히므로 로그인을 한 후 진행합니다. 로그인은 아이핀과 인증서 로그인이 가능합니다.




4. 로그인을 한 후에, 미납금 조회/납부 버튼을 누릅니다.




5. 미납통행료 조회 및 납부 화면이 나오면, 차량번호를 입력하고 조회 버튼을 누릅니다.



6. 미납금 내역이 표시되면서 아래와 같은 내용을 확인할 수 있으며 납부도 가능합니다.




작성일 : 2015.08


,


1. 도로명주소 안내시스템 홈페이지에 들어갑니다.


http://www.juso.go.kr/



2. ~동 ~호, ~층과 같은 상세 주소를 제외한, 도로명 + 건물번호까지만 주소를 입력하고 검색을 누릅니다.




3. 검색 결과 중 더보기 버튼을 누릅니다.




4.추가 정보에서 아래와 같이 도로명주소의 영문 표기를 확인할 수 있습니다.




5. 나머지 상세 주소를 변환하여 콤마로 분리하여 맨 앞에 붙인다.
상세 주소 표기시 ‘동’, ‘층’, ‘호’는 로마자 표기를 원칙으로 하되, 널리 사용되는 표현인 경우 영어식 표기
(’동’, ‘층’, ‘호’ 생략, ‘층’ -> ‘F’, ‘지하’ -> ‘B’) 사용가능


 예시)

    ① 대구광역시 수성구 달구벌대로323번길 56, 705동 1104호
        705-dong 1104-ho, 56, Dalgubeol-daero 323beon-gil, Suseong-gu, Daegu

        705-1104, 56, Dalgubeol-daero 323beon-gil, Suseong-gu, Daegu
    ② 강원도 춘천시 퇴계로77번길 42, 3층
        3-cheung, 42, Toegye-ro 77beon-gil, Chuncheon-si, Gangwon-do
        3F, 42, Toegye-ro 77beon-gil, Chuncheon-si, Gangwon-do
    ③ 부산광역시 해운대구 세실로 136, 가동 지하101호
        Ga-jiha101, 136, Sesil-ro, Haeundae-gu, Busan
        Ga-B101, 136, Sesil-ro, Haeundae-gu, Busan



6. 참고항목(법정동, 공동주택명)은 주소의 간결화를 위해 표기하지 않을 수 있으나,
필요할 경우 맨 앞(상세주소 앞)에 괄호로 표기합니다.


 예시)

서울특별시 광진구 광나루로507길 78, 101동 102호(광장동, 신도아파트)
(Gwangjang-dong, Sindo APT), 101-dong 102-ho, 78, Gwangnaru-ro 507-gil, Gwangjin-gu, Seoul



※ 도로명주소 영문표기방법의 전반적인 내용은 도로명주소 소개 -> 주소 영문표기방법 란에서도 확인할 수 있습니다.



,