Wie kan mij helpen met dit Python pongclock script ?

Hoi,
Don Clark heeft in 2013 een leuk programma in Pygame geschreven: een pongclock voor de raspberrypi

De sourcecode
https://bitbucket.org/donclark/pypong-clock

Zijn clock in actie
http://youtu.be/c4_0Fo_beaU

Nu probeer ik deze 7 jaar oude code te werkend te krijgen, waarbij ik helaas vastloop in python.
Dit is een taal waarin ik vrijwel meteen "verdwaal"

Mijn setup:
Raspberrypi 3
Python 3.7.2
Pygame 2.0.0

De eerste error zijn op de print regels:
bijvoorbeeld in ball.py regel80:
print self.velocity
na het plaatsen van "(" ")" dus:
print (self.velocity)
komen hier geen errors meer op

Maar nu zit ik vast op een error in paddly.py regel 75:
attribute error 'range' opject has no attribute 'extend'

Wie wil voor mij de code bekijken en helpen deze werkend te krijgen.

Alvast bedankt!
Erik

elmowww

Golden Member

Om te beginnen denk ik dat je python v2 moet gebruiken als het 7 jaar oud is. Wellicht is de code te porten maar hier zal het in den beginne op mis gaan.

PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling

Python2 is in 2000 discontinued.
De code is van 2013
Ik neem aan de de code in python3 geschreven is, maar zien kan ik dat niet..
De bijgevoegde readme.txt (uit 2013) vermeld: "update naar de laatste versie python"

Ik ben groen als gras als het om python gaat :S

Grtz,
Erik

[Bericht gewijzigd door minimax op vrijdag 4 juni 2021 16:17:01 (10%)

Volgens mij is pygame de grafische shell voor python. Als het daarin is geschreven dan wordt het lastig om daarvoor enkel python te gebruiken.

Wel leuk als je dat als screensaver werkend zou kunnen krijgen.

reading can seriously damage your ignorance

pygame staat er ook op (laatste versie 2.0.0)
een voorbeeld syntax voor het runnen van een pygame script is:

python3 -m pygame.examples.aliens

het execution window met error:
https://myalbum.com/photo/mfjLQygRYt3J/540.jpg

[Bericht gewijzigd door minimax op vrijdag 4 juni 2021 16:30:58 (38%)

Weet je dat er ook een python3-pygame is?
Als je met python3 werkt zou dat wel eens de missing link kunnen zijn.

Ik wilde het even installeren om te kijken of het werkt op mijn laptop en kwam pygame voor 2 en 3 tegen.
Zie afbeelding

op de raspberyy:
sudo apt install python3-pygame

reading can seriously damage your ignorance

Sudo wil om de een of andere reden niet (error sudoers.so alleen schrijfbaar door eigenaar) ongeacht of ik als root of als user inlog |:(

Maar ik heb pygame eerder geinstalleerd met:

python3 -m pip install pygame==2.0.0

Dus ik mag er van uit gaan dat ik de juiste versie heb?

De code is voor Python 2. Als ik kijk naar https://bitbucket.org/donclark/pypong-clock/src/83da5b1e1621ff7eca8c42… dan zie ik een print statement en als dat Python 3 zou zijn, zouden er ( ) staan. Dus iets als

code:

print("Time", now)

Er is een Python bibliotheek (2to3) wat kan helpen om de code om te zetten naar Python 3. (https://docs.python.org/3/library/2to3.html)

Bij mij start het wel met:
python2 pypong-clock.py

Maar ik wacht even totdat de ontwikkelaar er mee klaar is.
- De klok start niet met de computertijd maar met 00:00
- De beeldscherminstellingen ziin verziekt na afbreken van het script.

reading can seriously damage your ignorance

Ok, dankje.. Dan zijn er twee opties:

1)
Python2 aan de gang zien te krijgen.
20 jaar oud, god weet wat voor gremlins we dan tegen gaan komen.
Een 20jaar oude versie van raspbian op een rasberrypi 1 is misschien nog een optie.

2) de code naar python3 porten
Dat is ook geen eenvoudige klus, omdat het immers pygame is, een dialect voor python.

zucht... :/

edit
@Hennep
Dat is mooi, dan weet ik in ieder geval dat de code wel werkt, dankje
Dat hij op 00:00 start had ik al zo`n vermoeden van, ik zag geen code om de start tijd te zetten.
Maar als het goed is, blijft hij continue verliezen tot de tijd wel klopt?
Heb je python2 op een raspberry draaien?

Python2 was inderdaad de oplossing :)

https://myalbum.com/photo/PLWzKUNgXQra/540.jpg

we hebben nu een goede basis om verder te gaan werken.

Bedankt voor het meekijken en meedenken, top _/-\o_

Op 4 juni 2021 17:11:22 schreef minimax:
Heb je python2 op een raspberry draaien?

Nee, op mijn laptop.

Ik heb pygame 2 en 3 er beide al weer afgegooid.

Als ik weer even tijd heb wil ik proberen of ik de systeemtijd kan lezen in python.

reading can seriously damage your ignorance

Op 4 juni 2021 17:35:09 schreef hennep:
[...]
Als ik weer even tijd heb wil ik proberen of ik de systeemtijd kan lezen in python.

Dat zou helemaal super zijn :) :) :)

Ik kwam deze ook nog tegen, om de tijdnotatie naar 24uur te krijgen:

just replace in pypong-clock.py the now.strftime("%I") parts with now.strftime("%H").

[Bericht gewijzigd door minimax op vrijdag 4 juni 2021 18:15:59 (26%)

Op 4 juni 2021 16:13:43 schreef minimax:
Python2 is in 2000 discontinued.

Dan zit je er toch een eind naast:

Python 2 was discontinued with version 2.7.18 in 2020

(Python 2 is UITGEKOMEN in 2000).

Python2 aan de gang zien te krijgen.
20 jaar oud, god weet wat voor gremlins we dan tegen gaan komen.

Tot redelijk recent was het "apt install python-2".
Even gezocht. Jep precieze spelling is: "apt install python2.7" .

[Bericht gewijzigd door rew op vrijdag 4 juni 2021 17:55:25 (30%)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Op 4 juni 2021 17:52:41 schreef rew:
[...]
Dan zit je er toch een eind naast:

[...]

(Python 2 is UITGEKOMEN in 2000).

[...]Tot redelijk recent was het "apt install python-2".
Even gezocht. Jep precieze spelling is: "apt install python2.7" .

Ik zag dit staan op python.org

"The final version of Python 2.0 was released on October 16, 2000"

Na het zien van "Final" er niet bij stil gestaan dat er natuurlijk ook nog versies 3.x en zo.. zouden zijn 8)7

Maar python 2 doet het in ieder geval :-)

Het liet me niet los, dus maar even tijd gemaakt

In pypong-clock.py deze regels aanpassen om te starten met een 24 uurs klok die gelijk de juiste tijd weergeeft

in "def main"
right_score_display = ScoreDisplay((RESOLUTION[0] / 2 + 18, 20, 30, 50), (100, 180), int(datetime.datetime.now().minute), 'right')
left_score_display = ScoreDisplay((RESOLUTION[0] / 2 - 18, 20, 60, 100), (100, 180), int(datetime.datetime.now().hour), 'left', True)

in "def check_time"
hour = now.strftime("%H")

De juiste tijd kwam er uiteindelijk wel na heel veel partijen verliezen maar als je dit ook als een klok gaat gebruiken dan wil je daar toch niet op wachten, ik in ieder geval niet.

reading can seriously damage your ignorance
GJ_

Moderator

Op 4 juni 2021 18:18:54 schreef minimax:
"The final version of Python 2.0 was released on October 16, 2000"

Python 3.0 is nog van voor 2010, terwijl er in 2012 of zo nog een Python 2.7 uitkwam.
Programmeurs weigerden gewoon over te stappen naar Python 3 en dus is 2 er nog steeds.

Op 4 juni 2021 18:51:52 schreef hennep:
Het liet me niet los, dus maar even tijd gemaakt
[...]

Hoi Hennep, dat waardeer ik, dankjewel :D

Ik ga ook nog spelen met de resolutie settings om het beeld-vullend te krijgen.
Hiermee gaat het een leuke klok voor in het hobby-hok worden

Grtz,
Erik

Hoi Hennep,

Ik heb de voorgestelde aanpassingen doorgevoerd, de klok start nu netjes op de juiste tijd en in 24-uurs tijdnotatie, helemaal prima :)

Echter is er een bugje meegekomen..
Op het hele uur, als de uren score moet worden verhoogt, gaat deze niet 1 uur omhoog, maar springt deze op 00

Vervolgens is de pong tijd niet meer gelijk aan de systeem tijd en start het "verliezen"om de uren weer juist te krijgen

Ik heb echter nog niet kunnen vinden waar het nu nog mis gaat..

mvg,
Erik

Edit:
Ik heb nog eens goed kunnen kijken, bij een nieuw uur wordt het uur wel verhoogd, maar het resetten van de minuten van 59 naar 00 zet ook de uren op 00

Op 4 juni 2021 18:18:54 schreef minimax:
"The final version of Python 2.0 was released on October 16, 2000"

Wat ze daarmee bedoelen is dat ze op die datum van 1.99 (*) naar 2.0 gegaan zijn. Daarna is er een hele tijd verder ontwikkeld aan python 2.x .

(*) Hoe ze "de versie net voor 2.0" precies noemden zou ik niet weten. Boeit ook niet.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Als ik naar de code kijk voor het updaten van de score:

code:


def check_time(right_paddle, left_paddle, left_score, right_score, ball):
    """ Compares the current time of the computer to the score.
    If different it forces a miss to increase the score"""
    global CAN_RESET_HOUR
    now = datetime.datetime.now()
    hour = now.strftime("%I")

    if left_score.score < int(hour):
        right_paddle.allow_score()
        return
    if right_score.score < now.minute:
        left_paddle.allow_score()
        CAN_RESET_HOUR = True
        return
    else:
        ball.initial_velocity = [3.0, 2.0]
    if CAN_RESET_HOUR is True:
        if now.minute == 0:		# reset on the hour.
            right_score.reset_score()
            left_score.reset_score()  <- gaat het hier fout?
            CAN_RESET_HOUR = False
            return

[Bericht gewijzigd door minimax op zaterdag 5 juni 2021 20:38:31 (21%)

eSe

Honourable Member

Python, jakkes.

Groetjes,
eSe

CChheecckk yyoouurr dduupplleexx sswwiittcchh..

Op 5 juni 2021 20:28:39 schreef minimax:
Als ik naar de code kijk voor het updaten van de score:

code:


            left_score.reset_score()  <- gaat het hier fout?

Right ik denk het wel. Gewoon even proberen. Haal die regel weg. Ik denk trouwens dat er iets als left_score.increment() moet staan. Nope. Gewoon helemaal weg is goed.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Dankje,we halen het gewoon weg...

Ondertussen weer een nieuw probleem.
Na een middagje lopen van de klok is de SD kaart geheel volgelopen tot het punt dat inloggen in rasbian ook niet meer lukt.

Dus terug naar start en opnieuw beginnen :/

Op 5 juni 2021 20:38:09 schreef eSe:
Python, jakkes.

[bijlage]

Groetjes,
eSe

En daarom gebruikt een beetje Python programmeur ook virtual environments. Alles in een bepaalde directory zodat het allemaal lokaal blijft en de basis installatie van de OS Python niet aantast. Als het geheel corrupt raakt, weggooien en opnieuw beginnen. Wel natuurlijk de diverse config files etc backuppen zodat je die kunt gebruiken om de nieuwe virtual environment op te zetten.