Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- import time
- import math
- import random
- from enum import Enum, auto
- #GET LIVEWIRES IN THIS
- pygame.init()
- gameDisplay = pygame.display.set_mode((800, 600))
- pygame.display.set_caption("SpaceMiner")
- windowWidth, windowHeight = pygame.display.get_surface().get_size()
- gameTime = time.time()
- clock = pygame.time.Clock()
- gameExit = False
- paused = False
- white = (255, 255, 255) #Colors
- black = (0, 0, 0)
- red = (255, 0, 0)
- green = (0, 255, 0)
- blue = (0, 0, 255)
- yellow = (255, 255, 0)
- pink = (255, 0, 255)
- lightBlue = (0, 255, 255)
- gray = (100, 100, 100)
- def msgScreen(text, font, size, color, x, y, bold, italic, centered):
- font = pygame.font.SysFont(font, size, bold, italic)
- label = font.render(text, 1, color)
- if centered:
- gameDisplay.blit(label, (x - label.get_width() /2, y - label.get_height() / 2))
- else:
- gameDisplay.blit(label, (x, y))
- def checkOverRect(x, y, rectX, rectY, rectWidth, rectHeight):
- if rectX < x and rectX + rectWidth > x and rectY < y and rectY + rectHeight > mouseY:
- return True
- else:
- return False
- def rotate(gameObject, angle):
- rotations = {}
- r = rotations.get(gameObject, 0) + angle
- rotations[gameObject] = r
- return pygame.transform.rotate(gameObject, r)
- #Button functions
- def startGame():
- global gameMode
- global player
- global playerBullets
- global bulletImage
- global playerImage
- global playerHealthMax
- gameMode = "Game"
- player = Player(basicPlayerImage, windowWidth / 2, windowHeight - 100, 0, 0, playerHealthMax)
- playerBullets = []
- class Button:
- def __init__(self, x, y, width, height, color, text, textColor, textSize, textFont, action):
- self.x = x
- self.y = y
- self.width = width
- self.height = height
- self.color = color
- self.text = text
- self.textColor = textColor
- self.textSize = textSize
- self.textFont = textFont
- self.action = action
- self.big = False
- self.oldW = None
- self.oldH = None
- def draw(self):
- pygame.draw.rect(gameDisplay, self.color, [self.x, self.y, self.width, self.height])
- msgScreen(self.text, self.textFont, self.textSize, self.textColor, self.x + self.width / 2, self.y + self.height / 2, False, False, True)
- def act(self):
- return self.action()
- class Player(pygame.sprite.Sprite):
- def __init__(self, image, x, y, xSpeed, ySpeed, health):
- self.image = image
- self.imageRect = self.image.get_rect()
- self.x = x
- self.y = y
- self.xSpeed = xSpeed
- self.ySpeed = ySpeed
- self.health = health
- self.moveDir = [False, False, False, False]
- self.rotateTimer = gameTime
- self.angle = 0
- def draw(self):
- gameDisplay.blit(pygame.transform.rotate(self.image, self.angle), (self.x - self.image.get_width() / 2, self.y - self.image.get_height() / 2))
- def move(self):
- global gameTime
- self.x += self.xSpeed
- self.y += self.ySpeed
- if self.moveDir[0]:
- self.ySpeed = -2.5
- elif self.moveDir[1]:
- self.ySpeed = 2.5
- else:
- self.ySpeed = 0
- if self.moveDir[2]:
- #self.xSpeed = 2.5
- self.angle = (self.angle + 10) % 360
- self.rotateTimer = gameTime
- elif self.moveDir[3]:
- #self.xSpeed = -2.5
- self.angle = (self.angle - 10) % 360
- self.rotateTimer = gameTime
- else:
- self.xSpeed = 0
- class Bullet(pygame.sprite.Sprite):
- def __init__(self, image, x, y, xSpeed, ySpeed, damage):
- self.image = image
- self.x = x
- self.y = y
- self.xSpeed = xSpeed
- self.ySpeed = ySpeed
- self.damage = damage
- def draw(self):
- gameDisplay.blit(self.image, (self.x - self.image.get_width() / 2, self.y - self.image.get_height() / 2))
- def move(self):
- self.x += self.xSpeed
- self.y += self.ySpeed
- class state():
- MENU = auto()
- def readFromFile(file):
- result = []
- with open(file, "r") as file:
- text = file.readline()
- while text:
- text.replace("\n", "")
- result.append(text)
- text = file.readline()
- return result
- def clamp(var, minimum, maximum):
- if var > maximum:
- return maximum
- elif var < minimum:
- return minimum
- else:
- return var
- gameMode = "Menu"
- menuButtons = []
- menuButtons.append(Button(windowWidth / 2 - 50, windowHeight / 2 - 37.5, 100, 75, green, "Start", black, 25, "monospace", startGame))
- playerBullets = []
- bulletImage = pygame.image.load("bullet.png")
- playerHealthMax = int(readFromFile("playerStats.txt")[0])
- basicPlayerImage = pygame.image.load("playerBasic.png")
- player = Player(basicPlayerImage, windowWidth / 2, windowHeight - 100, 0, 0, playerHealthMax)
- while not gameExit:
- if gameMode is "Menu":
- gameDisplay.fill(black)
- for event in pygame.event.get():
- if event.type is pygame.QUIT:
- gameExit = True
- if event.type is pygame.MOUSEBUTTONDOWN:
- mouseX, mouseY = pygame.mouse.get_pos()
- for button in menuButtons:
- if checkOverRect(mouseX, mouseY, button.x, button.y, button.width, button.height):
- if not button.big:
- button.act()
- button.big = True
- button.oldW = button.width
- button.oldH = button.height
- button.width *= 1.1
- button.height *= 1.1
- button.x -= (button.width - button.oldW) / 2
- button.y -= (button.height - button.oldH) / 2
- if event.type is pygame.MOUSEBUTTONUP:
- for button in menuButtons:
- if button.big:
- button.big = False
- button.x += (button.width - button.oldW) / 2
- button.y += (button.height - button.oldH) / 2
- button.width /= 1.1
- button.height /= 1.1
- for button in menuButtons:
- button.draw()
- elif gameMode is "Game":
- gameTime = time.time()
- gameDisplay.fill(black)
- for event in pygame.event.get():
- if event.type is pygame.QUIT:
- gameExit = True
- if event.type is pygame.KEYDOWN:
- if not paused:
- if event.key == pygame.K_UP or event.key == pygame.K_w:
- player.moveDir[0] = True
- if event.key == pygame.K_DOWN or event.key == pygame.K_s:
- player.moveDir[1] = True
- if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
- player.moveDir[2] = True
- if event.key == pygame.K_LEFT or event.key == pygame.K_a:
- player.moveDir[3] = True
- if event.key == pygame.K_SPACE:
- playerBullets.append(Bullet(bulletImage, player.x, player.y, player.xSpeed, player.ySpeed - 5, 5))
- if event.key == pygame.K_p:
- if paused is True:
- paused = False
- else:
- paused = True
- if event.type is pygame.KEYUP:
- if not paused:
- if event.key == pygame.K_UP or event.key == pygame.K_w:
- player.moveDir[0] = False
- if event.key == pygame.K_DOWN or event.key == pygame.K_s:
- player.moveDir[1] = False
- if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
- player.moveDir[2] = False
- if event.key == pygame.K_LEFT or event.key == pygame.K_a:
- player.moveDir[3] = False
- if not paused:
- for i, bullet in enumerate(playerBullets):
- bullet.draw()
- bullet.move()
- if bullet.x < 0 or bullet.x > windowWidth or bullet.y < 0 or bullet.y > windowHeight:
- del(playerBullets[i])
- player.draw()
- player.move()
- pygame.draw.rect(gameDisplay, gray, [10, 10, 100, 25], 5) #Drawing the health bar
- pygame.draw.rect(gameDisplay, red, [10, 10, player.health / playerHealthMax * 100, 25])
- if paused:
- for bullet in playerBullets:
- bullet.draw()
- player.draw()
- msgScreen("PAUSED", "monospace", 25, white, windowWidth / 2, windowHeight / 2, True, True, True)
- pygame.display.update()
- clock.tick(60)
- pygame.quit()
- quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement