파이썬 텍스트 코딩 기본 분야
작품을 만든 의도
파이 게임 모듈을 배워보다가 재밌는 게임을 만들어 보고 싶었습니다.
그 중 구글 공룡게임이 떠오르게 되었고 그와 비슷하게 게임을 만들게 되었습니다.
2. 스토리
쌓여 있는 고철 더미 속에서 깨어난 로봇 '이온' , 그는 자신을 폐기하려는 산업용 로봇 '셔터봇' 의 가시를 피해 달리고, 또 달린다.
달리고 달리다 보니 쌓이는 에너지, 에너지를 모아 '셔터봇'을 파괴하자.
3. 작동방법
시작화면이라면 스페이스 키를 누릅니다.
스페이스 키를 누르면 점프합니다.
점프해서 가시들을 피합니다.
가시에 닿으면 처음부터 다시 시작합니다.
최고 기록을 세우면 bestScore에 기록됩니다.
score가 500을 넘으면 boss전을 시작합니다.
파란 색 에너지 바(파란 칸)가 차있을 때, 엔터(리턴) 키를 누르면 레이저가 발사됩니다.
레이저는 가시를 파괴합니다.
레이저를 boss(셔터봇)에게 맞추면 boss의 체력(빨간 칸)가 줄어듭니다.
boss의 체력이 다 줄어들면 성공합니다.
def loading():
image = pygame.image.load('startImage.png')
image = pygame.transform.scale(image, (width, height))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
return;
screen.blit(image, (0, 0))
pygame.display.update()
def drawEnemies():
for enemy in enemies:
enemy['rect'].x -= speed
screen.blit(enemy['image'], enemy['rect'])
if enemy['rect'].left < -100:
enemies.remove(enemy)
enemy = random.randint(1, 6)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN:
if not energyHeight == 0:
beem = pygame.Rect(robotRect.centerx - 10, robotRect.centery - 50, 100, 100)
beems.append(beem)
energyHeight -= 2
energyBar = pygame.Rect(10, 210 - energyHeight, 40, energyHeight)
keyInput = pygame.key.get_pressed()
if keyInput[pygame.K_SPACE]:
isJump = True
pygame.mixer.music.play(1, 0)
if isJump:
if jumpStep >= -7:
robotRect.top -= jumpStep * abs(jumpStep)
jumpStep -= 1
else:
isJump = False
jumpStep = 7
if speedPoint == 300:
speed += 2
speedPoint = 0
if energyCharge == 100:
if not energyHeight >= 400:
energyCharge = 0
energyHeight += 40
energyBar = pygame.Rect(10, 210-energyHeight, 40, energyHeight)
if energyHeight > 400:
energyHeight = 200
energyBar = pygame.Rect(10, 210 - energyHeight, 40, energyHeight)
for beem in beems:
if villain['rect'].colliderect(beem):
beems.remove(beem)
villain_hpBar.width -= 10
if villain_hpBar.width == 0:
win = True
for enemy in enemies:
if robotRect.collidepoint(enemy['rect'].centerx, enemy['rect'].centery):
enemies.remove(enemy)
if score > bestScore:
bestScore = score
speed = 18
score = 0
text2 = font2.render('bestScore : ' + str(bestScore), True, (255, 255, 255))
energyHeight = 0
energyBar = pygame.Rect(10, 210 - energyHeight, 40, energyHeight)
energyCharge = 0
villain_hpBar = pygame.Rect(90, 70, 500, 20)
loading()
for beem in beems:
if enemy['rect'].colliderect(beem):
enemies.remove(enemy)
beems.remove(beem)
backX -= speed
backX2 -= speed
if backX <= width * -1:
backX = width - 10
if backX2 <= width * -1:
backX2 = width - 10
if backX >= 0:
backX -= width - 10
backX2 -= width - 10
screen.blit(bgImage, (backX, 0))
screen.blit(bgImage, (backX2, 0))
drawEnemies()
if 0 <= imgCange < 15:
robot = robot1
elif 15 <= imgCange <= 30:
robot = robot2
elif 30 < imgCange:
imgCange = 0
screen.blit(robot, robotRect)
screen.blit(villain['image'], villain['rect'])
for beem in beems:
beem.x += 15
screen.blit(beemImage, beem)
if beem.right >= width:
beems.remove(beem)
플레이 동영상
재미있었던 부분 : 저만의 게임을 만들 수 있어 즐거웠습니다.
어려웠던 부분 : 오류가 생겼을 때 스스로 디버깅 하는 것이 힘들었고 원하는 기능을 어떻게 만들어야 할지 잘 몰라 힘들었습니다.