qq_36717829 2021-12-07 15:15 采纳率: 100%
浏览 111
已结题

请看下代码,百度了好久都没有找到解决办法。TypeError: 'pygame.Surface' object is not callable,并且运行出来是黑屏的,没有任何响应

import sys
import pygame
import threading
import random

#创建游戏类
class Game:

def __init__(self):
    
    #pygame初始化
    pygame.init()
    
    #设置显示模式
    self.screen = pygame.display.set_mode((800,600))
    
    #设置窗口标题
    pygame.display.set_caption('python game')
    
    #图片列表
    self.image = []
    
    #图片大小列表
    self.imagerect = []
    
    #载入图片
    self.vs = pygame.image.load('vs.png')
    self.o = pygame.image.load('o.png')
    self.p = pygame.image.load('p.png')
    self.u = pygame.image.load('u.png')
    self.start = pygame.image.load('start.png')
    self.exit = pygame.image.load('exit.png')
    self.title = pygame.image.load('title.png')

    for i in range(3):
        png = pygame.image.load(str(i)+'.png')
        self.image.append(png)
        
    #处理图片绘制区域
    for i in range(3):
        image = self.image[i]
        rect = image.get_rect()
        rect.left = 200*(i+1)+rect.left
        rect.top = 400
        self.imagerect.append(rect)
        
        
        
#绘制游戏初始界面
def Start(self):
    
    #绘制游戏名称
    self.screen.blit(self.title,(200,100,400,140))
    
    #绘制开始按钮
    self.screen.blit(self.start,(350,300,100,50))
    
    #绘制退出按钮
    self.screen.blit(self.exit,(350,400,100,50))

    #刷新屏幕
    pygame.display.flip()

    
    start = 1
    
    #进入消息循环
    while start:
        
        #处理消息
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:      #处理鼠标单击消息
                if self.isStart() ==0 :
                    start = 0
                elif self.isStart() == 1:
                    sys.exit()
                else:
                    pass
            else:
                pass
    self.run()      #开始游戏
    
    
def run(self):
    self.screen.fill((0,0,0))
    
    for i in range(3):
        self.screen.blit(self.image[i],self.imagerect[i])
    pygame.display.flip()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:      #处理鼠标单击消息
                self.OnMouseButDown()
            else:
                pass
    
    
def isStart(self):
    pos=pygame.mouse.get_pos()
    if pos[0]>350 and pos[0]<450:
        if pos[1]>300 and pos[1]<350:
            return 0
        elif pos[1]>400 and pos[1]<450:
            return 1
        else:
            return 2
    else:
        return 2
    
def OnMouseButDown(self):
    self.screen.blit(self.vs,(300,150,140,140))
    pos = pygame.mouse.get_pos()
    if pos[1]>400 and pos[1]<540:
        if pos[0]>200 and pos[0]<340:
            self.screen.blit(self.image[0],(150,150,140,140))
            self.isWin(0)
        elif pos[0]>400 and pos[0]<540:
            self.screen.blit(self.image[1],(150,150,140,140))
            self.isWin(1)
        elif pos[0]>600 and pos[0]<740:
            self.screen.blit(self.image[2],(150,150,140,140))
            self.isWin(2)
        else:
            pass


def isWin(self,value):
    num = random.randint(0, 2)
    self.screen.blit(self.image[num],(450,150,590,240))
    pygame.display.flip()
    
    if num == value:
        self.screen.blit(self.o,(220,10,140,70))
        pygame.display.flip()
    
    elif num<value:
        if num==0:
            if value ==2:
                self.screen.blit(self.u,(220,10,140,70))
            else:
                self.screen.blit(self.p,(220,10,140,70))
                pygame.display.flip()
        else:
            self.screen.blit(self.u,(220,10,140,70))
            pygame.display.flip()
    
    else:
        if num==2:
            if value ==1:
                self.screen.blit(self.u,(220,10,140,70))
            else:
                self.screen.blit(self.p,(220,10,140,70))
                pygame.display.flip()
        else:
            self.screen.blit(self.u,(220,10,140,70))
            pygame.display.flip()

game = Game()
game.start()

  • 写回答

1条回答 默认 最新

  • 关注

    TypeError: 'pygame.Surface' object is not callable,调用对象出错,start是开始图片不是开始函数
    你将程序最后一行game.start()
    修改为

    game.Start()
    

    即可
    有帮助请采纳一下,有问题可以继续交流

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 创建了问题 12月7日

悬赏问题

  • ¥18 深度学习tensorflow1,ssdv1,coco数据集训练一个模型
  • ¥100 关于注册表摄像头和麦克风的问题
  • ¥30 代码本地运行正常,但是TOMCAT部署时闪退
  • ¥15 关于#python#的问题
  • ¥15 主机可以ping通路由器但是连不上网怎么办
  • ¥15 数据库一张以时间排好序的表中,找出多次相邻的那些行
  • ¥50 关于DynamoRIO处理多线程程序时候的问题
  • ¥15 kubeadm部署k8s出错
  • ¥15 Abaqus打不开cae文件怎么办?
  • ¥15 小程序准备上线,软件开发公司需要提供哪些资料给甲方