-
-
Save vinothpandian/4337527 to your computer and use it in GitHub Desktop.
#PONG pygame | |
import random | |
import pygame, sys | |
from pygame.locals import * | |
pygame.init() | |
fps = pygame.time.Clock() | |
#colors | |
WHITE = (255,255,255) | |
RED = (255,0,0) | |
GREEN = (0,255,0) | |
BLACK = (0,0,0) | |
#globals | |
WIDTH = 600 | |
HEIGHT = 400 | |
BALL_RADIUS = 20 | |
PAD_WIDTH = 8 | |
PAD_HEIGHT = 80 | |
HALF_PAD_WIDTH = PAD_WIDTH / 2 | |
HALF_PAD_HEIGHT = PAD_HEIGHT / 2 | |
ball_pos = [0,0] | |
ball_vel = [0,0] | |
paddle1_vel = 0 | |
paddle2_vel = 0 | |
l_score = 0 | |
r_score = 0 | |
#canvas declaration | |
window = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) | |
pygame.display.set_caption('Hello World') | |
# helper function that spawns a ball, returns a position vector and a velocity vector | |
# if right is True, spawn to the right, else spawn to the left | |
def ball_init(right): | |
global ball_pos, ball_vel # these are vectors stored as lists | |
ball_pos = [WIDTH/2,HEIGHT/2] | |
horz = random.randrange(2,4) | |
vert = random.randrange(1,3) | |
if right == False: | |
horz = - horz | |
ball_vel = [horz,-vert] | |
# define event handlers | |
def init(): | |
global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel,l_score,r_score # these are floats | |
global score1, score2 # these are ints | |
paddle1_pos = [HALF_PAD_WIDTH - 1,HEIGHT/2] | |
paddle2_pos = [WIDTH +1 - HALF_PAD_WIDTH,HEIGHT/2] | |
l_score = 0 | |
r_score = 0 | |
if random.randrange(0,2) == 0: | |
ball_init(True) | |
else: | |
ball_init(False) | |
#draw function of canvas | |
def draw(canvas): | |
global paddle1_pos, paddle2_pos, ball_pos, ball_vel, l_score, r_score | |
canvas.fill(BLACK) | |
pygame.draw.line(canvas, WHITE, [WIDTH / 2, 0],[WIDTH / 2, HEIGHT], 1) | |
pygame.draw.line(canvas, WHITE, [PAD_WIDTH, 0],[PAD_WIDTH, HEIGHT], 1) | |
pygame.draw.line(canvas, WHITE, [WIDTH - PAD_WIDTH, 0],[WIDTH - PAD_WIDTH, HEIGHT], 1) | |
pygame.draw.circle(canvas, WHITE, [WIDTH//2, HEIGHT//2], 70, 1) | |
# update paddle's vertical position, keep paddle on the screen | |
if paddle1_pos[1] > HALF_PAD_HEIGHT and paddle1_pos[1] < HEIGHT - HALF_PAD_HEIGHT: | |
paddle1_pos[1] += paddle1_vel | |
elif paddle1_pos[1] == HALF_PAD_HEIGHT and paddle1_vel > 0: | |
paddle1_pos[1] += paddle1_vel | |
elif paddle1_pos[1] == HEIGHT - HALF_PAD_HEIGHT and paddle1_vel < 0: | |
paddle1_pos[1] += paddle1_vel | |
if paddle2_pos[1] > HALF_PAD_HEIGHT and paddle2_pos[1] < HEIGHT - HALF_PAD_HEIGHT: | |
paddle2_pos[1] += paddle2_vel | |
elif paddle2_pos[1] == HALF_PAD_HEIGHT and paddle2_vel > 0: | |
paddle2_pos[1] += paddle2_vel | |
elif paddle2_pos[1] == HEIGHT - HALF_PAD_HEIGHT and paddle2_vel < 0: | |
paddle2_pos[1] += paddle2_vel | |
#update ball | |
ball_pos[0] += int(ball_vel[0]) | |
ball_pos[1] += int(ball_vel[1]) | |
#draw paddles and ball | |
pygame.draw.circle(canvas, RED, ball_pos, 20, 0) | |
pygame.draw.polygon(canvas, GREEN, [[paddle1_pos[0] - HALF_PAD_WIDTH, paddle1_pos[1] - HALF_PAD_HEIGHT], [paddle1_pos[0] - HALF_PAD_WIDTH, paddle1_pos[1] + HALF_PAD_HEIGHT], [paddle1_pos[0] + HALF_PAD_WIDTH, paddle1_pos[1] + HALF_PAD_HEIGHT], [paddle1_pos[0] + HALF_PAD_WIDTH, paddle1_pos[1] - HALF_PAD_HEIGHT]], 0) | |
pygame.draw.polygon(canvas, GREEN, [[paddle2_pos[0] - HALF_PAD_WIDTH, paddle2_pos[1] - HALF_PAD_HEIGHT], [paddle2_pos[0] - HALF_PAD_WIDTH, paddle2_pos[1] + HALF_PAD_HEIGHT], [paddle2_pos[0] + HALF_PAD_WIDTH, paddle2_pos[1] + HALF_PAD_HEIGHT], [paddle2_pos[0] + HALF_PAD_WIDTH, paddle2_pos[1] - HALF_PAD_HEIGHT]], 0) | |
#ball collision check on top and bottom walls | |
if int(ball_pos[1]) <= BALL_RADIUS: | |
ball_vel[1] = - ball_vel[1] | |
if int(ball_pos[1]) >= HEIGHT + 1 - BALL_RADIUS: | |
ball_vel[1] = -ball_vel[1] | |
#ball collison check on gutters or paddles | |
if int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH and int(ball_pos[1]) in range(paddle1_pos[1] - HALF_PAD_HEIGHT,paddle1_pos[1] + HALF_PAD_HEIGHT,1): | |
ball_vel[0] = -ball_vel[0] | |
ball_vel[0] *= 1.1 | |
ball_vel[1] *= 1.1 | |
elif int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH: | |
r_score += 1 | |
ball_init(True) | |
if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(paddle2_pos[1] - HALF_PAD_HEIGHT,paddle2_pos[1] + HALF_PAD_HEIGHT,1): | |
ball_vel[0] = -ball_vel[0] | |
ball_vel[0] *= 1.1 | |
ball_vel[1] *= 1.1 | |
elif int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH: | |
l_score += 1 | |
ball_init(False) | |
#update scores | |
myfont1 = pygame.font.SysFont("Comic Sans MS", 20) | |
label1 = myfont1.render("Score "+str(l_score), 1, (255,255,0)) | |
canvas.blit(label1, (50,20)) | |
myfont2 = pygame.font.SysFont("Comic Sans MS", 20) | |
label2 = myfont2.render("Score "+str(r_score), 1, (255,255,0)) | |
canvas.blit(label2, (470, 20)) | |
#keydown handler | |
def keydown(event): | |
global paddle1_vel, paddle2_vel | |
if event.key == K_UP: | |
paddle2_vel = -8 | |
elif event.key == K_DOWN: | |
paddle2_vel = 8 | |
elif event.key == K_w: | |
paddle1_vel = -8 | |
elif event.key == K_s: | |
paddle1_vel = 8 | |
#keyup handler | |
def keyup(event): | |
global paddle1_vel, paddle2_vel | |
if event.key in (K_w, K_s): | |
paddle1_vel = 0 | |
elif event.key in (K_UP, K_DOWN): | |
paddle2_vel = 0 | |
init() | |
#game loop | |
while True: | |
draw(window) | |
for event in pygame.event.get(): | |
if event.type == KEYDOWN: | |
keydown(event) | |
elif event.type == KEYUP: | |
keyup(event) | |
elif event.type == QUIT: | |
pygame.quit() | |
sys.exit() | |
pygame.display.update() | |
fps.tick(60) |
KhushThePatel you use z and s
15 problems 15 PROBLEMS
Its good but we might need the introduction of some machine learning so the computer does something aswell
Its good but we might need the introduction of some machine learning so the computer does something aswell
uhh?
line 155, in
draw(window)
File "c:\Users\n\Desktop\ codes\games\pong.py", line 109, in draw
if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(paddle2_pos[1] - HALF_PAD_HEIGHT,paddle2_pos[1] + HALF_PAD_HEIGHT,1):
pygame 2.0.0.dev8 (SDL 2.0.12, python 3.8.3)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 155, in
draw(window)
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 101, in draw
if int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH and int(ball_pos[1]) in range(paddle1_pos[1] - HALF_PAD_HEIGHT,paddle1_pos[1] + HALF_PAD_HEIGHT,1):
TypeError: 'float' object cannot be interpreted as an integer
pygame 2.1.0 (SDL 2.0.16, Python 3.10.0)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "e:\python saves#PONG pygame.py", line 157, in
draw(window)
File "e:\python saves#PONG pygame.py", line 111, in draw
if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(paddle2_pos[1] - HALF_PAD_HEIGHT,paddle2_pos[1]
- HALF_PAD_HEIGHT,1):
TypeError: 'float' object cannot be interpreted as an integer
PS E:\python saves>
What this error?
Traceback (most recent call last):
File "C:\Users\anjel\OneDrive\Área de Trabalho\progamas úteis\Pong.py", line 168, in
draw(window)
File "C:\Users\anjel\OneDrive\Área de Trabalho\progamas úteis\Pong.py", line 120, in draw
if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(
TypeError: 'float' object cannot be interpreted as an integer
Nice and Simple code. Just one feedback. Please update all the lines having / to // as python 3 does not give back Integer with normal division symbol if the variables being used are not integer. hence creating a Type Error. for example:
ball_pos = [WIDTH/2,HEIGHT/2] to ball_pos = [WIDTH//2,HEIGHT//2]
Otherwise users will get TypeError: integer argument expected, got float Rest is perfect.
Worked like a charm! Or should I say PyCharm?! >:-}
How to make pong such that the 2nd player can control it from another network.