-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgame1.py
280 lines (224 loc) · 8.13 KB
/
game1.py
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
import pygame as pg
import random as ram
#paleta de cores utilizada durante o desenvolvimento,
# não encontramos uma utilidade para classes nesse game
class colors:
white=(255,255,255)
blue=(0,0,255)
green=(0,140,0)
red=(255,0,0)
orange=(200,100,0)
black=(0,0,0)
#variáveis que contam o placar
pontosdireita=0
pontosesquerda=0
#algumas variáveis de controle de loop
g = True
principal = True
#exibe a mensagem de início de jogo
def startgame():
global principal
g=True
text = font.render(("Bem vindo ao Fut Pong"),1,cor.white)
fundo.blit(text, (448, 370))
text1 = font.render(("Aperte espaço para começar"),1,cor.white)
fundo.blit(text1, (398, 400))
pg.display.update()
while g:
for event in pg.event.get():
if event.type == pg.KEYDOWN:
if event.key == pg.K_SPACE:
g = False
elif event.type == pg.QUIT:
principal = False
g = False
#responsável por verificar se algum jogador atingiu
# 5 pontos e assim encerrar o jogo, começando uma nova partida
def endgame():
global principal, pontosdireita, pontosesquerda
g = True
if pontosdireita==5 or pontosesquerda==5:
if pontosdireita>pontosesquerda:
text = font.render(("Jogador direito venceu!"),1,cor.white)
fundo.blit(text, (455, 370))
text1 = font.render(("Aperte espaço para recomeçar"),1,cor.white)
fundo.blit(text1, (398, 400))
pg.display.update()
while g:
for event in pg.event.get():
if event.type == pg.KEYDOWN:
if event.key == pg.K_SPACE:
g = False
elif event.type == pg.QUIT:
g = False
principal = False
print('Jogador esquerdo venceu!')
elif pontosdireita<pontosesquerda:
text = font.render(("Jogador esquerdo venceu!"),1,cor.white)
fundo.blit(text, (428, 370))
text = font.render(("Aperte espaço para recomeçar"),1,cor.white)
fundo.blit(text, (398, 400))
pg.display.update()
while g:
for event in pg.event.get():
if event.type == pg.KEYDOWN:
if event.key == pg.K_SPACE:
g = False
elif event.type == pg.QUIT:
g = False
principal = False
print('Jogador direito venceu!')
pontosdireita = 0
pontosesquerda = 0
#sempre é chamado quando o placar estiver abaixo de 5
# para exibir a mensagem de continuação
def continua():
global principal
g = True
if x<0:
text = font.render(("Jogador esquerdo marcou!"),1,cor.white)
fundo.blit(text, (425,310))
text = font.render(("Pressione espaço para continuar"),1,cor.white)
fundo.blit(text, (370,345))
pg.display.update()
elif x>0:
text = font.render(("Jogador direito marcou!"),1,cor.white)
fundo.blit(text, (430,310))
text = font.render(("Pressione espaço para continuar"),1,cor.white)
fundo.blit(text, (370,345))
pg.display.update()
while g:
for event in pg.event.get():
if event.type == pg.KEYDOWN:
if event.key == pg.K_SPACE:
g = False
elif event.type == pg.QUIT:
g = False
principal = False
#tamanho da janela em pixels
largura=1280
altura=720
#define as raquetes
raqueteesquerda = pg.Rect(65,240,10,200)
raquetedireita = pg.Rect(1200,240,10,200)
#define a bola
bola = pg.Rect(largura/2,altura/2,15,15)
#define os limites superior e inferior
superior = pg.Rect(0,-10,1280,10)
inferior = pg.Rect(0,720,1280,10)
#define os contadores de pontos
retangulocontesquerdo = pg.Rect(-190,0,200,720)
retangulocontdireito = pg.Rect(1270,0,200,720)
#inicia o pygame
pg.init()
#define a fonte de texto utilizada
pg.font.init()
font1 = pg.font.get_default_font()
font = pg.font.SysFont(font1, 50)
#velocidade com que a raquete se move
move = 10
#configuração de FPS e controle de uso da CPU
pg.mixer.quit()
clock = pg.time.Clock()
#velocida inicial X da bola
velocidade_bola = 5
#randomiza X e Y da bola no início do jogo
y = ram.choice([-3,3])
x = ram.choice([-velocidade_bola,velocidade_bola])
#define a janela, nome do jogo
fundo = pg.display.set_mode((largura,altura))
pg.display.set_caption('FUT PONG')
#chama a paleta de cores
cor = colors()
#exibe a mensagem de início do jogo
startgame()
# Loop principal do jogo
while principal:
#fechamento da janela
for event in pg.event.get():
if event.type == pg.QUIT:
principal = False
#teclas que movem as raquetes
teclas_pressionadas = pg.key.get_pressed()
if teclas_pressionadas[pg.K_UP]:
if not superior.colliderect(raquetedireita):
raquetedireita.move_ip(0,-move)
if teclas_pressionadas[pg.K_DOWN]:
if not inferior.colliderect(raquetedireita):
raquetedireita.move_ip(0,+move)
if teclas_pressionadas[pg.K_w]:
if not superior.colliderect(raqueteesquerda):
raqueteesquerda.move_ip(0,-move)
if teclas_pressionadas[pg.K_s]:
if not inferior.colliderect(raqueteesquerda):
raqueteesquerda.move_ip(0,+move)
#inversores de sinal +/- de X quando a bola bater na raquete,
#também incrementam a velocidade da bola
if raquetedireita.colliderect(bola):
x += (1 * (x / abs(x)))
x = x * -1
i = ram.choice([1,2])
if i==1:
y = y * -1
elif raqueteesquerda.colliderect(bola):
x += (1 * (x / abs(x)))
x = x * -1
i = ram.choice([1,2])
if i==1:
y = y * -1
#inversores de sinal +/- de Y quando a bola bater no
#limite superior ou inferior
if superior.colliderect(bola):
y = y * -1
elif inferior.colliderect(bola):
y = y * -1
#contadores de pontos para quando a bola bater no final da janela,
#redefine a posição inicial das raquetes e da bola, além de permitir a
#continuação do jogo. Também define que quem marca o ponto, recomeça
#o jogo tendo de defender-se
if retangulocontdireito.colliderect(bola):
pontosesquerda+=1
bola = pg.Rect(largura/2,altura/2,15,15)
x = -abs(velocidade_bola)
raqueteesquerda = pg.Rect(65,240,10,200)
raquetedireita = pg.Rect(1200,240,10,200)
if pontosesquerda<5:
continua()
elif retangulocontesquerdo.colliderect(bola):
pontosdireita+=1
bola = pg.Rect(largura/2,altura/2,15,15)
x = abs(velocidade_bola)
raqueteesquerda = pg.Rect(65,240,10,200)
raquetedireita = pg.Rect(1200,240,10,200)
if pontosdireita<5:
continua()
#responsável por fazer a movimentação da bola X e Y
#pré definidos no início
bola.move_ip(x,y)
#define o fundo da janela
fundo.fill(cor.black)
#define o placar no topo da janela
text = font.render((str(pontosesquerda)),1,cor.white)
fundo.blit(text, (600, 10))
text = font.render((str(pontosdireita)),1,cor.white)
fundo.blit(text, (660, 10))
text = font.render(('x'),1,cor.white)
fundo.blit(text, (630, 10))
#sempre é chamado para verificar o possível fim de jogo
endgame()
#define a propriedade reativa de impacto das raquetes e as desenha na tela
pg.draw.rect(fundo,cor.white,raqueteesquerda)
pg.draw.rect(fundo,cor.white,raquetedireita)
#define a propriedade reativa de impacto dos limites superior
# e inferior
pg.draw.rect(fundo,cor.white,superior)
pg.draw.rect(fundo,cor.white,inferior)
#define a propriedade reativa de impacto dos contadores de pontos
pg.draw.rect(fundo,cor.red,retangulocontdireito)
pg.draw.rect(fundo,cor.red,retangulocontesquerdo)
#define a propriedade reativa de impacto da bola e a desenha na tela
pg.draw.ellipse(fundo,cor.white,bola)
#sempre que chamado, atualiza a informação exibida na tela
pg.display.update()
#FPS
clock.tick(120)