티스토리 뷰
pip install pygame
import pygame
import sys
# 초기화
pygame.init()
# 화면 설정
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('키보드 입력 예제')
# 색상 설정
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# 폰트 설정
font = pygame.font.Font(None, 74)
# 텍스트 초기화
text = ""
text_surface = font.render(text, True, BLACK)
# 메인 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_BACKSPACE:
text = text[:-1] # 마지막 문자 삭제
else:
text += event.unicode # 입력된 키 추가
text_surface = font.render(text, True, BLACK) # 텍스트 렌더링
# 화면 채우기
screen.fill(WHITE)
# 텍스트 화면에 그리기
screen.blit(text_surface, (20, 20))
# 화면 업데이트
pygame.display.flip()
# 종료 처리
pygame.quit()
sys.exit()
import pygame
import random
import sys
import math
# 초기화
pygame.init()
# 화면 설정
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('미니 축구 게임')
# 색상 설정
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 128, 0)
# 폰트 설정
font = pygame.font.Font(None, 74)
# 선수와 공 초기 설정
players = [[random.randint(0, WIDTH), random.randint(0, HEIGHT)] for _ in range(11)]
ball = [WIDTH // 2, HEIGHT // 2]
ball_target = [WIDTH // 2, HEIGHT // 2]
ball_speed = 5
ball_moving = False
def move_player(player):
# 선수는 상하로만 움직임
player[1] += random.randint(-10, 10)
player[1] = max(0, min(HEIGHT, player[1]))
def move_ball():
global ball_moving
if ball_moving:
dx = ball_target[0] - ball[0]
dy = ball_target[1] - ball[1]
distance = math.sqrt(dx**2 + dy**2)
if distance < ball_speed:
ball[0], ball[1] = ball_target
ball_moving = False
else:
ball[0] += ball_speed * dx / distance
ball[1] += ball_speed * dy / distance
def draw_players(screen):
for player in players:
text_surface = font.render('X', True, BLACK)
screen.blit(text_surface, player)
def draw_ball(screen):
text_surface = font.render('O', True, BLACK)
screen.blit(text_surface, ball)
# 메인 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_SPACE:
# 공을 랜덤한 선수에게 패스
target_player = random.choice(players)
ball_target[0], ball_target[1] = target_player
ball_moving = True
# 선수들 움직임
for player in players:
move_player(player)
# 공의 위치 업데이트
move_ball()
# 화면 그리기
screen.fill(GREEN) # 축구장 배경
draw_players(screen)
draw_ball(screen)
# 화면 업데이트
pygame.display.flip()
# 프레임 조절
pygame.time.delay(100)
# 종료 처리
pygame.quit()
sys.exit()
import pygame
import random
import sys
import math
# 초기화
pygame.init()
# 화면 설정
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('미니 축구 게임')
# 색상 설정
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 128, 0)
# 폰트 설정
font = pygame.font.Font(None, 74)
# 선수와 공 초기 설정
players = [[random.randint(0, WIDTH), random.randint(0, HEIGHT), random.choice([-1, 1])] for _ in range(11)]
ball = [WIDTH // 2, HEIGHT // 2]
ball_target = [WIDTH // 2, HEIGHT // 2]
ball_speed = 15 # 공의 속도를 더 빠르게 설정
ball_moving = False
def move_player(player):
# 선수는 상하로만 움직임, 끝에 도달하면 방향 반전
player[1] += player[2] * random.randint(1, 5) # 선수 움직임을 느리게 설정
if player[1] <= 0 or player[1] >= HEIGHT:
player[2] *= -1
player[1] = max(0, min(HEIGHT, player[1]))
def move_ball():
global ball_moving
if ball_moving:
dx = ball_target[0] - ball[0]
dy = ball_target[1] - ball[1]
distance = math.sqrt(dx**2 + dy**2)
if distance < ball_speed:
ball[0], ball[1] = ball_target
ball_moving = False
else:
ball[0] += ball_speed * dx / distance
ball[1] += ball_speed * dy / distance
def draw_players(screen):
for i, player in enumerate(players):
text_surface = font.render(str(i+1), True, BLACK)
screen.blit(text_surface, player[:2])
def draw_ball(screen):
text_surface = font.render('O', True, BLACK)
screen.blit(text_surface, ball)
# 메인 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_SPACE:
# 공을 랜덤한 선수에게 패스
target_player = random.choice(players)
ball_target[0], ball_target[1] = target_player[:2]
ball_moving = True
elif pygame.K_1 <= event.key <= pygame.K_0 + len(players):
# 특정 번호 입력 시 해당 선수에게 패스
player_index = event.key - pygame.K_1
ball_target[0], ball_target[1] = players[player_index][:2]
ball_moving = True
# 선수들 움직임
for player in players:
move_player(player)
# 공의 위치 업데이트
move_ball()
# 화면 그리기
screen.fill(GREEN) # 축구장 배경
draw_players(screen)
draw_ball(screen)
# 화면 업데이트
pygame.display.flip()
# 프레임 조절
pygame.time.delay(100)
# 종료 처리
pygame.quit()
sys.exit()
import pygame
import random
import sys
import math
# 초기화
pygame.init()
# 화면 설정
WIDTH, HEIGHT = 600, 800 # 경기장을 세로 직사각형으로 설정
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('미니 축구 게임')
# 색상 설정
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 128, 0)
YELLOW = (255, 255, 0)
# 폰트 설정
font = pygame.font.Font(None, 74)
small_font = pygame.font.Font(None, 36)
# 선수와 공 초기 설정
players = [[random.randint(0, WIDTH), random.randint(0, HEIGHT), random.choice([-1, 1])] for _ in range(11)]
ball = [WIDTH // 2, HEIGHT // 2]
ball_target = [WIDTH // 2, HEIGHT // 2]
ball_speed = 15 # 공의 속도를 더 빠르게 설정
ball_moving = False
def move_player(player):
# 선수는 상하로만 움직임, 끝에 도달하면 방향 반전
player[1] += player[2] * random.randint(1, 5) # 선수 움직임을 느리게 설정
if player[1] <= 0 or player[1] >= HEIGHT:
player[2] *= -1
player[1] = max(0, min(HEIGHT, player[1]))
def move_ball():
global ball_moving
if ball_moving:
dx = ball_target[0] - ball[0]
dy = ball_target[1] - ball[1]
distance = math.sqrt(dx**2 + dy**2)
if distance < ball_speed:
ball[0], ball[1] = ball_target
ball_moving = False
else:
ball[0] += ball_speed * dx / distance
ball[1] += ball_speed * dy / distance
def draw_players(screen):
for i, player in enumerate(players):
text_surface = font.render(str(i+1), True, BLACK)
screen.blit(text_surface, player[:2])
def draw_ball(screen):
text_surface = font.render('O', True, BLACK)
screen.blit(text_surface, ball)
def draw_goalposts(screen):
goal_width = WIDTH // 3
goal_height = 20
pygame.draw.rect(screen, YELLOW, (WIDTH // 3, 0, goal_width, goal_height)) # 상단 골대
pygame.draw.rect(screen, YELLOW, (WIDTH // 3, HEIGHT - goal_height, goal_width, goal_height)) # 하단 골대
# 메인 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif pygame.K_1 <= event.key <= pygame.K_0 + len(players):
# 특정 번호 입력 시 해당 선수에게 패스
player_index = event.key - pygame.K_1
ball_target[0], ball_target[1] = players[player_index][:2]
ball_moving = True
# 선수들 움직임
for player in players:
move_player(player)
# 공의 위치 업데이트
move_ball()
# 화면 그리기
screen.fill(GREEN) # 축구장 배경
draw_goalposts(screen) # 골대 그리기
draw_players(screen)
draw_ball(screen)
# 화면 업데이트
pygame.display.flip()
# 프레임 조절
pygame.time.delay(100)
# 종료 처리
pygame.quit()
sys.exit()
import pygame
import random
import sys
import math
# 초기화
pygame.init()
# 화면 설정
WIDTH, HEIGHT = 600, 800 # 경기장을 세로 직사각형으로 설정
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('미니 축구 게임')
# 색상 설정
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 128, 0)
YELLOW = (255, 255, 0)
# 폰트 설정
font = pygame.font.Font(None, 74)
small_font = pygame.font.Font(None, 36)
# 선수와 공 초기 설정
players = [[WIDTH // 2, HEIGHT // 20, 0]] + [[random.randint(0, WIDTH), random.randint(HEIGHT // 20, HEIGHT // 2), random.choice([-1, 1])] for _ in range(4)] + [[random.randint(0, WIDTH), random.randint(HEIGHT // 2, HEIGHT), random.choice([-1, 1])] for _ in range(6)]
ball = [WIDTH // 2, HEIGHT // 2]
ball_target = [WIDTH // 2, HEIGHT // 2]
ball_speed = 15 # 공의 속도를 더 빠르게 설정
ball_moving = False
def move_player(player, is_defender=False):
# 골키퍼는 움직이지 않음
if player == players[0]:
return
# 수비수는 상단 부분에서만 움직임
if is_defender:
player[1] += player[2] * random.randint(1, 5) # 선수 움직임을 느리게 설정
if player[1] <= HEIGHT // 20 or player[1] >= HEIGHT // 2:
player[2] *= -1
player[1] = max(HEIGHT // 20, min(HEIGHT // 2, player[1]))
else:
player[1] += player[2] * random.randint(1, 5) # 선수 움직임을 느리게 설정
if player[1] <= 0 or player[1] >= HEIGHT:
player[2] *= -1
player[1] = max(0, min(HEIGHT, player[1]))
def move_ball():
global ball_moving
if ball_moving:
dx = ball_target[0] - ball[0]
dy = ball_target[1] - ball[1]
distance = math.sqrt(dx**2 + dy**2)
if distance < ball_speed:
ball[0], ball[1] = ball_target
ball_moving = False
else:
ball[0] += ball_speed * dx / distance
ball[1] += ball_speed * dy / distance
def draw_players(screen):
for i, player in enumerate(players):
text_surface = font.render(str(i+1), True, BLACK)
screen.blit(text_surface, player[:2])
def draw_ball(screen):
text_surface = font.render('O', True, BLACK)
screen.blit(text_surface, ball)
def draw_goalposts(screen):
goal_width = WIDTH // 3
goal_height = 20
pygame.draw.rect(screen, YELLOW, (WIDTH // 3, 0, goal_width, goal_height)) # 상단 골대
pygame.draw.rect(screen, YELLOW, (WIDTH // 3, HEIGHT - goal_height, goal_width, goal_height)) # 하단 골대
def draw_half_line(screen):
pygame.draw.line(screen, WHITE, (0, HEIGHT // 2), (WIDTH, HEIGHT // 2), 5)
# 메인 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif pygame.K_1 <= event.key <= pygame.K_0 + len(players):
# 특정 번호 입력 시 해당 선수에게 패스
player_index = event.key - pygame.K_1
ball_target[0], ball_target[1] = players[player_index][:2]
ball_moving = True
# 선수들 움직임
for i, player in enumerate(players):
if 1 <= i <= 4:
move_player(player, is_defender=True)
else:
move_player(player)
# 공의 위치 업데이트
move_ball()
# 화면 그리기
screen.fill(GREEN) # 축구장 배경
draw_goalposts(screen) # 골대 그리기
draw_half_line(screen) # 하프라인 그리기
draw_players(screen)
draw_ball(screen)
# 화면 업데이트
pygame.display.flip()
# 프레임 조절
pygame.time.delay(100)
# 종료 처리
pygame.quit()
sys.exit()
여러가지를 수정했지만 동작하지 않음
import pygame
import random
import sys
import math
# 초기화
pygame.init()
# 화면 설정
WIDTH, HEIGHT = 600, 800 # 경기장을 세로 직사각형으로 설정
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('미니 축구 게임')
# 색상 설정
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 128, 0)
YELLOW = (255, 255, 0)
# 폰트 설정
font = pygame.font.Font(None, 74)
small_font = pygame.font.Font(None, 36)
# 선수와 공 초기 설정
def create_defenders():
return [
[random.randint(0, WIDTH), random.randint(HEIGHT // 20, HEIGHT // 2), random.choice([-1, 1])]
for _ in range(4)
]
def create_midfielders():
mid_y_top = HEIGHT // 2 - int(HEIGHT * 0.3)
mid_y_bottom = HEIGHT // 2 + int(HEIGHT * 0.3)
return [
[random.randint(0, WIDTH), random.randint(mid_y_top, mid_y_bottom), random.choice([-1, 1])]
for _ in range(3)
]
def create_attackers():
att_y_top = HEIGHT * 0.7
att_y_bottom = HEIGHT
return [
[random.randint(0, WIDTH), random.randint(int(att_y_top), int(att_y_bottom)), random.choice([-1, 1])]
for _ in range(3)
]
players = [
[WIDTH // 2, HEIGHT // 20, 0], # 골키퍼 (1번)
] + create_defenders() + create_midfielders() + create_attackers()
ball = [WIDTH // 2, HEIGHT // 2]
ball_target = [WIDTH // 2, HEIGHT // 2]
ball_speed = 15 # 공의 속도를 더 빠르게 설정
ball_moving = False
input_text = ""
def move_player(player, is_defender=False, is_midfielder=False, is_attacker=False):
if player == players[0]:
return # 골키퍼는 움직이지 않음
if is_defender:
# 수비수는 상단 부분에서만 움직임
player[1] += player[2] * random.randint(1, 5)
if player[1] <= HEIGHT // 20 or player[1] >= HEIGHT // 2:
player[2] *= -1
player[1] = max(HEIGHT // 20, min(HEIGHT // 2, player[1]))
elif is_midfielder:
# 미드필더는 하프라인 위아래로 30% 내에서만 움직임
player[1] += player[2] * random.randint(1, 5)
if player[1] <= HEIGHT // 2 - int(HEIGHT * 0.3) or player[1] >= HEIGHT // 2 + int(HEIGHT * 0.3):
player[2] *= -1
player[1] = max(HEIGHT // 2 - int(HEIGHT * 0.3), min(HEIGHT // 2 + int(HEIGHT * 0.3), player[1]))
elif is_attacker:
# 공격수는 하단 30% 내에서만 움직임
player[1] += player[2] * random.randint(1, 5)
if player[1] <= int(HEIGHT * 0.7) or player[1] >= HEIGHT:
player[2] *= -1
player[1] = max(int(HEIGHT * 0.7), min(HEIGHT, player[1]))
else:
# 기타 선수는 경기장 전체에서 움직임
player[1] += player[2] * random.randint(1, 5)
if player[1] <= 0 or player[1] >= HEIGHT:
player[2] *= -1
player[1] = max(0, min(HEIGHT, player[1]))
def move_ball():
global ball_moving
if ball_moving:
dx = ball_target[0] - ball[0]
dy = ball_target[1] - ball[1]
distance = math.sqrt(dx**2 + dy**2)
if distance < ball_speed:
ball[0], ball[1] = ball_target
ball_moving = False
else:
ball[0] += ball_speed * dx / distance
ball[1] += ball_speed * dy / distance
def draw_players(screen):
for i, player in enumerate(players):
if i == 9:
text_surface = font.render('a', True, BLACK) # 10번 선수
elif i == 10:
text_surface = font.render('b', True, BLACK) # 11번 선수
else:
text_surface = font.render(str(i+1), True, BLACK) # 나머지 선수들
screen.blit(text_surface, player[:2])
def draw_ball(screen):
text_surface = font.render('O', True, BLACK)
screen.blit(text_surface, ball)
def draw_goalposts(screen):
goal_width = WIDTH // 3
goal_height = 20
pygame.draw.rect(screen, YELLOW, (WIDTH // 3, 0, goal_width, goal_height)) # 상단 골대
pygame.draw.rect(screen, YELLOW, (WIDTH // 3, HEIGHT - goal_height, goal_width, goal_height)) # 하단 골대
def draw_half_line(screen):
pygame.draw.line(screen, WHITE, (0, HEIGHT // 2), (WIDTH, HEIGHT // 2), 5)
# 메인 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_RETURN:
# 엔터 키를 누르면 입력된 번호로 공을 패스
if input_text.isdigit():
player_index = int(input_text) - 1
if 0 <= player_index < len(players):
ball_target[0], ball_target[1] = players[player_index][:2]
ball_moving = True
elif input_text.lower() in ['a', 'b']:
player_index = 9 if input_text.lower() == 'a' else 10
ball_target[0], ball_target[1] = players[player_index][:2]
ball_moving = True
input_text = ""
elif event.key in [pygame.K_1, pygame.K_2, pygame.K_3, pygame.K_4, pygame.K_5, pygame.K_6, pygame.K_7, pygame.K_8, pygame.K_9]:
# 숫자 키를 입력받아 저장
input_text += event.unicode
elif event.key == pygame.K_a or event.key == pygame.K_b:
# 'a'와 'b' 키 입력받기
input_text += event.unicode
# 선수들 움직임
for i, player in enumerate(players):
if i == 0:
continue # 골키퍼는 움직이지 않음
elif 1 <= i <= 4:
move_player(player, is_defender=True)
elif 5 <= i <= 7:
move_player(player, is_midfielder=True)
else:
move_player(player, is_attacker=True)
# 공의 위치 업데이트
move_ball()
# 화면 그리기
screen.fill(GREEN) # 축구장 배경
draw_goalposts(screen) # 골대 그리기
draw_half_line(screen) # 하프라인 그리기
draw_players(screen)
draw_ball(screen)
# 화면 업데이트
pygame.display.flip()
# 프레임 조절
pygame.time.delay(100)
# 종료 처리
pygame.quit()
sys.exit()
728x90
반응형
'수업 노트 > python' 카테고리의 다른 글
wsl, vim 을 활용한 python 개발 환경 세팅 (0) | 2023.12.09 |
---|---|
tic-tac-toe(오목 말고 삼목) 만들기 (1) | 2023.11.12 |
파이썬 개발환경 구축 (0) | 2023.11.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 리눅스
- java
- Linux
- gz
- 압축파일
- Strings
- X32
- OpenSSL
- 32bit
- HTTPS
- Encode
- solution
- SSL
- ssh
- 웹보안공부
- nc
- tar
- Natas
- 웹보안
- OverTheWire
- natas7
- bz2
- find
- tr
- Bandit
- BASE64
- 리터럴
- 풀이
- over the wire
- grep
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함