π
<-
Chat plein-écran
[^]

Test débutant jeu python

TI's micropython + modules

Test débutant jeu python

Message non lude Altaear » 10 Oct 2023, 19:08

Bonsoir à tous,
J'ai commencé à tâtonner avec python sur TI-Nspire pendant les cours pour essayer de créer un petit jeu.
Pour l''instant je fais des tests pour voir ce que je peux afficher à l'écran. Voila la bout de code que j'ai pondu :
Code: Tout sélectionner
from ti_draw import *
from ti_system import *
from time import *

def draw_background():
  set_color(255,0,0)
  fill_rect(0,0,355,355)

x=0
y=0

key = ''
cur_dir = "none"
draw_background()

while get_key() != "esc":
  key = get_key()
  if key == '':
    cur_dir=cur_dir
  if key == '8':
    cur_dir = "up"
  if key == '2':
    cur_dir = "down"
  if key == '4':
    cur_dir = "left"
  if key == '6':
    cur_dir = "right"
 
  draw_background()
 
  if cur_dir == "up":
    y=y-1
  if cur_dir == "down":
    y=y+1
  if cur_dir == "right":
    x=x+1
  if cur_dir == "left":
    x=x-1
  set_color(0,255,255)
  fill_rect(x,y,40,40)


(Je ne sais pas si le balisage est en python).

Evidemment ce n'est pas du tout optimiser. Pour l'instant pour que la direction change je dois spam les touches car l'input n'est pas toujours detecté. Comment est ce que je pourrais écrire le code pour que la direction suis pris en compte avec une seule pression ?
Et comment je pourrais implémenter un système de collision avec les bords de l'écran ou d'autres bloc que j'aurais créé. J'aimerais aussi savoir comment utiliser les buffer et si il serait utile dans mon cas.
Avatar de l’utilisateur
Altaear
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 15.2%
 
Messages: 13
Inscription: 08 Sep 2019, 19:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Term

Re: Test débutant jeu python

Message non lude critor » 10 Oct 2023, 21:56

Bonsoir. Joli début. :)

Le buffer permet des affichages plus propres :
  • tes tracés sont effectués hors écran
  • c'est toi qui décides quand tu as terminé tes modifications et que tes derniers tracés peuvent être montrés
Cela évite les affichages intermédiaires ou clignotements.
C'est très simple :
  • un appel use_buffer() pour dire que tu souhaites utiliser le buffer hors écran
  • et un appel paint_buffer() à chaque fois que tu veux afficher les derniers changements

Voici ton code modifié pour l'utilisation du buffer :
Code: Tout sélectionner
from ti_draw import *
from ti_system import *
from time import *

use_buffer()

def draw_background():
  set_color(255,0,0)
  fill_rect(0,0,355,355)

x=0
y=0

key = ''
cur_dir = "none"
draw_background()

while get_key() != "esc":
  key = get_key()
  if key == '':
    cur_dir=cur_dir
  if key == '8':
    cur_dir = "up"
  if key == '2':
    cur_dir = "down"
  if key == '4':
    cur_dir = "left"
  if key == '6':
    cur_dir = "right"

  draw_background()

  if cur_dir == "up":
    y=y-1
  if cur_dir == "down":
    y=y+1
  if cur_dir == "right":
    x=x+1
  if cur_dir == "left":
    x=x-1
  set_color(0,255,255)
  fill_rect(x,y,40,40)
  paint_buffer()


ti_draw t'offre la fonction get_screen_dim() qui te retourne les dimensions de la zone graphique de l'écran :
Image
Sur TI-Nspire CX II, c'est donc 318×212 pixels.
Plus qu'à tester lorsque ton rectangle atteint les bords de l'écran et dans ce cas stopper ou changer la direction.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.8%
 
Messages: 41502
Images: 14765
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Test débutant jeu python

Message non lude Bisam » 10 Oct 2023, 22:07

Pour factoriser ton code, tu peux utiliser un dictionnaire.

Code: Tout sélectionner
direction = {"8": "up", "2": "down", "4": "left", "6": "right"}
if key in direction:
  cur_dir = direction[key]


Pour qu'une seule pression suffise, tu peux rajouter une temporisation en faisant faire un certain nombre de boucles en espérant que getkey() renvoie quelque chose.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Test débutant jeu python

Message non lude Altaear » 11 Oct 2023, 20:39

D'accord donc pour le buffer il faut utiliser la fonction use_buffer une première fois et ensuite chaque changement des éléments à l'écran est stocké dans la mémoire et il faut utiliser paint_buffer pour l'afficher si j'ai bien compris ? Et comment je fais si je veux le désactiver ? Quand j'avais fait un test avec le buffer j'avais utilisé use_buffer et une fonction draw après mais ça me l'avais affiché à l'écran sans que j'ai eu à utilisé le paint_buffer.
Ensuite merci pour les dictionnaires je me doute qu'un embranchement de if n'est pas très opti, mais je ne connais pas encore bien cette notion je verrais plus tard pour l'utiliser. Une dernière chose j'avais déjà utilisé la boucle while key == '' puis key = get key dedans juste après la première boucle mais cela me créait une boucle infini et aucun input n'étais jamais détecté (j'utilisais un print(key) pour voir ce que ça détectait).
Avatar de l’utilisateur
Altaear
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 15.2%
 
Messages: 13
Inscription: 08 Sep 2019, 19:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Term

Re: Test débutant jeu python

Message non lude critor » 11 Oct 2023, 21:01

Altaear a écrit:D'accord donc pour le buffer il faut utiliser la fonction use_buffer une première fois et ensuite chaque changement des éléments à l'écran est stocké dans la mémoire et il faut utiliser paint_buffer pour l'afficher si j'ai bien compris ?

C'est ça. :)

Altaear a écrit:Et comment je fais si je veux le désactiver ?

Pas sûr que le buffer puisse être désactivé en cours d'exécution. Une fois que use_buffer() a été appelé, à ma connaissance le nouveau mode de fonctionnement persiste jusqu'à la fin du script.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.8%
 
Messages: 41502
Images: 14765
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Test débutant jeu python

Message non lude Altaear » 11 Oct 2023, 21:40

Parfait :) tout marche bien avec le dictionnaire j'ai juste du rajouter :
Code: Tout sélectionner
else :
cur_dir = cur_dir


Je n'ai en effet plus de clignotement avec le buffer, mais peut être un problème de framerate (je ne sais pas si c'est lié ou pas). J'imagine que c'est lié au portage de python sur Nspire ou à la puissance de la calculatrice ?
Mais sinon je n'ai pas de solution pour la détection de key sans avoir à spam :/. La boucle while était infini et si mon programme boucle sur cette détection la position du cube ne sera pas actualisée...
Avatar de l’utilisateur
Altaear
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 15.2%
 
Messages: 13
Inscription: 08 Sep 2019, 19:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Term


Retourner vers Python

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1150 utilisateurs:
>1119 invités
>25 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)