Derniers sujets
» Nettoyage de la base de jeux
Dim 11 Nov 2018 - 19:50 par Dbug

» Traitement de texte
Ven 9 Nov 2018 - 7:51 par Symoon

» Rodmän "SPECIAL MULTI FORMAT TRIPLE CASSETTE"
Jeu 8 Nov 2018 - 21:29 par Dbug

» Le Secret du Tombeau
Jeu 8 Nov 2018 - 19:31 par romu3

» Oric Explorer v2.0.... Bonne et mauvaise nouvelles
Mer 7 Nov 2018 - 23:07 par goyo

» Orix : tester sur oricutron
Mer 7 Nov 2018 - 11:29 par Jede

» le retour du Commodore 64
Lun 5 Nov 2018 - 6:40 par didierv

» rêve de jeu ...
Dim 4 Nov 2018 - 20:54 par goyo

» Grand concours de programmation
Dim 4 Nov 2018 - 8:29 par didierv

» Easter egg dans Honey Kong ?
Dim 4 Nov 2018 - 0:33 par iss

» Psycho III
Dim 4 Nov 2018 - 0:17 par Symoon

» Suppression du module UHF
Sam 3 Nov 2018 - 23:40 par drpsy

» CEO-MAG 341
Sam 3 Nov 2018 - 17:18 par Symoon

» Combien de jeux d'aventure sur oric ?
Jeu 1 Nov 2018 - 18:29 par Dom50

» BLAKE'S 7
Jeu 1 Nov 2018 - 16:05 par didierv

Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 158 membres enregistrés
L'utilisateur enregistré le plus récent est Djoulz

Nos membres ont posté un total de 7483 messages dans 564 sujets
Portail ORIC




[PROBLEME] Commande input et générateur aléatoire

Poster un nouveau sujet   Répondre au sujet

Aller en bas

[PROBLEME] Commande input et générateur aléatoire

Message par TotoShampoin le Sam 18 Aoû 2018 - 20:48

Bonjour les oriciens Smile

Voilà... J'ai deux problèmes.

Le premier est que je n'arrive pas à utiliser de commande similaire au INPUT du basic.

J'ai essayé scanf, mais j'ai eu cette erreur :
Code:
E:\osdk_1_11\0- Projets\Caractères
Assembling
scanbuf reserve 256
E:\osdk_1_11\0- Projets\CaractÞres\scanf.s(8):  1de2:Syntax error
fieldcount db 0
E:\osdk_1_11\0- Projets\CaractÞres\sscanf.s(53):  1e48:Syntax error
numberscan dw 0
E:\osdk_1_11\0- Projets\CaractÞres\sscanf.s(166):  1f17:Syntax error
signscan   db 0
E:\osdk_1_11\0- Projets\CaractÞres\sscanf.s(167):  1f17:Label defined error
Break after 4 errors
ERROR : Build failed.
Appuyez sur une touche pour continuer...


Mon deuxième problème est que je n'arrive pas à avoir un générateur aléatoire qui marche.
La fonction rand fonctionne, mais la fonction srand ne marche pas. De fait, j'obtiens toujours le même résultat.


J'aimerais avoir de l'aide dans les deux problèmes.
Merci d'avance ^^


Un message pour Jede, mais tout le monde devrait le savoir:
Un message pour toi Jede : Avec mon père, on a inspecté la commande clock(), et on a vu que ça lit juste la valeur des adresses 276 et 277. En fait, cette zone mémoire n'est active qu'en basic, donc cette commande n'est d'aucune utilité :/

_________________
L'Oric ATMOS? Et pourquoi pas l'Oric ASTHENOS aussi? XD
avatar
TotoShampoin

Messages : 36
Date d'inscription : 16/08/2017
Age : 18
Localisation : Lagny Sur Marne

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par didierv le Dim 19 Aoû 2018 - 8:05

toto a écrit:Mon deuxième problème est que je n'arrive pas à avoir un générateur aléatoire qui marche.
La fonction rand fonctionne, mais la fonction srand ne marche pas. De fait, j'obtiens toujours le même résultat.

voir le ceo-mag 241 page 16, je pense que tu devrais trouver des pistes

_________________
DidierV - CEO Mag
alias coco.oric sur Defence-Force
avatar
didierv

Messages : 609
Date d'inscription : 19/01/2014
Age : 56
Localisation : Nord de la France

http://www.dmacoco.fr

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par iss le Dim 19 Aoû 2018 - 8:10

Bonjour TotoShampoin Smile
first problem is already fixed by Dbug - take a look HERE.

About the 'srand': in OSDK use 'srandom' instead to set the seed for the generator.
Code:

  getchar();
  srandom(deek(0x304));
  printf("random : %d\n", random());
Here the 'getchar' is used to make the process true random depending on how fast the user press a key,
than the value of VIA's T1 is used as seed.

I hope this helps Wink.
avatar
iss

Messages : 57
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par TotoShampoin le Dim 19 Aoû 2018 - 16:05

iss a écrit:Bonjour TotoShampoin Smile
first problem is already fixed by Dbug - take a look HERE.

About the 'srand': in OSDK use 'srandom' instead to set the seed for the generator.
Code:

  getchar();
  srandom(deek(0x304));
  printf("random : %d\n", random());
Here the 'getchar' is used to make the process true random depending on how fast the user press a key,
than the value of VIA's T1 is used as seed.

I hope this helps Wink.

Thank you so much!!!!!!!!!!!!!!!


Mais maintenant, j'ai un autre problème.

En fait, je cherche à faire un programme qui mélange les cartes... Donc j'ai un tableau qui correspond au jeu de cartes (de 0 à 51), et le programme est une boucle qui échange deux cartes choisies aléatoirement. Voilà le programme :
Code:
void shuffle()
{
 for(i=0;i<128;i++)
 {
 nb1 = random() % 52;
 nb2 = random() % 52;
 card1 = cards[nb1];
 card2 = cards[nb2];
 cards[nb1] = card2;
 cards[nb2] = card1;
 }
}

Mais quand le programme s'exécute, il crash après le mélange :/

J'ai commis une erreur quelque part?

_________________
L'Oric ATMOS? Et pourquoi pas l'Oric ASTHENOS aussi? XD
avatar
TotoShampoin

Messages : 36
Date d'inscription : 16/08/2017
Age : 18
Localisation : Lagny Sur Marne

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par Symoon le Dim 19 Aoû 2018 - 19:12

Une chose est sûre, le code op 32 n'existe pas en 6502 Wink
Je n'ai jamais utilisé le C pour Oric, mais est-ce qu'il ne manque pas une instruction de sortie tout simplement, ou un symbole de fin d'instruction qqpart ?
avatar
Symoon

Messages : 489
Date d'inscription : 26/04/2014

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par TotoShampoin le Lun 20 Aoû 2018 - 10:27

Symoon a écrit:Une chose est sûre, le code op 32 n'existe pas en 6502 Wink
Je n'ai jamais utilisé le C pour Oric, mais est-ce qu'il ne manque pas une instruction de sortie tout simplement, ou un symbole de fin d'instruction qqpart ?

Bin je crois pas ._.
Je vais envoyer tout le code

Code:
#include <lib.h>

void printCard(int x, int y, int number, int color);
void eraseCard(int x, int y);
void CG_DEFCHAR();
void AdvancedPrint();

#define TREFLE 1
#define CARREAU 2
#define COEUR 3
#define PIQUE 4
#define VALET 11
#define DAME 12
#define ROI 13
#define AS 1
#define VIDE 0
#define FLIP 5
#define NOCARD 0

int i,j,k;

int nb1, nb2, card1, card2;
int cards[52];

void prepare()
{
 for(i=0;i<52;i++)
 cards[i] = i;
}


void shuffle()
{
 for(i=0;i<128;i++)
 {
 nb1 = random() % 52;
 nb2 = random() % 52;
 card1 = cards[nb1];
 card2 = cards[nb2];
 cards[nb1] = card2;
 cards[nb2] = card1;
 }
}


void main()
{
 CG_DEFCHAR();
 cls();
 AdvancedPrint(9,9,"Appuyez sur une touche");
 getchar();
 srandom(deek(0x304));
 AdvancedPrint(9,9,"  MELANGE DES CARTES  ");
 prepare(); shuffle();
 
 cls();
 
 //Affichage de la carte
 poke(0xBB80+1*40+1,9);
 for(i=2;i<8;i++){
 poke(0xBB80+i*40+1,8);
 poke(0xBB80+i*40+2,4);
 }
 for(i=8;i<23;i++){
 poke(0xBB80+i*40+1,9);
 }
 for(i=23;i<28;i++){
 poke(0xBB80+i*40+1,8);
 }
 
 
 printCard( 2, 9,NOCARD,VIDE);
 for(j=0;j<64;j++)
 for(i=0;i<=255;i++);
 
 for(k=0;k<52;k++)
 {
 printCard( 2, 9,NOCARD,FLIP);
 for(j=0;j<5;j++)
 {
 for(i=0;i<=255;i++);
 }
 printCard( 2, 9, cards[k]%13 +1,cards[k]/13 +1);
 for(j=0;j<64;j++)
 {
 for(i=0;i<=255;i++);
 }
 }
 
}

_________________
L'Oric ATMOS? Et pourquoi pas l'Oric ASTHENOS aussi? XD
avatar
TotoShampoin

Messages : 36
Date d'inscription : 16/08/2017
Age : 18
Localisation : Lagny Sur Marne

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par iss le Lun 20 Aoû 2018 - 11:46

I'm not sure where is the problem. I have 2 suspects - something like overflow somewhere or something related to SEDORIC.

Try this code for shuffle:
Code:

static char i, nb1, nb2, card1, card2, cards[52];
static void shuffle(void)
{
  for(i=0;i<52;i++)
  {
    nb1 = i;
    nb2 = random() % 52;
    card1 = cards[nb1];
    card2 = cards[nb2];
    cards[nb1] = card2;
    cards[nb2] = card1;
  }
}

Actually this is the 'standard' way to make shuffle, the code is faster but it can to be optimized more Wink.
avatar
iss

Messages : 57
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par TotoShampoin le Lun 20 Aoû 2018 - 14:36

iss a écrit:I'm not sure where is the problem. I have 2 suspects - something like overflow somewhere or something related to SEDORIC.

Try this code for shuffle:
Code:

static char i, nb1, nb2, card1, card2, cards[52];
static void shuffle(void)
{
  for(i=0;i<52;i++)
  {
    nb1 = i;
    nb2 = random() % 52;
    card1 = cards[nb1];
    card2 = cards[nb2];
    cards[nb1] = card2;
    cards[nb2] = card1;
  }
}

Actually this is the 'standard' way to make shuffle, the code is faster but it can to be optimized more Wink.


I had tried to shuffle with a smaller amount of time, but the problem is the same :/

I feel like it happens AFTER the shuffle.
I tried to change the program so it simply prints the values instead of plotting the cards, and the problem is the same. So I have a suspicion about the cls, but there's no reason :/

_________________
L'Oric ATMOS? Et pourquoi pas l'Oric ASTHENOS aussi? XD
avatar
TotoShampoin

Messages : 36
Date d'inscription : 16/08/2017
Age : 18
Localisation : Lagny Sur Marne

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par assinie le Lun 20 Aoû 2018 - 16:58

Pour le cls(), je ne pense pas que ce soit lui le problème, il y en a un au début du main(), à moins que ça ne plante dès le début.

Ce que tu peux faire, c'est ajouter des
Code:
printf("debut fonction xxx...")
et
Code:
printf("fin fonction xxx\n")
au début et à la fin de chacune de tes fonctions pour voir laquelle pose éventuellement problème.
Ca permettra de limiter les recherches.

Tu peux aussi en ajouter régulièrement dans main() du genre
Code:
printf("avant xxx\n")
pour avoir une trace de ce qu'il se passe.

Peut-être un problème de débordement de  la pile du 6502.

Après il restera la bonne vieille séance de debug avec le moniteur de Oricutron, en compilant le programme avec l'opton --add-source pour pouvoir s'y retrouver dans le code assembleur.
avatar
assinie

Messages : 225
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par assinie le Lun 20 Aoû 2018 - 17:43

Il y a aussi l'option -Ln fichier.sym pour générer un fichier de symboles utilisable par Oricutron (option -s fichier.sym pour le charger ou commande sl fichier.sym à partir du moniteur de Oricutron).
avatar
assinie

Messages : 225
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par TotoShampoin le Lun 20 Aoû 2018 - 17:52

assinie a écrit:Pour le cls(), je ne pense pas que ce soit lui le problème, il y en a un au début du main(), à moins que ça ne plante dès le début.

Ce que tu peux faire, c'est ajouter des
Code:
printf("debut fonction xxx...")
et
Code:
printf("fin fonction xxx\n")
au début et à la fin de chacune de tes fonctions pour voir laquelle pose éventuellement problème.
Ca permettra de limiter les recherches.

Tu peux aussi en ajouter régulièrement dans main() du genre
Code:
printf("avant xxx\n")
pour avoir une trace de ce qu'il se passe.

Peut-être un problème de débordement de  la pile du 6502.

Après il restera la bonne vieille séance de debug avec le moniteur de Oricutron, en compilant le programme avec l'opton --add-source pour pouvoir s'y retrouver dans le code assembleur.

Judicieux. Je m'y colle.

*Plus tard*

J'ai compris le problème!!

Juste à côté du CLS (la première carte donc), il y a un roi de la couleur 1350 (qui n'existe donc pas)
Donc ça crash parce qu'il sort de la zone mémoire prévue.

Les autres cartes n'ont pas bougé, donc ça veut dire que c'est le mélange qui a mal tourné, et j'ai du mal à comprendre comment.


D'ailleurs, en faisant le test plusieurs fois, j'ai vite remarqué que d'autres cartes sortent, mais toujours la première, et toujours des valeurs aberrantes

_________________
L'Oric ATMOS? Et pourquoi pas l'Oric ASTHENOS aussi? XD
avatar
TotoShampoin

Messages : 36
Date d'inscription : 16/08/2017
Age : 18
Localisation : Lagny Sur Marne

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par assinie le Lun 20 Aoû 2018 - 18:19

Pour shuffle(), je suppose que tu utilises le code que tu as publié au début, mais pour random() tu utilises quoi?
avatar
assinie

Messages : 225
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par TotoShampoin le Lun 20 Aoû 2018 - 19:54

SOLUTION TROUVEE :

random() % MAX

^ c'est ce qui ne marchait pas.
Il a fallut faire un modulo APRES le random, sur une variable à l'écart

_________________
L'Oric ATMOS? Et pourquoi pas l'Oric ASTHENOS aussi? XD
avatar
TotoShampoin

Messages : 36
Date d'inscription : 16/08/2017
Age : 18
Localisation : Lagny Sur Marne

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par Ladywasky le Mar 4 Sep 2018 - 4:20

Si tu es sous ISDK, tu dois commenter la dernière ligne du (#define rand() ... ) du fichier lib.h
c:OSDK\include\lib.h
avatar
Ladywasky

Messages : 95
Date d'inscription : 25/08/2018

Revenir en haut Aller en bas

Re: [PROBLEME] Commande input et générateur aléatoire

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous pouvez répondre aux sujets dans ce forum