티스토리 뷰

반응형

 

youtu.be/hQ77mi_liZs

모든 강의 자료 : www.codingnow.co.kr/

파이썬 pygame을 사용하여 간단한 게임 만들기 프로젝트를 진행중입니다.

게임을 만들어 보면서 지루 할 수 있는 프로그래밍을 재미있게 공부합니다.

 

이번에는 주사위 던지기 게임입니다.

 

여기서는 기본적으로 조건문과 반복문, 함수를 사용하게 되며

 class 를 사용하여 중복되는 코드를 간결화 및 재사용 법을 공부할 수 있습니다.

 

또한 프로그래밍의 흐름을 파악하고 연습 할 수 있습니다.

 

자세한 설명은 첨부된 동영상을 참고해주세요!!

 

 

이미지 출처 :  https://pixabay.com/

1.png
0.14MB
2.png
0.15MB
3.png
0.16MB
4.png
0.15MB
5.png
0.16MB
6.png
0.16MB
bg.png
0.10MB

 
import pygame
from pygame.locals import *
import random

pygame.init()
pygame.display.set_caption("codingnow.co.kr")
###################################################################################
def eventProcess():
    global isClick, isActive
    for event in pygame.event.get():
        if (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE)\
                or event.type == QUIT:
            isActive = False
        if (event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE):
            if isClick == 0:
                isClick = 1
###################################################################################
def clickProcess():
    global isClick, diceCurr, yCurr
    if isClick == 1:  # space bar & 위로 던질때
        yCurr -= 1
        if yCurr <= ThrowEndY:
            isClick = 2
    elif isClick == 2:  # 떨어질때
        yCurr += 1
        if yCurr >= ThrowStartY:  # 바닥에 내려왔을때
            isClick = 0
    else:  # 완료 및 아무것도 안할때
        setText()
        yCurr = ThrowStartY
        dices[diceCurr].rotate(angle=0)
    if isClick:  # 던져지고 있을때
        diceCurr = random.randint(0, len(dices)-1)
        dices[diceCurr].y = yCurr
        dices[diceCurr].rotate()
    dices[diceCurr].draw()
###################################################################################
def setText():
    mFont = pygame.font.SysFont("arial", 40)
    mtext = mFont.render(f'Press the space', True, 'white')
    tRec = mtext.get_rect()
    tRec.centerx = SCREEN_WIDTH/2
    tRec.centery = tRec.height + 40
    screen.blit(mtext, tRec)
###################################################################################
class Dice():
    def __init__(self, idx, y):
        self.image = pygame.image.load(f"{idx}.png")
        self.image = pygame.transform.scale(self.image, (80, 80))
        self.x = SCREEN_WIDTH/2-(self.image.get_width()/2)
        self.y = y
        self.angle = 0
        self.rotated_image = pygame.transform.rotate(self.image, self.angle)

    def rotate(self, angle=None):
        if angle != None:
            self.angle = 0
        else:
            self.angle = random.randint(0, 360)
        self.rotated_image = pygame.transform.rotate(self.image, self.angle)

    def draw(self):
        screen.blit(self.rotated_image, (self.x, self.y))
###################################################################################
isClick = False
isActive = True
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 400
ThrowStartY = SCREEN_HEIGHT - 150

ThrowEndY = 100
yCurr = SCREEN_HEIGHT/2
diceCurr = 0

clock = pygame.time.Clock()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

bg = pygame.image.load('bg.png')
bg = pygame.transform.scale(bg, (SCREEN_WIDTH, SCREEN_HEIGHT))

dices = [Dice(i, ThrowStartY) for i in range(1, 6+1)]

while(isActive):
    screen.fill((255, 255, 255))
    screen.blit(bg, (10, 0))
    eventProcess()
    clickProcess()
    pygame.display.update()
    clock.tick(200)
반응형