import sys
import random
import pygame
from pygame.locals import QUIT, KEYDOWN, K_LEFT, K_RIGHT, K_UP, K_DOWN, Rect
pygame.init()
pygame.key.set_repeat(5, 5) # control how held keys are repeated
SURFACE = pygame.display.set_mode([600, 600])
FPSCLOCK = pygame.time.Clock()
class Snake:
def __init__(self, pos):
self.bodies = [pos]
def move(self, key):
x_pos, y_pos = self.bodies[0]
if key == K_LEFT:
x_pos -= 1
elif key == K_RIGHT:
x_pos += 1
elif key == K_UP:
y_pos -= 1
elif key == K_DOWN:
y_pos += 1
head = (x_pos, y_pos)
is_game_over = head in self.bodies or \
head[0] < 0 or head[0] >= W or \
head[1] < 0 or head[1] >= H
self.bodies.insert(0, head)
if head in FOODS:
i = FOODS.index(head)
del FOODS[i]
add_food(self)
else:
self.bodies.pop()
return is_game_over
def draw(self):
for body in self.bodies:
pygame.draw.rect(SURFACE, (0, 255, 255),
Rect(body[0] * 30, body[1] * 30, 30, 30))
FOODS = []
(W, H) = (20, 20)
def add_food(snake):
while True:
pos = (random.randint(0, W-1), random.randint(0, H - 1))
if pos in FOODS or pos in snake.bodies:
continue
FOODS.append(pos)
break
def paint(snake, msg):
SURFACE.fill((0, 0, 0))
snake.draw()
for food in FOODS:
pygame.draw.ellipse(SURFACE, (0, 255, 0),
Rect(food[0] * 30, food[1] * 30, 30, 30))
for index in range(20):
pygame.draw.line(SURFACE, (64, 64, 64),
(index*30, 0), (index*30, 600))
pygame.draw.line(SURFACE, (64, 64, 64),
(0, index*30), (600, index* 30))
if msg != None:
SURFACE.blit(msg, (150, 300))
pygame.display.update()
def main():
myfont = pygame.font.SysFont(None, 80)
key = K_DOWN
msg = None
game_over = False
snake = Snake((int(W/2), int(H/2)))
for _ in range(10):
add_food(snake)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
key = event.key
if game_over:
msg = myfont.render("Game Over!", True, (255, 255, 0))
else:
game_over = snake.move(key)
paint(snake, msg)
FPSCLOCK.tick(10)
if __name__ == "__main__":
main()
'컴퓨터과학' 카테고리의 다른 글
파이게임 - 4. 벽돌깨기 (0) | 2024.03.18 |
---|---|
파이게임 - 2. 지뢰찾기 (0) | 2024.03.18 |
파이게임 - 1. 시작 (0) | 2024.03.18 |
jetson nano yahboom USB 부팅 삽질기 3(yolo 돌리기) (0) | 2022.11.10 |
jetson nano yahboom USB 부팅 삽질기 2(usb 부팅 완료, vnc까지) (0) | 2022.11.09 |