-
-
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) |
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?! >:-}
Its good but we might need the introduction of some machine learning so the computer does something aswell