Turtle Game 7 - 벌레를 먹을때마다 점수 올리기 > Turtle 모듈로 게임 만들기

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

Turtle 모듈로 게임 만들기

Turtle Game 7 - 벌레를 먹을때마다 점수 올리기

페이지정보

글쓴이 관리자 조회 39,045 조회 날짜 19-06-21 16:04 / Update:19-06-22 03:42
댓글 0 댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

내용

Turtle Game 7 - 벌레를 먹을때마다 점수 올리기

 

앞서서 거북이가 벌레를 먹는 것을 구현하였다.

 

이번에는 거북이가 벌레를 먹었을 때, 점수를 표시해보도록 한다.

 

 

1. 점수 구현하기

 

울타리를 그릴 때,  mypen 객체를 사용하였다. 울타리를 그리고 난 뒤, 놀고 있는 mypen 객체를 이용하여 점수를 입력해본다.

 

Turtle() 객체는 write 메서드가 있다. 말 그대로 글자를 쓸 수 있는 메서드이다.

 

아래의 함수를 만들어서 점수를 표시해보도록 하자.

거북이의 점수 score는 score = 0으로 초기화 한다.

 

점수 표시 코드

socre = 0

 

def setScore(score): 

    #mypne의 이전 행동을 되돌린다. 반복적으로 write를 할때, 겹쳐서 쓰는 것을 방지한다.
    mypen.undo()

    #mypen 객체의 위치가 어디에 있던 점수를 표시하기 위한 좌표까지 이동시, 선을 그리지 않게 한다.
    mypen.penup()

    #mypen 객체의 shape는 보이지 않아야 한다. 숨김 변경
    mypen.hideturtle()

    #점수를 표시하기 위한 위치로 이동, 울타리의 왼쪽 위 정도로 정한다.
    mypen.setposition(-290, 310)

    #점수 표시 형태, socre는 인자로 받아온 값이다. 
    scorestring = "Score: %s" % score

    #mypen이 있는 위치에서 글자를 표시한다.
    mypen.write(scorestring, False, align="left", font=("Arial", 14, "normal"))   

 

 

 

2. 충돌 확인 함수 작성

 

앞선 강좌에서 거북이와 벌레의 충돌을 계산하는 아래의 식을 만들어서 for 구문 안에 넣었었다.

 

#거북이와 벌레 거리 구하는 식

d = math.sqrt( math.pow(p.xcor() - bugs[count].xcor(), 2) + math.pow(p.ycor() - bugs[count].ycor(), 2))

 

편의를 위해 충돌 함수를 만들어서 사용하도록 한다.

 

충돌함수 코드

def isCollision(t1, t2):
    #수학식에서 두 점 사이의 거리
    d = math.sqrt( math.pow(t1.xcor() - t2.xcor(), 2) + math.pow(t1.ycor() - t2.ycor(), 2))
     
    if d < 20:
        return True
    else:
        return False

 

 

 

 

전체코드

# 충돌여부를 함수를 이용하여 확인하고, 충돌이 인정되면 벌레를 이동시키고 점수를 올려준다.

import turtle as t
import random
import math

 

#스크린 객체 생성
screen = t.Screen()
#스크린 배경색 지정
screen.bgcolor("lightgreen")
screen.tracer(2)

 

#울타리 그리기
mypen = t.Turtle()
mypen.penup()
mypen.setposition(-300, 300)
mypen.pendown()
mypen.pensize(3)

 

for x in range(4):
    mypen.forward(600)
    mypen.right(90)


mypen.hideturtle()


#Create bugs 
maxBugs = 20
bugs = []
colors = ['red','blue','purple','white','black', 'pink'
,'#FFFF00']
shapes = ['arrow', 'blank', 'circle', 'classic', 'square', 'triangle']

 

for count in range(maxBugs):
    c = random.randint(0,6)
    s = random.randint(0,5)
    bugs.append(t.Turtle())
    bugs[count].color(colors[c])
    bugs[count].shape(shapes[s])
    bugs[count].penup()
    bugs[count].speed(0)
    bugs[count].setposition(random.randint(-300, 300), random.randint(-300, 300))
    bugs[count].right(random.randint(0,360))


#Turtle 객체 p 생성
p = t.Turtle()
#p 객체의 모양을 거북이로 만들기
p.shape("turtle")
#p 객체 크기 설정
p.turtlesize(2,2)
#p 객체 색상 설정, 
#색상은 색상 이름 또는 색상 코드(#FFFFFF) 등을 이용하여 설정 할 수 있다.
p.color("blue")
#거북이를 따라다니는 선을 제거
#p.penup()

#거북이의 움직임 속도
speed = 1

 

#거북이 점수
score = 0


def turnleft():
    p.left(30)

 

def turnright():
    p.right(30)

 

def increasespeed():
    global speed
    speed += 1

 

def decreasespeed():
    global speed
    speed -= 1

 

#점수 입력 함수
def setScore(score): 
    mypen.undo()
    mypen.penup()
    mypen.hideturtle()
    mypen.setposition(-290, 310)
    scorestring = "Score: %s" % score
    mypen.write(scorestring, False, align="left", font=("Arial", 14, "normal"))   

 
#충돌 확인 함수   
def isCollision(t1, t2):
    #수학식에서 두 점 사이의 거리
    d = math.sqrt( math.pow(t1.xcor() - t2.xcor(), 2) + math.pow(t1.ycor() - t2.ycor(), 2))
     
    if d < 20:
        return True
    else:
        return False


screen.listen()
screen.onkey(turnleft, "Left")
screen.onkey(turnright, "Right")
screen.onkey(increasespeed, "Up")
screen.onkey(decreasespeed, "Down")


while True:
    p.forward(speed)
    
    #울타리 체크
    if p.xcor() > 300 or p.xcor() < -300:
        p.right(180)
    
    if p.ycor() > 300 or p.ycor() < -300:
        p.right(180)
        
    
    #다수의 벌레 움직이기
    for count in range(maxBugs):        
        
        bugs[count].forward(5)
    
        #울타리 체크
        if bugs[count].xcor() > 300 or bugs[count].xcor() < -300:
            bugs[count].right(180)
            #soundBounce()
            
        
        if bugs[count].ycor() > 300 or bugs[count].ycor() < -300:
            bugs[count].right(180)    
   

        if isCollision(p, bugs[count]):
            #벌레가 먹히면 색상, 모양 변경후 다른 곳으로 이동
            bugs[count].setposition(random.randint(-300, 300), random.randint(-300, 300))
            bugs[count].right(random.randint(0,360))
            s = random.randint(0,5)
            c = random.randint(0,6)
            bugs[count].shape(shapes[s])        
            bugs[count].color(colors[c])
            
            #벌레를 먹었을 때, 점수 1 추가
            score += 1
            
            #점수를 표시
            setScore(score)

            
 

 

 

1269734546_1561156306.2005.png

 

 

 

Turtle Game 7 - 벌레를 먹을때마다 점수 올리기 끝 

댓글목록 sfs

총 9 건 , 1 페이지
게시물 검색
Turtle 모듈로 게임 만들기 목록
번호 제목 글쓴이 조회 날짜
1 관리자 49242 06-18
2 관리자 45505 06-19
3 관리자 38002 06-19
4 관리자 35908 06-19
5 관리자 34014 06-21
6 관리자 34512 06-21
열람중 관리자 39046 06-21
8 관리자 36982 06-21
9 관리자 30503 06-21
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.