Microsoft PowerPoint - 6-PythonGUI-sprite

Similar documents
Microsoft PowerPoint PythonGUI-sprite

1장. 시작하기

Microsoft PowerPoint PythonGUI-network

쉽게 풀어쓴 C 프로그래밍

gnu-lee-oop-kor-lec06-3-chap7

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - CSharp-10-예외처리

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

17장 클래스와 메소드

PowerPoint Presentation

Microsoft PowerPoint Python-Function.pptx

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

(Microsoft PowerPoint - \301\24615\260\255 - \303\346\265\271\303\263\270\256)

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

Microsoft PowerPoint - 2-Objective-C 기초

No Slide Title

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Network Programming

PowerPoint Presentation

Cluster management software

PowerPoint 프레젠테이션

유니티 변수-함수.key

Microsoft PowerPoint PythonGUI-socket

PowerPoint Presentation

슬라이드 1

PowerPoint Template

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

<C3CA3520B0FAC7D0B1B3BBE7BFEB202E687770>

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오.

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Microsoft PowerPoint - web-part02-ch15-문서객체조작.pptx

Microsoft PowerPoint - 14주차 강의자료

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

쉽게 풀어쓴 C 프로그래밍

자바 웹 프로그래밍

PowerPoint Presentation

오버라이딩 (Overriding)

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

Design Issues

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

8장.그래픽 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - 4주차_Android_UI구현.ppt [호환 모드]

Microsoft PowerPoint - Lect04.pptx

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

ThisJava ..

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

JUNIT 실습및발표

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - VB.NET_06.pptx

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

Microsoft Word - EEL2 Lab4.docx

제11장 프로세스와 쓰레드

Microsoft PowerPoint - 2강

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

Microsoft PowerPoint Python-DB

PowerPoint Presentation

JAVA PROGRAMMING 실습 09. 예외처리

Gray level 변환 및 Arithmetic 연산을 사용한 영상 개선

Cluster management software

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Microsoft PowerPoint Python-WebDB

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

- 클래스를이용한 2개의계산기구현 class Calculator: def init (self): self.result = 0 def adder(self, num): self.result += num return self.result cal1 = Calculator()

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

JAVA PROGRAMMING 실습 07. 상속

C++ Programming

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - C++ 5 .pptx

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

쉽게 풀어쓴 C 프로그래밍

chap 5: Trees

No Slide Title

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

Transcription:

(Computer Science with Python and Pygame, Ch.14 introduction to Sprites) 순천향대학교컴퓨터공학과이상정 순천향대학교컴퓨터공학과 1 학습내용 스프라이트클래스 그룹클래스 스프라이트충돌 블록수집게임예 게임레벨증가및점수표시 스프라이트이동 순천향대학교컴퓨터공학과 2

(1) 스프라이트 (sprite) 큰그래픽장면의부분으로사용되는단일 2차원이미지 쪽화면 순천향대학교컴퓨터공학과 3 (2) 순천향대학교컴퓨터공학과 4

스프라이트클래스 스프라이트기본클래스 pygame.sprite.sprite(*groups): return Sprite 속성 Sprite.image 스프라이트이미지 Sprite.rectrect 스프라이트위치 모든게임오브젝트 ( 물체 ) 들의기본클래스 Group 클래스와함께동작 생성자는그룹또는그룹의리스트를인수로전달 순천향대학교컴퓨터공학과 5 그룹클래스 pygame.sprite.group(*sprites): return Group 스프라이트들의컨테이너 (container) 클래스 메소드 Group.add(*sprites): return None 그룹에스프라이트를추가 Group.remove(*sprites): return None 그룹에서스프라이트를제거 Group.draw(Surface): return None Surface에포함된스프라이트를그리기 Group.update(*args): return None 그룹내모든스프라이트의 update() 메소드호출 그룹클래스 Group 클래스를상속하는그룹클래스 GroupSingle: 가장최근에추가된스프라이트만표현 RenderPlain: draw() 메소드가스크린에모든스프라이트를그리기 순천향대학교컴퓨터공학과 6

블록수집게임예 마우스로움직이는빨간블록이검은블록을수집하는예 검은블록스프라이트, 빨간블록스프라이트 ( 플레이어 ) 충돌검은블록없어지고점수올라감 순천향대학교컴퓨터공학과 7 Block 클래스정의 Sprite 클래스를상속받아블록을정의하는클래스 블록의색과크기를생성자인수로전달 # 블록을정의하는클래스 # Sprite 부모클래스를상속 class Block(pygame.sprite.Sprite): # 블록의색과크기를생성자인수로전달 def init (self, color, width, height): # 부모클래스생성자호출 pygame.sprite.sprite. init (self) i i i # 블록의이미지와색지정 self.image = pygame.surface([width, height]) self.image.fill(color) # 이미지크기의 rect 객체지정 self.rect = self.image.get_rect() # 빨간블록생성 player = Block(red, 20, 15) 순천향대학교컴퓨터공학과 8

다양한모양의스프라이트생성예 # 타원의이미지와색지정 # 검은타원생성 self.image = pygame.surface([width, height]) self.image.fill(white) self.image.set_colorkey(white) pygame.draw.ellipse(self.image,color,[0,0,width,height]) # 빨간타원생성 player = Block(red, 20, 15) def init (self, color, filename): # 부모클래스생성자호출 pygame.sprite.sprite. init (self) # 블록의이미지와색지정 self.image = pygame.image.load(filename).convert() self.image.set_colorkey(black) # 이미지크기의 rect 객체지정 self.rect = self.image.get_rect() 순천향대학교컴퓨터공학과 9 # 외계인블록생성 block = Block(black, "alien.png") # UFO 블록생성 player = Block(red, "ufo.png") 스프라이트그룹생성 전체스프라이트객체를갖는스프라이트그룹생성 RenderPlain 그룹생성 draw() 메소드가스크린에모든스프라이트를그림 검은블록의스프라이트그룹 플레이어를포함한모든스프라이트그룹 # 스프라이트그룹생성, 검은블록의스프라이트그룹 block_list = pygame.sprite.renderplain() # 스프라이트그룹생성, 플레이어 ( 빨간블록 ) 를포함한모든스프라이트그룹 all_sprites_list = pygame.sprite.renderplain() 순천향대학교컴퓨터공학과 10

그룹에스프라이트추가 각그룹에스프라이트추가 그룹에 50개의블록객체추가 위치는랜덤으로지정 for i in range(50): # 블록들의위치를랜덤생성 block.rect.x = random.randrange(screen_width) randrange(screen block.rect.y = random.randrange(screen_height) # 스프라이트그룹에블록객체추가 block_list.add(block) list all_sprites_list.add(block) # 플레이어 ( 빨간블록 ) 생성 player = Block(red, 20, 15) all_sprites_list.add(player) 순천향대학교컴퓨터공학과 11 스프라이트충돌 (1) 한스프라이트와그룹내스프라이트간의충돌조사 pygame.sprite.spritecollide(sprite, group, dokill, collided = None): return Sprite_list sprite와 group 내의스프라이트간의충돌조사 dokill 인수가 True이면충돌된스프라이트가그룹에서제거 collided d 인수는두스프라이트의충돌여부를계산하는 callback 함수 생략되면스프라이트영역이 rect 값을가지고, 이를충돌계산에적용 충돌한스프라이트들의리스트리턴 순천향대학교컴퓨터공학과 12

스프라이트충돌 (2) # 플레이어블록과충돌하는블록조사 blocks_hit_list = pygame.sprite.spritecollide(player, block_list, True) # 충돌된블록수조사하여점수조정 if len(blocks_hit_list) > 0: score +=len(blocks_hit_list) _ print( score ) # 모든스프라이트그리기 all_sprites_list.draw(screen) 순천향대학교컴퓨터공학과 13 블록수집게임코드 (1) import pygame import random black = ( 0, 0, 0) white = ( 255, 255, 255) red = ( 255, 0, 0) # 블록을정의하는클래스 # Sprite 부모클래스를상속 class Block(pygame.sprite.Sprite): # 블록의색과크기를생성자인수로전달 def init (self, it color, width, height): ht): # 부모클래스생성자호출 pygame.sprite.sprite. init (self) # 블록의이미지와색지정 self.image = pygame.surface([width, height]) self.image.fill(color) # 이미지크기의 rect 객체지정 self.rect = self.image.get_rect() pygame.init() 순천향대학교컴퓨터공학과 14 # 윈도우설정 screen_width=700 screen_height=400 screen=pygame.display.set_mode([screen_width, screen_height]) # 스프라이트그룹생성, 검은블록의스프라이트그룹 block_list = pygame.sprite.renderplain() # 스프라이트그룹생성, 플레이어 ( 빨간블록 ) 를포함한 # 모든스프라이트그룹 all_sprites_list = pygame.sprite.renderplain() for i in range(50): # 블록들의위치를랜덤생성 block.rect.x = random.randrange(screen_width) block.rect.y = random.randrange(screen_height) # 스프라이트그룹에블록객체추가 block_list.add(block) all_sprites_list.add(block)

블록수집게임코드 (2) # 플레이어블록 ( 빨간블록 ) 생성 player = Block(red, 20, 15) all_sprites_list.add(player) done=false clock=pygame.time.clock() score = 0 while done==false: for event in pygame.event.get(): if event.type == pygame.quit: done=true # 플레이어블록과충돌하는블록조사 blocks_hit_list = pygame.sprite.spritecollide (player, block_list, True) # 충돌된블록수조사하여점수조정 if len(blocks_hit_list) > 0: score +=len(blocks_hit_list) list) print( score ) # 모든스프라이트그리기 all_sprites_list.draw(screen) screen.fill(white) # 현재마우스위치읽어서플레이어블록객체의 # 위치로지정 pos = pygame.mouse.get_pos() mouse get pos() player.rect.x=pos[0] player.rect.y=pos[1] 순천향대학교컴퓨터공학과 15 clock.tick(20) pygame.display.flip() pygame.quit() 시험주행 순천향대학교컴퓨터공학과 16

블록수집게임 - 게임레벨증가 모든블록을수집했으면레벨상승 레벨에따라새로운블록추가 # 플레이어블록과충돌하는블록조사 blocks_hit_list = pygame.sprite.spritecollide(player, block_list, True) # 모든블록을수집했으면레벨상승 if len(block_list) == 0: level += 1 # 레벨에따라새로운블록추가 for i in range(level * 10): # 블록들의위치를랜덤생성 block.rect.x = random.randrange(screen_width) block.rect.y = random.randrange(screen_height) # 스프라이트그룹에블록객체추가 block_list.add(block) all_sprites_list.add(block) 순천향대학교컴퓨터공학과 17 블록수집게임 - 게임점수표시 윈도우에점수와레벨표시 # 텍스트폰트생성 font = pygame.font.font(none, 36) # 충돌된블록수조사하여점수조정 if len(blocks_hit_list) > 0: score +=len(blocks_hit_list) # 점수및레벨텍스트표시 text=font.render("score: "+str(score), True, black) screen.blit(text, [10, 10]) text=font.render("level: "+str(level), True, black) screen.blit(text, [10, 40]) 순천향대학교컴퓨터공학과 18

블록수집코드 레벨증가및점수표시 (1) import pygame import random black = ( 0, 0, 0) white = ( 255, 255, 255) red = ( 255, 0, 0) # 블록을정의하는클래스 # Sprite 부모클래스를상속 class Block(pygame.sprite.Sprite): # 블록의색과크기를생성자인수로전달 def init (self, it color, width, height): ht): # 부모클래스생성자호출 pygame.sprite.sprite. init (self) # 블록의이미지와색지정 self.image = pygame.surface([width, height]) self.image.fill(color) # 이미지크기의 rect 객체지정 self.rect = self.image.get_rect() pygame.init() 순천향대학교컴퓨터공학과 19 # 윈도우설정 screen_width=700 screen_height=400 screen=pygame.display.set_mode([screen_width, screen_height]) # 스프라이트그룹생성, 검은블록의스프라이트그룹 block_list = pygame.sprite.renderplain() # 스프라이트그룹생성, 플레이어 ( 빨간블록 ) 를포함한 # 모든스프라이트그룹 all_sprites_list = pygame.sprite.renderplain() for i in range(50): # 블록들의위치를랜덤생성 block.rect.x = random.randrange(screen_width) block.rect.y = random.randrange(screen_height) # 스프라이트그룹에블록객체추가 block_list.add(block) all_sprites_list.add(block) 블록수집코드 레벨증가및점수표시 (2) # 플레이어블록 ( 빨간블록 ) 생성 pos = pygame.mouse.get_pos() player = Block(red, 20, 15) player.rect.x=pos[0] all_sprites_list.add(player) player.rect.y=pos[1] done=false clock=pygame.time.clock() # 텍스트폰트생성 font = pygame.font.font(none, 36) score = 0 level = 1 while done==false: for event in pygame.event.get(): t() if event.type == pygame.quit: done=true screen.fill(white) # 현재마우스위치읽어서플레이어블록객체의 # 위치로지정 순천향대학교컴퓨터공학과 20 # 플레이어블록과충돌하는블록조사 blocks_hit_list = pygame.sprite.spritecollide(player, block_list, True) # 충돌된블록수조사하여점수조정 if len(blocks_hit_list) > 0: score +=len(blocks_hit_list) # 모든블록을수집했으면레벨상승 if len(block_list) == 0: level += 1 # 레벨에따라새로운블록추가 for i in range(level * 10): # 블록들의위치를랜덤생성 block.rect.x = random.randrange(screen_width)

블록수집코드 레벨증가및점수표시 (2) block.rect.y = random.randrange(screen_height) # 스프라이트그룹에블록객체추가 block_list.add(block) all_sprites_list.add(block) # 모든스프라이트그리기 all_sprites_list.draw(screen) # 점수및레벨텍스트표시 text=font.render("score: "+str(score), True, black) screen.blit(text, [10, 10]) text=font.render("level: "+str(level), True, black) screen.blit(text, [10, 40]) clock.tick(20) k(20) pygame.display.flip() pygame.quit() 순천향대학교컴퓨터공학과 21 시험주행 순천향대학교컴퓨터공학과 22

스프라이트이동 스프라이트가위에서아래로이동 Block 클래스에 update() 메소드추가 각프레임에서블록의 y 좌표증가 증가속도는레벨에따라커짐 블록이아래끝에도달하면 y 위치값을위로조정 class Block(pygame.sprite.Sprite): # y 좌표값리셋 def reset_pos(self): self.rect.y = random.randrange(-100,-10) self.rect.x = random.randrange(0,screen_width) def update(self, change_y): # 블록을아래로이동 self.rect.y += change_y if self.rect.y > screen_height: self.reset_pos() 순천향대학교컴퓨터공학과 23 블록수집코드 블록이동 (1) import pygame import random black = ( 0, 0, 0) white = ( 255, 255, 255) red = ( 255, 0, 0) # 블록을정의하는클래스 # Sprite 부모클래스를상속 class Block(pygame.sprite.Sprite): # 블록의색과크기를생성자인수로전달 def init (self, it color, width, height): ht): # 부모클래스생성자호출 pygame.sprite.sprite. init (self) # 블록의이미지와색지정 self.image = pygame.surface([width, height]) self.image.fill(color) # 이미지크기의 rect 객체지정 self.rect = self.image.get_rect() 순천향대학교컴퓨터공학과 24 # y 좌표값리셋 def reset_pos(self): self.rect.y = random.randrange(-100,-10) self.rect.x = random.randrange(0,screen_width) def update(self, change_y): # 블록을아래로이동 self.rect.y += change_y if self.rect.y > screen_height: self.reset_pos() pygame.init() it() # 윈도우설정 screen_width=700 screen_height=400 screen=pygame.display.set_mode([screen_width, screen_height]) # 스프라이트그룹생성 block_list = pygame.sprite.renderplain() all_sprites_list = pygame.sprite.renderplain()

블록수집코드 블록이동 (2) for i in range(50): # 블록들의위치를랜덤생성 block.rect.x = random.randrange(screen_width) randrange(screen block.rect.y = random.randrange(screen_height) # 스프라이트그룹에블록객체추가 block_list.add(block) all_sprites_list.add(block) # 플레이어블록 ( 빨간블록 ) 생성 player = Block(red, 20, 15) all_sprites_list.add(player) done=false clock=pygame.time.clock() # 텍스트폰트생성 font = pygame.font.font(none, 36) score = 0 level = 1 순천향대학교컴퓨터공학과 25 while done==false: for event in pygame.event.get(): t() if event.type == pygame.quit: done=true screen.fill(white) # 현재마우스위치를플레이어블록의위치로지정 pos = pygame.mouse.get_pos() player.rect.x=pos[0] player.rect.y=pos[1] # 플레이어블록과충돌하는블록조사 blocks_hit_list = pygame.sprite.spritecollide(player, block_list, True) # 충돌된블록수조사하여점수조정 if len(blocks_hit_list) > 0: score +=len(blocks_hit_list) # 모든블록을수집했으면레벨상승 if len(block_list) == 0: level += 1 블록수집코드 블록이동 (3) # 레벨에따라새로운블록추가 for i in range(level l * 10): # 그룹내스프라이트 update() 메소드호출 # 이동속도는레벨값으로지정 block_list.update(level) # 블록들의위치를랜덤생성 block.rect.x = random.randrange(screen_width) block.rect.y = random.randrange(screen_height) # 스프라이트그룹에블록객체추가 block_list.add(block) all_sprites_list.add(block) clock.tick(20) pygame.display.flip() pygame.quit() # 모든스프라이트그리기 all_sprites_list.draw(screen) # 점수및레벨텍스트표시 text=font.render("score: "+str(score), True, black) screen.blit(text, [10, 10]) text=font.render("level: "+str(level), True, black) screen.blit(text, [10, 40]) 순천향대학교컴퓨터공학과 26

시험주행 순천향대학교컴퓨터공학과 27 과제 1. 앞에서소개된블록수집프로그램을작성하고실행 2. 앞에서배운내용을사용한임의의프로그램작성 프로그램설명 프로그램소스 실행결과 순천향대학교컴퓨터공학과 28