import random from PIL import Image import math n0 = [ [1,1,1], [1,0,1], [1,0,1], [1,0,1], [1,1,1] ] n1 = [ [0,1,0], [1,1,0], [0,1,0], [0,1,0], [1,1,1] ] n2 = [ [1,1,1], [0,0,1], [1,1,1], [1,0,0], [1,1,1] ] n3 = [ [1,1,1], [0,0,1], [1,1,1], [0,0,1], [1,1,1] ] n4 = [ [1,0,1], [1,0,1], [1,1,1], [0,0,1], [0,0,1] ] n5 = [ [1,1,1], [1,0,0], [1,1,1], [0,0,1], [1,1,1] ] n6 = [ [1,1,1], [1,0,0], [1,1,1], [1,0,1], [1,1,1] ] n7 = [ [1,1,1], [0,0,1], [0,0,1], [0,0,1], [0,0,1] ] n8 = [ [1,1,1], [1,0,1], [1,1,1], [1,0,1], [1,1,1] ] n9 = [ [1,1,1], [1,0,1], [1,1,1], [0,0,1], [1,1,1] ] aa = [ [1,1,1], [1,0,1], [1,1,1], [1,0,1] ] ab = [ [1,1,0], [1,1,1], [1,0,1], [1,1,1] ] ac = [ [1,1,1], [1,0,0], [1,0,0], [1,1,1] ] class color: def __init__(self, red: int, green: int, blue: int, alpha: int = 255) -> None: self.r = red self.g = green self.b = blue def get(self) -> tuple[int, int, int]: return (self.r, self.g, self.b) def multiply(self, other) -> tuple[int, int, int]: r = other[0] g = other[1] b = other[2] # if self.r: # new_r = (self.r + r) >> 1 # else: # new_r = self.r # if self.g: # new_g = (self.g + g) >> 1 # else: # new_g = self.g # if self.b: # new_b = (self.b + b) >> 1 # else: # new_b = self.b # return (new_r, new_g, new_b) return (((self.r * r) >> 8), ((self.g * g) >> 8), ((self.b * b)>>8)) def shiftr(self, n): return ((self.r >> n), (self.g >> n), (self.b >>n)) def mask(self, n): return ((self.r & n), (self.g & n), (self.b & n)) class coord: def __init__(self, x, y, width, height) -> None: self.x = x self.y = y self.width = width self.height = height def make_next_board(): next_board = [ [0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 0, 0], [1, 1, 1, 0], ] return next_board def make_board(): board_height = 20 board_width = 10 board = [] for _ in range(2): line = [] for _ in range(board_width): line.append(0) board.append(line) for _ in range(board_height - 2): line = [] for _ in range(board_width): line.append(random.randint(0, 5)) board.append(line) return board_height, board_width, board def make_sprite(): sprite = Image.open("img/bitmap.png") sprite_pixels = sprite.load() sprite_width, sprite_height = sprite.size return sprite_pixels, sprite_width, sprite_height # red = color(255, 0, 0, 255) # blue = color(0, 0, 255, 255) # green = color(0, 255, 0, 255) # purple = color(160, 32, 240, 255) # orange = color(255, 165, 0, 255) black = color(0, 0, 0, 255) white = color(255, 255, 255, 255) # colors = [black, red, blue, green, purple, orange] # colors2 = [ # black, # white-ish opposite of black # color(0, 192, 192, 255), # cyan opposite of red # color(192, 192, 0, 255), # yellow opposite of blue # color(192, 0, 192, 255), # magenta opposite of green # color(192, 192, 64, 255), # yellow-green opposite of purple # color(0, 128, 255, 255), # sky blue opposite of orange # ] red = color(255, 0, 0, 255) cyan = color(0, 255, 255, 255) blue = color(0, 0, 255, 255) yellow = color(255, 255, 0, 255) green = color(0, 255, 0, 255) magenta = color(255, 0, 255, 255) orange = color(255, 128, 0, 255) sky_blue = color(0, 128, 255, 255) purple = color(160, 32, 240, 255) lime = color(64, 255, 64, 255) colors = [ black, red, blue, green, orange, purple ] colors2 = [ black, cyan, yellow, magenta, sky_blue, lime ] next_board = make_next_board() nb1 = coord(88, 96, 128, 128) nb2 = coord(1064, 96, 128, 128) board_height, board_width, board = make_board() b1 = coord(304, 40, 320, height=640) board2_height, board2_width, board2 = make_board() b2 = coord(656, 40, 320, height=640) sprite_pixels, sprite_width, sprite_height = make_sprite() width = 1280 height = 720 img = Image.new("RGB", (width, height)) pixels = img.load() for y in range(height): for x in range(width): ####################### player 1 ### Board if x>=b1.x and x=b1.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) xs = xd&0x1F ys = yd&0x1F if (xs == 31) or (ys==31): if (xs == 0) or (ys == 0): pixels[x, y] = colors[board[yd>>5][xd>>5]].shiftr(1) else: pixels[x, y] = colors[board[yd>>5][xd>>5]].shiftr(2) elif (not xs) or (not ys): pixels[x, y] = colors[board[yd>>5][xd>>5]].get() else: pixels[x, y] = colors[board[yd>>5][xd>>5]].mask(0xFFFFFFC0) ### Next Piece elif x>=nb1.x and x=nb1.y and y>5][xd>>5]].shiftr(1) else: pixels[x, y] = colors[next_board[yd>>5][xd>>5]].shiftr(2) elif (not xs) or (not ys): pixels[x, y] = colors[next_board[yd>>5][xd>>5]].get() else: pixels[x, y] = colors[next_board[yd>>5][xd>>5]].mask(0xFFFFFFC0) ####################### player 2 ### Board elif x>=b2.x and x=b2.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) ### Next Piece elif x>=nb2.x and x=nb2.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) # ####################### player 2 # ### Board # elif x>=b2.x and x=b2.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) # ### Next Piece # elif x>=nb2.x and x=nb2.y and y>5][xd>>5]].multiply(sprite_pixels[yd&0b0000000000011111, xd&0b0000000000011111]) ####################### BG else: pixels[x, y] = ((x+y)>>3,0,0) offset = 0 numbers = [n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, aa, ab, ac] for num in numbers: for y in range(len(num)*4): for x in range(len(num[y>>2])*4): if num[y>>2][x>>2]: pixels[x+offset, y] = white.get() else: pixels[x+offset, y] = black.get() offset += 15 img.save("output/alpha.png") img.show()