def main(): fileInput = "C:\Programming\CS138\Week 8\canoe.gif" fileOutput = "C:\Programming\CS138\Week 8\grayCanoe.gif" image = Image(Point(400, 300), fileInput) # Getting our image. width = image.getWidth() height = image.getHeight() win = GraphWin("Monochromatic Conversion", width, height) # Creating our window. image.draw(win) row = 0 # The starting pixel for our x-axis column = 0 # The starting pixel for our y-axis win.getMouse() for row in range(image.getWidth()): for column in range(image.getHeight()): r, g, b = image.getPixel(row, column) brightness = int(round(0.299 * r + 0.587 * g + 0.114 * b)) image.setPixel(row, column, color_rgb(brightness, brightness, brightness)) win.update() image.save(fileOutput) win.getMouse() win.close()
class p1wins: def __init__(self, window): self.image = Image(Point(600, 400), "ImagesAndSprites/MenuScreen.gif") self.text = Text(Point(600, 600), "Player 1 Wins!") self.text.setSize(36) self.image.draw(window) self.text.draw(window)
class Stage(object): def __init__(self, window): self.pos1 = Point(0, 0) self.pos2 = Point(0, 0) self.platform1 = None self.hb = None def regStage(self, window): background = Image(Point(600, 400), "ImagesAndSprites/StartScreen.gif") background.draw(window) self.platform1 = Image(Point(600, 675), "ImagesAndSprites/blue.gif") self.platform1.draw(window) self.pos1 = Point(400, 700) self.pos2 = Point(800, 700) def getPos1(self): return self.pos1 def getPos2(self): return self.pos2 def regStageCreateHB(self): self.hb = hitbox(self.platform1, 0) def getHB(self): return self.hb
def regStage(self, window): background = Image(Point(600, 400), "ImagesAndSprites/StartScreen.gif") background.draw(window) self.platform1 = Image(Point(600, 675), "ImagesAndSprites/blue.gif") self.platform1.draw(window) self.pos1 = Point(400, 700) self.pos2 = Point(800, 700)
def town(): prior = len(glbl.gw.items) gold_box = Gold_Box(glbl.player.gold) background = Image(Point(750, 250), glbl.MAPS / "sprites" / "village.png") background.draw(glbl.gw) #musicplays here #pygame.mixer.music.stop() if glbl.game_stats["town_tutorial"]: glbl.game_stats["town_tutorial"] = False town_tutorial() while True: pygame.mixer.music.stop() town_music = pygame.mixer.music.load("Town_Music.mp3") pygame.mixer.music.play(-1) if glbl.game_stats['orc_dead'] == "Dead": for i in glbl.gw.items[prior:]: i.undraw() return x = dialogue("Where would you like to go?", [ "Inn", "Wizard" if glbl.player.character_class == "Sorcerer" else "Blacksmith", "Shop", "Librarian", "Explore Forest"], right=True) if x == 0: pygame.mixer.music.stop() town_music = pygame.mixer.music.load("inn.mp3") pygame.mixer.music.play(-1) inn(gold_box) if x == 1: pygame.mixer.music.stop() shop_music = pygame.mixer.music.load("shop.mp3") pygame.mixer.music.play(-1) weapon_maker(gold_box) if x == 2: shop(gold_box) if x == 3: pygame.mixer.music.stop() librarian(gold_box) if x == 4: pygame.mixer.music.stop() town_music = pygame.mixer.music.load("Overworld_Music.mp3") pygame.mixer.music.play(-1) prep_exploration() if glbl.game_stats['reginald'] == 6: glbl.game_stats['reginald'] = 7 if glbl.game_stats['reginald'] == 7: raise glbl.GameOver('Rat Invasion')
def move_card_down(): border = 190 back_of_card = Image(Point(WIN.getWidth() / 2, WIN.getHeight() / 4), "images/deck.png") back_of_card.draw(WIN) # Moves card down while back_of_card.getAnchor().getY() < WIN.getHeight() - border: back_of_card.move(0, MOVEMENT_SPEED) update() return back_of_card
class Card(): specials = { 1: "Ace", 11: "Jack", 12: "Queen", 13: "King", 'c': "Clubs", 'd': "Diamonds", 'h': "Hearts", 's': "Spades", } def __init__(self, rank, suit): self.rank = rank self.suit = suit self.image = None def __str__(self): rank = self.specials.get(self.rank, self.rank) if not rank: rank = self.rank return f"{rank} of {self.getSuite()}" def BJValue(self): if self.rank < 10: return self.rank else: return 10 def draw(self, win, center): if not self.image: rank = str(self.specials.get(self.rank, self.rank))[0].upper() if self.rank == 10: rank = str(10) suite = self.suit.upper() self.image = Image(center, f"cards_pics/{rank + suite}.png") self.image.draw(win) def getRank(self): rank = self.specials(self.rank) if rank: return rank else: return self.rank def getSuite(self): return self.specials.get(self.suit)
def drawBoard(board, win): tileWidth = WIDTH/board.boardWidth tileHeight = HEIGHT/board.boardWidth for i in range(board.boardWidth*board.boardWidth): # Calc rank/file using top left as 0, 0 i_file = i % board.boardWidth i_rank = int(i/board.boardWidth) rect = Rectangle(Point(i_file*tileWidth, i_rank*tileHeight), Point((i_file+1)*tileWidth, (i_rank+1)*tileHeight)) if i_rank%2 == 0: rect.setFill(color_rgb(241, 217, 181)) if i%2 == 0 else rect.setFill(color_rgb(181, 136, 99)) else: rect.setFill(color_rgb(181, 136, 99)) if i%2 == 0 else rect.setFill(color_rgb(241, 217, 181)) rect.draw(win) piece = board.getTile(i) if piece != 0: piece_sprite = None if piece == 'p': piece_sprite = Image(tileToCoord(board, i), 'chess/img/bp.png') elif piece == 'P': piece_sprite = Image(tileToCoord(board, i), 'chess/img/wp.png') elif piece == 'r': piece_sprite = Image(tileToCoord(board, i), 'chess/img/br.png') elif piece == 'R': piece_sprite = Image(tileToCoord(board, i), 'chess/img/wr.png') elif piece == 'n': piece_sprite = Image(tileToCoord(board, i), 'chess/img/bn.png') elif piece == 'N': piece_sprite = Image(tileToCoord(board, i), 'chess/img/wn.png') elif piece == 'b': piece_sprite = Image(tileToCoord(board, i), 'chess/img/bb.png') elif piece == 'B': piece_sprite = Image(tileToCoord(board, i), 'chess/img/wb.png') elif piece == 'k': piece_sprite = Image(tileToCoord(board, i), 'chess/img/bk.png') elif piece == 'K': piece_sprite = Image(tileToCoord(board, i), 'chess/img/wk.png') elif piece == 'q': piece_sprite = Image(tileToCoord(board, i), 'chess/img/bq.png') elif piece == 'Q': piece_sprite = Image(tileToCoord(board, i), 'chess/img/wq.png') else: message = Text(tileToCoord(board, i), piece) message.draw(win) piece_sprite.draw(win)
def show_total(amount): totalWin = GraphWin("Transaction", 250,250) totalWin.setBackground("Yellow") amountText = Text(Point(125,50), amount) amountText.setStyle("bold") amountText.draw(totalWin) amountLabel = Text(Point(50,50), "Total:") amountLabel.draw(totalWin) tenderedBox = Entry(Point(125,100), 5) tenderedBox.setText("0") tenderedBox.setFill("white") tenderedBox.draw(totalWin) label = Text(Point(50,100), "Given: ") label.draw(totalWin) button = Image(Point(125, 200), "icons/button.png") button.draw(totalWin) buttonRect = Rectangle(Point(50,184), Point(203,218)) calcFlag = False while True: errorFlag = False try: click = totalWin.getMouse() except: totalWin.close() break if(isPtInRect(buttonRect, click)): if(calcFlag): change.undraw() try: tendered = tenderedBox.getText() except: errorFlag = True tenderedBox.setText("0") if(float(tendered) < amount): errorFlag = True tenderedBox.setText(str(amount)) if(not errorFlag): change = Text(Point(125, 150), "Change: " + str(float(tendered) - amount)) change.setStyle("bold") change.draw(totalWin) calcFlag = True return
def reveal_card(card_images, back_of_card): # Card images is a list of the relative directorys on all 52 cards. rand_card_dir = random.choice(card_images) # Deletes the card once revealed, this simulates a real deck much better. card_images.remove(rand_card_dir) rand_card = Image(back_of_card.getAnchor(), rand_card_dir) # Replaces back of deck image with the random card picked back_of_card.undraw() rand_card.draw(WIN) # Reads the string on the card name to obtain the value val = get_card_val(rand_card_dir) return rand_card, val
class Drawable(object): _window = None @staticmethod def recreateWindow(): if Drawable._window: Drawable._window.close() Drawable._window = GraphWin("LodeRunner", Config.WINDOW_WIDTH+20, Config.WINDOW_HEIGHT+20) Drawable._window.setBackground('white') @staticmethod def lost(): t = Text(Point(Config.WINDOW_WIDTH/2+10, Config.WINDOW_HEIGHT/2+10), 'YOU LOST!') t.setSize(36) t.setTextColor('red') t.draw(Drawable._window) Drawable._window.getKey() exit(0) @staticmethod def won(): t = Text(Point(Config.WINDOW_WIDTH/2+10, Config.WINDOW_HEIGHT/2+10), 'YOU WON!') t.setSize(36) t.setTextColor('red') t.draw(Drawable._window) time.sleep(2) def __init__(self, coords, img_path=None): if img_path: self._img = Image(Point((coords[0]+1)*Config.CELL_SIZE-1, (coords[1]+1)*Config.CELL_SIZE-1), os.path.join('graphics', img_path)) else: self._img = None def draw(self): if self._img: self._img.draw(Drawable._window) def move_img(self, dx, dy): if self._img: self._img.move(dx * Config.CELL_SIZE, dy * Config.CELL_SIZE) def undraw(self): if self._img: self._img.undraw()
def __init__(self, window, player1, player2): self.window = window self.p1 = Player(player1, None) self.p2 = Player(player2, None) background = Image(Point(600, 400), "ImagesAndSprites/StartScreen.gif") background.draw(window) self.createHealthBars(window) self.startGame(window) self.countDown = Text( Point(window.getWidth() / 2, window.getHeight() / 2), '') self.countdown(window) self.plyJumpRender = Image(Point(300, 50), "ImagesAndSprites/Apple.gif") self.plyJumpRender.draw(window) self.plyJumpRender2 = Image(Point(900, 50), "ImagesAndSprites/Apple.gif") self.plyJumpRender2.draw(window) # plyJumpRender2.move(150, 0) self.worldRenderer = Image(Point(800, 3), "ImagesAndSprites/blue.gif") self.worldRenderer.draw(window) self.worldRenderer.move(-200, 400) # Hitbox defines as # Obj, width, height, weight, pos, ignored self.plyJump = hitbox(self.plyJumpRender, 1) self.plyJump2 = hitbox(self.plyJumpRender2, 1) self.platform = hitbox(self.worldRenderer, 0) self.time1 = 0 self.time2 = 0 while True: self.update(window) if (self.getWinner() == 1): p1wins(window) time.sleep(2) break if (self.getWinner() == 2): p2wins(window) time.sleep(2) break
def confirmation(): window0 = GraphWin("Success!", 200,100) window0.setBackground("white") text = Text(Point(100,20), "Success!") text.setFace("courier") text.draw(window0) exitImage = Image(Point(100,65), "icons/exit.png") exitImage.draw(window0) exitButton = Rectangle(Point(60,48), Point(140,80)) while True: try: click = window0.getMouse() except: window0.close() break if(isPtInRect(exitButton, click)): window0.close() break return
class StartScreen: def __init__(self, window): self.image = Image(Point(600, 400), "ImagesAndSprites/MenuScreen.gif") self.text = Text(Point(600, 600), "Press Any Key To Start") self.text.setFace("arial") self.text.setSize(36) self.text.setStyle("normal") self.text.setTextColor(color_rgb(0, 0, 0)) self.image.draw(window) self.text.draw(window) self.run(window) def run(self, window): r = 1 b = 2 g = 3 while (window.checkKey() == ''): self.text.setTextColor(color_rgb(r, b, g)) r += 1 b += 2 g += 3 r = r % 256 b = b % 256 g = g % 256
def draw_deck(): # This is the back of the deck deck = Image(Point(WIN.getWidth() / 2, WIN.getHeight() * 5 / 19), "images/deck.png") deck.draw(WIN) return deck
class GameScreen: def __init__(self, window, player1, player2): self.window = window self.p1 = Player(player1, None) self.p2 = Player(player2, None) background = Image(Point(600, 400), "ImagesAndSprites/StartScreen.gif") background.draw(window) self.createHealthBars(window) self.startGame(window) self.countDown = Text( Point(window.getWidth() / 2, window.getHeight() / 2), '') self.countdown(window) self.plyJumpRender = Image(Point(300, 50), "ImagesAndSprites/Apple.gif") self.plyJumpRender.draw(window) self.plyJumpRender2 = Image(Point(900, 50), "ImagesAndSprites/Apple.gif") self.plyJumpRender2.draw(window) # plyJumpRender2.move(150, 0) self.worldRenderer = Image(Point(800, 3), "ImagesAndSprites/blue.gif") self.worldRenderer.draw(window) self.worldRenderer.move(-200, 400) # Hitbox defines as # Obj, width, height, weight, pos, ignored self.plyJump = hitbox(self.plyJumpRender, 1) self.plyJump2 = hitbox(self.plyJumpRender2, 1) self.platform = hitbox(self.worldRenderer, 0) self.time1 = 0 self.time2 = 0 while True: self.update(window) if (self.getWinner() == 1): p1wins(window) time.sleep(2) break if (self.getWinner() == 2): p2wins(window) time.sleep(2) break def checkExit(self, key): if key == 'Escape': return True return False def getWinner(self): if (self.p1.health <= 0 or self.plyJump.position[1] > 800 or self.plyJump.position[0] < 0 or self.plyJump.position[0] > 1200): return 2 if (self.p2.health <= 0 or self.plyJump2.position[1] > 800 or self.plyJump2.position[0] < 0 or self.plyJump2.position[0] > 1200): return 1 else: return 0 def checkLose(self): pass def update(self, window): self.p1Text.setText(str(self.p1.health)) self.p2Text.setText(str(self.p2.health)) controls = window.checkKeys() if "Escape" in controls: self.window.close() if "w" in controls and self.plyJump.inAir == False: self.plyJump.addYForce(20) if "a" in controls: self.plyJump.addXForce(5) if "d" in controls: self.plyJump.addXForce(-5) if "e" in controls and abs(self.plyJump.position[0] - self.plyJump2.position[0]) < 120 and abs( self.plyJump.position[1] - self.plyJump2.position[1] ) < 120 and time.time() - self.time1 > 1: self.p2.health -= 5 self.p2Text.setText(str(self.p2.health)) self.time1 = time.time() if "Up" in controls and self.plyJump2.inAir == False: self.plyJump2.addYForce(20) if "Left" in controls: self.plyJump2.addXForce(5) if "Right" in controls: self.plyJump2.addXForce(-5) if "Insert" in controls and abs( self.plyJump.position[0] - self.plyJump2.position[0] ) < 120 and abs(self.plyJump.position[1] - self.plyJump2.position[1] ) < 120 and time.time() - self.time2 > 1: self.p1.health -= 5 self.p1Text.setText(str(self.p1.health)) self.time2 = time.time() # Physics calculations self.plyJump.calculate( ) # Needed to actual update the position of the hitbox self.plyJump2.calculate() self.platform.calculate() time.sleep(.0083) # Magic sleep number from jamie def createHealthBars(self, window): self.p1Text = Text(Point(50, 50), str(self.p1.health)) self.p2Text = Text(Point(1100, 50), str(self.p2.health)) self.p1Text.setTextColor("White") self.p2Text.setTextColor("White") self.p1Text.setSize(36) self.p2Text.setSize(36) self.p1Text.draw(window) self.p2Text.draw(window) def startGame(self, window): pass def countdown(self, window): self.countDown.setTextColor("White") self.countDown.setSize(20) self.countDown.setText("3") self.countDown.draw(window) self.countDown.setSize(36) for i in range(3, 0, -1): self.countDown.setText(str(i)) time.sleep(1) self.countDown.setText("Fight!") self.countDown.setSize(36) time.sleep(1) self.countDown.setText("")
def pause_menu(right): start = 500 if right else 0 prior = len(gw.items) pause_overlay = Image(Point(500, 250), MAP / "pause_overlay.png") pause_overlay.draw(gw) # Everything for the Character Information info_box = Rectangle(Point(551 - start, 100), Point(959 - start, 400)) info_box.setFill(color_rgb(50, 50, 50)) info_box.setWidth(3) info_box.draw(gw) # The Character Icon info_icon = Image(Point(613 - start, 163), MAPS / "characters" / f"{player.character_class}_portrait.png") info_icon.draw(gw) # Shows the Header that includes the player's name and level. info_header = Text(Point(572 - start, 179)) info_header.setAnchor("w") info_header.setSize(22) info_header.setText(f" {player.name + f'LV: {player.lvl}'.rjust(16)[len(player.name):]}\n HP:\n EXP:\nItems:") info_header.draw(gw) # Draw the HP bar. hp_bar = Bar(player.current_HP, player.base_HP, "red", Point(750 - start, 149), Point(948 - start, 173)) hp_bar.show() # Draws the EXP bar exp_bar = Bar(player.current_EXP, player.next_EXP, "green", Point(750 - start, 179), Point(948 - start, 203)) exp_bar.show() # Lists off the player's current inventory. info_header_underline = Line(Point(573 - start, 240), Point(937 - start, 240)) info_header_underline.setWidth(1) info_header_underline.setOutline("white") info_header_underline.draw(gw) info_footer = Text(Point(573 - start, 246)) info_footer.setAnchor("nw") info_footer.setSize(14) info_footer.setText(inventory()) info_footer.draw(gw) # Lists off the pause menu options. choice_box = Rectangle(Point(start + 125, 165), Point(start + 370, 335)) choice_box.setFill(color_rgb(50, 50, 50)) choice_box.setWidth(3) choice_box.draw(gw) choice_text = Text(Point(start + 260, 250)) choice_text.setAnchor("c") choice_text.setSize(20) choice_text.setText("Resume\nDrink Potion\nEat Apple\nSave Game\nQuit Game") choice_text.draw(gw) selector = Polygon(Point(start + 137, 183), Point(start + 137, 195), Point(start + 154, 189)) selector.setFill("red") selector.draw(gw) selection = 0 saved = False while True: while True: key = gw.checkKey().lower() if key != "": if key in ["space", "return"]: break elif key in ["escape"]: while selection > 0: selector.move(0, -30) selection -= 1 if key in ["up", "w", "left", "a"]: selection = (selection - 1) % 5 if selection != 4: selector.move(0, -30) else: selector.move(0, 120) elif key in ["down", "s", "right", "d"]: selection = (selection + 1) % 5 if selection != 0: selector.move(0, 30) else: selector.move(0, -120) # Resume Game if selection == 0: for i in gw.items[prior:]: i.undraw() return # Drink Potion if selection == 1: if player.items["Potions"] == 0: dialogue("You have no more potions to drink.", right=right) elif player.current_HP == player.base_HP: dialogue("You are already at max HP", right=right) else: player.items["Potions"] -= 1 player.current_HP += round(randint(4, 10) * 4.2) if player.current_HP > player.base_HP: player.current_HP = player.base_HP hp_bar.update(player.current_HP, player.base_HP) # Eat Apple if selection == 2: if player.items["Apples"] == 0: dialogue("You have no more apples to eat.", right=right) elif player.current_HP == player.base_HP: dialogue("You are already at max HP", right=right) else: player.items["Apples"] -= 1 player.current_HP += randint(1, 4) if player.current_HP > player.base_HP: player.current_HP = player.base_HP hp_bar.update(player.current_HP, player.base_HP) # Save Game if selection == 3: saved = True save_state = open("save_state.txt", "w") stats_to_save = [player.character_class, player.name, player.lvl, player.attack, player.defense, player.current_HP, player.base_HP, player.current_SP, player.base_SP, player.current_EXP, player.next_EXP, player.gold, player.items, game_stats ] line_to_save = '' for i in stats_to_save: line_to_save = line_to_save + str(i) + "\n" save_state.write(b64encode(line_to_save.encode("UTF-8")).decode("UTF-8")) save_state.close() dialogue("Game saved.", right=right) # Quit Game if selection == 4: if not saved: dialogue(f"You have not saved recently.") if dialogue("Are you sure you want to quit?", ["Yes", "No"], right=right) == 0: raise GameOver('Town Quit') info_footer.setText(inventory())