CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Mon jeu : CodeWar (besoin de ß-testeurs)

lag-it
lag-it
Niveau 10
25 juin 2005 à 18:25:59

J´ai corrigé l´exemple de la page d´explication :)

Sinon concernant ton code, première chose :

- le CPU commence par exécuter l´instruction courante puis incrémente le pointeur d´instruction et enfin passe à l´exécution des autres processus, autrement dit, juste après avoir exécuté l´instruction, le processus se déplace sur la case d´après où il est réaffiché : c´est ce qui explique qu´on aie le sentiment que c´est le " add" qui plante, alors qu´il s´agit en réalité de l´instruction précédente : le move *5 *4.

Bon c´est peut être pas très clair de cette manière, peut être que je changerai le système d´affichage pour un truc ou l´indice du processus est sur la case courant lors de l´exécution des autres processus :)

Sinon concernant le problème, il semblerait que cela vienne d´une erreur de logique de ton code :
En utilisant le debuggueur de visual studio, la ligne incriminée :

move *5 *4

est interprétée comme :

un move de la case d´addresse absolue 16 sur la case d´addresse absolue 8 ( autrement dit elle même), si ton programme est chargé à l´addresse 0.

Etant donné que tu utilise un argument1 en mode d´addressage, CodeWar recopie arg1 sur arg2, autrement dit une case à valeur non définie ( d´où ce bloc vide).
J´ai fait plusieurs essais avec différentes addresse de spawn et le problème est à chaque fois celui-ci visiblement... je vais quand même rejetter un oeil...

Et concernant le retour à la ligne, c´est vraiment bête ce truc :( , je pensais pas qu´il les gérait comme ca...
Enfin je vais le corriger et sortir une nouvelle version d´ici quelques minutes.
En tout cas merci pour les tests :ok:

lag-it
lag-it
Niveau 10
25 juin 2005 à 18:31:44

Pourtant c´est bizarre en traitant un exemple à la main j´ai pas l´impression qu´il y aie d´erreur...
Je vais regarder de plus près cette histoire...

lag-it
lag-it
Niveau 10
25 juin 2005 à 18:35:01

Si visiblement y a un truc sur le code, voila l´état de la mémoire que je trouve juste avant l´exécution du move *5 *4 :

1985 / / saut:
rand #2000 -1 / / L´adresse où l´on va se répliquer
move #-11 10 / Move #Nb_Ins data
bez *-3 9 / label: bez saut data
move 8 9 / move data ( data+1)
add #11 8 / add #Nb_Ins ( data+1)
move 7 8 / move ( data+1) ( data+2)
add -7 6 / add ( saut) ( data+1)
sub #-8 6 / sub ( #Nb_Ins-3) ( data+2)
move *5 *4 / move *(data+2) *(data+1)
add #1 2 / add #1 data
jump -8 / jump label
-11 / data:
1974 / data+1:
-19 / data+2:

data2 semblez avoir une valeur de -19 pour addresse relative...

lag-it
lag-it
Niveau 10
25 juin 2005 à 18:37:09

Enfin je veux dire data1 semble avoir une addresse bizarre sachant qu´il sert de source...

gollumkawder
gollumkawder
Niveau 10
25 juin 2005 à 18:59:51

Excellent le jeu

lag-it
lag-it
Niveau 10
25 juin 2005 à 19:15:30

dnob700 > Ca y est j´ai supprimé le word wrap.

le_rider-killer > Désolé de ne pas t´avoir répondu avant, mais je me suis rué sur la correction des problèmes signalés :)

Déjà il est vrai que CodeWar n´est pas un jeu très facile à aborder pour quelqu´un qu´i n´a pas de bases en programmation. C´est de l´assembleur, et je trouve que ma page n´est pas très claire : il faut dire que le public visé n´est pas spécialement le débutant :).

Néanmoins si tu veux te pencher sur le jeu, voici quelques conseils : commence déjà, si tu as télécharger le programme, par faire un copier collé des exemples que j´ai fourni : ca te permettra de voir comment ca fonctionne en gros.

Tu vas dans le menu " file", tu choisi " load" et tu copie/colle un code d´exemple ( commence par le plus simple : move 0 1) dans la partie " code" entre une addresse numérique si tu le désires et appuies sur " load" : tu verra ton code apparaitre sous forme de blocs de couleur à l´écran ( un par ligne de code), ainsi qu´un petit numéro sur le premier bloc.

Ce petit numéro s´appelle un processus : il sert de point de repère pour le jeu pour savoir quelle instruction du programme il doit exécuter.

A chauqe fois qu´il " exécute" une instruction, le jeu déplace le processus sur la case suivante, et ca recommence.

Si tu insère le code des exemples et que tu lances le jeu avec l´option " Run" du menu CPU, tu verras que le processus se déplace sur les blocs de couleurs, symbolisant le fait qu´il parcourt ton programme.

Maintenant que tu as une petite idée de la manière dont le jeu se déroule, familliarise toi avec le langage en prenant les codes d´exmples et en cherchant le rôle de chacune des instructions grâce à la doc : quand tu vois un move, regarde le paragraphe correspondant pour savoir de quoi il s´agit, etc...

La seule petit subtilité concerne l´addressage, c´est à dire à quoi ressemble l´argument.

- Si c´est un nombre avec un # devant, ca veut dire que c´est une valeur directe : elle sera utilisée telle quelle par l´instruction. Par exemple un add #137 . .. ajoutera la valeur 137 à . ..

- Si c´est un nombre sans rien devant, alors c´est un addresse relative : ca veut dire que cela représente une case de la mémoir, partant du principe que la case sur laquelle se trouve le processus au momnent de l´exécution vaut 0 : la case juste après vaut 1, celle encore après vaut 2, celle justa avant vaut -1, etc...
Par exemple, add 10 . .. ajoutera la valeur contenue 10 cases plus loin à . .., jump 10 enverra ton processus 10 cases plus loin, etc...

- Enfin si c´est un nombre précédé de *, il s´agit d´un pointeur : c´est un concept qui peut paraitre un peu compliqué.
Un petit exemple est plus clair :

move #9999 *1
data #137

est équivalent à :

move #9999 137

De même :

data #1234
jump *-1

est équivalent à :

jump 1234

En fait, tu utilise le contenu d´un bloc come addresse relative, c´est tout :)
C´est quoi l´intérêt ?

Si tu écrit " jump 1234", ton processus sautera toujours 1234 cases plus loin, tandis que si tu utilises :

data #1234
jump *-1

Tu pourra modifier la valeur 1234, car il s´agit d´un bloc de donnée ( data) : ca permet par exemple, dans l´exmple 2, de créer un bloc data aléatoirement :)

N´hésites pas à poser une question sur un sujet précis si tu veux plus d´explication sur ce thème :ok:

lag-it
lag-it
Niveau 10
25 juin 2005 à 19:15:55

Merci gollumkawder :-d

lag-it
lag-it
Niveau 10
25 juin 2005 à 19:22:13

Au fait dnob, ton programme se répliquant aléatoirement sera bien plus intéressant quand j´aurai implémenté la fonction permettant de spawner de nouveaux processus :-)))

gollumkawder
gollumkawder
Niveau 10
25 juin 2005 à 19:22:18

par contre enleve le E de move, j´arrive pas a m´y faire :´( ( et pourtant c´est pas l´asm qui m´étouffe lol)

lag-it
lag-it
Niveau 10
25 juin 2005 à 19:23:32

Oui mais moi je préfère l´A68K :-)))

gollumkawder
gollumkawder
Niveau 10
25 juin 2005 à 19:26:03

IA-32 powaa..

Je lis et relis la doc pour bien comprendre, et j´ai vu une phrase pas claire

" Néanmoins ce programme demeure inoffensif puisqu´il ne cherche pas à écrire d´instruction illégale data sur le chemin d´autres processus"

´d´instruction illégale data´

T´as oublié un mot ou c´est moi qui fait le wannabe ?

lag-it
lag-it
Niveau 10
25 juin 2005 à 19:29:18

Illégale dans le sens " qui ne doit pas être exécutée sous peine de faire planter l´instance du programme", mais elle est parfaitement acceptée par le jeu.

gollumkawder
gollumkawder
Niveau 10
25 juin 2005 à 19:39:39

non je parle de la partie ´illégale data´ dans ´instructions illégale data´ ça sonne bizard 0o´

lag-it
lag-it
Niveau 10
25 juin 2005 à 20:07:11

Je trouve pas ca choquant, mais je peux modifier :-)))

gollumkawder
gollumkawder
Niveau 10
25 juin 2005 à 20:45:04

question: la source quand elle sera dispo tu la mettras sous license ? Est-ce qu´on aura le droit de faire un portage IA-32 ? ( Gnu GPL ? )

lag-it
lag-it
Niveau 10
25 juin 2005 à 20:56:00

Chaipa encore pour la licence : un truc libre style GPL, mais j´y connait rien ( et pour ce que ca m´intéresse, je préfère programmer :) )

Sinon des portages x86, RedCode seront parfaitement envisageable :)
( bon ceci dit il faut pas s´attendre à un truc myrifique : ca a été programmé from scratch sur des créneaux horaires 22h-minuits en semaines de cours, donc même si j´ai fait un peu attention, ce n´est pas forcément un modèle d´implémentation objet :) )

le_rider-killer
le_rider-killer
Niveau 6
26 juin 2005 à 00:01:04

merci beaucoup je vais essayer de tout comprendre et meme apprendre vite fait( tres vite fait)l´assembleur si sa peut m´aider en tout acs je commence a mieu comprendre.
Surtout tinquiete pas je me génerais pas pour poser des questions lol!!
encore merci ^^

lag-it
lag-it
Niveau 10
26 juin 2005 à 01:30:21

Je signale quand même que CodeWar est un jeu : tu ne peux pas créer d´applications ou de jeux avec ( quoiqu´en fait on peut créer des trucs genre pacman etc :-d ) , donc ne te lance pas dedans si ton objectif est d´apprendre un langage reconnu pour développer de vraies application : ca c´est juste pour le fun.

Par contre si tu veux t´amuser au corewar, ou avoir une petite idée très simplifiée du fonctionnement de l´assembleur ( vraiment hyper simplifié car il n´y a pas de registres, flags... ) vazy :)

lag-it
lag-it
Niveau 10
26 juin 2005 à 01:57:11

Sinon concernant ton code dnob, l´exemple que j´ai traité à la main est faux il me semble, mais il s´agit apparement bien d´un problème d´addresse, cf. ce que j´ai cité avant avec le debugger de visual c++...

dnob700
dnob700
Niveau 10
26 juin 2005 à 13:20:16

Ce qui m´embête c´est que j´ai beau vérifier la logique de mon code, je ne vois pas ce qui peut clocher.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment