forked from esden/pyTWANG
-
Notifications
You must be signed in to change notification settings - Fork 0
/
twang.py
executable file
·121 lines (101 loc) · 4.05 KB
/
twang.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env -S python -u
# Copyright (c) 2020, Piotr Esden-Tempski <[email protected]>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import pygame
import sys
import LEDString
import Screensaver
import Player
import Enemy
def main():
# TWANG globals
led_size = 13
led_margin = 1
led_color = (0, 0, 0)
led_string_length = 144
led_string = LEDString.LEDString(led_string_length, color=led_color, size=led_size, margin=led_margin)
led_string_status = 13
screensaver = Screensaver.Screensaver(led_string)
world = {}
player = Player.Player(led_string, world)
enemy = Enemy.Enemy(led_string, world)
player_speed = 0
enemy.spawn(100, -4, 20)
# pyGame stuff
pygame.init()
screen = pygame.display.set_mode((led_size * led_string_length, led_size + led_string_status))
clock = pygame.time.Clock()
pygame.display.set_caption('pyTWANG')
font = pygame.font.Font(None, 20)
# main loop
running = True
fps_limit = 60
starttime = pygame.time.get_ticks()
while running:
clock.tick(fps_limit)
time = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
running = False
elif event.key == pygame.K_LEFT:
player_speed -= 1
elif event.key == pygame.K_RIGHT:
player_speed += 1
elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
player.attack(time)
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player_speed += 1
elif event.key == pygame.K_RIGHT:
player_speed -= 1
# Clear screen
screen.fill((128, 128, 128))
# Advance animations
# led_string.animate()
# screensaver.tick(time)
led_string.clear()
player.speed = player_speed
player.tick(time)
enemy.tick(time)
enemy.collide()
player.collide()
player.draw(time)
enemy.draw()
# Render LEDs onto the screen
led_string.draw(screen)
# Draw satusbar information
status = font.render("t: {} s: {}".format((pygame.time.get_ticks() - starttime) // 1000, player_speed), True, (0, 0, 0))
status_rect = status.get_rect()
status_rect.topleft = (10, led_size)
screen.blit(status, status_rect)
# Make things visible
pygame.display.flip()
pygame.quit()
sys.exit()
# run the main function only if this module is executed as the main script
# (if you import this as a module then nothing is executed)
if __name__ == "__main__":
# call the main function
main()