Пример #1
0
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()
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
 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)
Пример #5
0
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')
Пример #6
0
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)
Пример #8
0
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)
Пример #9
0
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
Пример #10
0
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
Пример #11
0
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()
Пример #12
0
    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
Пример #13
0
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
Пример #14
0
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
Пример #15
0
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
Пример #16
0
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("")
Пример #17
0
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())