Python 3.x Pygame代码非常慢,尽管进行了所有故障排除
因此,我从pygame简介教程中编写了这个游戏,添加了菜单和所有内容来修改它。每当我在我的MBP17上运行游戏时,它运行得非常慢。我在谷歌上搜索了一下,尝试了所有的解决方案,但都没有成功。而且,在我的event.unicode中输入的效果非常糟糕,我必须多次按同一个键才能注册。感谢您的帮助Python 3.x Pygame代码非常慢,尽管进行了所有故障排除,python-3.x,macos,pygame,Python 3.x,Macos,Pygame,因此,我从pygame简介教程中编写了这个游戏,添加了菜单和所有内容来修改它。每当我在我的MBP17上运行游戏时,它运行得非常慢。我在谷歌上搜索了一下,尝试了所有的解决方案,但都没有成功。而且,在我的event.unicode中输入的效果非常糟糕,我必须多次按同一个键才能注册。感谢您的帮助 import sys import pygame import random import math import mysql.connector as mysql import pygame_textinp
import sys
import pygame
import random
import math
import mysql.connector as mysql
import pygame_textinput
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Die Alien Die')
#database requirements
msql = mysql.connect(user='root', password='7014403396', database='gamer')
cursor = msql.cursor()
#background
background = pygame.image.load('back.png').convert()
pygame.mixer.music.load('y2mate.com - Star Wars_ Sith Battle Theme Music_XS4_5xlA3Ls_320kbps.mp3')
pygame.mixer.music.play(-1)
clock = pygame.time.Clock()
#millenium falcom
playerimg = pygame.image.load('mfc.png')
playerX = 350
playerY = 480
dx = 0
dy = 0
#alien die
alienimg = []
alienX =[]
alienY =[]
adx = []
ady = []
no_of_aliens = 8
for i in range(no_of_aliens):
alienimg.append(pygame.image.load('spaceship.png'))
alienX.append(random.randint(0,735))
alienY.append(random.randint(50,250))
adx.append(0.3)
ady.append(random.randint(20,43))
#bullets
bulletimg = pygame.image.load('bullet.png')
bulletX = 0
bulletY = 480
bdx = 0
bdy = 1
visibility = False
score = 0
font=pygame.font.Font('freesansbold.ttf',32)
font2 = pygame.font.Font('freesansbold.ttf',25)
font3 = pygame.font.Font('freesansbold.ttf',22)
# Game Over
over_font = pygame.font.Font('freesansbold.ttf', 64)
click = False
def EnterUser():
texty = ''
global click
while True:
screen.fill((255, 255, 255))
textinput = pygame_textinput.TextInput()
events = pygame.event.get()
textinput.update(events)
screen.blit(textinput.get_surface(), (50, 150))
buttong = pygame.Rect(50, 330, 200, 50)
mx, my = pygame.mouse.get_pos()
pygame.draw.rect(screen, (255, 0, 0), buttong)
draw_text('enter username', font, (0, 0, 0), screen, 20, 20)
draw_text("Press Enter", font2, (0, 0, 0), screen, 50, 200)
draw_text("If you leave username blank", font2, (0, 0, 0), screen, 50, 250)
draw_text("your score wont register", font2, (0, 0, 0), screen, 50, 280)
text_surface = font.render(texty, True, (0,0,0))
screen.blit(text_surface, (50, 150))
draw_text('Lets Go', font2, (0, 0, 0), screen, 52, 340)
if buttong.collidepoint((mx, my)):
if click:
main_menu()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
texty += event.unicode
if event.key == pygame.K_BACKSPACE:
texty = texty[:-1]
if event.key == pygame.K_ESCAPE:
pygame.quit()
if event.type == pygame.K_RETURN:
main_menu()
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
click = True
pygame.display.update()
def draw_text(text, font, color, surface, x, y):
textobj = font.render(text, 1, color)
textrect = textobj.get_rect()
textrect.topleft = (x, y)
surface.blit(textobj, textrect)
def player(x, y):
screen.blit(playerimg, (x, y))
def alien(x,y,i):
screen.blit(alienimg[i],(x,y))
def shoot(x,y):
global visibility
visibility = True
screen.blit(bulletimg,(x+25,y+10))
def collide(bulletX,bulletY,alienX,alienY):
distance = math.sqrt(math.pow(alienX-bulletX,2)+math.pow(alienY-bulletY,2))
if distance < 27:
return True
else:
return False
def showscore(x,y):
sscore=font.render('Score: '+str(score),True,(141,27,31))
screen.blit(sscore,(x,y))
def game_over_text():
over_text = over_font.render("GAME OVER", True, (255, 255, 255))
screen.blit(over_text, (200, 250))
fscore = score
save_score()
def save_score():
t = "INSERT INTO alien VALUES('{}', '{}')".format(texty, str(score))
#val = (texty, str(score))
cursor.execute(t)
msql.commit()
#def show_high():
def main_menu():
while True:
screen.fill((0, 0, 0))
draw_text('Main Menu', font, (255, 255, 255), screen, 20, 20)
mx, my = pygame.mouse.get_pos()
button_1 = pygame.Rect(50, 100, 200, 50)
button_2 = pygame.Rect(50, 200, 200, 50)
if button_1.collidepoint((mx, my)):
if click:
game()
if button_2.collidepoint((mx, my)):
if click:
options()
pygame.draw.rect(screen, (255, 0, 0), button_1)
pygame.draw.rect(screen, (255, 0, 0), button_2)
draw_text('Alien Destroyer', font2, (0,0,0), screen, 52, 110)
draw_text('Show high scores', font3, (0,0,0), screen, 52, 206)
draw_text('for Alien Destroyer', font3, (0,0,0), screen, 52, 230)
click = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
click = True
pygame.display.update()
# game loop
def game():
global dx
global dy
global adx
global ady
global bdx
global bdy
global playerY
global playerX
global alienX
global alienY
global bulletY
global bulletX
global visibility
global score
running = True
while running:
clock.tick(60)
screen.fill((0, 0, 0))
screen.blit(background, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
dx = -1
if event.key == pygame.K_RIGHT:
dx = 1
if event.key == pygame.K_SPACE:
pygame.mixer.music.load('laser.wav')
pygame.mixer.music.play()
bulletX = playerX
shoot(bulletX, bulletY)
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
dx = 0
playerX += dx
if playerX <= 0:
playerX = 0
elif playerX >= 736:
playerX = 736
for i in range(no_of_aliens):
if alienY[i] > 440:
for j in range(no_of_aliens):
alienY[j] = 2000
game_over_text()
break
alienX[i] += adx[i]
if alienX[i] <= 0:
adx[i] = 0.3
alienY[i] += ady[i]
elif alienX[i] >= 736:
adx[i] = -0.3
alienY[i] += ady[i]
death = collide(bulletX, bulletY, alienX[i], alienY[i])
if death:
pygame.mixer.music.load('explosion.wav')
pygame.mixer.music.play()
bulletY = 480
visibility = False
score += 1
alienX[i] = random.randint(0, 735)
alienY[i] = random.randint(30, 130)
alien(alienX[i], alienY[i], i)
if bulletY <= 0:
bulletY = 480
visibility = False
if visibility is True:
shoot(bulletX, bulletY)
bulletY -= bdy
showscore(10, 10)
player(playerX, playerY)
pygame.display.update()
EnterUser()
导入系统
导入pygame
随机输入
输入数学
将mysql.connector作为mysql导入
导入pygame_文本输入
pygame.init()
screen=pygame.display.set_模式((800600))
pygame.display.set_标题('死亡外星人死亡')
#数据库要求
msql=mysql.connect(用户='root',密码='7014403396',数据库='gamer')
cursor=msql.cursor()
#背景
background=pygame.image.load('back.png').convert()
pygame.mixer.music.load('y2mate.com-starwars\usith战斗主题音乐\uxs4\u5xla3ls\u320kbps.mp3')
pygame.mixer.music.play(-1)
clock=pygame.time.clock()
#千年隼
playerimg=pygame.image.load('mfc.png')
playerX=350
playerY=480
dx=0
dy=0
#外星人死亡
alienimg=[]
alienX=[]
alienY=[]
adx=[]
ady=[]
没有外星人=8
对于范围内的i(无外星人):
alienimg.append(pygame.image.load('spaceship.png'))
alienX.append(random.randint(0735))
alienY.append(random.randint(50250))
adx.append(0.3)
ady.append(random.randint(20,43))
#子弹
bulletimg=pygame.image.load('bullet.png')
bulletX=0
bulletY=480
bdx=0
bdy=1
可见性=错误
分数=0
font=pygame.font.font('freesansbold.ttf',32)
font2=pygame.font.font('freesansbold.ttf',25)
font3=pygame.font.font('freesansbold.ttf',22)
#游戏结束
over_font=pygame.font.font('freesansbold.ttf',64)
单击=False
def EnterUser():
texty=''
全局单击
尽管如此:
屏幕填充((255、255、255))
textinput=pygame\u textinput.textinput()
events=pygame.event.get()
textinput.update(事件)
blit(textinput.get_surface(),(50150))
按钮=pygame.Rect(5033020050)
mx,my=pygame.mouse.get_pos()
pygame.draw.rect(屏幕,(255,0,0),按钮)
绘制文本('输入用户名',字体,(0,0,0),屏幕,20,20)
绘制文字(“按回车键”,字体2,(0,0,0),屏幕,50,200)
绘制文本(“如果您将用户名留空”,font2,(0,0,0),屏幕,50250)
绘制文本(“你的分数不会注册”,font2,(0,0,0),屏幕,50280)
text_surface=font.render(texty,True,(0,0,0))
屏幕。blit(文本表面,(50,150))
绘制文本(“放手”,字体2,(0,0,0),屏幕,52340)
如果按钮碰撞点((mx,my)):
如果单击:
主菜单()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
sys.exit()
如果event.type==pygame.KEYDOWN:
texty+=event.unicode
如果event.key==pygame.K_退格:
texty=texty[:-1]
如果event.key==pygame.K_退出:
pygame.quit()
如果event.type==pygame.K_返回:
主菜单()
如果event.type==pygame.MOUSEBUTTONDOWN:
如果event.button==1:
单击=真
pygame.display.update()
def绘制文字(文字、字体、颜色、表面、x、y):
textobj=font.render(文本,1,颜色)
textrect=textobj.get_rect()
textrect.topleft=(x,y)
surface.blit(textobj,textrect)
def播放器(x,y):
屏幕光点(playerimg,(x,y))
def外星人(x,y,i):
屏幕光点(alienimg[i],(x,y))
def喷射(x,y):
全球能见度
可见性=真
屏幕光点(项目符号,(x+25,y+10))
def碰撞(bulletX、bulletY、alienX、alienY):
距离=math.sqrt(math.pow(alienX-bulletX,2)+math.pow(alienY-bulletY,2))
如果距离小于27:
返回真值
其他:
返回错误
def显示分数(x,y):
sscore=font.render('Score:'+str(Score),True,(141,27,31))
屏幕光点(sscore,(x,y))
def game_over_text():
over_text=over_font.render(“游戏结束”,True,(255,255,255))
屏幕。blit(超过文本(200250))
分数
保存分数()
def save_score():
t=“插入外来值('{}','{}')”。格式(texty,str(score))
#val=(文本,str(分数))
cursor.execute(t)
提交()
#def显示_高()
def主菜单():
尽管如此:
屏幕填充((0,0,0))
绘制文本(“主菜单”,字体,(255,255,255),屏幕,20,20)
mx,my=pygame.mouse.get_pos()
button_1=pygame.Rect(5010020050)
按钮2=pygame.Rect(5020020050)
如果按钮_1.碰撞点((mx,my)):
如果单击:
游戏()
如果按钮_2.碰撞点((mx,my)):
如果单击:
选项()
pygame.draw.rect(屏幕,(255,0,0),按钮1)
pygame.draw.rect(屏幕,(255,0,0),按钮2)
绘制文字(“外星人驱逐舰”,font2,(0,0,0),屏幕,52110)
绘制文本(“显示高分”,font3,(0,0,0),屏幕,52206)
绘制文字('外星毁灭者',font3,(0,0,0),屏幕,52230)
单击=False
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_退出:
pygame.quit()
如果event.type==pygame.MOUSEBUTTONDOWN:
如果event.button==1:
单击=真
pygame.display.update()
#游戏循环
def game():
全局dx
全球dy
全球adx
全球ady
全球bdx
全球bdy
全球游戏
全球playerX
全球阿利恩克斯
全球alienY
全球快报
全球简报
全球能见度
全球得分
运行=真
运行时:
时钟滴答(60)
屏幕填充((0,0,0))
屏幕。blit(背景)(0,0
def game:
while running:
#omitted code
events = pygame.event.get()
for event in events:
#...