阵列支持的网格已缓冲#

您可能还需要查看以下内容:
阵列支持的网格 -速度很慢但很简单,使用绘图命令
阵列支持的网格已缓冲 -(此程序)速度较慢,并使用缓冲形状
使用精灵v1的栅格 -超快,并使用精灵。在一次函数调用中重新同步到编号网格
使用精灵v2的栅格 -超快,并使用精灵。保留第二个精灵2D网格以匹配2D数字网格
array_backed_grid_buffered.py#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | """ Array Backed Grid Show how to use a two-dimensional list/array to back the display of a grid on-screen. We can click each cell in the window to toggle the color or each individual cell. This is not the most efficient way to maintain an updated grid simply because we have to rebuild the shape list from scratch every time it changes, but it's fast enough for smaller grids that don't update frequently. If Python and Arcade are installed, this example can be run from the command line with: python -m arcade.examples.array_backed_grid_buffered """ import arcade # Set how many rows and columns we will have ROW_COUNT = 15 COLUMN_COUNT = 15 # This sets the WIDTH and HEIGHT of each grid location WIDTH = 30 HEIGHT = 30 # This sets the margin between each cell # and on the edges of the screen. MARGIN = 5 # Do the math to figure out our screen dimensions SCREEN_WIDTH = (WIDTH + MARGIN) * COLUMN_COUNT + MARGIN SCREEN_HEIGHT = (HEIGHT + MARGIN) * ROW_COUNT + MARGIN SCREEN_TITLE = "Array Backed Grid Buffered Example" class MyGame(arcade.Window): """ Main application class. """ def __init__(self, width, height, title): """ Set up the application. """ super().__init__(width, height, title) self.shape_list = None # Create a 2 dimensional array. A two dimensional # array is simply a list of lists. # This array can be altered later to contain 0 or 1 # to show a white or green cell. # # A 4 x 4 grid would look like this # # grid = [ # [0, 0, 0, 0], # [0, 0, 0, 0], # [0, 0, 0, 0], # [0, 0, 0, 0], # ] # We can quickly build a grid with python list comprehension # self.grid = [[0] * COLUMN_COUNT for _ in range(ROW_COUNT)] # Making the grid with loops: self.grid = [] for row in range(ROW_COUNT): # Add an empty array that will hold each cell # in this row self.grid.append([]) for column in range(COLUMN_COUNT): self.grid[row].append(0) # Append a cell # Set the window's background color self.background_color = arcade.color.BLACK # Create shapes from the grid self.recreate_grid() def recreate_grid(self): """ Create the shapes for our current grid. We look at the values in each cell. If the cell contains 0 we crate a white shape. If the cell contains 1 we crate a green shape. """ self.shape_list = arcade.ShapeElementList() for row in range(ROW_COUNT): for column in range(COLUMN_COUNT): if self.grid[row][column] == 0: color = arcade.color.WHITE else: color = arcade.color.GREEN x = (MARGIN + WIDTH) * column + MARGIN + WIDTH // 2 y = (MARGIN + HEIGHT) * row + MARGIN + HEIGHT // 2 current_rect = arcade.create_rectangle_filled(x, y, WIDTH, HEIGHT, color) self.shape_list.append(current_rect) def on_draw(self): """ Render the screen. """ # We should always start by clearing the window pixels self.clear() # Draw the shapes representing our current grid self.shape_list.draw() def on_mouse_press(self, x, y, button, modifiers): """ Called when the user presses a mouse button. """ # Convert the clicked mouse position into grid coordinates column = int(x // (WIDTH + MARGIN)) row = int(y // (HEIGHT + MARGIN)) print(f"Click coordinates: ({x}, {y}). Grid coordinates: ({row}, {column})") # Make sure we are on-grid. It is possible to click in the upper right # corner in the margin and go to a grid location that doesn't exist if row >= ROW_COUNT or column >= COLUMN_COUNT: # Simply return from this method since nothing needs updating return # Flip the location between 1 and 0. if self.grid[row][column] == 0: self.grid[row][column] = 1 else: self.grid[row][column] = 0 # Rebuild the shapes self.recreate_grid() def main(): MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE) arcade.run() if __name__ == "__main__": main() |