vous connaissez le jeu du carré rouge?
http://www.chezmaya.com/jeux/carre_rouge.html
c'est un jeu très drôle et très difficile
j'ai fait un programme qui permet de devenir le champion du monde au jeu du carré rouge
http://rafb.net/p/0DCfGc76.html
n'oubliez pas de le compiler avec la libgdi32 et libuser32 dans l'éditeur de lien, et n'oubliez pas de maximiser la fenêtre du navigateur contenant le jeu; un manuel de l'utilisateur apparait a l'éxecution! enjoy ![]()
je dédie ce programme à dnob700 et a godrick sans qui rien n'aurait été possible ![]()
dommage que ce soit que pour windows.
je vais etre obligé de compter sur mes faibles capacités d'humain standard...
ah oui, c'est vrai
j'ai oublié de dire que mon programme est entièrement basé sur la librairie windows.h qu'on ne trouve que sous windows ![]()
J'ai compilé, tout va très bien.
Mais j'ai absolument rien compris à ce qu'il fallait faire de particulier pour que ça lance le jeu xD
________________________________________
Ma vidéo du moment :
http://youtube.com/watch?v=96Fm5SPsjD0 (Les Kiss Kool, à voir absolument
)
"Suicide par défénestration : encore une victime de Qt
"
Ok j'ai compris, j'avais perché sur ce coup là -_-
Eh bien félicitations, je suis plutôt impressionné ^^
Je vais bien lire le code pour essayer de comprendre comment ça marche
________________________________________
Ma vidéo du moment :
http://youtube.com/watch?v=96Fm5SPsjD0 (Les Kiss Kool, à voir absolument
)
"Suicide par défénestration : encore une victime de Qt
"
"je dédie ce programme à dnob700 et a godrick sans qui rien n'aurait été possible"
Merci, mais la partie vraiment importante c'est la logique pour éviter les carré, et ça, c'est entièrement de toi. Il faudra que je regarde comment tu fait (tu devrait mettre des return true; partout et enlever tout tes "if").
Je n'ai pas tester car je suis sous linux, mais ça a vraiment l'air très bien.
ça fait un peu code de porc tous ces if nan ? ![]()
C'est vrai que le code devrait pouvoir être allégé, mais ça marche très bien. Ceci dit il trouve vite ses limites
________________________________________
Ma vidéo du moment :
http://youtube.com/watch?v=96Fm5SPsjD0 (Les Kiss Kool, à voir absolument
)
"Suicide par défénestration : encore une victime de Qt
"
ton code n'est plus accessible. tu devrais le stocker sur un espace d'où il ne partira pas (je peut fournir ça si tu en as besoin).
mon programme regarde autour du carré rouge s'il y a du bleu qui apparait, et le cas écheant cherche une zone d'atterissage pour amener le carré rouge en sécurité
tous les if sont là pour éviter que les fonctions regardent tous les capteurs quand il y en a déja qui ont détecté la présence du bord ou d'un carré rouge... car a vrai dire, plus l'ordi est lent, plus le programme met de temps à trouver une zone sécurisée, et on se fait toucher
il y a aussi des cas, rarissimes, ou la landingzone pose ses capteurs juste autour d'un carré bleu et le carré rouge se pop dessus (mais là encore, je ne peux mettre trop de capteurs a cause du temps d'exécution
)
j'ai mis mon fichier sur megôpload, j'espère que le lien fonctionnera!
http://www.megaupload.com/?d=VJRDOBN3
http://www.megaupload.com/?d=VJRDOBN3
ce que je voulais dire c'est que tu peut remplacer tout tes "= true" par "return true;" et enlever les if.
et quand le programme rencontre un return dans la fonction, il la quitte instantanément?
je crois me souvenir que mes profs de programmation disaient qu'il ne fallait jamais mettre plusieurs return dans une fonction
m'enfin je vais essayer, si ca marche ma fonction sera encore plus optimisée ![]()
ca ne marche pas ![]()
qu'est ce que tu as écris ? c'est censé fonctionner car d'une part, oui, quand un programme rencontre un return dans une fonction, il quitte instantanément et d'autre part, tu peut avoir autant de return par fonction que tu veux (du moment que ça reste lisible, et là ça sera mieux).
Par exemple, tu peut écrire :
bool alerte(POINT pt, HDC hdc, int rayon){
int r,g,b;
pt.x=pt.x+5;
pt.y=pt.y+5;
COLORREF pix;
pix=GetPixel(hdc,pt.x+rayon,pt.y);
g = GetGValue(pix);
b = GetBValue(pix);
if(g+b!=510)return true;
pix=GetPixel(hdc,pt.x,pt.y+rayon);
// r = GetRValue(pix);
g = GetGValue(pix);
b = GetBValue(pix);
if(g+b!=510)return true;
...
return false;
}
C'est valable pour l'autre fonction aussi.
Mais une méthode supérieur serait de faire une fonction du type :
bool okPixel(HDC hdc, int x, int y)
{
int g,b;
COLORREF pix;
pix=GetPixel(hdc,x,y);
g = GetGValue(pix);
b = GetBValue(pix);
return (g+b!=510);
}
Puis tu ré-écris tes fonctions dans le genre :
bool alerte(POINT pt, HDC hdc, int rayon){
pt.x=pt.x+5;
pt.y=pt.y+5;
if(okPixel(hdc,pt.x+rayon,pt.y))
return true;
else if (okPixel(hdc,pt.x,pt.y+rayon))
return true;
...
return false;
}
ou même pire :
bool alerte(POINT pt, HDC hdc, int rayon)
{
pt.x=pt.x+5;
pt.y=pt.y+5;
return (okPixel(hdc,pt.x+rayon,pt.y)
&& okPixel(hdc,pt.x,pt.y+rayon)
&& ...
...
)
Une fois que tu a vue le truc, tu peut essayer de tout réécrire avec une boucle, ça sera un peu moins efficace mais ça fera un code beaucoup plus court, avec moins d'erreur, etc.
Et enfin, les fonction alerte et landingzone sont si semblable, qu'il faudrait les ré-écrire en une seule fonction.
Voila mes conseils pour transformer ça en un programme propre (je pense que ces fonctions qui font à elle deux 285 lignes peuvent être ré-écrite en une seule fonction de 10 lignes sans aucune perte d'efficacité).
ah ok, je vois mon erreur, j'ai oublié le return false a la fin des fonctions
mais mon programme se doit d'être le plus rapide possible, vu qu'il n'arrète pas le jeu pendant la recherche de la landingzone! a vrai dire, j'ai essayé sur un pc a peine plus ancien (et moins bien entretenu) que ce qui se fait maintenant, le programme tient une quinzaine de secondes... je ne sais donc pas si l'utilisation d'une boucle est une bonne idée
(ah ok, j'avais jamais vu return machin && truc && bidule
)
Bien ta grotte ![]()
faire une boucle ne sera pas pire que ce que tu fait pour l'instant (pourvu qu'il y ai un return dedans quand il faut arrêter de boucler).
La seule chose qui sera plus rapide (et encore ça dépend du compilo) c'est d'enlever tout les if.