파이썬(PYTHON)/교육

[파이썬(Python)] 영재 교육 4 (마지막 차시)

Hana_h 2022. 10. 13. 22:26

지도안


악당 거북이 설정
import turtle

scr = turtle.Screen()
scr.setup(700,700)
scr.title("Turtle Run!")
scr.bgcolor("orange")

b = turtle.Turtle()
b.speed(0)
b.penup()
b.goto(-300,-300)
b.pendown()

for i in range(4) : 
    b.hideturtle()
    b.forward(600)
    b.left(90)

t = turtle.Turtle() 
t.shape("turtle")
t.color("white")
t.penup()


bt = turtle.Turtle()   #악당 거북이!!!!!!!!!!!!!!!!!!!!!!
bt.shape("turtle")
bt.color("red")
bt.up()
bt.goto(0,200)



def turn_right():
    t.setheading(0)
    
def turn_up():              
    t.setheading(90)

def turn_left():                
    t.setheading(180)

def turn_down():              
    t.setheading(270)           
   

def play():
    while True :
        t.forward(10)
        ang = bt.towards(t.pos())#악당 거북이를 기준으로 주인공 거북이를 향한 각도 / t.pos() - 거북이의 위치
        bt.setheading(ang) #악당이 주인공 보게
        bt.forward(9)#악당이 움직이게
        
        if t.xcor() <= -300 or t.xcor() >= 300 :
            t.right(180)
        if t.ycor() <= -300 or t.ycor() >= 300 :
            t.right(180)

        if t.distance(bt) < 10 : #주인공과 악당 거북이가 닿았다면
            break

scr.onkey(turn_right,"Right")
scr.onkey(turn_left,"Left")
scr.onkey(turn_up,"Up")
scr.onkey(turn_down,"Down")
scr.listen()

play()

random 모듈 설명
import turtle
import random

t = turtle.Turtle()
t.shape("turtle")

while True:
    t.setheading(random.randint(0,359))
    t.forward(50)

먹이 아이템 설정
import turtle
import random #2. 모듈 불러오기


scr = turtle.Screen()
scr.setup(700,700)
scr.title("Turtle Run!")
scr.bgcolor("orange")

b = turtle.Turtle()
b.speed(0)
b.color("orange")
b.penup()
b.goto(-300,-300)
b.pendown()

for i in range(4) : 
    b.hideturtle()
    b.forward(600)
    b.left(90)

t = turtle.Turtle() 
t.shape("turtle")
t.color("white")
t.penup()

bt = turtle.Turtle()   
bt.shape("turtle")
bt.color("red")
bt.up()
bt.goto(0,200)

#1.먹이 만들기
food = turtle.Turtle()
food.speed(0)
food.shape("circle")
food.color("green")
food.up()
food.goto(random.randint(-250, 250), random.randint(-250, 250))


def turn_right():
    t.setheading(0)
    
def turn_up():              
    t.setheading(90)

def turn_left():                
    t.setheading(180)

def turn_down():              
    t.setheading(270)           
   

def play():
    while True :
        t.forward(10)
        ang = bt.towards(t.pos())
        bt.setheading(ang) 
        bt.forward(9)
        
        if t.xcor() <= -300 or t.xcor() >= 300 :
            t.right(180)
        if t.ycor() <= -300 or t.ycor() >= 300 :
            t.right(180)

        if t.distance(food) <10 : #3. 먹이랑 닿았다면
            food.goto(random.randint(-250, 250), random.randint(-250, 250)) #3. 먹이 이동

        if t.distance(bt) < 10 :
            break


scr.onkey(turn_right,"Right")
scr.onkey(turn_left,"Left")
scr.onkey(turn_up,"Up")
scr.onkey(turn_down,"Down")
scr.listen()


play()

완성!
import turtle
import random

##2. 게임 중, 대기 중
playing = False #현재 게임이 플레이 중인지 확인하는 변수

##3. 점수
score = 0

scr = turtle.Screen()
scr.setup(500,500)
scr.title("Turtle Run!")
scr.bgcolor("orange")

t = turtle.Turtle()
t.shape("turtle")
t.color("white")
t.speed(0)
t.up()
t.goto(0,0)
 
bt = turtle.Turtle()
bt.shape("turtle")
bt.color("red")
bt.speed(0)
bt.up()
bt.goto(0,200)

food = turtle.Turtle()
food.shape("circle")
food.color("green")
food.speed(0)
food.up()
food.goto(random.randint(-250, 250), random.randint(-250, 250))

def turn_right():                # 오른쪽으로 방향을 바꿉니다.
    t.setheading(0)

def turn_up():                   # 위로 방향을 바꿉니다.
    t.setheading(90)

def turn_left():                 # 왼쪽으로 방향을 바꿉니다.
    t.setheading(180)

def turn_down():                 # 아래로 방향을 바꿉니다.
    t.setheading(270)

##2. 게임 중, 대기 중 - 게임을 시작하는 함수
def start() :
    global playing
    if playing == False:
        playing = True
        t.clear() #화면에 떠있던 메시지 삭제
        play()

def play():
    global score ##3. 점수
    while True : 
        t.forward(10)
        ang = bt.towards(t.pos()) 
        bt.setheading(ang)
        bt.forward(5)
        
        if t.xcor() <= -250 or t.xcor() >= 250 :
            t.right(180)
        if t.ycor() <= -250 or t.ycor() >= 250 :
            t.right(180)
            
        if t.distance(food) <10 :
            food.goto(random.randint(-250, 250), random.randint(-250, 250))
            score += 1 ##3. 점수
            
        if t.distance(bt) < 10 :
            ##3. 점수
            text = "Score : " + str(score)
            message("Game over", text)
            break

##1. 초기 화면 설정
def message(m1, m2) :
    t.clear()
    t.goto(0,100)
    t.write(m1, align="center", font = 20)
    t.goto(0,-100)
    t.write(m2, align="center", font = 20)
    t.home() #원상복구

scr.onkey(turn_right,"Right")
scr.onkey(turn_left,"Left")
scr.onkey(turn_up,"Up")
scr.onkey(turn_down,"Down")
scr.onkey(start,"space") ##2. 시작하기
scr.listen()

message("Turtle Run", "[Space]")

오늘이 마지막 영재 수업이었다.

무조건 완성을 해야 해서 걱정했는데 다행히 시간이 딱 맞았다.확실히 4번째라 오늘은 오류가 많이 없었다!

이전에 배웠던 부분에서는 아예 없었고(있었는데 스스로 고쳤을 수도 있다.. 더 좋은 일!),
오늘 새롭게 배운 부분에서만 약간의(?) 오류가 났다.

1. random 모듈 불러오기(import random)

random.randint()를 사용하기 위해 random 모듈을 불러와야 한다고 ai처럼 계속 반복해서 이야기 했음에도 놓치고 오류가 난다고 하는 학생들이 꽤나 많았다.
이제 배울 만큼 배웠다고 생각하는지 스스로 이것저것 고치다가 놓치는 경우가 많아졌다.

2. random.randint(n1,n2)randint의 스펠링을 아주 우수수 틀렸다.
ramdint, randit, radit 등등.. 다양하게도 틀리더라.
처음 보는 영어라서 그런지 오류를 스스로 잡아내질 못했다.

3. 변수 선언코드 윗부분에서 playing과 score 변수를 선언한 후 밑의 메서드에서 사용해야 하는데,
그 부분을 놓친 학생들이 꽤나 많았다.

**
오류 난 학생들을 봐주는 동안, 해결됐거나 오류가 나지 않은 학생들은 코드를 조금씩 수정해보도록 했다.
색이나 모양, 거북이의 속도 등을 다양하게 조절해 보도록 했더니 꽤 잘 변형하는 모습이었다.
마지막으로 자신이 수정한 것을 반영한 파일을 패들릿으로 올리도록 했다.
4일, 총 12차시를 지도하는 동안 많은 오류를 보고 해결해주면서 나도 많이 성장할 수 있었다.
기본 문법에 대한 이해도도 높아졌다.