0

I'm trying to make a dodge ball game, so I made a value called status and made "play" and "controller explanation" screen depending on the number of status. But whenever I run it the events in the play section is so slow as if it the clock.ticK() was set to 1 or it was lagged.

The whole code:

import pygame
import random
import math
import time

#1.초기화
pygame.init()

#2.기본 설정
#2-1 색상
BLACK=(0,0,0)
WHITE=(255,255,255)
size=[700,1000]

#2-2 화면 크기
screen = pygame.display.set_mode(size)

#2-3 게임 이름
pygame.display.set_caption("1946")

#2-4 시계 생성
clock=pygame.time.Clock()

#2-5 이미지 불러오기
status = 0
background_image = pygame.image.load("C:/Temp/a.png")
background_image = pygame.transform.scale(background_image,(700,1000))
player = pygame.image.load("C:/Temp/b.png")
player = pygame.transform.scale(player, (50,50))
enemy = pygame.image.load("C:/Temp/c.png")
enemy = pygame.transform.scale(enemy, (50,50))
enemy1 = pygame.image.load("C:/Temp/c.png")
enemy1= pygame.transform.scale(enemy,(50,50))
level_count = 1
size_player_width = player.get_rect()[0]
size_player_height = player.get_rect()[1]
mod = 0

#2-6 오브젝트 좌표
x_pos = -300
y_pos = -300
to_x=0
to_y=0
player_speed_x = 5
player_speed_y = 5
wx = 2000
wy = 2000
bx1=100
by1=100
by2=100
by3=100

#2-6(1) 적 속도
enemy_speed_x = 4
enemy_speed_y = 4
enemy1_speed_x = 4
enemy1_speed_y = 4

#2-6(2) 변수 랜덤 값
enemy_x = -300
enemy_y = -300
enemey1_x = -300
enemy1_y = -300
e=0
f=0

#2-6(3) 적 좌표(랜덤)

#2-8 글상자
font1 = pygame.font.SysFont("airal",100,True,True)
font2 = pygame.font.SysFont("airal",50,True,True)
font3 = pygame.font.SysFont("airal",100, True, True)
text1 = font1.render("Game",True, 0)
text2 = font2.render("start",True, 0)
text3 = font2.render("control",True, 0)
text4 = font2.render("setting",True, 0)
text5 = font2.render("w = up", True, 0)
text6 = font2.render("a = left", True, 0)
text7 = font2.render("s = right", True, 0)
text8 = font2.render("d = down", True, 0)
text9 = font2.render("ctrl = speed up", True, 0)
text10 = font2.render("exit", True, 0)
text11 = font3.render("Warning!!", True,255)

#3 주요 내용
play = True
while play:
    #3-1 fps
    clock.tick(60)

    #3-2 이벤트 
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False

        if status ==0:
            bx1=500
            by1=400
            by2=600
            by3=800
            if event.type == pygame.MOUSEBUTTONDOWN:
                e = event.pos[0]
                f = event.pos[1]
            if 400 < e < 500:
                if 400<f<600:
                    status = 1
                if 600<f<800:
                    status = 2
                if 800<f<1000:
                    status = 3
                player_speed_x = 0
                player_speed_y = 0
                enemy_speed_x = 0
                enemy_speed_y = 0
                enemy1_speed_x = 0
                enemy1_speed_y = 0

        if status == 1:
            time.sleep(1)
            
            player_speed_x = 5
            player_speed_y = 5
            enemy_speed_x = 4
            enemy_speed_y = 4
            enemy1_speed_x = 4
            enemy1_speed_y = 4
            x_pos = screen.get_size()[0]//2
            y_pos = screen.get_size()[1]//2
            enemy_x=random.randint(0,250)
            enemy_y=random.randint(0,400)
            enemy1_x=random.randint(100,300)+random.randint(100,300)
            enemy1_y=random.randint(200,500)+random.randint(200,500)
            
            bx1=-300
            by1=-300
            by2=-300
            by3=-300

            #플레이어 이동
            if level_count <=30:
                if event.type == pygame.KEYDOWN:
                    if event.key == 1073742048:
                        mod = 1
                    if event.key == 119:
                        to_y=-player_speed_y
                    elif event.key == 115:
                        to_y=player_speed_y
                    elif event.key == 97:
                        to_x=-player_speed_y
                    elif event.key == 100:
                        to_x=player_speed_x
                    elif event.key == 32:
                        player_speed_x = 10
                        player_speed_y = 10
                if event.type == pygame.KEYUP:
                    if event.key == 119:
                        to_y=0.1
                    elif event.key == 115:
                        to_y=0.1
                    elif event.key == 97:
                        to_x=0.1
                    elif event.key == 100:
                        to_x=0.1
                    elif event.key == 32:
                        player_speed_x = 5
                        player_speed_y = 5
                        
            #경고문
            if level_count == 25:
                wx=500
                wy=500
                            
            #이동키 좌우반전
            if level_count > 30:
                if level_count >= 35:
                    wx=2000
                    wy=2000
                if event.type == pygame.KEYDOWN:
                    if event.key == 119:
                        to_y=player_speed_y
                    elif event.key == 115:
                        to_y=-player_speed_y
                    elif event.key == 97:
                        to_x=player_speed_y
                    elif event.key == 100:
                        to_x=-player_speed_x
                    elif event.key == 32:
                        player_speed_x = -10
                        player_speed_y = -10
                if event.type == pygame.KEYUP:
                    if event.key == 119:
                        to_y=0.1
                    elif event.key == 115:
                        to_y=0.1
                    elif event.key == 97:
                        to_x=0.1
                    elif event.key == 100:
                        to_x=0.1
            x_pos += to_x
            y_pos += to_y

            if enemy_x<=0:
                enemy_x=0
                enemy_speed_x = -enemy_speed_x
                level_count += 1

            elif enemy_x>=690:
                enemy_x=690
                enemy_speed_x = -enemy_speed_x
                level_count += 1
            
            if enemy_y<=30:
                enemy_y=30
                enemy_speed_y = -enemy_speed_y
                level_count += 1

            if enemy_y>=870:
                enemy_y=870
                enemy_speed_y = -enemy_speed_y
                level_count += 1

            if enemy1_x<=0:
                enemy1_x=0
                enemy1_speed_x = -enemy1_speed_x
                level_count += 1

            elif enemy1_x>=690:
                enemy1_x=690
                enemy1_speed_x = -enemy1_speed_x
                level_count += 1
            
            if enemy1_y<=30:
                enemy1_y=30
                enemy1_speed_y = -enemy1_speed_y
                level_count += 1

            if enemy1_y>=870:
                enemy1_y=870
                enemy1_speed_y = -enemy1_speed_y
                level_count += 1
            
            #적 속도 누적
            enemy_x += enemy_speed_x
            enemy_y += enemy_speed_y
            enemy1_x += enemy1_speed_x
            enemy1_y += enemy1_speed_y

            #레벨 기록, 추가
            if level_count >0:
                if level_count<=40:
                    if level_count%3==0:
                        level_count += 1
                        
                        if enemy_speed_x >= 0:
                            if enemy_speed_y >= 0:
                                enemy_speed_x += 0.5
                                enemy_speed_y += 0.5

                            elif enemy_speed_y < 0:
                                enemy_speed_x += 1
                                enemy_speed_y -= 1
            
                        elif enemy_speed_x < 0:
                            if enemy_speed_y >= 0:
                                enemy_speed_x -= 0.5
                                enemy_speed_y -= 0.5
                            
                            elif enemy_speed_y < 0:
                                enemy_speed_x -= 0.5
                                enemy_speed_y -= 0.5
                            
                        if enemy1_speed_x >= 0:
                            if enemy1_speed_y >= 0:
                                enemy1_speed_x += 0.5
                                enemy1_speed_y += 0.5
                            
                            elif enemy1_speed_y < 0:
                                enemy1_speed_x += 0.5
                                enemy1_speed_y -= 0.5

                        elif enemy1_speed_x < 0:
                            if enemy1_speed_y >= 0:
                                enemy1_speed_x -= 0.5
                                enemy1_speed_y -= 0.5
                            
                            elif enemy1_speed_y < 0:
                                enemy1_speed_x -= 0.5
                                enemy1_speed_y -= 0.5

            if 27<level_count<30:
                screen.blit(text11, (400,500))        
                                
            if x_pos <= 0:
                x_pos = 0
            if x_pos >= 650:
                x_pos = 650
            if y_pos <= 50:
                y_pos = 50
            if y_pos >= 850:
                y_pos = 850
            
            point = level_count*50
            mx_pos = x_pos + 25
            my_pos = y_pos + 25
            mex_pos = enemy_x + 60
            mey_pos = enemy_y + 150
            mex1_pos = enemy1_x + 60
            mey1_pos = enemy1_y + 150
                
            if -20 < mx_pos-mex_pos < 20:
                if -20 < my_pos-mey_pos < 20:
                    pause = 1
                    print(point)
                    time.sleep(1)
                    play = False
                        
            if -20 < mx_pos-mex1_pos < 20:
                if -20 < my_pos-mey1_pos < 20:
                    pause = 1
                    print(point)
                    time.sleep(1)
                    play = False
                    
        if status == 2:
            if event.type == pygame.MOUSEBUTTONDOWN:
                e = event.pos[0]
                f = event.pos[1]
                
            if 500 < e < 600:
                if 800<f<900:
                    status = 0

        
            
    
    #3-3 화면
    screen.blit(background_image, (0, 0))

    if status == 1:
        screen.blit(player, (x_pos, y_pos))
        screen.blit(enemy, (enemy_x, enemy_y))
        screen.blit(enemy1, (enemy1_x,enemy1_y))

    if status == 0:
        screen.blit(text1, (200, 100))
        screen.blit(text2, (400,400))
        screen.blit(text3, (400,600))
        screen.blit(text4, (400,800))

    if status == 2:
        screen.blit(text5, (250,200))
        screen.blit(text6, (250,300))
        screen.blit(text7, (250,400))
        screen.blit(text8, (250,500))
        screen.blit(text9, (250,600))
        screen.blit(text10, (500,800))

    #3-4 업데이트
    pygame.display.flip()
pygame.quit() 

I tried putting functions in each section and changed the time for the play section but it wouldn't work.

Stephen Ostermiller
  • 23,933
  • 14
  • 88
  • 109
  • The problem is `time.sleep(1)`. `time.sleep(1)` waits for 1 second so it's the same as `clock.tick(1)` wich reduces the FPS to 1 per second. – Rabbid76 Dec 23 '22 at 06:58
  • I tried it but it doesn't work. It seems like it wasn't the problem but thank you so much – fish13031e Dec 24 '22 at 04:48

0 Answers0