Download presentation
Presentation is loading. Please wait.
1
두근두근 파이썬 수업 7장 프로젝트 I
2
이번 장에서 만들 프로그램 (1) 거북이 경주 게임을 작성해본다. 난수를 이용하여야 한다.
(2) 간단한 애니메이션을 만들어본다
3
난수 발생하기 난수(random number)는 게임과 시뮬레이션에 필수적이 다.
>>> import random >>> random.random() # 0.0부터 1.0보다 작은 실수 난수 >>> random.randint(1, 100) # 1부터 100 사이의 정수 난수 49
4
리스트에서 랜덤하게 선택 >>> import random
>>> random.choice('abcdefghij') # 하나의 랜덤한 항목 'c'
5
터틀 그래픽 함수들
6
거북이 경주 게임 #1 거북이 2마리를 만들려면 다음과 같이 한다. import turtle
t1 = turtle.Turtle() # 첫 번째 거북이 t2 = turtle.Turtle() # 두 번째 거북이
7
거북이 경주 게임 #2 거북이들을 구별하기 위하여 색상을 다르게 하고 모양도 다르게 하자. t1.color("pink")
거북이들을 구별하기 위하여 색상을 다르게 하고 모양도 다르게 하자. t1.color("pink") t1.shape("turtle") t1.shapesize(5) t1.pensize(5) t2.color("blue") t2.shape("turtle") t2.pensize(5)
8
거북이 경주 게임 #3 출발점에 세우기 t1.penup() t1.goto(-300, 0) t2.penup()
(0, -500)
9
거북이 경주 게임 #4 100번 정도 반복하면서 한 번 반복할 때마다 난수만큼 이 동하도록 하자.
for i in range(100): # 100번 반복한다. d1 = random.randint(1, 60) # 1부터 60 사이의 난수를 발생한다. t1.forward(d1) # 난수만큼 이동한다. d2 = random.randint(1, 60) # 1부터 60 사이의 난수를 발생한다. t2.forward(d2) # 난수만큼 이동한다.
10
외부 이미지를 사용하자 import turtle # 터틀 그래픽 모듈을 불러온다.
import random # 난수 모듈을 불러온다. screen = turtle.Screen() image1 = "d:\\rabbit.gif" image2 = "d:\\turtle.gif" screen.addshape(image1) screen.addshape(image2) t1 = turtle.Turtle() # 첫 번째 거북이를 생성한다. t1.shape(image1) t2 = turtle.Turtle() # 두 번째 거북이를 생성한다. t2.shape(image2)
11
전체 소스 import turtle # 터틀 그래픽 모듈을 불러온다. import random # 난수 모듈을 불러온다.
screen = turtle.Screen() image1 = "d:\\rabbit.gif" image2 = "d:\\turtle.gif" screen.addshape(image1) screen.addshape(image2) t1 = turtle.Turtle() # 첫 번째 거북이를 생성한다. t1.shape(image1) t1.pensize(5) # 팬의 두께를 5로 한다. t1.penup() # 펜을 든다. t1.goto(-300, 0) # (-300, 0) 위치로 간다.
12
전체 소스 t2 = turtle.Turtle() # 두 번째 거북이를 생성한다. t2.shape(image2)
t2.pensize(5) # 팬의 두께를 5로 한다. t2.penup() # 펜을 든다. t2.goto(-300, -200) # (-300, -100) 위치로 간다. t1.pendown() # 첫 번째 거북이의 펜을 내린다. t2.pendown() # 첫 번째 거북이의 펜을 내린다. t1.speed(1) t2.speed(1)
13
전체 소스 for i in range(100): # 100번 반복한다.
d1 = random.randint(1, 60) # 1부터 60 사이의 난수를 발생한다. t1.forward(d1) # 난수만큼 이동한다. d2 = random.randint(1, 60) # 1부터 60 사이의 난수를 발생한다. t2.forward(d2)
14
애니메이션 만들기 애니메이션도 쉽게 제작할 수 있다. 다음과 같은 애니메 이션을 작성해보자. 여러분은 이 애니메이션을 자신의 홈 페이지에서 사용하거나 동영상 제작에도 사용할 수 있다.
15
태극 무늬 그리는 함수 def draw_shape(radius, color1): t.left(270) t.width(3)
t.color("black", color1) t.begin_fill() t.circle(radius/2.0, -180) t.circle(radius, 180) t.left(180) t.circle(-radius/2.0, -180) t.end_fill()
16
태극 무늬 그리는 함수 t= turtle.Turtle() t.reset() draw_shape(200, "red")
t.setheading(180) draw_shape(200, "blue")
17
애스터로이드 게임 우리의 우주선을 충돌시켜서 소행성을 파괴하는 게임인 애스터로이드를 제작하고자 한다. 우리의 우주선은 “거 북이“ 형태로 하자. 소행성은 ”원”으로 한다.
18
우리 우주선 만들기 import turtle import random import math
player = turtle.Turtle() player.color("blue") player.shape("turtle") player.penup() player.speed(0) screen = player.getscreen()
19
소행성 만들기 a1 = turtle.Turtle() a1.color("red") a1.shape("circle")
a1.penup() a1.speed(0) a1.goto(random.randint(-300, 300), random.randint(-300, 300)) a2 = turtle.Turtle() a2.color("red") a2.shape("circle") a2.penup() a2.speed(0) a2.goto(random.randint(-300, 300), random.randint(-300, 300))
20
이벤트 처리하기 def turnleft(): player.left(30) # 왼쪽으로 30도 회전한다.
def turnright(): player.right(30) # 오른쪽으로 30도 회전한다. screen.onkeypress(turnleft, "Left") screen.onkeypress(turnright, "Right") screen.listen()
21
이동하기 def play(): player.forward(2) # 2픽셀 전진 a1.forward(2)
screen.ontimer(play, 10) # 10ms가 지나면 play()를 다시 호출 screen.ontimer(play, 10)
22
앵그리 터틀 게임 만들기 앵그리 버드와 유사한 게임 “앵그리 터틀”을 제작하여 보 자. 공을 발사하여서 초기 속도와 초기 각도에 의하여 비 행하다가 목표물에 맞으면 성공이다.
23
많은 변수가 필요하다. int v; - 거북이의 속도이다. int vx; - 거북이의 x 방향 속도이다.
int vy; - 거북이의 y 방향 속도이다. int x; - 거북이의 현재 x좌표이다. int y; - 거북이의 현재 y좌표이다.
24
다음과 같이 가정하자. vx; 초기 속도에서 변하지 않는다. vy; 초기 속도에서 중력 가속도 만큼 점점 느려진다. vy vx
25
vx, vy의 계산 vx = vx vy = vy - 10
26
초기 속도 vx = velocity * math.cos(angle * 3.14 / 180.0)
vy = velocity * math.sin(angle * 3.14 / 180.0)
27
소스 코드 import turtle import math player = turtle.Turtle()
player.shape("turtle") screen = player.getscreen() def turnleft(): player.left(5) # 왼쪽으로 5도 회전 def turnright(): player.right(5) # 오른쪽으로 5도 회전
28
소스 코드 def fire(): x = 0 y = 0 velocity = 50 # 초기 속도 50픽셀/sec
angle = player.heading() # 초기 각도 vx = velocity * math.cos(angle * 3.14 / 180.0) # 도 -> 라디안 vy = velocity * math.sin(angle * 3.14 / 180.0) # 도 -> 라디안 while player.ycor() >= 0 : # y좌표가 음수가 될 때까지 vx = vx vy = vy - 10 x = x + vx y = y + vy player.goto(x, y) screen.onkeypress(turnleft, "Left") screen.onkeypress(turnright, "Right") screen.onkeypress(fire, "space") # 사용자가 스페이스키를 누르면 screen.listen()
Similar presentations