Daha fazla
- Sistem Özellikleri
- M1 Macbook Air 16/256GB
- Cinsiyet
- Erkek
- Meslek
- Software Developer
Pygame üzerinden pong oyunu yaptım ve bunu dikey bir biçime çevirmek istiyorum.
şeklinde kullandım ama uygulayamadım.
Oyunum :
Kod:
WIN.blit(pygame.transform.rotate(WIN, 90), (0, 0))
Oyunum :
Python:
import pygame
pygame.init()
WIDTH , HEIGHT = 700 , 500
WIN = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Pong Game")
fps = 60
WHITE = (255,255,255)
BLACK = (0,0,0)
BALL_RADIUS = 7
PADDLE_WIDTH , PADDLE_HEIGHT = 20 , 100
WINNING_SCORE = 10
SCORE_FONT = pygame.font.SysFont("comicsans", 50)
class Paddle:
COLOR = WHITE
VEL = 6
def __init__(self , x, y , width ,height):
self.x = self.org_x =x
self.y = self.org_y =y
self.width = width
self.height = height
def draw(self,win):
pygame.draw.rect(win,self.COLOR, (self.x,self.y,self.width,self.height))
def move(self, up=True):
if up:
self.y -= self.VEL
else:
self.y += self.VEL
def reset(self):
self.x = self.org_x
self.y = self.org_y
class Ball:
MAX_VEL = 5
COLOR = WHITE
def __init__(self, x , y, radius):
self.x = self.original_x = x
self.y = self.original_y = y
self.radius = radius
self.x_vel = self.MAX_VEL
self.y_vel = 0
def draw(self,win):
pygame.draw.circle(win,self.COLOR, (self.x, self.y), self.radius)
def move(self):
self.x += self.x_vel
self.y += self.y_vel
def reset(self):
self.x = self.original_x
self.y = self.original_y
self.y_vel = 0
self.x_vel *= -1
def draw(win, paddles, ball, left_score , right_score):
win.fill(BLACK)
left_score_text = SCORE_FONT.render(f"{left_score}",1 ,WHITE)
right_score_text = SCORE_FONT.render(f"{right_score}",1 ,WHITE)
win.blit(left_score_text, (WIDTH//4 - left_score_text.get_width() //2 , 20))
win.blit(right_score_text, (WIDTH *(3 /4) - right_score_text.get_width() //2 , 20))
for paddle in paddles:
paddle.draw(win)
for i in range (10 , HEIGHT , HEIGHT//20):
if i % 2 == 1:
continue
pygame.draw.rect(win, WHITE, (WIDTH//2 -5, i, 10, HEIGHT//20))
ball.draw(win)
pygame.display.update()
def handle_collision(ball,left_paddle,right_paddle):
if ball.y + ball.radius >= HEIGHT:
ball.y_vel *= -1
elif ball.y - ball.radius <=0:
ball.y_vel *= -1
if ball.x_vel <0:
if ball.y >= left_paddle.y and ball.y <= left_paddle.y + left_paddle.height:
if ball.x - ball.radius <= left_paddle.x + left_paddle.width:
ball.x_vel *= -1
middle_y = left_paddle.y + left_paddle.height / 2
difference_in_y = middle_y - ball.y
reduction_factor = (left_paddle.height / 2) / ball.MAX_VEL
y_vel = difference_in_y / reduction_factor
ball.y_vel = y_vel*-1
else:
if ball.y >= right_paddle.y and ball.y <= right_paddle.y + right_paddle.height:
if ball.x + ball.radius >= right_paddle.x:
ball.x_vel *= -1
middle_y = right_paddle.y + right_paddle.height / 2
difference_in_y = middle_y - ball.y
reduction_factor = (right_paddle.height / 2) / ball.MAX_VEL
y_vel = difference_in_y / reduction_factor
ball.y_vel = y_vel *-1
def handle_paddle_movement(keys, left_paddle,right_paddle):
if keys[pygame.K_w] and left_paddle.y - left_paddle.VEL >= 0 :
left_paddle.move(up=True)
if keys[pygame.K_s] and left_paddle.y + left_paddle.VEL + left_paddle.height <= HEIGHT:
left_paddle.move(up=False)
if keys[pygame.K_UP] and right_paddle.y - right_paddle.VEL >= 0 :
right_paddle.move(up=True)
if keys[pygame.K_DOWN] and right_paddle.y + right_paddle.VEL + right_paddle.height <= HEIGHT:
right_paddle.move(up=False)
def main():
run = True
clock = pygame.time.Clock()
left_paddle = Paddle(10 , HEIGHT//2 - PADDLE_HEIGHT//2 ,PADDLE_WIDTH,PADDLE_HEIGHT)
right_paddle = Paddle(WIDTH - 10 - PADDLE_WIDTH, HEIGHT//2 - PADDLE_HEIGHT//2 ,PADDLE_WIDTH,PADDLE_HEIGHT)
ball = Ball(WIDTH //2 ,HEIGHT //2 , BALL_RADIUS )
left_score = 0
right_score = 0
while run:
clock.tick(fps)
draw(WIN, [left_paddle,right_paddle],ball, left_score,right_score)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
break
keys = pygame.key.get_pressed()
handle_paddle_movement(keys, left_paddle,right_paddle )
ball.move()
handle_collision(ball,left_paddle,right_paddle)
if ball.x < 0:
right_score +=1
ball.reset()
elif ball.x > WIDTH:
left_score +=1
ball.reset()
won = False
if left_score >= WINNING_SCORE:
won = True
win_text = "Left Player Won!"
elif right_score >= WINNING_SCORE:
won = True
win_text = "Right Player Won!"
if won:
text = SCORE_FONT.render(win_text ,1 ,WHITE)
WIN.blit(text, (WIDTH//2 - text.get_width()//2 ,HEIGHT//2 - text.get_height()//2))
pygame.display.update()
pygame.time.delay(5000)
left_paddle.reset()
right_paddle.reset()
ball.reset()
left_score = 0
right_score = 0
pygame.quit()
if __name__ == "__main__":
main()
Son düzenleyen: Moderatör: