#!/usr/bin/env perl use SDL::App; # SDL 의 기본적인 모듈 로딩 use SDL::Surface; # 그림 파일을 처리하기 위한 모듈 use SDL::Event; # 각종 이벤트를 처리하는 모듈 use SDL::Font; # 그림 파일을 폰트처럼 이용하여 글씨를 쓸 수 있게 해줌 # 글자를 출력할 위치 $text_x = 50; $text_y = 450; $text = ""; # wilbur.png 그림을 불러온다. $img = new SDL::Surface -name => "wilbur.png"; # 배경으로 쓸 back.png 그림 파일을 불러온다. $back = new SDL::Surface -name => "back.png"; # 화면의 넓이와 높이 $screen_width = $back->width; $screen_height = $back->height; # wilbur.png 파일을 그릴 위치 지정. 정중앙 $img_x = ($screen_width - $img->width) / 2; $img_y = ($screen_height - $img->height) / 2; # SDL 환경을 초기화 하고, 화면을 설정 $app = new SDL::App( # 하드웨어 가속과 더블버퍼링 이용 -flags => SDL_HWSURFACE | SDL_DOUBLEBUF, -width => $screen_width, # 화면 넓이 설정 -height => $screen_height, # 화면 높이 설 -title => "SDL Perl", # 창의 타이틀 설정 -icon => "wilbur.png" # 아이콘 그림 설정 ); # 전체 화면 범위 $rect = new SDL::Rect( -width => $screen_width, -height => $screen_height ); # wilbur.png 그림이 그려질 화면 범위 $drect = new SDL::Rect( -width => $img->height, -height => $img->width, -x => $img_x, -y => $img_y ); # font.png 파일을 로드해서 폰트를 생성한다. $font = new SDL::Font "font.png"; # 배경 그림을 버퍼에 전송 $back->blit($rect, $app, $rect); # wilbur.png 그림을 버퍼에 전송 $img->blit($rect, $app, $drect); # 화면 버퍼를 표시한다. $app->flip; # 이벤트 객체 생성 $e = new SDL::Event; while (1) { $e->wait; # 이벤트를 잡아라! ...^^; if ($e->type == SDL_QUIT ) { exit; } # 종료 이벤트가 발생하면 프로그램 종료 if ($e->type == SDL_KEYDOWN) { # 어떤 키가 눌려지면 if ($e->key_sym() == SDLK_ESCAPE) { # ESC 키가 눌려지면 종료 exit; } elsif ($e->key_sym() == SDLK_SPACE) { # SPACE 키가 눌려지면 화면 갱신 $text = ""; $img_x = ($screen_width - $img->width) / 2; $img_y = ($screen_height - $img->height) / 2; draw_img(); # 화면 그리는 함수. 맨 끝에 정의 해 놓았다. } elsif ($e->key_sym() == SDLK_LEFT) { # 화살표 키가 눌려지면 그 방향으로 wilbur.png 그림 이동 $img_x -= $img->width; draw_img(); } elsif ($e->key_sym() == SDLK_RIGHT) { $img_x += $img->width; draw_img(); } elsif ($e->key_sym() == SDLK_UP) { $img_y -= $img->height; draw_img(); } elsif ($e->key_sym() == SDLK_DOWN) { $img_y += $img->height; draw_img(); } else { # 다른키가 눌려지면 그 글자를 출력한다. if (length($text) <= 20) { # 20글자가 넘으면 처음부터.. $text .= chr($e->key_sym()); draw_img(); } else { $text = chr($e->key_sym()); draw_img(); } } } } # 화면을 그려주는 허접한 함수 sub draw_img() { # wilbur.png 이미지가 그려질 위치 지정 $drect->x($img_x); $drect->y($img_y); # 배경을 그리고.. $back->blit($rect, $app, $rect); # 저장되어 있는 글씨를 쓴 다음, $app->print($text_x, $text_y, $text); # wilbur.png 그림을 그려 넣고 $img->blit($rect, $app, $drect); # 화면 출력. $app->flip; }
[그림] 프로그램 실행화면
이전 글 : 파이썬 게임 솔라울프 즐기기
다음 글 : 1.0 버전대에 올라선 코모도와 파이게임
최신 콘텐츠