from machine import Pin, SPI, SoftI2C
import ili9342c
import focaltouch
def tftinit():
spi = SPI(2,baudrate=60000000,sck=Pin(18),mosi=Pin(23)) # SPI init
tft = ili9342c.ILI9342C(spi, cs=Pin(5, Pin.OUT), dc=Pin(15, Pin.OUT), rst=Pin(33, Pin.OUT),width=320, height=240,rotation=270)
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
touch = focaltouch.FocalTouch(i2c)
return tft, touch
#######################################################################################################################################
class Button(): # Klasse erstellen
def __init__(self, pos_x, pos_y, breite, hoehe, farbe, objekt): # Parameter erstellen
# abspeichern der information
self.pos_x = pos_x
self.pos_y = pos_y
self.breite = breite
self.hoehe = hoehe
self._farbe = farbe
self.objekt = objekt
def draw(self): # draw methoden zum ausfuellen
self.objekt.fill_rect(self.pos_x, self.pos_y, self.breite + 6, self.hoehe + 6, color=ili9342c.BLACK)
self.objekt.fill_rect(self.pos_x+3, self.pos_y+3, self.breite, self.hoehe, self._farbe)
def test(self, touch_x, touch_y):
if self.pos_x <= touch_x <= self.pos_x + self.breite and self.pos_y <= touch_y <= self.pos_y + self.hoehe:
return True
return False
def getFarbe(self):
return self._farbe
def setFarbe(self, farbe):
self._farbe = farbe
#######################################################################################################################################
def titactoe1(tft,touch): # erste Aufgabe ist aber irgendwie komisch
while True:
num_touches = touch.touched
if num_touches == 1:
x = touch.touches[0]['x']
y = touch.touches[0]['y']
print("Pos X:",x,"Pos Y:",y)
tft.fill_rect(x,y,5,5,color=ili9342c.BLACK)
#######################################################################################################################################
def titactoe2(tft,touch): # Zweite Aufgabe positionen sind merkwuerdig
btn = Button(50, 50, 100, 50, ili9342c.WHITE, tft)
btn.draw() # fuhert fuer jedes element die methode aus
while True:
if touch.touched == 1:
touch_x = touch.touches[0]['x']
touch_y = touch.touches[0]['y']
print("Pos X:",touch_x,"Pos Y:",touch_y)
if btn.test(touch_x, touch_y) == True:
btn.setFarbe(ili9342c.RED)
btn.draw()
else:
btn.setFarbe(ili9342c.BLUE)
btn.draw()
#######################################################################################################################################
def titactoe3(tft): # Dritte Aufgabe Spielbrett generierung
zeile = 3 # n fuer Zeilen
spalte = 3 # m fuer Spalten
anzahl_zeile = 320 // zeile # anzahl der in Displaybreite passenden Objekte
anzahl_spalte = 240 // spalte # anzahl der in Displayhohe passenden Objekte
buttons = [] # liste zum abspeichern
for x in range(zeile): # zeilen durchlauf
for y in range(spalte): # splaten durchlauf
# rechteck in die liste hinzufuegen
buttons.append(Button(x * anzahl_zeile, y * anzahl_spalte, anzahl_zeile - 13, anzahl_spalte - 13, ili9342c.WHITE ,tft))
for i in buttons: # geht jedes element in der liste durch
i.draw() # fuhert fuer jedes element die methode aus
#######################################################################################################################################
def titactoe4(tft, touch): # Vierte Aufgabe Spielzug Szene
zeile = 3 # n fuer Zeilen
spalte = 3 # m fuer Spalten
anzahl_zeile = 320 // zeile # anzahl der in Displaybreite passenden Objekte
anzahl_spalte = 240 // spalte # anzahl der in Displayhohe passenden Objekte
buttons = [] # liste zum abspeichern
for x in range(zeile): # zeilen durchlauf
for y in range(spalte): # splaten durchlauf
# rechteck in die liste hinzufuegen
buttons.append(Button(x * anzahl_zeile, y * anzahl_spalte, anzahl_zeile - 13, anzahl_spalte - 13, ili9342c.WHITE ,tft))
for i in buttons: # geht jedes element in der liste durch
i.draw() # fuhert fuer jedes element die methode aus
player_turn = 0 # Wechselt sich ab zwischen Spieler 0 und Spieler 1
while True:
if touch.touched == 1:
touch_x = touch.touches[0]['x']
touch_y = touch.touches[0]['y']
for btn in buttons:
if btn.test(touch_x, touch_y):
if btn.getFarbe() == ili9342c.WHITE:
if player_turn == 0:
btn.setFarbe(ili9342c.RED)
print("Aktueller Spieler:", player_turn) # Debug
player_turn = 1
else:
btn.setFarbe(ili9342c.BLUE)
print("Aktueller Spieler:", player_turn) # Debug
player_turn = 0
btn.draw()
#######################################################################################################################################
def main():
tft, touch = tftinit()
tft.clear(ili9342c.WHITE) #Hintergrund auf Weiß setzen
#titactoe1(tft, touch) # Erste Aufgabe
#titactoe2(tft, touch) # Zweite Aufgabe
#titactoe3(tft) # Dritte Aufgabe
titactoe4(tft, touch) # Vierte Aufgabe
if __name__ == "__main__":
main()