/
pong_main.py
151 lines (132 loc) · 5.33 KB
/
pong_main.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
# Paul Moore
def pong_main():
import pygame
from pong_player import Player
from pong_ball import Ball
import sys
# Define some colors, you may want to add more
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
pygame.init()
# Set the width and height of the screen [width, height]
size = (700, 500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pong")
# Loop until the user clicks the close button.
done = False
# Used to manage how fast the screen updates
clock = pygame.time.Clock()
# Setup
pygame.mixer.music.stop()
players = [Player(screen, (30, 200, 20, 100), WHITE),
Player(screen, (650, 200, 20, 100), WHITE)]
ball = Ball(screen, (330, 230, 20, 20), WHITE, players)
font = pygame.font.SysFont('Calibri', 25, True, False)
font2 = pygame.font.SysFont('Calibri', 45, True, False)
title_screen = pygame.image.load('pong_titlescreen.png').convert()
pygame.mixer.music.load('pong_music.wav')
muted = pygame.image.load('pong_music_muted.png')
unmuted = pygame.image.load('pong_music_playing.png')
mute_rect = pygame.Rect(300, 10, 50, 40)
def waitforkeypress():
music_ismuted = False
while True:
mpos = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
from menu import menu_main
menu_main()
return music_ismuted
if event.type == pygame.MOUSEBUTTONDOWN and mute_rect.collidepoint(mpos[0], mpos[1]):
if music_ismuted:
music_ismuted = False
else:
music_ismuted = True
screen.blit(title_screen, (0, 0))
if music_ismuted:
screen.blit(muted, (300, 10))
pygame.mixer.music.pause()
else:
screen.blit(unmuted, (300, 10))
pygame.mixer.music.unpause()
pygame.display.flip()
def gameover():
respawn_text = font2.render('Play Again? Y/N', True, WHITE)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
from menu import menu_main
menu_main()
elif event.key == pygame.K_y:
pong_main()
elif event.key == pygame.K_n:
from menu import menu_main
menu_main()
screen.blit(respawn_text, (190, 150))
pygame.display.flip()
pygame.mixer.music.play(-1)
music_ismuted = waitforkeypress()
# -------- Main Program Loop -----------
while not done:
# --- Main event loop
mpos = pygame.mouse.get_pos()
# --- All events are detected here
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
players[0].speed = -4
elif event.key == pygame.K_s:
players[0].speed = 4
elif event.key == pygame.K_UP:
players[1].speed = -4
elif event.key == pygame.K_DOWN:
players[1].speed = 4
elif event.key == pygame.K_x:
ball.x_speed *= 1.25
elif event.key == pygame.K_q:
gameover()
elif event.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_s:
players[0].speed = 0
elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
players[1].speed = 0
if event.type == pygame.MOUSEBUTTONDOWN and mute_rect.collidepoint(mpos[0], mpos[1]):
if music_ismuted:
music_ismuted = False
else:
music_ismuted = True
# --- Game logic should go here
# --- Screen-clearing code goes here
# Here, we clear the screen to white.
screen.fill(BLACK)
# --- Drawing code should go here
pygame.draw.rect(screen, WHITE, (340, 0, 10, 500))
ball.update()
if ball.player1_score == 11 or ball.player2_score == 11:
done = True
for player in players:
player.update()
p1_score = font.render(str(ball.player1_score), True, WHITE)
p2_score = font.render(str(ball.player2_score), True, WHITE)
screen.blit(p1_score, (10, 10))
screen.blit(p2_score, (670, 10))
if music_ismuted:
screen.blit(muted, (300, 10))
pygame.mixer.music.pause()
else:
screen.blit(unmuted, (300, 10))
pygame.mixer.music.unpause()
# --- Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# --- Limit to 60 frames per second
clock.tick(60)
# Close the window and quit.
gameover()