교수님께서 중간고사 대체과제로 축구게임을 만들어오라고 하셨습니다.
터틀그래픽을 사용하였고 구글링하여 이미지도 gif형식으로 넣었습니다.
조건은 다음과 같습니다.
-사용자가 총 5번 공을 차서, 3번이상 성공하면 승리
-5번 공을 차면 화면에 승/패 결과를 보여주고 종료
-키커(=사용자): 키보드 l,r,c버튼으로 공을 왼쪽, 가운데, 오른쪽으로 참
-골키퍼: 랜덤으로 왼쪽, 가운데, 오른쪽으로 결정하여 뛰기
-시작화면: 사용자에게 입력할 버튼에 대해 설명
-키커가 공을 차는 방향으로 공 위치 표현
-골키퍼는 랜덤으로 정해진 방향에 따라 적절한 그림을 사용하여 표현
-최종화면: 5회의 승부차기가 끝나면 최종 결과 보여주기, 볼 것인지 말 것인지 물어본 후 대답에 따라 결과 출력
제 코드는 다음과 같습니다.
import turtle
import random
def ballMove(x):
ball.shape(ball_img)
ball.penup()
ball.goto(x,200)
ball.pendown()
ball.stamp()
def add_img(x):
keeper.shape(x)
keeper.stamp()
keeper.reset()
def penUpDown(x,y):
score.penup()
score.goto(x,y)
score.pendown()
def penUpDownT(x,y):
t.penup()
t.goto(x,y)
t.pendown()
t=turtle.Turtle()
screen=turtle.Screen()
user=turtle.Turtle()
bg=turtle.Screen()
score=turtle.Turtle()
scoreO=0
scoreX=0
for i in range(0,5,1):
keeper=turtle.Turtle()
ball=turtle.Turtle()
ball.speed(1)
bg.setup(600.600)
bg.bgpic("image\\background.gif")
bg.update()
user=turtle.textinput("승부차기 게임","왼쪽은 'l'/ 오론쪽은 'r'/ 중앙은 'c'를 입력하세요")
left_img = "image\\left1.gif"
right_img = "image\\right1.gif"
center_img = "image\\center1.gif"
ball_img = "image\\ball.gif"
screen.addshape(left_img)
screen.addshape(right_img)
screen.addshape(center_img)
screen.addshape(ball_img)
com=random.randint(1,3)
if user=="l": #공 왼쪽
if com==1: #막음
add_img(left_img)
scoreX=scoreX+1
elif com==2: #못막음
add_img(right_img)
scoreO=scoreO+1
elif com==3: #못막음
add_img(center_img)
scoreO=scoreO+1
ballMove(-200)
if user=="r": #공 오른쪽
if com==1: #못막음
add_img(left_img)
scoreO=scoreO+1
elif com==2: #막음
add_img(right_img)
scoreX=scoreX+1
elif com==3: #못막음
add_img(center_img)
scoreO=scoreO+1
ballMove(200)
if user=="c": #공 중앙
if com==1: #못막음 O
add_img(left_img)
scoreO=scoreO+1
elif com==2: #못막음 O
add_img(right_img)
scoreO=scoreO+1
elif com==3: #막음 X
add_img(center_img)
scoreX=scoreX+1
ballMove(0)
screen.clear()
score.color("red")
penUpDown(180,200)
score.write("승부차기 성공횟수:"+str(scoreO))
penUpDown(180,185)
score.write("O"*scoreO)
score.color("blue")
penUpDown(180,170)
score.write("승부차기 실패횟수:"+str(scoreX))
penUpDown(180,155)
score.write("X"*scoreX)
score.color("black")
penUpDown(180,140)
score.write(str(i+1)+"라운드 입니다.")
user=turtle.numinput("게임 종료","결과를 보시겠습니까? (예:1 아니오:0)")
screen.clear()
if user==1:
if scoreO>=3:
t.color("purple")
penUpDownT(-90,0)
t.write("YOU WIN !! 승부차기 게임에서 승리했습니다!\n결과는 다음과 같습니다\n")
t.write("승부차기 성공횟수:"+str(scoreO),"\n")
t.write(" 승부차기 실패횟수:"+str(scoreX),"\n")
else:
t.color("purple")
penUpDownT(-90,0)
t.write("YOU LOSE !! 승부차기 게임에서 패배했습니다.")
t.write("승부차기 성공횟수:"+str(scoreO),"\n")
t.write(" 승부차기 실패횟수:"+str(scoreX),"\n")
elif user==0:
t.color("green")
penUpDownT(-50,0)
t.write("게임을 종료합니다.")
시작화면입니다.
화면에서 l키를 입력했을 때
화면에서 c키를 입력했을 때
종료화면입니다. 5회를 끝낸 후 결과를 보고싶으면 1 아니면 0을 선택하는 문구가 나오는데 사진은 0을 선택하여 바로 게임이 종료된 모습입니다.
오류 해결 부분:
5번 for 반복문을 사용하는 과정에서 한번 반복 후 공이 다시 화면에 나타나지 않는다는 오류가 발생하였습니다. 오류를 해결하기 위해 코드를 최소화하여 수십번 파이썬 new file에서 연습해보았고 그 결과 keeper=turtle.Turtle과 screen=turtle.Screen이 for반복문 안에 있어야된다는 것을 알게되었습니다. 처음에 코딩할 때는 저 부분을 for반복문 밖으로 빼놨었는데 그렇게 되면 for반복문이 돌면서 키퍼와 터틀의 객체가 제대로 선언되지 못하기 때문이였습니다. 다행히 여러번의 시행착오끝에 오류를 해결하여 제출 할 수 있었습니다.
'프로그래밍 > python' 카테고리의 다른 글
[동아리/파이썬/20.04.24] 3주차 파이썬 프로그래밍 (0) | 2020.06.28 |
---|---|
[동아리/파이썬/20.04.17] 2주차 파이썬 프로그래밍 (0) | 2020.06.28 |
[동아리/파이썬/20.04.10] 1주차 파이썬 프로그래밍 (0) | 2020.06.28 |
[동아리/파이썬/20.06.26] 워드클라우드 (2) | 2020.06.28 |
[학교/파이썬프로젝트/20.06.12] 기말과제 (0) | 2020.06.28 |