오늘은 지난 시간에 배웠던 거의 모든 내용을 담아 복습해보는 시간을 가져보겠습니다.
내용이 조금 어려울 수 있으니 집중! 집중스~ 잘 모르는 부분은 전 포스팅을 살짝 보셔요^^
마음은 당장 사진처럼 갤러그 같은 게임을 만들어보고 싶지만, 아직까지 배운 내용으로는 어렵습니다. 하지만!
적들인 비행물체가 움직이는 로직은 지금까지 배운 내용으로도 어느 정도는 비슷하게 구현해볼 수 있습니다~!
오른쪽으로 가는 방향이 X축, 아래로 가는 방향이 Y축이 더해진다는 가정으로 한번 해볼까요? 그럼 렛 코딩~
enemy_high1 = {
'id' : 1,
'name' : 'high',
'x' : 3,
'y' : 0,
'speed' : 1,
}
enemy_high2 = {
'id' : 2,
'name' : 'high',
'x' : 4,
'y' : 0,
'speed' : 1,
}
enemy_high3 = {
'id' : 3,
'name' : 'high',
'x' : 5,
'y' : 0,
'speed' : 1,
}
enemy_high4 = {
'id' : 4,
'name' : 'high',
'x' : 6,
'y' : 0,
'speed' : 1,
}
enemies = [enemy_high1, enemy_high2, enemy_high3, enemy_high4 ]
for enemy in enemies:
print( enemy )
for enemy in enemies:
enemy['x'] += enemy['speed']
print( '----------------------------------------------------------------------' )
for enemy in enemies:
print( enemy )
하단을 기준으로 가장 높은 위치에 있는 보스 4개의 비행체 변수를 만들었습니다. 각각의 데이터에는 아이디, 이름, x와 y좌표 그리고 속도가 있습니다. 4개의 딕셔너리(객체) 데이터를 다시 enemies라는 리스트 배열 변수에 넣었습니다. 이제 적들의 데이터가 전부 들어있는 리스트를 반복문 for안에 넣고 비행체의 속도만큼 x좌표값에 더해줍니다. 하지만 오른쪽으로 계속 이동하다 보면 결국 화면 밖으로 나가버리니, 한 칸 아래로 이동한 다음 다시 왼쪽으로 가야 합니다.
# 코드 생략
---
for enemy in enemies:
enemy['x'] += (enemy['speed'] * 4) # 4번 이동 (4프레임)
# 만약 오른쪽 화면 끝이면 좌표 변경
if enemy['x'] >= 10:
enemy['x'] = 9
enemy['y'] = 1
print( '----------------------------------------------------------------------' )
for enemy in enemies:
print( enemy )
상단 부분 코드는 같기 때문에 생략하고 비행체를 이동시키는 부분의 스피드에 4를 곱해줬습니다. 간단하게 화면이 4번(프레임) 움직였다고 생각하시면 됩니다. 이번에는 for 반복문안에 if 조건문으로 오른쪽 끝인 x좌표가 10 이상이면, y좌표에 더하기 1을 해줘 아래로 한 칸 이동하고 x좌표는 오른쪽 마지막 좌표인 9로 고정해줍니다. 다소 어려울 수 있으니 첨부한 이미지를 보면서 생각해보시면 좋습니다. 다음은 화면 중간쯤의 빨간색 비행체 데이터를 만들 차례입니다.
가장 상단의 4개의 비행체는 각각 4개의 딕셔너리 변수로 코딩을 했습니다. 하지만 중간의 빨간색 비행체는 총 16개가 존재하기 때문에, 이걸 하드하게 16번 코딩하기에는 프로그래밍을 하는 우리들 입장에서 너무 무식해 보입니다...
이럴 때일수록 반복문을 잘 활용하면 16개의 데이터만이 아닌 16만 개 아니! 16억 개도 가능합니다! 컴퓨터 터짐
# 코드 생략
---
for number in range(16):
if number < 8:
enemies.append({
'id' : 5 + number,
'name' : 'mid',
'x' : 1 + number,
'y' : 1,
'speed' : 1,
})
else:
enemies.append({
'id' : 5 + number,
'name' : 'mid',
'x' : 1 + number - 8,
'y' : 2,
'speed' : 1,
})
for enemy in enemies:
print( enemy )
print( '----------------------------------------------------------------------' )
이번에도 상단 부분 코드는 같고 추가된 부분은 for 반복문안에 range() 함수를 사용한 곳입니다. 이번에 처음 사용하는 range() 함수는 내가 원하는 만큼 반복문을 돌릴 수 있고, 변수명을 지정해서 반복문이 돌아가는 카운트 숫자도 이용할 수 있습니다. 이번에는 number라는 변수명을 사용했는데 카운드는 1이 아닌 0부터 시작하니 주위가 필요합니다.
이미지를 보면 빨간색 비행체가 8개씩 두 줄이 있습니다. 그렇기 때문에 16번의 반복문의 카운트가 8을 넘어가면 y좌표를 한 칸 내리고 x좌표는 다시 계산해줬습니다. 처음에 사용했던 적들의 리스트 데이터 enemies에 append() 함수로 추가를 해주면, 가장 상단의 비행체와 중간의 빨간 비행체까지 대략적인 데이터들의 추가가 확인 가능합니다.
그럼 마지막 가장 하단의 파란색 비행체는 어떻게 넣어야 할까요? 당연히~
숙제입니다!
절대 귀찮아서 아님
댓글