init
This commit is contained in:
commit
84b930a628
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
__pycache__
|
15
.vscode/launch.json
vendored
Normal file
15
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Python: Current File",
|
||||||
|
"type": "python",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/main.py",
|
||||||
|
"console": "integratedTerminal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
assets/bum.ogg
Normal file
BIN
assets/bum.ogg
Normal file
Binary file not shown.
BIN
assets/button.png
Normal file
BIN
assets/button.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
BIN
assets/case.png
Normal file
BIN
assets/case.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
BIN
assets/dynamite.png
Normal file
BIN
assets/dynamite.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
BIN
assets/lcd.png
Normal file
BIN
assets/lcd.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
assets/music.ogg
Normal file
BIN
assets/music.ogg
Normal file
Binary file not shown.
BIN
assets/room.png
Normal file
BIN
assets/room.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 429 KiB |
68
bomb.py
Normal file
68
bomb.py
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
from tonegen import ToneGen
|
||||||
|
from imageobj import Obj
|
||||||
|
import textwrap
|
||||||
|
class Bomb:
|
||||||
|
def __init__(self, pygame, screen):
|
||||||
|
self.pygame = pygame
|
||||||
|
self.screen = screen
|
||||||
|
self.ticktimer = 1
|
||||||
|
pygame.mixer.music.load('assets/music.ogg')
|
||||||
|
pygame.mixer.music.play(-1, 0.0)
|
||||||
|
self.lcdtext = ""
|
||||||
|
self.explosion = self.pygame.mixer.Sound('assets/bum.ogg')
|
||||||
|
self.sprites = []
|
||||||
|
self.sprites.append(Obj(pygame.image.load('assets/room.png')))
|
||||||
|
self.sprites.append(Obj(pygame.image.load('assets/case.png')))
|
||||||
|
self.sprites.append(Obj(pygame.image.load('assets/dynamite.png'), 200, 400))
|
||||||
|
xbut = 598
|
||||||
|
ybut = 100
|
||||||
|
self.sprites.append(Obj(pygame.image.load('assets/lcd.png'), 260, 90))
|
||||||
|
button_img = pygame.image.load('assets/button.png')
|
||||||
|
buttons = [
|
||||||
|
[Obj(button_img, xbut, ybut, "1"), Obj(button_img, xbut + 68, ybut, "2"), Obj(button_img, xbut + 136, ybut, "3")],
|
||||||
|
[Obj(button_img, xbut, ybut + 68, "4"), Obj(button_img, xbut + 68, ybut + 68, "5"), Obj(button_img, xbut + 136, ybut + 68, "6")],
|
||||||
|
[Obj(button_img, xbut, ybut + 136, "7"), Obj(button_img, xbut + 68, ybut + 136, "8"), Obj(button_img, xbut + 136, ybut + 136, "9")],
|
||||||
|
[Obj(button_img, xbut, ybut + 204, "X"), Obj(button_img, xbut + 136, ybut + 204, ">")]
|
||||||
|
]
|
||||||
|
for buttonx in buttons:
|
||||||
|
for button in buttonx:
|
||||||
|
self.sprites.append(button)
|
||||||
|
|
||||||
|
def getevents(self):
|
||||||
|
for event in self.pygame.event.get(): # User did something
|
||||||
|
if event.type == self.pygame.QUIT: # If user clicked close
|
||||||
|
return False
|
||||||
|
elif event.type == self.pygame.MOUSEBUTTONUP:
|
||||||
|
pos = self.pygame.mouse.get_pos()
|
||||||
|
for sprite in self.sprites:
|
||||||
|
if sprite.rect.collidepoint(pos):
|
||||||
|
if sprite.button:
|
||||||
|
self.buttonpress_handler(sprite.button)
|
||||||
|
|
||||||
|
def buttonpress_handler(self, button):
|
||||||
|
print(f"The button {button} was pressed.")
|
||||||
|
if button == "X":
|
||||||
|
self.lcdtext = ""
|
||||||
|
elif button == ">":
|
||||||
|
self.lcdtext = str(len(self.lcdtext))
|
||||||
|
else:
|
||||||
|
self.lcdtext += button
|
||||||
|
|
||||||
|
def beep(self):
|
||||||
|
if self.ticktimer >= 1000:
|
||||||
|
self.ticktimer = 1000 - self.ticktimer
|
||||||
|
ToneGen(self.pygame, 1000, 1000, 0.2)
|
||||||
|
|
||||||
|
def drawstuff(self):
|
||||||
|
self.screen.fill((0,0,0))
|
||||||
|
for sprite in self.sprites:
|
||||||
|
sprite.draw(self.screen)
|
||||||
|
myfont = self.pygame.font.SysFont('Liberation Mono, Bold', 16)
|
||||||
|
lines = textwrap.wrap(self.lcdtext, 23)[-9:]
|
||||||
|
ybase = 170
|
||||||
|
i = 0
|
||||||
|
for line in lines:
|
||||||
|
renderedtext = myfont.render(line, False, (0, 0, 0))
|
||||||
|
self.screen.blit(renderedtext, (310, ybase + (i * 16)))
|
||||||
|
i += 1
|
||||||
|
self.pygame.display.flip()
|
15
imageobj.py
Normal file
15
imageobj.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import pygame
|
||||||
|
class Obj(pygame.sprite.Sprite):
|
||||||
|
def __init__(self, img, x = 0, y = 0, button=""):
|
||||||
|
pygame.sprite.Sprite.__init__(self)
|
||||||
|
self.image = img.convert_alpha()
|
||||||
|
self.rect = self.image.get_rect()
|
||||||
|
self.rect.x = x
|
||||||
|
self.rect.y = y
|
||||||
|
self.button = button
|
||||||
|
if button:
|
||||||
|
myfont = pygame.font.SysFont('Liberation Mono, Bold', 16)
|
||||||
|
textsurface = myfont.render(button, False, (0, 0, 0))
|
||||||
|
self.image.blit(textsurface, (18, 16))
|
||||||
|
def draw(self, screen):
|
||||||
|
screen.blit(self.image, self.rect)
|
25
main.py
Normal file
25
main.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import pygame
|
||||||
|
from bomb import Bomb
|
||||||
|
pygame.init()
|
||||||
|
pygame.mixer.pre_init(44100, 16, 2)
|
||||||
|
pygame.font.init()
|
||||||
|
size = (824, 674)
|
||||||
|
screen = pygame.display.set_mode(size)
|
||||||
|
|
||||||
|
pygame.display.set_caption("BOH(Brunova Osobna Hra)")
|
||||||
|
running = True
|
||||||
|
clock = pygame.time.Clock()
|
||||||
|
|
||||||
|
bomb = Bomb(pygame, screen)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
|
||||||
|
bomb.drawstuff()
|
||||||
|
|
||||||
|
bomb.ticktimer += clock.tick(60)
|
||||||
|
bomb.beep()
|
||||||
|
if bomb.getevents() == False:
|
||||||
|
break
|
||||||
|
|
||||||
|
#Once we have exited the main program loop we can stop the game engine:
|
||||||
|
pygame.quit()
|
19
tonegen.py
Normal file
19
tonegen.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from math import sin, pi
|
||||||
|
import numpy as np
|
||||||
|
class ToneGen():
|
||||||
|
|
||||||
|
def __init__(self, pygame, freq_l, freq_r, duration=1):
|
||||||
|
|
||||||
|
n_samples = int(round(duration*44100))
|
||||||
|
#setup our numpy array to handle 16 bit ints, which is what we set our mixer to expect with "bits" up above
|
||||||
|
buf = np.zeros((n_samples, 2), dtype = np.int16)
|
||||||
|
max_sample = 2**(16 - 1) - 1
|
||||||
|
|
||||||
|
for s in range(n_samples):
|
||||||
|
t = float(s)/44100 # time in seconds
|
||||||
|
|
||||||
|
#grab the x-coordinate of the sine wave at a given time, while constraining the sample to what our mixer is set to with "bits"
|
||||||
|
buf[s][0] = int(round(max_sample*sin(2*pi*freq_l*t))) # left
|
||||||
|
buf[s][1] = int(round(max_sample*0.5*sin(2*pi*freq_r*t))) # right
|
||||||
|
pygame.sndarray.make_sound(buf).play()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user