diff --git a/Aumenta o tamanho da cobra.py b/Aumenta o tamanho da cobra.py deleted file mode 100644 index 4b7135b..0000000 --- a/Aumenta o tamanho da cobra.py +++ /dev/null @@ -1,11 +0,0 @@ -snake.insert(0,list(pos)) -if pos[0][1]==pos_fruta[0][1]: - pontos+=100 - spawn=False -else: - snake.pop() -if spawn==False: - posicao_fruta=[random.randrange(1,(window_x//10))*10, - random.randrange(1,(window_y//10))*10] -spawn=True -game_window.fill(black) \ No newline at end of file diff --git a/Jogo.py b/Jogo.py index 10d6168..bbd3f6b 100644 --- a/Jogo.py +++ b/Jogo.py @@ -1,198 +1,173 @@ -#%% importando bibliotecas e iniciando o pygame -import pygame -import time -from baixar_assets import baixar_assets -from configurações import janela_alt,janela_comp,janela -from pont import pontuacao -from titulo import titulo -import random -from pygame.time import wait - -pygame.init() -#%% Configuração da janela -# Configurações da janela do jogo - -# Configurações das paredes (o player morre quando encosta nas paredes) -while True: - #janela=pygame.display.set_mode((janela_comp,janela_alt)) - pygame.display.set_caption('Jogo da cobrinha') - fps=15 - - assets=baixar_assets() - #Sons e Musica do jogo - pygame.mixer.music.load('assets/musica_jogo6.mp3') - pygame.mixer.music.play(-1) # Loop infinito para rodar o jogo inteiro - som_comer = pygame.mixer.Sound('assets/comer_fruta.mp3')# Som quando a cobra comer a fruta - som_colisao = pygame.mixer.Sound('assets/game-over-31.mp3')# Som quando a cobra encostar nela mesma ou nas paredes - - #%% Cobra - sentido='DIR' - prox_dir=sentido - - cobra_pos=[300,150] - cobra_corpo=[(300,150), - (290,150), - (280,150), - (270,150)] - - - - #%% Frutas - - fruta_pos=[random.randrange(1,(janela_comp//10))*10, - random.randrange(1,(janela_alt//10))*10] - fruta_spawn=True - - #%% Pontuação - ''' - def pontuacao(cor,fonte,tam,pontos): - - pygame.font.init() - - pont_font=pygame.font.SysFont(fonte,tam) - - surface=pont_font.render('Pontos: '+str(pontos),True,cor) - - pontos_rect=surface.get_rect() - - janela.blit(surface,pontos_rect) - ''' - clock=pygame.time.Clock() - assets=baixar_assets() - - fruta_pos=[random.randrange(1,(janela_comp//10))*10, - random.randrange(1,(janela_alt//10))*10] - fruta_spawn=True - - # Posição do jogador - - # Estados - FINAL=0 - JOGANDO=1 - MORRENDO=2 - estado=JOGANDO - - pontos=0 - tem_fruta=True - - - fps = titulo() - #%% Definindo o jogo - while True: - - - - janela.fill((0,0,0)) - janela.blit(assets['mundo'],(0,0)) - pontuacao((0,0,0),'open sans',20,pontos) - - for event in pygame.event.get(): - if event.type==pygame.QUIT: - - pygame.quit() - break - - if event.type==pygame.KEYDOWN: - if event.key==pygame.K_LEFT or event.key==pygame.K_a: - if sentido!='DIR': - prox_dir='ESQ' - - elif event.key==pygame.K_RIGHT or event.key==pygame.K_d: - if sentido!='ESQ': - prox_dir='DIR' - elif event.key==pygame.K_UP or event.key==pygame.K_w: - if sentido!='BAIXO': - prox_dir='CIMA' - elif event.key==pygame.K_DOWN or event.key==pygame.K_s: - if sentido!='CIMA': - prox_dir='BAIXO' - - - - # Atualizando a direção - sentido=prox_dir - - # Movimentando a cobra - if sentido=='CIMA': - cobra_pos[1]-=10 - elif sentido=='BAIXO': - cobra_pos[1]+=10 - elif sentido=='ESQ': - cobra_pos[0]-=10 - elif sentido=='DIR': - cobra_pos[0]+=10 - - - # Fazendo a cobra crescer a cada vez que encosta em uma fruta: - cobra_corpo.insert(0,list(cobra_pos)) - if cobra_pos[0]==fruta_pos[0] and cobra_pos[1]==fruta_pos[1]: - pontos+=100 - fruta_spawn=False - som_comer.play() - else: - cobra_corpo.pop() - - - if not fruta_spawn: - fruta_pos=[random.randrange(1,(janela_comp//10))*10, - random.randrange(1,(janela_alt//10))*10] - fruta_spawn=True - - # Desenhando a cobra: - - for i,pos in enumerate(cobra_corpo): - # Caso a cobra mude de direção, muda o sprite - - if list(pos)==cobra_pos: - # Cabeça da cobra - if sentido=='CIMA': - janela.blit(assets['cabeca_cima'],(pos[0],pos[1])) - elif sentido=='BAIXO': - janela.blit(assets['cabeca_baixo'],(pos[0],pos[1])) - elif sentido=='ESQ': - janela.blit(assets['cabeca_esq'],(pos[0],pos[1])) - elif sentido=='DIR': - janela.blit(assets['cabeca_dir'],(pos[0],pos[1])) - elif i==len(cobra_corpo)-1: - # Rabo - if sentido=='CIMA': - janela.blit(assets['rabo_cima'],(pos[0],pos[1])) - elif sentido=='BAIXO': - janela.blit(assets['rabo_baixo'],(pos[0],pos[1])) - elif sentido=='ESQ': - janela.blit(assets['rabo_esq'],(pos[0],pos[1])) - else: - janela.blit(assets['rabo_dir'],(pos[0],pos[1])) - - else: - # Corpo - if sentido in ['BAIXO','CIMA']: - janela.blit(assets['corpo_v'],(pos[0],pos[1])) - else: - janela.blit(assets['corpo_h'],(pos[0],pos[1])) - # desenha a fruta - janela.blit(assets['comida'],(fruta_pos[0],fruta_pos[1])) - - pygame.display.update() - - clock.tick(fps) - - # Morre quando a cobra encosta em si mesma - Game_over=False - for corpo in cobra_corpo[1:]: - if cobra_pos == list(corpo): - Game_over=True - break - - # Game over - - if cobra_pos[0]<0 or cobra_pos[0]>janela_comp-10 or Game_over==True: - som_colisao.play() - wait(2000) - #pygame.quit() - break - elif cobra_pos[1]<0 or cobra_pos[1]>janela_alt-10: - som_colisao.play() - wait(2000) - #pygame.quit() - break \ No newline at end of file +import pygame +import time +from baixar_assets import baixar_assets +from configurações import janela_alt, janela_comp, janela +from pont import pontuacao +from titulo import titulo +import random +from pygame.time import wait + +pygame.init() +# Configurações da janela do jogo + +# Configurações das paredes (o player morre quando encosta nas paredes) +while True: + # janela=pygame.display.set_mode((janela_comp,janela_alt)) + pygame.display.set_caption('Jogo da cobrinha') + fps = 15 + + assets = baixar_assets() + # Sons e Musica do jogo + pygame.mixer.music.load('assets/musica_jogo6.mp3') + pygame.mixer.music.play(-1) # Loop infinito para rodar o jogo inteiro + # Som quando a cobra comer a fruta + som_comer = pygame.mixer.Sound('assets/comer_fruta.mp3') + # Som quando a cobra encostar nela mesma ou nas paredes + som_colisao = pygame.mixer.Sound('assets/game-over-31.mp3') + + + sentido = 'DIR' + prox_dir = sentido + + cobra_pos = [300, 150] + cobra_corpo = [(300, 150), + (290, 150), + (280, 150), + (270, 150)] + + fruta_pos = [random.randrange(1, (janela_comp//10))*10, + random.randrange(1, (janela_alt//10))*10] + fruta_spawn = True + + clock = pygame.time.Clock() + assets = baixar_assets() + + fruta_pos = [random.randrange(1, (janela_comp//10))*10, + random.randrange(1, (janela_alt//10))*10] + fruta_spawn = True + + # Posição do jogador + + # Estados + FINAL = 0 + JOGANDO = 1 + MORRENDO = 2 + estado = JOGANDO + + pontos = 0 + tem_fruta = True + + fps = titulo() + + while True: + + janela.fill((0, 0, 0)) + janela.blit(assets['mundo'], (0, 0)) + pontuacao((0, 0, 0), 'open sans', 20, pontos) + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + + pygame.quit() + break + + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT or event.key == pygame.K_a: + if sentido != 'DIR': + prox_dir = 'ESQ' + + elif event.key == pygame.K_RIGHT or event.key == pygame.K_d: + if sentido != 'ESQ': + prox_dir = 'DIR' + elif event.key == pygame.K_UP or event.key == pygame.K_w: + if sentido != 'BAIXO': + prox_dir = 'CIMA' + elif event.key == pygame.K_DOWN or event.key == pygame.K_s: + if sentido != 'CIMA': + prox_dir = 'BAIXO' + + # Atualizando a direção + sentido = prox_dir + + # Movimentando a cobra + if sentido == 'CIMA': + cobra_pos[1] -= 10 + elif sentido == 'BAIXO': + cobra_pos[1] += 10 + elif sentido == 'ESQ': + cobra_pos[0] -= 10 + elif sentido == 'DIR': + cobra_pos[0] += 10 + + # Fazendo a cobra crescer a cada vez que encosta em uma fruta: + cobra_corpo.insert(0, list(cobra_pos)) + if cobra_pos[0] == fruta_pos[0] and cobra_pos[1] == fruta_pos[1]: + pontos += 100 + fruta_spawn = False + som_comer.play() + else: + cobra_corpo.pop() + + if not fruta_spawn: + fruta_pos = [random.randrange(1, (janela_comp//10))*10, + random.randrange(1, (janela_alt//10))*10] + fruta_spawn = True + + # Desenhando a cobra: + + for i, pos in enumerate(cobra_corpo): + # Caso a cobra mude de direção, muda o sprite + + if list(pos) == cobra_pos: + # Cabeça da cobra + if sentido == 'CIMA': + janela.blit(assets['cabeca_cima'], (pos[0], pos[1])) + elif sentido == 'BAIXO': + janela.blit(assets['cabeca_baixo'], (pos[0], pos[1])) + elif sentido == 'ESQ': + janela.blit(assets['cabeca_esq'], (pos[0], pos[1])) + elif sentido == 'DIR': + janela.blit(assets['cabeca_dir'], (pos[0], pos[1])) + elif i == len(cobra_corpo)-1: + # Rabo + if sentido == 'CIMA': + janela.blit(assets['rabo_cima'], (pos[0], pos[1])) + elif sentido == 'BAIXO': + janela.blit(assets['rabo_baixo'], (pos[0], pos[1])) + elif sentido == 'ESQ': + janela.blit(assets['rabo_esq'], (pos[0], pos[1])) + else: + janela.blit(assets['rabo_dir'], (pos[0], pos[1])) + + else: + # Corpo + if sentido in ['BAIXO', 'CIMA']: + janela.blit(assets['corpo_v'], (pos[0], pos[1])) + else: + janela.blit(assets['corpo_h'], (pos[0], pos[1])) + # desenha a fruta + janela.blit(assets['comida'], (fruta_pos[0], fruta_pos[1])) + + pygame.display.update() + + clock.tick(fps) + + # Morre quando a cobra encosta em si mesma + Game_over = False + for corpo in cobra_corpo[1:]: + if cobra_pos == list(corpo): + Game_over = True + break + + # Game over + + if cobra_pos[0] < 0 or cobra_pos[0] > janela_comp-10 or Game_over == True: + som_colisao.play() + wait(2000) + # pygame.quit() + break + elif cobra_pos[1] < 0 or cobra_pos[1] > janela_alt-10: + som_colisao.play() + wait(2000) + # pygame.quit() + break diff --git a/README.md b/README.md index 9f6db22..f5e0152 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,59 @@ -# snake -EP final de DesSoft - -Jogo da Cobrinha ('Snake') - -Requisitos: - --Biblioteca Pygame - -Instalação: -Abra o seu terminal (Linux ou MacOS) ou Anaconda Prompt (Windows) e digite: - -pip install pygame - -Como rodar o jogo: - -Para rodar o jogo basta abrir o repositório e no arquivo Jogo rodar o programa. -Quando o jogo abrir aparecerá uma tela com o titulo e opções de dificuldade correspodendo: -1-Fácil 10 FPS (mais lento com aparencia um pouco travada, ideal para iniciantes) -2-Médio 15 FPS (velocidade e dificuldades moderadas, modo padrão de jogo) -3-Difícil 30 FPS (velocidade e dificuldade elevadas) -9-Ipossível 70 FPS (Velocidade e dificuldade extremas, não é para amadores) - -Para seslcionar a dificuldade basta precinar a tecla correspondete caso não seja selecionada o jogo rodará na dificuldade média - -Após selecionar a dificuldade basta prssionar a tela ENTER -Com o jogo rodando as teclas AWSD ou as setas do teclado podem ser utilizadas para controlar as direções, nessa parte seu objetivo é coletar o maior número possível de maçãs no mapa e aumentar o temanho da 'snake', porém caso atinja uma das bordas ou seu proprio corpo o jogo acaba e retorna para tela de início. - -Caso deseje jogar novamente basta reptir o processo de seleção de dificuldade -Para sair clique com o mouse no 'X' canto superior direito ou alt+F4 - -Créditos: --Bernardo Hersbach Nagem Sarcinelli --Mordechai Dov Lask --Rafael Vieira Bravo -Referencias: - -Tutorial: -- Snake Game in Python – Using Pygame module: https://www.geeksforgeeks.org/snake-game-in-python-using-pygame-module/ - -Audio e efeitos sonoros: -https://pixabay.com/pt/sound-effects/search/game/?pagi=6 - -Referencias extras Handout Pygame: -https://dessoft.insper-comp.com.br/conteudo/pygame - -Os sprites e fundo foram feitos pela equipe utilizando o Pixilart: -https://www.pixilart.com/ - -Agradecimentos: -Professor Carlos Eduardo Dantas de Menezes - - -Video introdução do jogo: -https://youtu.be/fkSBi-yOcR4 - -Jogando: -https://youtu.be/iMCJdfOADQY - +# snake +EP final de DesSoft + +Jogo da Cobrinha ('Snake') + +Requisitos: + +-Biblioteca Pygame + +Instalação: +Abra o seu terminal (Linux ou MacOS) ou Anaconda Prompt (Windows) e digite: + +pip install pygame + +Como rodar o jogo: + +Para rodar o jogo basta abrir o repositório e no arquivo Jogo rodar o programa. +Quando o jogo abrir aparecerá uma tela com o titulo e opções de dificuldade correspodendo: +1-Fácil 10 FPS (mais lento com aparencia um pouco travada, ideal para iniciantes) +2-Médio 15 FPS (velocidade e dificuldades moderadas, modo padrão de jogo) +3-Difícil 30 FPS (velocidade e dificuldade elevadas) +9-Ipossível 70 FPS (Velocidade e dificuldade extremas, não é para amadores) + +Para seslcionar a dificuldade basta precinar a tecla correspondete caso não seja selecionada o jogo rodará na dificuldade média + +Após selecionar a dificuldade basta prssionar a tela ENTER +Com o jogo rodando as teclas AWSD ou as setas do teclado podem ser utilizadas para controlar as direções, nessa parte seu objetivo é coletar o maior número possível de maçãs no mapa e aumentar o temanho da 'snake', porém caso atinja uma das bordas ou seu proprio corpo o jogo acaba e retorna para tela de início. + +Caso deseje jogar novamente basta reptir o processo de seleção de dificuldade +Para sair clique com o mouse no 'X' canto superior direito ou alt+F4 + +Créditos: +-Bernardo Hersbach Nagem Sarcinelli +-Mordechai Dov Lask +-Rafael Vieira Bravo +Referencias: + +Tutorial: +- Snake Game in Python – Using Pygame module: https://www.geeksforgeeks.org/snake-game-in-python-using-pygame-module/ + +Audio e efeitos sonoros: +https://pixabay.com/pt/sound-effects/search/game/?pagi=6 + +Referencias extras Handout Pygame: +https://dessoft.insper-comp.com.br/conteudo/pygame + +Os sprites e fundo foram feitos pela equipe utilizando o Pixilart: +https://www.pixilart.com/ + +Agradecimentos: +Professor Carlos Eduardo Dantas de Menezes + + +Video introdução do jogo: +https://youtu.be/fkSBi-yOcR4 + +Jogando: +https://youtu.be/iMCJdfOADQY + diff --git "a/T\303\255tulo e dificuldade.py" "b/T\303\255tulo e dificuldade.py" deleted file mode 100644 index 471f4b8..0000000 --- "a/T\303\255tulo e dificuldade.py" +++ /dev/null @@ -1,88 +0,0 @@ -''' -Esse código foi um rascunho feito para a função que define a dificuldade -e cria a tela de título -''' - -import pygame -import time -import random - -pygame.init() -#%% Configuração da janela -# Configurações da janela do jogo -janela_comp=600 -janela_alt=400 -janela=pygame.display.set_mode((janela_comp,janela_alt)) -def titulo(): - tela=True - - while tela: - for event in pygame.event.get(): - if event.type==pygame.QUIT: - pygame.quit() - quit() - if event.type==pygame.KEYDOWN: - if event.key==pygame.K_RETURN: - tela=False - - if event.key==pygame.K_1: - fps=10 - elif event.key==pygame.K_2: - fps=15 - elif event.key==pygame.K_3: - fps=30 - elif event.key==pygame.K_9: - fps=100 - - - janela.fill((0,0,0)) - fonte_tit=pygame.font.SysFont('comic sans', 50) - tex_tit=fonte_tit.render('Jogo da Cobrinha', True, (255,255,255)) - janela.blit(tex_tit,(200,200)) - sel_font=pygame.font.SysFont('comic sans', 50) - esc_font=pygame.font.SysFont('comic sans', 20) - sel_texto=sel_font.render('Escolha a dificuldade: ',True,(255,255,255)) - facil_texto=sel_font.render('1 - Fácil',True,(255,255,255)) - medio_texto=sel_font.render('2 - Médio',True,(255,255,255)) - dif_texto=sel_font.render('3 - Difícil',True,(255,255,255)) - imp_texto=sel_font.render('9 - Impossível (É SÉRIO!)',True,(255,255,255)) - pygame.display.flip() - - -titulo() -''' -def dificuldade(): - tela=True - - while tela: - for event in pygame.event.get(): - if event.type==pygame.QUIT: - pygame.quit() - quit() - if event.type==pygame.KEYDOWN: - if event.key==pygame.K_RETURN: - tela=False - - fps=0 - - janela.fill((0,0,0)) - sel_font=pygame.font.SysFont('comic sans', 50) - esc_font=pygame.font.SysFont('comic sans', 20) - sel_texto=sel_font.render('Escolha a dificuldade: ',True,(255,255,255)) - facil_texto=sel_font.render('1 - Fácil',True,(255,255,255)) - medio_texto=sel_font.render('2 - Médio',True,(255,255,255)) - dif_texto=sel_font.render('3 - Difícil',True,(255,255,255)) - imp_texto=sel_font.render('9 - Impossível (É SÉRIO!)',True,(255,255,255)) - - if event in pygame.event.get(): - if event.type==pygame.KEYDOWN: - if event.key==pygame.K_1: - fps=10 - elif event.key==pygame.K_2: - fps=15 - elif event.key==pygame.K_3: - fps=30 - elif event.key==pygame.K_9: - fps=100 - pygame.display.flip() - ''' \ No newline at end of file diff --git a/__pycache__/titulo.cpython-312.pyc b/__pycache__/titulo.cpython-312.pyc index 4c85860..3792d24 100644 Binary files a/__pycache__/titulo.cpython-312.pyc and b/__pycache__/titulo.cpython-312.pyc differ diff --git a/titulo.py b/titulo.py index 8729321..4b1b872 100644 --- a/titulo.py +++ b/titulo.py @@ -1,47 +1,69 @@ -import pygame -from configurações import janela -def titulo(): - tela=True - - #define fps padrão - fps=15 - - while tela: - for event in pygame.event.get(): - if event.type==pygame.QUIT: - pygame.quit() - quit() - if event.type==pygame.KEYDOWN: - if event.key==pygame.K_RETURN: - tela=False - if event.key==pygame.K_1: - fps=10 - elif event.key==pygame.K_2: - fps=15 - elif event.key==pygame.K_3: - fps=30 - elif event.key==pygame.K_9: - fps=70 - - janela.fill((0,145,145)) - fonte_tit=pygame.font.SysFont('comic sans', 50) - tex_tit=fonte_tit.render('Jogo da Cobrinha', True, (255,255,255)) - sel_font=pygame.font.SysFont('comic sans', 35) - esc_font=pygame.font.SysFont('comic sans', 25) - sel_texto=sel_font.render('Escolha a dificuldade: ',True,(255,255,255)) - facil_texto=esc_font.render('1 - Fácil',True,(255,255,255)) - medio_texto=esc_font.render('2 - Médio',True,(255,255,255)) - dif_texto=esc_font.render('3 - Difícil',True,(255,255,255)) - imp_texto=esc_font.render('9 - Impossível (É SÉRIO!)',True,(255,255,255)) - next_texto=sel_font.render('Agora aperte Enter',True,(255,255,255)) - janela.blit(tex_tit,(100,50)) - janela.blit(sel_texto,(70,130)) - janela.blit(facil_texto,(70,180)) - janela.blit(medio_texto,(70,210)) - janela.blit(dif_texto,(70,240)) - janela.blit(imp_texto,(70,270)) - janela.blit(next_texto,(70,300)) - - pygame.display.flip() - - return fps \ No newline at end of file +import pygame +from configurações import janela + + +def seleciona_dificuldade(evento) -> int: + + if evento == pygame.K_1: + return 10 + elif evento == pygame.K_2: + return 15 + elif evento == pygame.K_3: + return 30 + elif evento == pygame.K_9: + return 70 + else: + return 15 + + +def usa_teclas(evento): + + if evento.type == pygame.QUIT: + pygame.quit() + quit() + elif evento.type == pygame.KEYDOWN: + if evento.key == pygame.K_RETURN: + return False + else: + fps = seleciona_dificuldade(evento.key) + return fps + + +def titulo(): + tela = True + + while tela: + for event in pygame.event.get(): + if usa_teclas(event) is not None: + if usa_teclas(event) == False: + tela = False + else: + fps = usa_teclas(event) + print(fps) + + janela.fill((0, 145, 145)) + fonte_tit = pygame.font.SysFont('comic sans', 50) + tex_tit = fonte_tit.render('Jogo da Cobrinha', True, (255, 255, 255)) + sel_font = pygame.font.SysFont('comic sans', 35) + esc_font = pygame.font.SysFont('comic sans', 25) + sel_texto = sel_font.render( + 'Escolha a dificuldade: ', True, (255, 255, 255)) + facil_texto = esc_font.render('1 - Fácil', True, (255, 255, 255)) + medio_texto = esc_font.render('2 - Médio', True, (255, 255, 255)) + dif_texto = esc_font.render('3 - Difícil', True, (255, 255, 255)) + imp_texto = esc_font.render( + '9 - Impossível (É SÉRIO!)', True, (255, 255, 255)) + next_texto = sel_font.render( + 'Agora aperte Enter', True, (255, 255, 255)) + janela.blit(tex_tit, (100, 50)) + janela.blit(sel_texto, (70, 130)) + janela.blit(facil_texto, (70, 180)) + janela.blit(medio_texto, (70, 210)) + janela.blit(dif_texto, (70, 240)) + janela.blit(imp_texto, (70, 270)) + janela.blit(next_texto, (70, 300)) + + pygame.display.flip() + + return fps +