top of page

소스 코드 제출

공개·회원 63명

20260113

#임포트 받기

import pygame, sys

from pygame.locals import *

import random, time


'''

프로젝트 설명서 [ 포트폴리오 ]


I. 게임 방법


1)우주선을 ->,<-, 위쪽 화살표키를 활용해 움직임니다.

2)위쪽 하늘에서 우주선이 날아오면 스페이스바를 눌러 공격 할 수 있습니다.

3)스코어가 0이 되면 게임이 끝남니다. 제한시간은 1분 30초 이고 그 안에 점수

50을 넘으면 클리어 입니다.

II. 사용 문법


while -> 게임진행

pressedkeys -> 키를 눌렀을때(공격이나 특수 능력 사용시)

class -> 악당이나 플레이어 등을 정의하고 기능을 구현 할때

- 이외에도 있지만 대표적인 것만 작성하고 나머지는 생략하였습니다 -

III.추가 계획


start page, end page,

특수 능력(필살기 등..) 추가 및 버그 수정을 진행 할 계획 입니다.

이외에도 새로운 기능을 기획, 생각 중입니다.

'''



#필요한 색 정의


red = (255, 0, 0)

orange = (255, 153, 51)

yellow = (255, 255, 0)

green = (0, 255, 0)

blue = (0, 0, 255)

white = (255, 255, 255)

black = (0, 0, 0)


#타이머 1분 설정


pygame.init()

fps = 60

FramePerSec = pygame.time.Clock()


#폰트 정의


myfont = pygame.font.SysFont('@Times New Roman', 20)

WIDTH = 700

HEIGHT = 625


#배경 이름 및 배경 색 설정


screen = pygame.display.set_mode((WIDTH, HEIGHT))

pygame.display.set_caption("SPACE WAR_0")

background = pygame.image.load('location.png')

screen.fill(blue)


#변수

ren = random.randint(1, 2)

sp2=3

score=3

sp=5

change=0

spee=4

elapsed_time = pygame.time.get_ticks() / 1000


def game_intro() :

intro=True


while intro :


pressedKeys = pygame.key.get_pressed()

for event in pygame.event.get() :

if event.type == pygame.QUIT :

pygame.quit()

quit()

screen.blit(background, (0, 0))

pen = myfont.render("How to play",True,red)

pen1 = myfont.render("Use <-, -> to move",True,orange)

pen2 = myfont.render("press Spacebar yo attack enemies",True,orange)

pen3 = myfont.render("Press 's' to start and press 'k' to stop",True,orange)

pen4 = myfont.render("Made and designed by JunwooRhee( TMcoding Academy's Student ) ",True,orange)

screen.blit(pen, [10, 10])

screen.blit(pen1, [10, 40])

screen.blit(pen2, [10, 70])

screen.blit(pen3, [10, 100])

screen.blit(pen4, [10, 600])

pygame.display.update()

if pressedKeys[K_s] :

Game()




#클래스 모음




#1. 플레이어 우주선 클래스

class SpaceShip(pygame.sprite.Sprite) :

def __init__(self):


super().__init__()

self.image = pygame.image.load('spaceship.png')

self.rect = self.image.get_rect()

self.rect.center = (WIDTH//2, HEIGHT-self.rect.height//2-10)

self.sp = spee

def move(self):

global change

prssdKeys = pygame.key.get_pressed()

if self.rect.left > 30:


if prssdKeys[K_LEFT]:


self.rect.move_ip(-1 * self.sp, 0)

position_P = self.rect.center

return position_P

if self.rect.right < WIDTH-30:


if prssdKeys[K_RIGHT]:


self.rect.move_ip(self.sp, 0)

position_p = self.rect.center

return position_p

if self.rect.top > 400:


if prssdKeys[K_UP] :

self.rect.move_ip(0, -1 * self.sp)

position_p = self.rect.center

return position_p

if self.rect.bottom < 615:


if prssdKeys[K_DOWN] :

self.rect.move_ip(0, self.sp)

position_p = self.rect.center

return position_p

if pygame.time.get_ticks() / 1000 >= 30 :

print("ready to change!")

if prssdKeys[K_e]:

self.image = pygame.image.load('jet (1).png')

change=1

self.rect.size = (64, 64)

self.rect.move_ip(0, -3)

self.sp=3

#2. 적 우주선 클래스

class Enemy(pygame.sprite.Sprite) :


def __init__(self, sp2):


super().__init__()

self.image = pygame.image.load('spaceship (2).png')

self.rect = self.image.get_rect()

self.rect = self.rect.inflate(-20, -20)##

self.rect.center = (random.randint(40, 600), 0)

self.speed = sp2


def init_position(self):


self.rect.top = 0

self.rect.center = (random.randint(30, 610), 0)


def move(self):


global score

self.rect.move_ip(0, self.speed)

if (self.rect.bottom > 615):

self.init_position()

score -=2

return self.rect.center

#3. 적 우주선 클래스 2

class Enemy2(pygame.sprite.Sprite) :


def __init__(self, sp2):


super().__init__()

self.image = pygame.image.load('spaceship (3).png')

self.rect = self.image.get_rect()

self.rect = self.rect.inflate(-20, -20)##

self.rect.center = (random.randint(40, 600), 0)

self.speed = sp2


def init_position(self):

self.rect.top = 0

self.rect.center = (random.randint(30, 610), 0)


def move(self):


global score

self.rect.move_ip(0, self.speed)

if (self.rect.bottom > 615):

self.init_position()

score -=2

return self.rect.center

#4. 플레이어 우주선에서 발포되는 미사일 클래스

class Bomb(pygame.sprite.Sprite) :


def __init__(self):

super().__init__()

self.image = pygame.image.load('bomb4.png')

self.rect = self.image.get_rect()

self.rect = self.rect.inflate(-20, -20)##

self.rect.center = (WIDTH//2, HEIGHT-self.rect.height//2-10)

self.speed = sp


def init_posi(self):

self.rect.center = (-100,-100)


def move(self, space):

global change

prssdKeys = pygame.key.get_pressed()

self.rect.move_ip(0, -1 * self.speed)


if prssdKeys[K_SPACE] :

self.rect.move_ip(0, -1 * self.speed)

self.rect.top = 0

self.rect.center = space.rect.center

return self.rect.center



#각 클래스를 변수로 설정

S1 = SpaceShip() # 플레이어

E1 = Enemy(2)

E2=Enemy2(1)

B1 = Bomb()


#그룹 생성

Enemies = pygame.sprite.Group()

Enemies.add(E1, E2)

Bombs = []#미사일 중복 버그 고칠 예정


#또 변수

flag = 0

flag1 = 0



def Game() :

global score

global change

S1 = SpaceShip() # 플레이어

E1 = Enemy(2)

E2 = Enemy2(1)

B1 = Bomb()


# 그룹 생성

Enemies = pygame.sprite.Group()

Enemies.add(E1, E2)

Bombs = [] # 미사일 중복 버그 고칠 예정


# 또 변수

flag = 0

flag1 = 0


# 게임진행

# pk = pygame.key.get_pressed()

# while not pk[K_s]:

# screen.fill(white)

# gin = font.render(" to start, press the 'S'key and to stop at the middle of a game, press 'K'key" , True, black)

# screen.blit(gin, [30, 30])

# pygame.display.update()


while True:

# screen.fill(white) ########배경흰색으로칠하기


prssdKeys = pygame.key.get_pressed()

####### 아래 코드는 개발자용이므로 사용하면 안됩니다. 개발자용!!!!!!!!!!!!

#######->

if prssdKeys[K_k]:

E1.speed = 0

E2.speed = 0


if prssdKeys[K_l]:

E1.speed = 1

E2.speed = 1


if prssdKeys[K_j]:

E1.speed = -1

E2.speed = -1


for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()


screen.blit(background, (0, 0))

elapsed_time = pygame.time.get_ticks() / 1000

gwn = myfont.render("YOUR TIME : " + str(int(elapsed_time)) + "/70 ", True, black)

screen.blit(gwn, [495, 50])


if change == 1:

B1.image = pygame.image.load('nuclear-bomb.png')

B1.image = pygame.transform.scale(B1.image, (100, 100))

B1.rect.size = (64, 128)


if flag1 > 0: # flag1 = hit 할때마다 충전됨.

gen = myfont.render("-2 POINTS!", True, red)

screen.blit(gen, [170, 30])

flag1 -= 1


if flag > 0: # flag = hit 할때마다 충전됨.

gan = myfont.render("+1 POINTS! GREAT!", True, yellow)

screen.blit(gan, [170, 30])

flag -= 1


if elapsed_time >= 70:

if score >= 50:

running = False

screen.fill(blue)

gqn = myfont.render("YOU'VE DONE IT!!! YEAH!!! YOUR SCORE IS " + str(score), True, black)

screen.blit(gqn, [200, 300])

pygame.display.update()

time.sleep(5)

pygame.quit()


elif score < 50:

screen.fill(blue)

gqn = myfont.render("YOU FAILED!!! OOOOOOOOHH.. ", True, black)

screen.blit(gqn, [200, 300])

pygame.display.update()

time.sleep(5)

pygame.quit()


if score <= 0:

screen.fill(blue)

gqn = myfont.render("YOU FAILED!!! OOOOOOOOHH.. ", True, black)

screen.blit(gqn, [200, 300])

pygame.display.update()

time.sleep(5)

pygame.quit()


screen.blit(E1.image, E1.rect)


E1.move()


screen.blit(E2.image, E2.rect)

E2.move()


screen.blit(S1.image, S1.rect)

S1.move()


# space 눌리면 Bomb 객체 생성해서 Bombs에 추가

screen.blit(B1.image, B1.rect)

B1.move(S1)


# Enemies 그룹에 속한 애와 B1이 충돌했다면, 충돌한 애들을 iscollide에 저장

iscollide = pygame.sprite.spritecollide(B1, Enemies, False)


for x in iscollide:

flag = 50

x.init_position()

B1.init_posi()

score += 1

print(score)

iscollide = pygame.sprite.spritecollide(S1, Enemies, False)


for x in iscollide:

flag1 = 50

x.init_position()

score -= 2

print(score)


fen = myfont.render("YOUR SCORE :", True, green)

pin = myfont.render(str(score), True, green)


screen.blit(fen, [30, 30])

screen.blit(pin, [30, 50])

pygame.display.update()




game_intro()

2회 조회
주소 : 경기도 용인시 광교중앙로 302 블루 스퀘어 602호
연락처 : 031) 216 - 1546 ,     031) 215 - 1546
사업자등록번호 : 465-92-00916
​학원 등록 제 4603호
bottom of page