Page 1 of 1

Firmware 10.0.0 tiers orienté jeux Python (get_keys)

Unread postPosted: 02 Feb 2019, 21:31
by Admin
jean-baptiste boric avait déjà travaillé à une modification du firmware NumWorks afin d'étendre les possibilités graphiques du module Python kandinsky, lui rajoutant les fonctions :
  • draw_line(x1,y1,x2,y2,color) pour le tracer de lignes
  • fill_rect(x,y,w,h,color) pour le tracer de rectangles pleins
Dans les deux cas ces fonctions n'étaient pas connectées à la fonction Python setpixel(x,y,color) mais à du code C permettant donc des tracés optimaux, notamment pour le rafraichissement de sprites dans des jeux.

Aujourd'hui jean-baptiste boric poursuit son chemin dans le but de nous permettre enfin de coder en Python des jeux graphiques jouables, en nous diffusant une nouvelle version de son firmware amélioré.

Voyons donc ensemble les dernières nouveautés


9895A première vue, bizarrement,pas de nouveauté kandinsky.

L'on note toujours comme seuls et uniques ajouts :
  • draw_line(x1,y1,x2,y2,color)
  • fill_rect(x,y,w,h,color)

Mais histoire d'être sûr, explorons le module kandinsky à l'aide du script suivant :
Code: Select all
#platforms:
#0: MicroPython / TI-Nspire
#1: MicroPython / NumWorks
#2: MicroPython / G90+E
#3: MicroPython / G35+E/USB / G75/85/95
#4: CircuitPython / TI-Python / 83PCE
#5: Xcas / HP Prime
#6: KhiCAS / Graph 90+E
def getplatform():
  id=-1
  try:
    import sys
    try:
      if sys.platform=='nspire':id=0
      if sys.platform=='TI-Python Adapter':id=4
    except:id=3
  except:
    try:
      import kandinsky
      id=1
    except:
      try:
        if chr(256)==chr(0):id=5+(not ("HP" in version()))
      except:
        id=2
  return id
 
platform=getplatform()
#lines shown on screen
plines=[29,12,  7, 9,11,0,0]
#max chars per line
#(error or new line if exceeded)
pcols =[53,99,509,32,32,0,0]

nlines=plines[platform]
ncols=pcols[platform]
curline=0

def mprint(*ls):
  global curline
  st=""
  for s in ls:
    if not(isinstance(s,str)):
      s=str(s)
    st=st+s
  stlines=1+int(len(st)/ncols)
  if curline+stlines>=nlines:
    input("Input to continue:")
    curline=0
  print(st)
  curline+=stlines

def sstr(obj):
  try:
    s=obj.__name__
  except:
    s=str(obj)
    a=s.find("'")
    b=s.rfind("'")
    if a>=0 and b!=a:
      s=s[a+1:b]
  return s

def isExplorable(obj):
  s=str(obj)
  return s.startswith("<module '") or s.startswith("<class '")

def explmod(pitm,pitmsl=[],reset=True):
  global curline
  if(reset):
    curline=0
    pitmsl=[sstr(pitm)]
  hd="."*(len(pitmsl)-1)
  spath=".".join(pitmsl)
  c=0
  for itms in sorted(dir(pitm)):
    c=c+1
    try:
      itm=eval(spath+"."+itms)
      mprint(hd+itms+"="+str(itm))
      if isExplorable(itm):
        pitmsl2=pitmsl.copy()
        pitmsl2.append(itms)
        c=c+explmod(itm,pitmsl2,False)
    except:
      mprint(hd+itms)
  if c>0:
    mprint(hd+"Total: "+str(c)+" item(s)")
  return c

Et bingo, oh que oui il y a des choses, simplement elles ne sont pas listées dans la boîte à outils.

10220Déjà après les sorties graphiques, Jean-Baptise s'attaque maintenant aux entrées clavier en définissant des codes pour l'ensemble des touches du clavier et rajoutant la fonction get_keys() pour connaître la ou les touches pressées ! :bj:
10216102171021810219


10221Mais ce n'est pas tout, nous avons également de nouvelles fonctions de sorties graphiques :
  • get_pixels(x,y,width,data)
  • set_pixels(x,y,width,data)
  • wait_vblank()

10222Alors, mission remplie ou pas avec tout ça ? Peut-on enfin coder un Mario pour la calculatrice NumWorks ?

Nous te proposons d'aller juger par toi-même en testant la fluidité du jeu PONG codé par Jean-Baptiste en exploitant ces nouvelles fonctionnalités, premier jeu Python contrôlable au clavier ! :bj:

Attention au fait que le firmware diffusé par Jean-Baptiste dans ce contexte est basé sur l'état actuel du code source public de la calculatrice NumWorks, et que celui-ci est actuellement en phase bêta de la future version 10.0.0. Des problèmes peuvent donc apparaître même en dehors des points évoqués; il t'est déconseillé de l'installer si tu as de prochains rendez-vous importants (DS, examens, concours...). :#non#:


Téléchargement : firmware 1.10.0 bêta précompilé avec ces améliorations (installable facilement via webdfu_numworks )
Code : https://github.com/numworks/epsilon/pull/746
Source : viewtopic.php?t=22284&p=239388#p239388

Re: Firmware 10.0.0 tiers orienté jeux Python (get_keys)

Unread postPosted: 03 Feb 2019, 15:05
by compsystems
Hello, very good update

There are many articles of education that inform that one of the ways to initiate or improve algorithmic and computational reasoning is to manipulate graphics and write games.

Re: Firmware 10.0.0 tiers orienté jeux Python (get_keys)

Unread postPosted: 05 Feb 2019, 12:41
by ptijoz
j'ai essayé en mettant la rom sur la NW est c'est vraiment sympa ! ce pong :)
sinon savez vous comment mettre la rom sur l'émulateur ? (pour faire des copies d'écran c'es plus facile que se faire des photos de la calculatrice)

Re: Firmware 10.0.0 tiers orienté jeux Python (get_keys)

Unread postPosted: 05 Feb 2019, 18:58
by jean-baptiste boric
J'ai fait quelques ajustements depuis la publication de mon firmware, le pong arrive maintenant à tenir les 40 Hz de l'écran (c'est deux fois plus fluide que le firmware publié). Pour jouer avec le script sur émulateur, il faut compiler ma branche et soit utiliser EPSILON_GETOPT pour l'injecter à la ligne de commande, soit trafiquer les scripts préchargés.

Je regarderai un de ces jours si la technique de bourrer les pixels à la volée comme sur Atari 2600 tiendra depuis MicroPython, mais même si ça marche ce serait assez improbable que NumWorks accepterait de merger un truc pareil...

Re: Firmware 10.0.0 tiers orienté jeux Python (get_keys)

Unread postPosted: 06 Feb 2019, 15:04
by telpe51
Alors là, je dis BRAVO :#top#: :#top#: :#top#: !!! On va pouvoir coder avec interaction clavier :8): . C'est vraiment du beau travail : Merci ! :D :D :D . (A noter : la touche d'interruption du programme pong est la touche "Home" et non pas la touche "Retour").
Et ne pas oublier de renommer le fichier 10.0.0_beta_kandinsky_getkeys.bin en 10.0.0_beta_kandinsky_getkeys.bin.rom pour que le download marche.