-
Notifications
You must be signed in to change notification settings - Fork 0
/
TableApp.py
147 lines (129 loc) · 3.66 KB
/
TableApp.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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
###
# File: TableApp.py
# Author: Abe Fehr
# Revised: March 12, 2014
###
import time
###
# Class: TableApp
# Description: This class must be inherited by all classes that wish
# to be run on the table as an app.
#
# NOTE: in order to create an app for the table you must call this class's
# ctor in your ctor, as well as override the update and draw methods
###
class TableApp:
###
# Function: __init__
# Purpose: The constructor for the abstract class TableApp
# Input: interface - the interface facade with which we'll be communicating
# frameramte - the real number of frames per second you wish to
# call draw/update with the app
###
def __init__(self, interface, table, framerate):
self.interface = interface
self.table = table
self.xCoordMax = 10
self.yCoordMax = 16
self.elapsed = 0 #not seconds, but frames elapsed
self.framerate = framerate
self.initScreen()
self.initInput()
###
# Function: initScreen
# Purpose: Populates a list of coordinates with their initial colors
###
def initScreen(self):
self.screen = []
for x in range(self.xCoordMax):
self.screen.append([])
for y in range(self.yCoordMax):
self.screen[x].append( [255, 255, 255] )
###
# Function: initInput
# Purpose: Populates a list of coordinates with their initial colors
###
def initInput(self):
self.input = []
self.oldinput = []
self.touches = []
for x in range(self.xCoordMax):
self.input.append([])
self.oldinput.append([])
self.touches.append([])
for y in range(self.yCoordMax):
self.input[x].append(0)
self.oldinput[x].append(0)
self.touches[x].append(0)
###
# Function: clearScreen
# Purpose: Changes each pixel of the screen to black
###
def clearScreen(self):
for x in range(self.xCoordMax):
for y in range(self.yCoordMax):
self.screen[x][y] = [0,0,0]
###
# Function: start
# Purpose: Starts the game
###
def start(self):
while 1:
#deal with all the input
if(self.elapsed != 0):
self.copy(self.oldinput, self.input)
self.copy(self.input,self.interface.getInput())
self.maskTouches()
#update the game and the time elapsed
self.update()
self.elapsed+=1
#draw everything to the screen
self.draw()
self.interface.draw(self.screen)
#wait and do it again later
time.sleep(1./self.framerate)
###
# Function: anyInput
# Purpose: Checks the input to see if there are any
# touches(regardless of where)
# Returns: True if there is a touch, False if not
###
def anyInput(self):
for x in range(self.xCoordMax):
for y in range(self.yCoordMax):
if(self.input[x][y] == 1):
return True
return False
###
# Function: maskTouches
# Purpose: Compares the input to the oldinput and only keeps new touches
###
def maskTouches(self):
for x in range(self.xCoordMax):
for y in range(self.yCoordMax):
if(self.input[x][y] == 1 and self.oldinput[x][y] == 0):
self.touches[x][y] = 1
else:
self.touches[x][y] = 0
###
# Function: copy
# Purpose: copies contents of list src to list dest
# NOTE: assumes that dest is the same size or bigger than src
###
def copy(self, dest, src):
for x in range(len(src)):
for y in range(len(src[0])):
dest[x][y] = src[x][y]
###
# Function: list
# Purpose: returns a new 2D list of a certain size initialized with zeroes
# Input: xMax - the x size of the list to create
# yMax - the y size of the list to create
###
def list(self, xMax, yMax, initValue):
matrix = []
for x in range(xMax):
matrix.append([])
for y in range(yMax):
matrix[x].append(initValue)
return matrix