【问题标题】:Pygame Using Class to Randomize Image PlacementsPygame 使用类来随机化图像放置
【发布时间】:2016-06-07 20:20:48
【问题描述】:

我正在创建一个卡片/瓷砖记忆关联游戏。它是一个 100x100 像素图像的 4x4 网格,因此总共显示 16 个图像(8 对)。

现在我只想让图像在每次游戏开始时以随机顺序显示在网格中,我觉得我接近于使用在类中的列表中随机播放它们然后调用它来自 while 循环中的 main 函数的类。

这是我的代码:

# Memory Tiles Game
# A Memory Game which users can flip tiles in and remember their placement to match
# all of the tiles 

import pygame, sys, time
from pygame.locals import *

# User-defined classes
class memorygame(object):
   def __init__(self):
      imagelist = [image1,image2,image3,image4,image5,image6,image7
                   image8,image9]
      shuffle.imagelist
      screen.blit(imagelist[0],(0,0))
      screen.blit(imagelist[1],(104,0))
      screen.blit(imagelist[2],(208,0))
      screen.blit(imagelist[3],(312,0))
      screen.blit(imagelist[4],(0,104))
      screen.blit(imagelist[5],(104,104))
      screen.blit(imagelist[6],(208,104))
      screen.blit(imagelist[7],(312,104))
      shuffle.imagelist
      screen.blit(imagelist[0],(0,208))
      screen.blit(imagelist[1],(104,208))
      screen.blit(imagelist[2],(208,208))
      screen.blit(imagelist[3],(312,208))
      screen.blit(imagelist[4],(0,312))
      screen.blit(imagelist[5],(104,312))
      screen.blit(imagelist[6],(208,312))
      screen.blit(imagelist[7],(312,312))






# User-defined functions

def main():

   black = (  0,  0, 0)
   white = (255,255,255)
   red = (100,  0,  0)
   green = (  0,153,  0)
   blue = (  0,  0,255)
   image1 = pygame.image.load('image0.bmp')
   image2 = pygame.image.load('image1.bmp')
   image3 = pygame.image.load('image2.bmp')
   image4 = pygame.image.load('image3.bmp')
   image5 = pygame.image.load('image4.bmp')
   image6 = pygame.image.load('image5.bmp')
   image7 = pygame.image.load('image6.bmp')
   image8 = pygame.image.load('image7.bmp')
   image9 = pygame.image.load('image8.bmp')
   w = 500
   h = 400
   screen = pygame.display.set_mode((w, h))
   screen.fill((white))
   running = 1

   # Initialize pygame
   pygame.init()

   # Set window size and title, and frame delay
   surfaceSize = (500, 400) # example window size
   windowTitle = 'Memory Game' # example title
   frameDelay = 0.02 # smaller is faster game

   # Create the window
   surface = pygame.display.set_mode(surfaceSize, 0, 0)
   pygame.display.set_caption(windowTitle)

   # create and initialize objects
   gameOver = False
   #center = [200, 200] # example - replace

   # Draw objects
   # The next line is an example - replace it
   #pygame.draw.circle(surface, pygame.Color('green'), center, 50, 0)

   # Refresh the display
   pygame.display.update()

   # Loop forever
   while True:
      # Check event
      event = pygame.event.poll()
      if event.type == QUIT:
         pygame.quit()
         sys.exit()
      screen.fill((black))
      class memorygame(object) 

      # Handle additional events

      # Update and draw objects for the next frame
      gameOver = update(center, surface)

      # Refresh the display
      pygame.display.update()

      # Set the frame speed by pausing between frames
      time.sleep(frameDelay)

main()

它似乎没有编译,我不知道为什么。我在 shell 中收到语法错误。

【问题讨论】:

    标签: python class python-3.x pygame


    【解决方案1】:

    首先,您在 memorygame 类的 imagelist 的第一行末尾忘记了一个逗号。将其更改为

    imagelist = [image1,image2,image3,image4,image5,image6,image7,
                 image8,image9]
    

    应该修复第一个语法错误。

    其次,我不确定您在主循环中使用class memorygame(object) 行要达到什么目的。您可能希望在 while 循环之外创建该类的一个实例,并调用一个在 while 循环内对图像进行 blit 处理的函数。

    顺便说一下,图像变量是本地的,memorygame类是看不到它们的,除非你显式将它们设为全局变量,或者将它们传递给memorygame的__init__方法。

    此外,您改组图像列表的方式并不完全正确。您应该导入 random,然后调用 random.shuffle(imagelist)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2022-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多