레이블이 파이썬인 게시물을 표시합니다. 모든 게시물 표시
레이블이 파이썬인 게시물을 표시합니다. 모든 게시물 표시

2025년 3월 12일 수요일

파이썬으로 만드는 조작 가능한 초급 액션 게임 - Pygame으로 배우는 실전 게임 개발



1. 파이썬 액션 게임 코드 (Pygame 기반)

아래는 pygame 라이브러리를 활용한 액션 게임 예제입니다. 플레이어가 버튼(키보드 입력)을 이용해 캐릭터를 움직이고 적을 회피하는 간단한 액션 메커니즘을 포함합니다.

코드:

import pygame

import random

# 초기화

pygame.init()

# 화면 설정

screen_width, screen_height = 800, 600

screen = pygame.display.set_mode((screen_width, screen_height))

pygame.display.set_caption("액션 게임")

clock = pygame.time.Clock()

# 색상

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

RED = (255, 0, 0)

BLUE = (0, 0, 255)

# 플레이어 설정

player_size = 50

player_pos = [screen_width // 2, screen_height - player_size * 2]

player_speed = 10

# 적 설정

enemy_size = 50

enemy_pos = [random.randint(0, screen_width - enemy_size), 0]

enemy_speed = 7

# 게임 루프

running = True

while running:

    screen.fill(WHITE)

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

    # 키 입력 처리

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and player_pos[0] > 0:

        player_pos[0] -= player_speed

    if keys[pygame.K_RIGHT] and player_pos[0] < screen_width - player_size:

        player_pos[0] += player_speed

    if keys[pygame.K_UP] and player_pos[1] > 0:

        player_pos[1] -= player_speed

    if keys[pygame.K_DOWN] and player_pos[1] < screen_height - player_size:

        player_pos[1] += player_speed

    # 적 이동

    enemy_pos[1] += enemy_speed

    if enemy_pos[1] > screen_height:

        enemy_pos[0] = random.randint(0, screen_width - enemy_size)

        enemy_pos[1] = 0

    # 충돌 처리

    if (enemy_pos[0] < player_pos[0] < enemy_pos[0] + enemy_size or enemy_pos[0] < player_pos[0] + player_size < enemy_pos[0] + enemy_size) and (enemy_pos[1] < player_pos[1] < enemy_pos[1] + enemy_size or enemy_pos[1] < player_pos[1] + player_size < enemy_pos[1] + enemy_size):

        print("Game Over")

        running = False

    # 화면 그리기

    pygame.draw.rect(screen, BLUE, (player_pos[0], player_pos[1], player_size, player_size))

    pygame.draw.rect(screen, RED, (enemy_pos[0], enemy_pos[1], enemy_size, enemy_size))

    pygame.display.flip()

    clock.tick(30)

pygame.quit()

파이썬은 간단한 코드로 복잡한 게임을 만들 수 있는 강력한 도구입니다. 특히 pygame 라이브러리를 활용하면 실제로 조작 가능한 액션 게임을 쉽고 빠르게 개발할 수 있습니다. 이 블로그에서는 초보자와 중급 개발자를 위한 고급스러운 액션 게임을 구현하며, 플레이어와 적의 움직임, 충돌 처리, 키보드 입력 등을 다룹니다.

주요 특징:

  • 플레이어 조작: 키보드를 사용해 실시간으로 캐릭터를 움직일 수 있음.

  • 적 생성 및 충돌 처리: 적을 생성하고, 충돌 시 게임 종료.

  • 버튼 설정 가능: 좌/우/상/하 방향키로 자유로운 이동.

 사용자가 예상할 수 있는 주요 오류 사항

코드를 실행하기 전에, 사용자가 자주 겪을 수 있는 문제와 해결 방법을 정리했습니다:

1. pygame 모듈 설치 오류

문제: "ModuleNotFoundError: No module named 'pygame'"

원인: pygame 라이브러리가 설치되지 않음.

해결 방법:

pip install pygame

2. 해상도 관련 충돌

문제: 창 크기(screen_width, screen_height)를 초과하는 값으로 캐릭터나 적을 배치했을 때.

해결 방법: 값 설정 시 화면 크기를 초과하지 않도록 제한.

3. 충돌 검사 오류

문제: 충돌 로직(if 조건)이 제대로 작동하지 않음.

원인: enemy_pos와 player_pos 좌표 계산 실수.

해결 방법: 항상 좌표와 크기 값을 정확히 확인하고 테스트할 것.

4. 프레임 속도 관련 렉

문제: clock.tick(30)을 조정하지 않으면 게임이 너무 빠르거나 느리게 작동.

해결 방법: 적절한 FPS 값을 설정(권장: 30~60).

파이썬으로 배우는 테트리스 게임 개발 - 초보자도 따라 할 수 있는 실용적인 코드 튜토리얼

파이썬은 초보자부터 전문가까지 누구나 손쉽게 다룰 수 있는 강력한 프로그래밍 언어입니다. 이번 블로그에서는 게임 개발의 기본을 배우기 위해 테트리스 게임을 만들어보겠습니다. pygame 라이브러리를 활용하여 간단한 코드로 구현할 수 있으며, 단계별 코드 설명을 통해 초보자도 따라 할 수 있습니다. 또한, 게임 개발의 기본 원리인 이벤트 처리, 충돌 감지, 렌더링을 학습할 수 있는 좋은 기회가 될 것입니다.

특징:

  • 테트로미노의 생성과 회전
  • 키보드 이벤트를 통한 제어
  • 보드에 테트로미노 고정
  • 간단하고 깔끔한 코드 구조

import pygame

import random

# 초기 설정

pygame.init()

screen_width, screen_height = 300, 600

block_size = 30

screen = pygame.display.set_mode((screen_width, screen_height))

clock = pygame.time.Clock()

# 색상 정의

colors = [(0, 0, 0), (255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0)]

# 테트로미노 모양

tetrominos = [

    [[1, 1, 1], [0, 1, 0]],

    [[0, 2, 2], [2, 2, 0]],

    [[3, 3, 0], [0, 3, 3]],

    [[4, 4], [4, 4]]

]

# 게임 보드 설정

def create_board():

    return [[0 for _ in range(screen_width // block_size)] for _ in range(screen_height // block_size)]

# 테트로미노 회전

def rotate(shape):

    return [[shape[y][x] for y in range(len(shape))] for x in range(len(shape[0]) - 1, -1, -1)]

# 테트로미노 이동 확인

def is_valid_move(board, shape, offset):

    offset_x, offset_y = offset

    for y, row in enumerate(shape):

        for x, cell in enumerate(row):

            if cell and (x + offset_x < 0 or x + offset_x >= len(board[0]) or y + offset_y >= len(board) or board[y + offset_y][x + offset_x]):

                return False

    return True

# 테트로미노 고정

def place_piece(board, shape, offset):

    offset_x, offset_y = offset

    for y, row in enumerate(shape):

        for x, cell in enumerate(row):

            if cell:

                board[y + offset_y][x + offset_x] = cell

# 게임 루프

def run_game():

    board = create_board()

    current_piece = random.choice(tetrominos)

    piece_position = [len(board[0]) // 2, 0]

    running = True

    while running:

        screen.fill((0, 0, 0))

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                running = False

            elif event.type == pygame.KEYDOWN:

                if event.key == pygame.K_LEFT:

                    new_position = [piece_position[0] - 1, piece_position[1]]

                    if is_valid_move(board, current_piece, new_position):

                        piece_position = new_position

                elif event.key == pygame.K_RIGHT:

                    new_position = [piece_position[0] + 1, piece_position[1]]

                    if is_valid_move(board, current_piece, new_position):

                        piece_position = new_position

                elif event.key == pygame.K_DOWN:

                    new_position = [piece_position[0], piece_position[1] + 1]

                    if is_valid_move(board, current_piece, new_position):

                        piece_position = new_position

                elif event.key == pygame.K_UP:

                    rotated_piece = rotate(current_piece)

                    if is_valid_move(board, rotated_piece, piece_position):

                        current_piece = rotated_piece

        # 테트로미노 고정 및 새로운 조각 생성

        new_position = [piece_position[0], piece_position[1] + 1]

        if not is_valid_move(board, current_piece, new_position):

            place_piece(board, current_piece, piece_position)

            current_piece = random.choice(tetrominos)

            piece_position = [len(board[0]) // 2, 0]

        else:

            piece_position = new_position

        # 게임 종료 조건 확인

        if not is_valid_move(board, current_piece, piece_position):

            running = False

        # 보드 및 테트로미노 그리기

        for y, row in enumerate(board):

            for x, cell in enumerate(row):

                pygame.draw.rect(screen, colors[cell], (x * block_size, y * block_size, block_size, block_size))

        for y, row in enumerate(current_piece):

            for x, cell in enumerate(row):

                if cell:

                    pygame.draw.rect(screen, colors[cell], ((piece_position[0] + x) * block_size, (piece_position[1] + y) * block_size, block_size, block_size))

        pygame.display.flip()

        clock.tick(10)

run_game()

pygame.quit()

2025년 3월 5일 수요일

1-1 파이썬을 시작 하기 전에 읽어보는 간단한 설명

1-1 파이썬을 시작 하기 전에 읽어보는 간단한 설명

파이썬이 프로그래밍 언어라는 것은 다들 아실겁니다. 그런데 프로그래밍 언어를 처음 접하는 입문자라면 ‘프로그래밍이 무엇인가’ 대한 개념 정리가 안 되어 있을지도 모릅니다.

용어나 개념이 입문자에게는 다소 어려울 수 있지만, 한번 읽고 잊어 버리더라도 아는 것과 모르는 것에는 큰 차이가 있습니다.

컴퓨터 프로그램

컴퓨터 프로그램이란 ‘컴퓨터가 무엇을 해야 할지 미리 작성한 진행 계획’입니다.

우리는 메신저에서 1)친구를 지정하고, 2)메시지를 입력하고, 3) 전송 버튼을 누르면 메시지가 전달됩니다.

이는 sns 프로그램에 ‘친구를 지정하고, 메시지를 입력하고, 전송 버튼을 누르면 친구에게 글을 전송해야 해!’ 라는 프로그램이 작성되어 있기 때문입니다.

프로그래밍 언어

다음 내용을 순서대로 읽고 맨 마지막에 무엇을 해야 하는지 생각해 볼까요?

1) 공책의 오른쪽 위에 a라고 적습니다.

2) a 옆에 10이라고 적습니다.

3) 공책에 왼쪽 위에 b라고 적습니다.

4) b 옆에 20이라고 적습니다.

5) 공책의 오른쪽 아래에 c라고 적습니다.

6) a 옆에 있는 숫자와 b 옆에 있는 숫자를 더해서 c 옆에 적습니다.

7) 만약 c 옆에 적혀 있는 숫자가 15보다 크면 일어나서 “15보다 크다!” 라고 외칩니다.

8) 만약 c 옆에 적혀 있는 숫자가 15보다 작으면 일어나서 “15보다 작다!” 라고 외칩니다.

a = 10

b = 20

a + b = c

c > 15 , “15보다 크다!” , c<15 , “15보다 작다!”

우리의 뇌는 금세 “15보다 크다!” 를 외칠 수 있을 것 입니다.

하지만 제아무리 성능이 좋은 컴퓨터 라도 위의 내용을 이해하지 못합니다.

컴퓨터가 이해할 수 있는 값은 오로지 0과 1로 이루어진 이진 숫자 입니다.

‘공책의 오른쪽 위에 a라고 적는다 + 옆에 10이라고 적는다’ 를 이진 숫자

(binary code)로 표기하면

01100111 11000111 01000101 11111100 00010000 00000000 00000000가 됩니다.

이진 숫자는 쉽게 말해서 컴퓨터를 위한 언어이죠.

과거에는 이진 숫자를 입력해서 프로그램을 만들었습니다. 이진 숫자로 이루어진 코드를 이진 코드 라고 부릅니다. 하지만 이러한 이진 숫자로 프로그램을 만드는 것은 우리 사람에게는 너무 비효율적입니다. 그래서 사람이 이해하기 쉬운 언어로 프로그램을 만들자는 생각을 하게 됩니다.  이런 목적으로 만든 것이 프로그래밍 언어 입니다. 프로그래밍 언어는 쉽게 말해서 사람을 위한 언어입니다. 그리고 프로그래밍 언어로 작성한 프로그램을 소스 코드 라고 합니다.

그런데 문제는 프로그래밍 언어를 컴퓨터가 이해할 수 없다는 것입니다. 이 문제를 해결하기 위해서 프로그래밍 언어를 이진 숫자로 변환해 주는 코드 실행기를 만들었습니다. 코드 실행기는 일종의 번역기입니다. 사람의 언어를 컴퓨터 언어로 번역을 해주는 것이지요.

이러한 프로그래밍 언어 덕분에 사람들은 컴퓨터에게 쉽게 명령을 내리고 원하는 결과를 얻을 수 있게 되었습니다.

프로그래밍 언어, 파이썬

파이썬은 1991년 귀도 반 로섬(Guido van Rossum)이 발표한 프로그래밍 언어입니다. 1989년 크리스마스가 있던 주에 연구실이 닫혀서 심심하던 차에 만들기 시작했다고 합니다.

파이썬이라는 이름은 영국의 6인조 코미디 그룹 ‘몬티 파이썬’에서 가져왔고, 로고는 Python 이라는 영어 단어가 뜻하는 ‘비단뱀’을 모티프로 만들어졌습니다.

파이썬은 초보자가 쉽게 배울 수 있는 프로그래밍 언어이기 때문에 파이썬으로 컴퓨터 프로그램을 만드는 방법을 이해하면 다른 프로그래밍 언어로도 쉽게 프로그램을 만들 수 있습니다.

앞서 파이썬은 초보자가 배우기에 쉬운 언어라고 했습니다. 그렇다면 최근에 파이썬 프로그래밍 언어를 많이 사용하는 이유가 그것뿐일까요?

파이썬의 장점을 간단하게 정리하면 다음과 같습니다.

  • 문법이 간단해서 배우기 쉽습니다.
  • 많은 사람이 사용하고 있어서 다양한 분야에서 활용할 수 있습니다.
  • 대부분의 운영체제(윈도우, 맥, 리눅스)에서 같은 방법으로 사용할 수 있습니다.

파이썬이 인기 있는 이유

첫째, 비전공자도 쉽게 배울 수 있는 언어 입니다.

일단 문법이 간단해서 배우기 쉽습니다. C 언어 등의 프로그래밍 언어는 문법이 복잡해서 컴퓨터 공학을 공부하는 학생들도 어렵게 느끼는 경우가 많습니다. 하지만 파이썬은 단순한 문법을 가지고 있어 배우기 쉽습니다. 따라서 비전공자도 쉽게 배울 수 있습니다.

둘째, 다양한 분야에서 활용할 수 있습니다.

많은 사람이 사용하므로 다양한 분야에서 활용할 수 있습니다. 기본적인 데스크톱 애플리케이션부터 시작해서 웹 서버, 해킹 도구, IoT(Internet of Things), 인공지능 등에 모두 활용할 수 있습니다.

셋째, 대부분의 운영체제에서 동일하게 사용됩니다.

대부분의 프로그래밍 언어는 운영체제가 제한적입니다. 그리고 여러 운영체제에서 사용할 수 있어도 사용 방법이 조금씩 다른 경우가 있습니다. 하지만 파이썬 프로그래밍 언어는 모든 운영체제에서 같은 방법으로 사용할 수 있습니다.

물론 단점도 있습니다.

느립니다.

파이썬 프로그래밍 언어는 일반적으로 C언어보다 10~350배 정도 느립니다. 프로그래밍 언어는 대부분 ‘쉽게 사용할 수 있다’ 라는 성질과 ‘빠르다’ 라는 성질이 반비례합니다. 파이썬은 쉽게 사용할 수 있는 대신 느리고, C 언어는 어려운 대신 빠릅니다. 그래서 일반적으로 거대한 게임을 만들 때는 C, C++, C# 등의 프로그래밍 언어를 사용합니다.

하지만 최근에는 컴퓨터 성능이 너무 좋아져서 게임 등과 같이 연산이 많이 필요한 프로그램이 아니라면 프로그래밍 언어의 속도 차이를 크게 느낄 수 없습니다. 따라서 쉽게 사용할 수 있는 프로그래밍 언어(파이썬, 루비, 자바스크립트 등)가 인기를 끌고 있습니다.

머신러닝, 딥러닝처럼 고정적인 연산을 많이 하는 프로그램은 전체적인 프로그램을 파이썬으로 만들고, 고정적인 연산 부분만 C 언어로 만들어 활용하기도 합니다. 게임처럼 연산을 많이 하는 프로그램, 성능이 좋지 않은 컴퓨터를 사용할 수밖에 없는 프로그램(소형 장치)을 제외하면 파이썬으로 모든 것을 할 수 있습니다.

Recommended Posts

Love is taking responsibility till the end

  I created a campaign called "Don't Abandon Your Beloved Dog" with Stable Diffusion. I tried creating it several times, but i...