<?xml version="1.0"?>
<rss version="2.0"><channel><title>C and variants Latest Topics</title><link>https://jeu.video/forum/34-c-et-variantes/</link><description>C and variants Latest Topics</description><language>en</language><item><title>Minimalist Vector API</title><link>https://jeu.video/forum/topic/4301-minimalist-vector-api/</link><description><![CDATA[
<p>
	<em>Ca faisait longtemps x)</em>
</p>

<p>
	Yooop ^^'
</p>

<p>
	 
</p>

<p>
	<a href="https://mathiasgarnier.github.io/Minimalist-Vector-API/" rel="external nofollow">https://mathiasgarnier.github.io/Minimalist-Vector-API/</a>
</p>

<p>
	<em>Et c'est clairement pas fini ^^'</em>
</p>

<p>
	 
</p>

<p>
	On pourrait croire que ça sert à rien, mais non ! x) J'donnerai quelques exemples graphiques quand je pourrais ^^'.
</p>

<p>
	 
</p>

<p>
	Désolé, j'ai absolument pas le temps de détailler ni rien, mais j'ai un minimum documenté dans les sources ^^'.
</p>
]]></description><guid isPermaLink="false">4301</guid><pubDate>Sun, 14 Aug 2016 13:58:35 +0000</pubDate></item><item><title>Steam spammer</title><link>https://jeu.video/forum/topic/2603-steam-spammer/</link><description><![CDATA[
<p style="text-align:center;">
	<img class="ipsImage" src="https://www.stellar-overload.com/img/newsblog/neom/steam-logo.jpg" alt="steam-logo.jpg"></p>

<p>
	Je sais pas pourquoi je poste ça ici parce que c'est un peu compliqué <img alt=":D" data-emoticon="true" height="20" src="https://jeu.video/forum/uploads/emoticons/default_biggrin.png" srcset="https://jeu.video/forum/uploads/emoticons/biggrin@2x.png 2x" title=":D" width="20"> mais ça me fera une save <img alt=":P" data-emoticon="true" height="20" src="https://jeu.video/forum/uploads/emoticons/default_tongue.png" srcset="https://jeu.video/forum/uploads/emoticons/tongue@2x.png 2x" title=":P" width="20"> Bon j'avais codé ça car un pote me faisait chier sur steam à spammer et j'en avais marre de CTRL C - CTRL V <img alt=":D" data-emoticon="true" height="20" src="https://jeu.video/forum/uploads/emoticons/default_biggrin.png" srcset="https://jeu.video/forum/uploads/emoticons/biggrin@2x.png 2x" title=":D" width="20"> 
</p>

<p>
	Basiquement, c'est petite appli se connecte à votre Steam (via la SteamAPI), choppe 2-3 interfaces (pour avoir le client et les amis) et à l'aide d'une console, va vous permettre de spammer n'importe qui dans vos amis (soit du spam texte et même du spam d'invitation d'un jeu random <img alt=":D" data-emoticon="true" height="20" src="https://jeu.video/forum/uploads/emoticons/default_biggrin.png" srcset="https://jeu.video/forum/uploads/emoticons/biggrin@2x.png 2x" title=":D" width="20"> ). A l'époque, je ne savais pas faire d'appli graphique, d'où le prog dans une console moche :/ Faudrait que je porte ça vers une interface stylay!
</p>

<p style="text-align:center;">
	J'avais fais une vidéo démo:
</p>

<p style="text-align:center;">
	<iframe allowfullscreen="" frameborder="0" height="360" src="https://www.youtube.com/embed/g3Blfv6kQsw" width="640"></iframe>
</p>

<p>
	Vu qu'il ya pas mal de headers à include et tout, j'ai créé un dépot git sur bitbucket pour ceux que ça intéresse:
</p>

<p>
	<a href="https://bitbucket.org/Ni7r1x/steam-spammer" rel="external nofollow">https://bitbucket.org/Ni7r1x/steam-spammer</a>
</p>

<p>
	Ceux qui veulent les binaries, contactez moi ^^
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">2603</guid><pubDate>Tue, 15 Mar 2016 20:45:01 +0000</pubDate></item><item><title>Razer: utilisation de l'API du module Chroma</title><link>https://jeu.video/forum/topic/2007-razer-utilisation-de-lapi-du-module-chroma/</link><description><![CDATA[
<p>
	Possédant des périphériques Razer équipés du module de couleurs "Chroma", je me suis intéressé à l'API, disponible sur le site officielle de la marque, pour faire des tests et tenter d’interagir avec les périphériques. Grâce à leur doc doxygen et quelques "snippets" de code, j'ai réussi à changer la couleur de mon clavier comme ceci:
</p>

<p>
	 <iframe allowfullscreen="" frameborder="0" height="360" src="https://www.youtube.com/embed/xOgrewWf4FM" width="640"></iframe>
</p>

<p>
	L'appli dans la démo est extrêmement simple, j'ai du faire ça en 10 minutes mais cela montre le potentiel que l'on peut faire (pouvoir régler dynamiquement la couleur avec des sliders, ou inventer des effets customs...)
</p>

<p>
	Le SDK de Chroma est écrit en C++, le mieux serait donc de coder votre appli avec le même langage. J'ai malgré tout réussi à trouver des projets sur le net où des devs indépendants ont transcrit le SDK sur d'autres langages (genre java il me semble).
</p>

<p>
	Pour les devs, on peut le télécharger ici: <a href="http://developer.razerzone.com/chroma/download/" rel="external nofollow">http://developer.razerzone.com/chroma/download/</a>
</p>

<p>
	Voici le code que je vous propose, pour initialiser l'API et un exemple de fonction pour appliquer une couleur:
</p>

<p>
	.cpp
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span>#include "stdafx.h"

CChroma* g_pChroma;

CChroma::CChroma() 
{ 
	bInitialized = false;
	hModule = NULL;
	initFn = NULL;
	unInitFn = NULL;
	createEffectFn = NULL;
	createKeyboardEffectFn = NULL;
	createMouseEffectFn = NULL;
}

CChroma::~CChroma()
{
	if (hModule)
	{
		unInitFn = (UNINIT)GetProcAddress(hModule, "UnInit");
		if (unInitFn)
		{
			unInitFn();
		}
		FreeLibrary(hModule);
		hModule = NULL;
	}
}

bool CChroma::Init()
{
	do
	{
		hModule = LoadLibrary(CHROMASDKDLL);
		Sleep(200);
	} while (!hModule);

	if (hModule)
	{
		initFn = (INIT)GetProcAddress(hModule, "Init");
		if (initFn)
		{
			RZRESULT result = initFn();

			if (result == RZRESULT_SUCCESS)
			{
				createEffectFn = (CREATEEFFECT)GetProcAddress(hModule, "CreateEffect");
				createKeyboardEffectFn = (CREATEKEYBOARDEFFECT)GetProcAddress(hModule, "CreateKeyboardEffect");
				createMouseEffectFn = (CREATEMOUSEEFFECT)GetProcAddress(hModule, "CreateMouseEffect");
				queryDeviceFn = (QUERYDEVICE)GetProcAddress(hModule, "QueryDevice");

				if (createEffectFn &amp;&amp; createKeyboardEffectFn &amp;&amp; createMouseEffectFn &amp;&amp; queryDeviceFn)
				{
					printf("init: ok \n");
					bInitialized = true;
					return true;
				}
				else
					return false;
			}
		}
	}

	return false;
}

bool CChroma::ApplyEffect(COLORREF dwColor)
{
	if (!bInitialized)
		return false;

	RZEFFECTID Frame0 = GUID_NULL;

	ChromaSDK::Keyboard::CUSTOM_EFFECT_TYPE DeathStalkerEffect;

	for (int i = 0; i &lt; ChromaSDK::Keyboard::MAX_ROW; i++)
	{
		for (int j = 0; j &lt; ChromaSDK::Keyboard::MAX_COLUMN; j++)
		{
			DeathStalkerEffect.Color[i][j] = dwColor; //COLORREF_RGBA(255, 0, 0, 255);
		}
	}

	createEffectFn(ChromaSDK::DEATHSTALKER_CHROMA, ChromaSDK::CHROMA_CUSTOM, &amp;DeathStalkerEffect, NULL);

	createKeyboardEffectFn(ChromaSDK::Keyboard::CHROMA_CUSTOM, &amp;DeathStalkerEffect, &amp;Frame0);

	printf("Created \n");

	return true;
}</span></pre>

<p>
	.h
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span>#pragma once

// Inclusion du chroma sdk
#include "ChromaSDK/RzChromaSDKDefines.h"
#include "ChromaSDK/RzChromaSDKTypes.h"
#include "ChromaSDK/RzErrors.h"

using namespace ChromaSDK;
using namespace ChromaSDK::Keyboard;

typedef RZRESULT(*INIT)(void);
typedef RZRESULT(*UNINIT)(void);
typedef RZRESULT(*CREATEEFFECT)(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
typedef RZRESULT(*CREATEKEYBOARDEFFECT)(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
typedef RZRESULT(*CREATEMOUSEEFFECT)(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
typedef RZRESULT(*QUERYDEVICE)(RZDEVICEID DeviceId, ChromaSDK::DEVICE_INFO_TYPE &amp;DeviceInfo);

#ifdef _WIN64
#define CHROMASDKDLL "RzChromaSDK64.dll"
#else
#define CHROMASDKDLL "RzChromaSDK.dll"
#endif

#define COLORREF_ARGB(a,r,g,b) ((COLORREF)((((a)&amp;0xff)&lt;&lt;24)|(((r)&amp;0xff)&lt;&lt;16)|(((g)&amp;0xff)&lt;&lt;8)|((b)&amp;0xff)))
#define COLORREF_RGBA(r,g,b,a) ((COLORREF)((((r)&amp;0xff)&lt;&lt;24)|(((g)&amp;0xff)&lt;&lt;16)|(((b)&amp;0xff)&lt;&lt;8)|((a)&amp;0xff)))

#define COLORANGE			COLORREF_RGBA(255, 100, 000, 255)
#define COLYELLOW			COLORREF_RGBA(255, 255, 0, 255)
#define COLPURPLE			COLORREF_RGBA(55, 25, 128, 255)
#define COLRED				COLORREF_RGBA(255, 0, 0, 255)
#define COLGREEN			COLORREF_RGBA(0, 255, 0, 255)
#define COLBLUE				COLORREF_RGBA(0, 0, 255, 255)
#define COLBLACK			COLORREF_RGBA(0, 0, 0, 255)
#define COLWHITE			COLORREF_RGBA(255, 255, 255, 255)
#define COLGREY				COLORREF_RGBA(47, 79, 79, 255)


class CChroma
{
public:
	CChroma();
	~CChroma();

	bool Init();

	bool ApplyEffect(COLORREF dwColor);


private:
	HMODULE hModule;
	INIT initFn;
	UNINIT unInitFn;
	CREATEEFFECT createEffectFn;
	CREATEKEYBOARDEFFECT createKeyboardEffectFn;
	CREATEMOUSEEFFECT createMouseEffectFn;
	QUERYDEVICE queryDeviceFn;
	bool bInitialized;
};
extern CChroma* g_pChroma;</span></pre>

<p>
	La fonction Init() va chercher dans la .dll de Razer, les fonctions principales et les "stock" dans des variables qui font office de pointeurs. On peut par la suite, les appeler si besoin.
</p>

<p>
	Dans le SDK de Razer, dans le cas d'un clavier, un effet est modélisé par une structure contenant une matrice de couleur, représentant le clavier.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span>//! Custom effect using a matrix type.
typedef struct CUSTOM_EFFECT_TYPE
{
	COLORREF Color[MAX_ROW][MAX_COLUMN];      //!&lt; Grid layout. 6 rows by 22 columns.
} CUSTOM_EFFECT_TYPE;</span></pre>

<p>
	Il suffit alors d'instancier un CUSTOM_EFFECT_TYPE, remplir la matrice Color, créer l'effet avec la fonction createEffect() comme ceci:
</p>

<p>
	createEffectFn(ChromaSDK::DEATHSTALKER_CHROMA, ChromaSDK::CHROMA_CUSTOM, &amp;DeathStalkerEffect, NULL);
</p>

<p>
	puis l'appliquer au clavier avec la fonction createKeyboardEffect()
</p>

<p>
	createKeyboardEffectFn(ChromaSDK::Keyboard::CHROMA_CUSTOM, &amp;DeathStalkerEffect, &amp;Frame0);
</p>

<p>
	 
</p>

<p>
	Dans votre main, il faut instancier un objet CChroma comme ceci:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span>g_pChroma = new CChroma();
	
if (!g_pChroma-&gt;Init())
	return 1;</span></pre>

<p>
	Après, il suffit d'appeler la fonction ApplyEffect(dwColor) pour changer la couleur du clavier DeathStalker par exemple (dans mon code). Pour appliquer la couleur sur votre souris, ou le tapis ou le casque ou tout autre modèle, il faut regarder dans la doc comment init un effet pour tel ou tel modèle.
</p>

<p>
	Comprendra qui pourra <img alt=":)" data-emoticon="true" height="20" src="https://jeu.video/forum/uploads/emoticons/default_smile.png" srcset="https://jeu.video/forum/uploads/emoticons/smile@2x.png 2x" title=":)" width="20"></p>
]]></description><guid isPermaLink="false">2007</guid><pubDate>Tue, 02 Feb 2016 19:11:56 +0000</pubDate></item><item><title>Puissance 4 en C</title><link>https://jeu.video/forum/topic/1487-puissance-4-en-c/</link><description><![CDATA[
<p>
	C'était dans le cadre d'un projet d'école (réaliser un jeu type puissance 4 en C avec l'aide d'une librairie graphique (SDL) ). Réalisé entièrement par moi et en solo, voici une petite démo
</p>

<div class="ipsEmbeddedVideo" contenteditable="false">
	<div>
		<iframe allowfullscreen="true" frameborder="0" height="270" src="https://www.youtube.com/embed/gSkmVyl26rc?feature=oembed" width="480"></iframe>
	</div>
</div>

<p>
	A propos du code, il est commenté mais les algorithmes sont un peu "ghettos", compliqués et pas optimisés mais c'était à mes débuts dans la prog. 
</p>

<p>
	Le code:
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Spoiler</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			main.c
		</p>

		<pre class="ipsCode prettyprint prettyprinted">

<span>#include</span><span>&lt;stdio.h&gt;</span><span>
</span><span>#include</span><span> </span><span>&lt;stdlib.h&gt;</span><span>

</span><span>//librairie graphique</span><span>
</span><span>#include</span><span> </span><span>"lib/libgraphique.h"</span><span>

</span><span>#ifndef</span><span> CONSTANTES_STATIQUES
</span><span>#define</span><span> CONSTANTES_STATIQUES

</span><span>#define</span><span> SIZE </span><span>100</span><span>        </span><span>// = diamètre</span><span>
</span><span>#define</span><span> SIZEBY2 </span><span>50</span><span>      </span><span>// = rayon</span><span>

</span><span>#define</span><span> NB_CASE_L </span><span>8</span><span>
</span><span>#define</span><span> NB_CASE_H </span><span>6</span><span>

</span><span>#define</span><span> L </span><span>(</span><span>NB_CASE_L </span><span>*</span><span> SIZE</span><span>)</span><span>
</span><span>#define</span><span> H </span><span>(</span><span>NB_CASE_H </span><span>*</span><span> SIZE</span><span>)</span><span>

</span><span>#define</span><span> player1_color fabrique_couleur</span><span>(</span><span>255</span><span>,</span><span>0</span><span>,</span><span>0</span><span>)</span><span>
</span><span>#define</span><span> player2_color fabrique_couleur</span><span>(</span><span>255</span><span>,</span><span>255</span><span>,</span><span>0</span><span>)</span><span>

</span><span>enum</span><span> SENS_TYPE
</span><span>{</span><span>
    DIAGONALEDOWN </span><span>=</span><span> </span><span>0</span><span>,</span><span>
    DIAGONALEUP</span><span>,</span><span>
    VERTICAL</span><span>,</span><span>
    HORIZONTAL</span><span>,</span><span>
</span><span>};</span><span>

</span><span>enum</span><span> TYPE_DE_JEU
</span><span>{</span><span>
    UNJOUEUR </span><span>=</span><span> </span><span>1</span><span>,</span><span>
    DEUXJOUEURS</span><span>,</span><span>
</span><span>};</span><span>

</span><span>#endif</span><span> </span><span>//CONSTANTES</span><span>


</span><span>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</span><span>
</span><span>// ____  _____ _____ ___ _   _ ___ _____ ___ ___  _   _    ____  _____ ____     _____ ___  _   _  ____ _____ ___ ___  _   _ ____</span><span>
</span><span>// |  _ \| ____|  ___|_ _| \ | |_ _|_   _|_ _/ _ \| \ | |  |  _ \| ____/ ___|   |  ___/ _ \| \ | |/ ___|_   _|_ _/ _ \| \ | / ___|</span><span>
</span><span>// | | | |  _| | |_   | ||  \| || |  | |  | | | | |  \| |  | | | |  _| \___ \   | |_ | | | |  \| | |     | |  | | | | |  \| \___ \</span><span>
</span><span>// | |_| | |___|  _|  | || |\  || |  | |  | | |_| | |\  |  | |_| | |___ ___) |  |  _|| |_| | |\  | |___  | |  | | |_| | |\  |___) |</span><span>
</span><span>// |____/|_____|_|   |___|_| \_|___| |_| |___\___/|_| \_|  |____/|_____|____/   |_|   \___/|_| \_|\____| |_| |___\___/|_| \_|____/</span><span>
</span><span>//</span><span>
</span><span>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</span><span>


</span><span>//////////////////////////////</span><span>
</span><span>//////////////////////////////</span><span>
</span><span>//LISTES DES FONCTIONS</span><span>
</span><span>///////////////////////////////</span><span>
</span><span>///////////////////////////////</span><span>

</span><span>//Fonction qui corrige la position des pions pour les aligner dans les colonnes</span><span>
</span><span>Point</span><span> coin_case</span><span>(</span><span> </span><span>Point</span><span> p</span><span>,</span><span> </span><span>int</span><span> cote_case </span><span>);</span><span>

</span><span>//Fonction qui dessine les pions et les fait tomber.</span><span>
</span><span>void</span><span> dessiner_case</span><span>(</span><span> </span><span>Point</span><span> p</span><span>,</span><span> </span><span>Couleur</span><span> color </span><span>);</span><span>

</span><span>//Fonction qui vérifie s'il y a un gagnant à chaque pion posé.</span><span>
</span><span>int</span><span> checkvictoire</span><span>(</span><span> </span><span>Point</span><span> p</span><span>,</span><span> </span><span>Couleur</span><span> color </span><span>);</span><span> </span><span>//return 1 = win rouge 2 = win jaune</span><span>

</span><span>//Fonction qui dessine les pions alignés par 4 en vert.</span><span>
</span><span>void</span><span> dessiner_cercles_gagnants</span><span>(</span><span> </span><span>int</span><span> x</span><span>,</span><span> </span><span>int</span><span> y</span><span>,</span><span> </span><span>int</span><span> sens</span><span>,</span><span> </span><span>Couleur</span><span> color </span><span>);</span><span>

</span><span>//Fonction qui dessine une grille comme celle du véritable puissance 4</span><span>
</span><span>void</span><span> dessiner_quadrillage</span><span>(</span><span> </span><span>int</span><span> quadrillagesize</span><span>,</span><span> </span><span>Couleur</span><span> color </span><span>);</span><span>

</span><span>//Fonction qui fait jouer un adversaire contrôlé par le hasard</span><span>
</span><span>Point</span><span> adversaire</span><span>(</span><span> </span><span>Point</span><span> p </span><span>);</span><span>

</span><span>//variable qui stock la position y du dernier carré posé</span><span>
</span><span>int</span><span> lastesthauteur </span><span>=</span><span> </span><span>0</span><span>;</span><span>

</span><span>//////////////////////////////////</span><span>
</span><span>// __  __    _    ___ _   _</span><span>
</span><span>// |  \/  |  / \  |_ _| \ | |</span><span>
</span><span>// | |\/| | / _ \  | ||  \| |</span><span>
</span><span>// | |  | |/ ___ \ | || |\  |</span><span>
</span><span>// |_|  |_/_/   \_\___|_| \_|</span><span>
</span><span>//</span><span>
</span><span>//////////////////////////////////</span><span>


</span><span>/////////////////////////</span><span>
</span><span>/////////////////////////</span><span>
</span><span>// MAIN</span><span>
</span><span>//////////////////////////</span><span>
</span><span>//////////////////////////</span><span>

</span><span>int</span><span> main</span><span>(</span><span>int</span><span> argc</span><span>,</span><span> </span><span>char</span><span> </span><span>*</span><span>argv</span><span>[])</span><span>
</span><span>{</span><span>
    </span><span>//Initialisation de la fenetre</span><span>
    ouvrir_fenetre</span><span>(</span><span>L</span><span>,</span><span>H</span><span>);</span><span>

    </span><span>//afficher la souris</span><span>
    SDL_ShowCursor</span><span>(</span><span>SDL_ENABLE</span><span>);</span><span>

    </span><span>//////////////////////////</span><span>
    </span><span>//Décalaration des variables importantes</span><span>
    </span><span>//////////////////////////</span><span>
    </span><span>Point</span><span> coingauche </span><span>=</span><span> </span><span>{</span><span> </span><span>0</span><span>,</span><span> </span><span>0</span><span> </span><span>};</span><span>
    </span><span>Point</span><span> clic</span><span>;</span><span>     </span><span>//variable qui stock les positions des clics</span><span>
    </span><span>int</span><span> boucle_jeu </span><span>=</span><span> </span><span>0</span><span>,</span><span> boucle_menu </span><span>=</span><span> </span><span>1</span><span>,</span><span> boucle_win </span><span>=</span><span> </span><span>0</span><span>;</span><span>    </span><span>//boucles qui nous permettront de switcher entre le jeu, le menu et l'écran "gagné"</span><span>
    </span><span>int</span><span> joueur1 </span><span>=</span><span> </span><span>1</span><span>;</span><span>    </span><span>//variable qui va nous permettre d'alterner les couleurs.</span><span>
    </span><span>int</span><span> victoire </span><span>=</span><span> </span><span>0</span><span>;</span><span>   </span><span>//check pour la victoire</span><span>
    </span><span>Couleur</span><span> color</span><span>;</span><span>  </span><span>//couleur des pions</span><span>
    SDL_Event event</span><span>;</span><span>    </span><span>//variable qui stockera les évènements</span><span>
    </span><span>int</span><span> mousex</span><span>,</span><span> mousey</span><span>;</span><span>   </span><span>//positions du curseur de la souris</span><span>
    </span><span>int</span><span> mode_selection </span><span>=</span><span> </span><span>0</span><span>,</span><span> mode_choisi </span><span>=</span><span> </span><span>0</span><span>;</span><span>   </span><span>//variables qui gèrent les modes de jeu (1 ou 2 joueurs)</span><span>

    </span><span>//////////////////////////</span><span>
    </span><span>// boucle du menu</span><span>
    </span><span>////////////////////////</span><span>
    </span><span>while</span><span>(</span><span> boucle_menu </span><span>)</span><span>
    </span><span>{</span><span>
        </span><span>//boucle d'évènements</span><span>
        </span><span>//on stock les évèments qui surviennent dans une variable</span><span>
        </span><span>//WaitEvent bloque le programme jusqu'à ce qu'un evenement survienne</span><span>
        SDL_WaitEvent</span><span>(&amp;</span><span>event</span><span>);</span><span>
        </span><span>switch</span><span>(</span><span>event</span><span>.</span><span>type</span><span>)</span><span>  </span><span>//switch/case pour avoir les évènements qui nous intéresse</span><span>
        </span><span>{</span><span>
            </span><span>case</span><span> SDL_QUIT</span><span>:</span><span>  </span><span>//action de quitter (croix)</span><span>
                boucle_menu </span><span>=</span><span> </span><span>0</span><span>;</span><span>    </span><span>//on ferme notre boucle principale =&gt; on quitte</span><span>
                </span><span>break</span><span>;</span><span>
            </span><span>case</span><span> SDL_KEYDOWN</span><span>:</span><span>   </span><span>//touche pressée</span><span>
                </span><span>if</span><span>(</span><span> event</span><span>.</span><span>key</span><span>.</span><span>keysym</span><span>.</span><span>sym </span><span>==</span><span> SDLK_ESCAPE</span><span>)</span><span> </span><span>//echap</span><span>
                    boucle_menu </span><span>=</span><span> </span><span>0</span><span>;</span><span>    </span><span>//on ferme notre boucle principale =&gt; on quitte</span><span>
                </span><span>break</span><span>;</span><span>
            </span><span>case</span><span> SDL_MOUSEBUTTONUP</span><span>:</span><span> </span><span>//clic souris gauche</span><span>
                </span><span>//on stock les coordonnées de la souris</span><span>
                mousex </span><span>=</span><span> event</span><span>.</span><span>button</span><span>.</span><span>x</span><span>,</span><span> mousey </span><span>=</span><span> event</span><span>.</span><span>button</span><span>.</span><span>y</span><span>;</span><span>
                </span><span>//printf("x: %i, y: %i \n", mousex, mousey);</span><span>
                </span><span>if</span><span>(</span><span> </span><span>!</span><span>mode_selection </span><span>)</span><span>
                </span><span>{</span><span>
                    </span><span>//bouton jouer</span><span>
                    </span><span>if</span><span>(</span><span> </span><span>(</span><span>mousex </span><span>&gt;=</span><span> </span><span>337</span><span> </span><span>&amp;&amp;</span><span> mousex </span><span>&lt;=</span><span> </span><span>436</span><span>)</span><span> </span><span>&amp;&amp;</span><span> </span><span>(</span><span>mousey </span><span>&gt;=</span><span> </span><span>279</span><span> </span><span>&amp;&amp;</span><span> mousey </span><span>&lt;=</span><span> </span><span>315</span><span>)</span><span> </span><span>)</span><span>
                        mode_selection </span><span>=</span><span> </span><span>1</span><span>;</span><span> </span><span>//on affiche l'image de la selection du mode de jeu</span><span>
                    </span><span>//bouton quitter</span><span>
                    </span><span>else</span><span> </span><span>if</span><span>(</span><span> </span><span>(</span><span>mousex </span><span>&gt;=</span><span> </span><span>337</span><span> </span><span>&amp;&amp;</span><span> mousex </span><span>&lt;=</span><span> </span><span>436</span><span>)</span><span> </span><span>&amp;&amp;</span><span> </span><span>(</span><span>mousey </span><span>&gt;=</span><span> </span><span>345</span><span> </span><span>&amp;&amp;</span><span> mousey </span><span>&lt;=</span><span> </span><span>380</span><span>)</span><span> </span><span>)</span><span>
                        boucle_menu </span><span>=</span><span> </span><span>0</span><span>;</span><span>    </span><span>//on quitte</span><span>
                </span><span>}</span><span>
                </span><span>//menu selection des modes</span><span>
                </span><span>else</span><span>
                </span><span>{</span><span>
                    </span><span>//bouton retour</span><span>
                    </span><span>if</span><span>(</span><span> </span><span>(</span><span>mousex </span><span>&gt;=</span><span> </span><span>322</span><span> </span><span>&amp;&amp;</span><span> mousex </span><span>&lt;=</span><span> </span><span>421</span><span>)</span><span> </span><span>&amp;&amp;</span><span> </span><span>(</span><span>mousey </span><span>&gt;=</span><span> </span><span>425</span><span> </span><span>&amp;&amp;</span><span> mousey </span><span>&lt;=</span><span> </span><span>462</span><span>)</span><span> </span><span>)</span><span>
                        mode_selection </span><span>=</span><span> </span><span>0</span><span>;</span><span> </span><span>//on reaffiche l'image du menu</span><span>
                    </span><span>//bouton "1 Joueur"</span><span>
                    </span><span>else</span><span> </span><span>if</span><span>(</span><span> </span><span>(</span><span>mousex </span><span>&gt;=</span><span> </span><span>260</span><span> </span><span>&amp;&amp;</span><span> mousex </span><span>&lt;=</span><span> </span><span>499</span><span>)</span><span> </span><span>&amp;&amp;</span><span> </span><span>(</span><span>mousey </span><span>&gt;=</span><span> </span><span>271</span><span> </span><span>&amp;&amp;</span><span> mousey </span><span>&lt;=</span><span> </span><span>305</span><span>)</span><span> </span><span>)</span><span>
                    </span><span>{</span><span>
                        mode_selection </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                        mode_choisi </span><span>=</span><span> UNJOUEUR</span><span>;</span><span>
                        boucle_jeu </span><span>=</span><span> </span><span>1</span><span>;</span><span>
                    </span><span>}</span><span>
                    </span><span>//bouton "2 Joueur"</span><span>
                    </span><span>else</span><span> </span><span>if</span><span>(</span><span> </span><span>(</span><span>mousex </span><span>&gt;=</span><span> </span><span>260</span><span> </span><span>&amp;&amp;</span><span> mousex </span><span>&lt;=</span><span> </span><span>499</span><span>)</span><span> </span><span>&amp;&amp;</span><span> </span><span>(</span><span>mousey </span><span>&gt;=</span><span> </span><span>303</span><span> </span><span>&amp;&amp;</span><span> mousey </span><span>&lt;=</span><span> </span><span>334</span><span>)</span><span> </span><span>)</span><span>
                    </span><span>{</span><span>
                        mode_selection </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                        mode_choisi </span><span>=</span><span> DEUXJOUEURS</span><span>;</span><span>
                        boucle_jeu </span><span>=</span><span> </span><span>1</span><span>;</span><span>
                    </span><span>}</span><span>
                </span><span>}</span><span>
                </span><span>break</span><span>;</span><span>
        </span><span>}</span><span>

        </span><span>//affichage de l'image du menu</span><span>
        afficher_image</span><span>(</span><span>"image/menu.bmp"</span><span>,</span><span> coingauche </span><span>);</span><span>

        </span><span>//menu de selection des modes</span><span>
        </span><span>if</span><span>(</span><span> mode_selection </span><span>)</span><span>
            afficher_image</span><span>(</span><span>"image/mode_de_jeu.bmp"</span><span>,</span><span> coingauche </span><span>);</span><span>

        actualiser</span><span>();</span><span>

        </span><span>//démarrer sur fond noir le jeu</span><span>
        </span><span>if</span><span>(</span><span> boucle_jeu </span><span>)</span><span>
        </span><span>{</span><span>
            dessiner_rectangle</span><span>(</span><span> coingauche</span><span>,</span><span> L</span><span>,</span><span> H</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>0</span><span>,</span><span>0</span><span>));</span><span>
            actualiser</span><span>();</span><span>
        </span><span>}</span><span>

        </span><span>///////////////////////////</span><span>
        </span><span>//  boucle de jeu</span><span>
        </span><span>/////////////////////////</span><span>
        </span><span>while</span><span>(</span><span> boucle_jeu </span><span>)</span><span>
        </span><span>{</span><span>
            </span><span>//boucle d'évènements</span><span>
            </span><span>//on stock les éléments qui surviennent dans une variable</span><span>
            </span><span>//PollEvent au contraire de WaitEvent ne bloque pas le programme lorsqu'il ne se passe rien</span><span>
            </span><span>//Utile pour faire jouer un bot (ordinateur)</span><span>
            SDL_PollEvent</span><span>(&amp;</span><span>event</span><span>);</span><span>
            </span><span>switch</span><span>(</span><span>event</span><span>.</span><span>type</span><span>)</span><span>
            </span><span>{</span><span>
                </span><span>case</span><span> SDL_QUIT</span><span>:</span><span>  </span><span>//action de quitter (croix)</span><span>
                    boucle_jeu </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                    boucle_menu </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>case</span><span> SDL_KEYDOWN</span><span>:</span><span>   </span><span>//touche pressée</span><span>
                    </span><span>if</span><span>(</span><span> event</span><span>.</span><span>key</span><span>.</span><span>keysym</span><span>.</span><span>sym </span><span>==</span><span> SDLK_ESCAPE</span><span>)</span><span> </span><span>//echap</span><span>
                        boucle_jeu </span><span>=</span><span> </span><span>0</span><span>;</span><span>    </span><span>//on ferme notre boucle de jeu</span><span>
                    </span><span>break</span><span>;</span><span>
            </span><span>}</span><span>

            </span><span>//on dessine la grille dès le démarrage</span><span>
            dessiner_quadrillage</span><span>(</span><span> </span><span>5</span><span>,</span><span> fabrique_couleur</span><span>(</span><span> </span><span>0</span><span>,</span><span> </span><span>128</span><span>,</span><span> </span><span>255</span><span>)</span><span> </span><span>);</span><span>
            actualiser</span><span>();</span><span>

            </span><span>//on alterne les couleurs</span><span>
            </span><span>if</span><span>(</span><span> joueur1 </span><span>)</span><span>
            </span><span>{</span><span>
                color </span><span>=</span><span> player1_color</span><span>;</span><span>
                clic </span><span>=</span><span> attendre_clic</span><span>();</span><span> </span><span>//on stock les coordonnées du clic</span><span>
                joueur1 </span><span>=</span><span> </span><span>0</span><span>;</span><span>
            </span><span>}</span><span>
            </span><span>else</span><span>
            </span><span>{</span><span>
                color </span><span>=</span><span> player2_color</span><span>;</span><span>
                </span><span>if</span><span>(</span><span> mode_choisi </span><span>==</span><span> DEUXJOUEURS </span><span>)</span><span>    </span><span>//si 2 joueurs, on attend un clic</span><span>
                    clic </span><span>=</span><span> attendre_clic</span><span>();</span><span>
                </span><span>else</span><span>
                    clic </span><span>=</span><span> adversaire</span><span>(</span><span> clic </span><span>);</span><span>   </span><span>//sinon on génère une valeur aléatoire</span><span>
                joueur1 </span><span>=</span><span> </span><span>1</span><span>;</span><span>
            </span><span>}</span><span>

            </span><span>//On appelle la fonction pour dessiner les pions</span><span>
            </span><span>//coin_case() renvoie la position corrigées des pions pour qu'ils se positionnent bien dans les colonnes</span><span>
            dessiner_case</span><span>(</span><span> coin_case</span><span>(</span><span> clic</span><span>,</span><span> SIZE </span><span>),</span><span> color</span><span>);</span><span>

            </span><span>//on vérifie s'il y a 4 pions alignés</span><span>
            victoire </span><span>=</span><span> checkvictoire</span><span>(</span><span> coin_case</span><span>(</span><span> clic</span><span>,</span><span> SIZE </span><span>),</span><span> color </span><span>);</span><span>
            </span><span>//s'il y a un gagnant, on ouvre la boucle "win"</span><span>
            </span><span>if</span><span>(</span><span> victoire </span><span>!=</span><span> </span><span>0</span><span> </span><span>)</span><span>
            </span><span>{</span><span>
                boucle_jeu </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                boucle_win </span><span>=</span><span> </span><span>1</span><span>;</span><span>
            </span><span>}</span><span>
        </span><span>}</span><span>

        </span><span>///////////////////////////</span><span>
        </span><span>//  boucle de jeu</span><span>
        </span><span>/////////////////////////</span><span>
        </span><span>while</span><span>(</span><span> boucle_win </span><span>)</span><span>
        </span><span>{</span><span>
            </span><span>//boucle d'évènements</span><span>
            SDL_WaitEvent</span><span>(&amp;</span><span>event</span><span>);</span><span>
            </span><span>switch</span><span>(</span><span>event</span><span>.</span><span>type</span><span>)</span><span>
            </span><span>{</span><span>
                </span><span>case</span><span> SDL_QUIT</span><span>:</span><span>  </span><span>//action de quitter (croix)</span><span>
                    boucle_win </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                    boucle_jeu </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                    boucle_menu </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>case</span><span> SDL_KEYDOWN</span><span>:</span><span>   </span><span>//touche pressée</span><span>
                    </span><span>if</span><span>(</span><span> event</span><span>.</span><span>key</span><span>.</span><span>keysym</span><span>.</span><span>sym </span><span>==</span><span> SDLK_ESCAPE</span><span>)</span><span> </span><span>//echap</span><span>
                        boucle_win </span><span>=</span><span> </span><span>0</span><span>;</span><span>    </span><span>//on ferme notre boucle "win"</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>case</span><span> SDL_MOUSEBUTTONUP</span><span>:</span><span> </span><span>//clic souris gauche</span><span>
                    mousex </span><span>=</span><span> event</span><span>.</span><span>button</span><span>.</span><span>x</span><span>,</span><span> mousey </span><span>=</span><span> event</span><span>.</span><span>button</span><span>.</span><span>y</span><span>;</span><span>
                    </span><span>if</span><span>(</span><span> </span><span>(</span><span>mousex </span><span>&gt;=</span><span> </span><span>329</span><span> </span><span>&amp;&amp;</span><span> mousex </span><span>&lt;=</span><span> </span><span>429</span><span>)</span><span> </span><span>&amp;&amp;</span><span> </span><span>(</span><span>mousey </span><span>&gt;=</span><span> </span><span>421</span><span> </span><span>&amp;&amp;</span><span> mousey </span><span>&lt;=</span><span> </span><span>457</span><span>)</span><span> </span><span>)</span><span>  </span><span>//bouton rejouer</span><span>
                    </span><span>{</span><span>
                        boucle_win </span><span>=</span><span> </span><span>0</span><span>;</span><span> </span><span>//on ferme la boucle win</span><span>
                        boucle_jeu </span><span>=</span><span> </span><span>1</span><span>;</span><span> </span><span>//on ouvre la boucle jouer</span><span>
                    </span><span>}</span><span>
                    </span><span>else</span><span> </span><span>if</span><span>(</span><span> </span><span>(</span><span>mousex </span><span>&gt;=</span><span> </span><span>329</span><span> </span><span>&amp;&amp;</span><span> mousex </span><span>&lt;=</span><span> </span><span>429</span><span>)</span><span> </span><span>&amp;&amp;</span><span> </span><span>(</span><span>mousey </span><span>&gt;=</span><span> </span><span>485</span><span> </span><span>&amp;&amp;</span><span> mousey </span><span>&lt;=</span><span> </span><span>522</span><span>)</span><span> </span><span>)</span><span> </span><span>//bouton quitter</span><span>
                    </span><span>{</span><span>
                        boucle_win </span><span>=</span><span> </span><span>0</span><span>;</span><span>
                        boucle_jeu </span><span>=</span><span> </span><span>0</span><span>;</span><span> </span><span>//on revient dans le menu</span><span>
                    </span><span>}</span><span>
                    </span><span>break</span><span>;</span><span>
            </span><span>}</span><span>

            </span><span>//si le gagnant est jaune</span><span>
            </span><span>if</span><span>(</span><span> victoire </span><span>==</span><span> </span><span>2</span><span>)</span><span>
                afficher_image</span><span>(</span><span>"image/winscreen_yellow.bmp"</span><span>,</span><span> coingauche </span><span>);</span><span>
            </span><span>else</span><span>    </span><span>//rouge</span><span>
                afficher_image</span><span>(</span><span>"image/winscreen_red.bmp"</span><span>,</span><span> coingauche </span><span>);</span><span>

            actualiser</span><span>();</span><span>   </span><span>//on rafraichie</span><span>
        </span><span>}</span><span>
    </span><span>}</span><span>

    </span><span>// fin de la session graphique</span><span>
    fermer_fenetre</span><span>();</span><span>

    </span><span>return</span><span> </span><span>0</span><span>;</span><span>
</span><span>}</span><span>

</span><span>////////////////////////////////////////////////////////////////</span><span>
</span><span>// _____ ___  _   _  ____ _____ ___ ___  _   _ ____</span><span>
</span><span>// |  ___/ _ \| \ | |/ ___|_   _|_ _/ _ \| \ | / ___|</span><span>
</span><span>// | |_ | | | |  \| | |     | |  | | | | |  \| \___ \</span><span>
</span><span>// |  _|| |_| | |\  | |___  | |  | | |_| | |\  |___) |</span><span>
</span><span>// |_|   \___/|_| \_|\____| |_| |___\___/|_| \_|____/</span><span>
</span><span>//</span><span>
</span><span>////////////////////////////////////////////////////////////////</span><span>

 </span><span>/////////////////////////</span><span>
</span><span>/////////////////////////</span><span>
</span><span>// FONCTIONS</span><span>
</span><span>//////////////////////////</span><span>
</span><span>//////////////////////////</span><span>


</span><span>Point</span><span> coin_case</span><span>(</span><span> </span><span>Point</span><span> p</span><span>,</span><span> </span><span>int</span><span> cote_case </span><span>)</span><span>
</span><span>{</span><span>
	</span><span>Point</span><span> coin </span><span>=</span><span> </span><span>{</span><span>cote_case </span><span>*</span><span> </span><span>(</span><span>p</span><span>.</span><span>x</span><span>/</span><span>cote_case</span><span>),</span><span> cote_case </span><span>*</span><span> </span><span>(</span><span>p</span><span>.</span><span>y</span><span>/</span><span>cote_case</span><span>)}</span><span>	</span><span>;</span><span>
	</span><span>return</span><span> coin</span><span>;</span><span>
</span><span>}</span><span>

</span><span>void</span><span> dessiner_case</span><span>(</span><span> </span><span>Point</span><span> p</span><span>,</span><span> </span><span>Couleur</span><span> color </span><span>)</span><span>
</span><span>{</span><span>
    </span><span>//force le bord gauche du pion à commencer a x = 0;</span><span>
    p</span><span>.</span><span>x </span><span>+=</span><span> SIZEBY2</span><span>;</span><span>
    </span><span>//force le pion a descendre depuis le haut de la fenetre</span><span>
    p</span><span>.</span><span>y </span><span>=</span><span> </span><span>0</span><span>;</span><span>

    </span><span>Couleur</span><span> test</span><span>;</span><span>
    </span><span>int</span><span> estrempli </span><span>=</span><span> </span><span>0</span><span>,</span><span> i</span><span>,</span><span> hauteur </span><span>=</span><span> </span><span>0</span><span>;</span><span>
    </span><span>//on parcourt le milieu de chaque ligne et on releve la couleur pour voir s'il y a un pion</span><span>
    </span><span>for</span><span>(</span><span> i </span><span>=</span><span> </span><span>50</span><span>;</span><span> i </span><span>&lt;</span><span> H</span><span>;</span><span> i</span><span>+=</span><span>SIZE</span><span>)</span><span>
    </span><span>{</span><span>
        test </span><span>=</span><span> getpixel</span><span>(</span><span> p</span><span>.</span><span>x</span><span>,</span><span> i</span><span>);</span><span>
        </span><span>//si la couleur n'est pas noir =&gt; pion =&gt; on releve la position du pixel coloré pour en déduire celle du pion en question</span><span>
        </span><span>if</span><span>(</span><span> test </span><span>!=</span><span> fabrique_couleur</span><span>(</span><span> </span><span>0</span><span>,</span><span>0</span><span>,</span><span>0</span><span> </span><span>)</span><span> </span><span>)</span><span>
        </span><span>{</span><span>
            estrempli </span><span>=</span><span> </span><span>1</span><span>;</span><span>
            hauteur </span><span>=</span><span> i</span><span>;</span><span>    </span><span>//on enregistre la hauteur obtenue dans une variable</span><span>
            </span><span>break</span><span>;</span><span>  </span><span>//on a trouvé un pion, on peut sortir du for</span><span>
        </span><span>}</span><span>
    </span><span>}</span><span>

    </span><span>//animation</span><span>
    </span><span>//tant que le pion n'est pas tout en bas de l'écran</span><span>
    </span><span>//et que la distance relevée d'un éventuel pion dans la colonne = 0 (pas de pion dans la colonne) ou &gt; SIZEBY2 (il ya un pion mais on peut encore en placer dans la colonne)</span><span>
    </span><span>while</span><span>(</span><span> </span><span>(</span><span>p</span><span>.</span><span>y </span><span>+</span><span> SIZEBY2</span><span>)</span><span> </span><span>&lt;=</span><span> H </span><span>&amp;&amp;</span><span> </span><span>(</span><span> hauteur </span><span>==</span><span> </span><span>0</span><span> </span><span>||</span><span> hauteur </span><span>&gt;</span><span> SIZEBY2 </span><span>))</span><span>
    </span><span>{</span><span>
        </span><span>//ANCIENNE VERSION AVEC LES CARRES</span><span>
        </span><span>//Point carrequicache = { p.x, p.y - size};</span><span>
        </span><span>//dessiner_rectangle( carrequicache, size, size, fabrique_couleur( 0, 0, 0));</span><span>
        </span><span>//dessiner_rectangle( p, size, size, color);</span><span>
        </span><span>//dessiner_cercle( p.x, p.y - size, size / 2, fabrique_couleur( 0, 0, 0));</span><span>
        dessiner_cercle</span><span>(</span><span> p</span><span>.</span><span>x</span><span>,</span><span> p</span><span>.</span><span>y</span><span>,</span><span> SIZEBY2</span><span>+</span><span>5</span><span>,</span><span> fabrique_couleur</span><span>(</span><span> </span><span>0</span><span>,</span><span> </span><span>0</span><span>,</span><span> </span><span>0</span><span>));</span><span>
        dessiner_cercle</span><span>(</span><span> p</span><span>.</span><span>x</span><span>,</span><span> p</span><span>.</span><span>y</span><span>,</span><span> SIZEBY2</span><span>,</span><span> color</span><span>);</span><span>

        </span><span>//on actualise le quadrillage</span><span>
        dessiner_quadrillage</span><span>(</span><span> </span><span>5</span><span>,</span><span> fabrique_couleur</span><span>(</span><span> </span><span>0</span><span>,</span><span> </span><span>128</span><span>,</span><span> </span><span>255</span><span>)</span><span> </span><span>);</span><span>

        </span><span>//rafraichissement</span><span>
        actualiser</span><span>();</span><span>

        </span><span>//on fait descendre les pions</span><span>
        p</span><span>.</span><span>y </span><span>+=</span><span> </span><span>5</span><span>;</span><span>

        </span><span>//si on touche un pion, on arrete de descendre (break)</span><span>
        </span><span>if</span><span>(</span><span> estrempli </span><span>&amp;&amp;</span><span> p</span><span>.</span><span>y </span><span>&gt;</span><span> </span><span>(</span><span> hauteur </span><span>-</span><span> SIZE </span><span>)</span><span> </span><span>)</span><span>
            </span><span>break</span><span>;</span><span>

        </span><span>//on enregistre la position y du pion pour s'en servir pour le bot</span><span>
        lastesthauteur </span><span>=</span><span> p</span><span>.</span><span>y</span><span>;</span><span>

        </span><span>//délais pour l'animation</span><span>
        attente</span><span>(</span><span> </span><span>3</span><span> </span><span>);</span><span>
    </span><span>}</span><span>
</span><span>}</span><span>

</span><span>int</span><span> checkvictoire</span><span>(</span><span> </span><span>Point</span><span> p</span><span>,</span><span> </span><span>Couleur</span><span> color </span><span>)</span><span>
</span><span>{</span><span>
    </span><span>//p nous envoie ici la position du bord extreme gauche (le bord gauche du carré autour du cercle)</span><span>
    </span><span>//on ajuste donc pour avoir le milieu du cercle en ajoutant la taille du rayon aux coordonnées</span><span>
    p</span><span>.</span><span>x </span><span>+=</span><span> SIZEBY2</span><span>;</span><span>
    p</span><span>.</span><span>y </span><span>+=</span><span> SIZEBY2</span><span>;</span><span>

    </span><span>int</span><span> i</span><span>,</span><span>j</span><span>;</span><span>

    </span><span>/////////////////////////////////////////</span><span>
    </span><span>//CHECK VICTOIRE 4 CARRES HORIZONTAUX</span><span>
    </span><span>//////////////////////////////////////////</span><span>
    </span><span>//on parcourt toutes les lignes possibles</span><span>
    </span><span>//on commence par la dernière</span><span>
    </span><span>for</span><span>(</span><span> i </span><span>=</span><span> H </span><span>-</span><span> </span><span>50</span><span>;</span><span> i </span><span>&gt;=</span><span> </span><span>50</span><span>;</span><span> i </span><span>-=</span><span> SIZE </span><span>)</span><span>
    </span><span>{</span><span>
        </span><span>//on parcourt toutes les colonnes possibles</span><span>
        </span><span>for</span><span>(</span><span> j </span><span>=</span><span> </span><span>50</span><span>;</span><span> j </span><span>&lt;=</span><span> </span><span>450</span><span>;</span><span> j </span><span>+=</span><span> SIZE</span><span>)</span><span>
        </span><span>{</span><span>
            </span><span>if</span><span>(</span><span> color </span><span>==</span><span> player1_color </span><span>)</span><span>
            </span><span>{</span><span>
                </span><span>if</span><span>(</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>j</span><span>,</span><span> i</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>j </span><span>+</span><span> SIZE</span><span>,</span><span> i</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>j </span><span>+</span><span> </span><span>200</span><span>,</span><span> i</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*2)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>j </span><span>+</span><span> </span><span>300</span><span>,</span><span> i</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*3)</span><span>
                    </span><span>)</span><span>
                </span><span>{</span><span>
                    dessiner_cercles_gagnants</span><span>(</span><span> j</span><span>,</span><span> i</span><span>,</span><span> HORIZONTAL</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>255</span><span>,</span><span>0</span><span>));</span><span>
                    </span><span>return</span><span> </span><span>1</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>}</span><span>
            </span><span>}</span><span>
            </span><span>else</span><span> </span><span>if</span><span>(</span><span> color </span><span>==</span><span> player2_color </span><span>)</span><span>
            </span><span>{</span><span>
                </span><span>if</span><span>(</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>j</span><span>,</span><span> i</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>j </span><span>+</span><span> SIZE</span><span>,</span><span> i</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>j </span><span>+</span><span> </span><span>200</span><span>,</span><span> i</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*2)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>j </span><span>+</span><span> </span><span>300</span><span>,</span><span> i</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*3)</span><span>
                    </span><span>)</span><span>
                </span><span>{</span><span>
                    dessiner_cercles_gagnants</span><span>(</span><span> j</span><span>,</span><span> i</span><span>,</span><span> HORIZONTAL</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>255</span><span>,</span><span>0</span><span>));</span><span>
                    </span><span>return</span><span> </span><span>2</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>}</span><span>
            </span><span>}</span><span>
        </span><span>}</span><span>
    </span><span>}</span><span>

    </span><span>/////////////////////////////////////////</span><span>
    </span><span>//CHECK VICTOIRE 4 CARRES VERTICAUX</span><span>
    </span><span>//////////////////////////////////////////</span><span>
    </span><span>//on parcourt toutes les colonnes possibles</span><span>
    </span><span>for</span><span>(</span><span> i </span><span>=</span><span> </span><span>50</span><span>;</span><span> i </span><span>&lt;</span><span> L</span><span>;</span><span> i </span><span>+=</span><span> SIZE</span><span>)</span><span>
    </span><span>{</span><span>
        </span><span>//on parcourt toutes les lignes possibles</span><span>
        </span><span>for</span><span>(</span><span> j </span><span>=</span><span> </span><span>50</span><span>;</span><span> j </span><span>&lt;=</span><span> </span><span>250</span><span>;</span><span> j </span><span>+=</span><span> SIZE</span><span>)</span><span>
        </span><span>{</span><span>
            </span><span>if</span><span>(</span><span> color </span><span>==</span><span> player1_color </span><span>)</span><span>
            </span><span>{</span><span>
                </span><span>if</span><span>(</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j </span><span>+</span><span> SIZE</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j </span><span>+</span><span> </span><span>200</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*2)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j </span><span>+</span><span> </span><span>300</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*3)</span><span>
                    </span><span>)</span><span>
                </span><span>{</span><span>
                    dessiner_cercles_gagnants</span><span>(</span><span> i</span><span>,</span><span> j</span><span>,</span><span> VERTICAL</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>255</span><span>,</span><span>0</span><span>));</span><span>
                    </span><span>return</span><span> </span><span>1</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>}</span><span>
            </span><span>}</span><span>
            </span><span>else</span><span> </span><span>if</span><span>(</span><span> color </span><span>==</span><span> player2_color </span><span>)</span><span>
            </span><span>{</span><span>
                </span><span>if</span><span>(</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j </span><span>+</span><span> SIZE</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j </span><span>+</span><span> </span><span>200</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*2)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j </span><span>+</span><span> </span><span>300</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*3)</span><span>
                    </span><span>)</span><span>
                </span><span>{</span><span>
                    dessiner_cercles_gagnants</span><span>(</span><span> i</span><span>,</span><span> j</span><span>,</span><span> VERTICAL</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>255</span><span>,</span><span>0</span><span>));</span><span>
                    </span><span>return</span><span> </span><span>2</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>}</span><span>
            </span><span>}</span><span>
        </span><span>}</span><span>
    </span><span>}</span><span>

    </span><span>/////////////////////////////////////////</span><span>
    </span><span>//CHECK VICTOIRE 4 CARRES EN DIAGONALE</span><span>
    </span><span>//////////////////////////////////////////</span><span>
    </span><span>//on parcourt toutes les colonnes possibles</span><span>
    </span><span>for</span><span>(</span><span> i </span><span>=</span><span> </span><span>50</span><span>;</span><span> i </span><span>&lt;</span><span> L</span><span>;</span><span> i </span><span>+=</span><span> SIZE</span><span>)</span><span>
    </span><span>{</span><span>
        </span><span>//on parcourt toutes les lignes possibles</span><span>
        </span><span>for</span><span>(</span><span> j </span><span>=</span><span> </span><span>50</span><span>;</span><span> j </span><span>&lt;</span><span> H</span><span>;</span><span> j </span><span>+=</span><span> SIZE</span><span>)</span><span>
        </span><span>{</span><span>
            </span><span>if</span><span>(</span><span> color </span><span>==</span><span> player1_color </span><span>)</span><span>
            </span><span>{</span><span>
                </span><span>//diagonal de type escalier qui descend</span><span>
                </span><span>if</span><span>(</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> SIZE</span><span>,</span><span> j </span><span>+</span><span> SIZE</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> </span><span>200</span><span>,</span><span> j </span><span>+</span><span> </span><span>200</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*2)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> </span><span>300</span><span>,</span><span> j </span><span>+</span><span> </span><span>300</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*3)</span><span>
                    </span><span>)</span><span>
                </span><span>{</span><span>
                    dessiner_cercles_gagnants</span><span>(</span><span> i</span><span>,</span><span> j</span><span>,</span><span> DIAGONALEDOWN</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>255</span><span>,</span><span>0</span><span>));</span><span>
                    </span><span>return</span><span> </span><span>1</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>}</span><span>
                </span><span>//diagonal de type escalier qui monte</span><span>
                </span><span>else</span><span> </span><span>if</span><span>(</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> SIZE</span><span>,</span><span> j </span><span>-</span><span> SIZE</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> </span><span>200</span><span>,</span><span> j </span><span>-</span><span> </span><span>200</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*2)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> </span><span>300</span><span>,</span><span> j </span><span>-</span><span> </span><span>300</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*3)</span><span>
                    </span><span>)</span><span>
                </span><span>{</span><span>
                    dessiner_cercles_gagnants</span><span>(</span><span> i</span><span>,</span><span> j</span><span>,</span><span> DIAGONALEUP</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>255</span><span>,</span><span>0</span><span>));</span><span>
                    </span><span>return</span><span> </span><span>1</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>}</span><span>
            </span><span>}</span><span>
            </span><span>else</span><span> </span><span>if</span><span>(</span><span> color </span><span>==</span><span> player2_color </span><span>)</span><span>
            </span><span>{</span><span>
                </span><span>if</span><span>(</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> SIZE</span><span>,</span><span> j </span><span>+</span><span> SIZE</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> </span><span>200</span><span>,</span><span> j </span><span>+</span><span> </span><span>200</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*2)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> </span><span>300</span><span>,</span><span> j </span><span>+</span><span> </span><span>300</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*3)</span><span>
                    </span><span>)</span><span>
                </span><span>{</span><span>
                    dessiner_cercles_gagnants</span><span>(</span><span> i</span><span>,</span><span> j</span><span>,</span><span> DIAGONALEDOWN</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>255</span><span>,</span><span>0</span><span>));</span><span>
                    </span><span>return</span><span> </span><span>2</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>}</span><span>
                </span><span>else</span><span> </span><span>if</span><span>(</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i</span><span>,</span><span> j</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> SIZE</span><span>,</span><span> j </span><span>-</span><span> SIZE</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> </span><span>200</span><span>,</span><span> j </span><span>-</span><span> </span><span>200</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*2)</span><span>
                    </span><span>&amp;&amp;</span><span> </span><span>(</span><span>getpixel</span><span>(</span><span>i </span><span>+</span><span> </span><span>300</span><span>,</span><span> j </span><span>-</span><span> </span><span>300</span><span>)</span><span> </span><span>==</span><span> color</span><span>)</span><span> </span><span>//(SIZE*3)</span><span>
                    </span><span>)</span><span>
                </span><span>{</span><span>
                    dessiner_cercles_gagnants</span><span>(</span><span> i</span><span>,</span><span> j</span><span>,</span><span> DIAGONALEUP</span><span>,</span><span> fabrique_couleur</span><span>(</span><span>0</span><span>,</span><span>255</span><span>,</span><span>0</span><span>));</span><span>
                    </span><span>return</span><span> </span><span>2</span><span>;</span><span>
                    </span><span>break</span><span>;</span><span>
                </span><span>}</span><span>
            </span><span>}</span><span>
        </span><span>}</span><span>
    </span><span>}</span><span>

    </span><span>return</span><span> </span><span>0</span><span>;</span><span>
</span><span>}</span><span>

</span><span>void</span><span> dessiner_cercles_gagnants</span><span>(</span><span> </span><span>int</span><span> x</span><span>,</span><span> </span><span>int</span><span> y</span><span>,</span><span> </span><span>int</span><span> sens</span><span>,</span><span> </span><span>Couleur</span><span> color </span><span>)</span><span>
</span><span>{</span><span>
    </span><span>int</span><span> i</span><span>,</span><span> j</span><span>;</span><span>
    </span><span>switch</span><span>(</span><span> sens </span><span>)</span><span>
    </span><span>{</span><span>
        </span><span>//on dessine les ronds alignés horizontalements en commençant par celui de gauche</span><span>
        </span><span>case</span><span> HORIZONTAL</span><span>:</span><span>
        </span><span>{</span><span>
            </span><span>for</span><span>(</span><span> i </span><span>=</span><span> x</span><span>;</span><span> i </span><span>&lt;=</span><span> x </span><span>+</span><span> </span><span>300</span><span>;</span><span> i </span><span>+=</span><span> </span><span>100</span><span>)</span><span>
            </span><span>{</span><span>
                dessiner_cercle</span><span>(</span><span> i</span><span>,</span><span> y</span><span>,</span><span> SIZEBY2</span><span>,</span><span> color</span><span>);</span><span>
                actualiser</span><span>();</span><span>
                attente</span><span>(</span><span>100</span><span>);</span><span>
            </span><span>}</span><span>
            </span><span>break</span><span>;</span><span>
        </span><span>}</span><span>
        </span><span>//on dessine les ronds alignés verticalement en commencant par le plus haut</span><span>
        </span><span>case</span><span> VERTICAL</span><span>:</span><span>
        </span><span>{</span><span>
            </span><span>for</span><span>(</span><span> i </span><span>=</span><span> y</span><span>;</span><span> i </span><span>&lt;=</span><span> y </span><span>+</span><span> </span><span>300</span><span>;</span><span> i </span><span>+=</span><span> </span><span>100</span><span>)</span><span>
            </span><span>{</span><span>
                dessiner_cercle</span><span>(</span><span> x</span><span>,</span><span> i</span><span>,</span><span> SIZEBY2</span><span>,</span><span> color</span><span>);</span><span>
                actualiser</span><span>();</span><span>
                attente</span><span>(</span><span>100</span><span>);</span><span>
            </span><span>}</span><span>
            </span><span>break</span><span>;</span><span>
        </span><span>}</span><span>
        </span><span>//on dessine les ronds en diagonale escalier qui descend en commencant par le plus a gauche</span><span>
        </span><span>case</span><span> DIAGONALEDOWN</span><span>:</span><span>
        </span><span>{</span><span>
            </span><span>for</span><span>(</span><span> i </span><span>=</span><span> x</span><span>,</span><span> j </span><span>=</span><span> y</span><span>;</span><span> i </span><span>&lt;=</span><span> x </span><span>+</span><span> </span><span>300</span><span>,</span><span> j </span><span>&lt;=</span><span> y </span><span>+</span><span> </span><span>300</span><span>;</span><span> i </span><span>+=</span><span> </span><span>100</span><span>,</span><span> j </span><span>+=</span><span> </span><span>100</span><span>)</span><span>
            </span><span>{</span><span>
                dessiner_cercle</span><span>(</span><span> i</span><span>,</span><span> j</span><span>,</span><span> SIZEBY2</span><span>,</span><span> color</span><span>);</span><span>
                actualiser</span><span>();</span><span>
                attente</span><span>(</span><span>100</span><span>);</span><span>
            </span><span>}</span><span>
            </span><span>break</span><span>;</span><span>
        </span><span>}</span><span>
        </span><span>//on dessine les ronds en diagonale escalier qui monte en commencant par le plus a gauche</span><span>
        </span><span>case</span><span> DIAGONALEUP</span><span>:</span><span>
        </span><span>{</span><span>
            </span><span>for</span><span>(</span><span> i </span><span>=</span><span> x</span><span>,</span><span> j </span><span>=</span><span> y</span><span>;</span><span> i </span><span>&lt;=</span><span> x </span><span>+</span><span> </span><span>300</span><span>,</span><span> j </span><span>&gt;=</span><span> y </span><span>-</span><span> </span><span>300</span><span>;</span><span> i </span><span>+=</span><span> </span><span>100</span><span>,</span><span> j </span><span>-=</span><span> </span><span>100</span><span>)</span><span>
            </span><span>{</span><span>
                dessiner_cercle</span><span>(</span><span> i</span><span>,</span><span> j</span><span>,</span><span> SIZEBY2</span><span>,</span><span> color</span><span>);</span><span>
                actualiser</span><span>();</span><span>
                attente</span><span>(</span><span>100</span><span>);</span><span>
            </span><span>}</span><span>
            </span><span>break</span><span>;</span><span>
        </span><span>}</span><span>
    </span><span>}</span><span>
</span><span>}</span><span>

</span><span>void</span><span> dessiner_quadrillage</span><span>(</span><span> </span><span>int</span><span> quadrillagesize</span><span>,</span><span> </span><span>Couleur</span><span> color </span><span>)</span><span>
</span><span>{</span><span>
    </span><span>Point</span><span> coin </span><span>=</span><span> </span><span>{</span><span> </span><span>0</span><span>,</span><span> </span><span>0</span><span> </span><span>},</span><span> bascoin </span><span>=</span><span> </span><span>{</span><span> </span><span>0</span><span>,</span><span> H </span><span>-</span><span> quadrillagesize </span><span>};</span><span>
    </span><span>int</span><span> i</span><span>,</span><span>j</span><span>;</span><span>
    </span><span>for</span><span>(</span><span> i </span><span>=</span><span> </span><span>0</span><span>;</span><span> i </span><span>&lt;=</span><span> L</span><span>;</span><span> i </span><span>+=</span><span> SIZE</span><span>)</span><span>
    </span><span>{</span><span>
        coin</span><span>.</span><span>x </span><span>=</span><span> i</span><span>;</span><span>
        </span><span>for</span><span>(</span><span> j </span><span>=</span><span> </span><span>0</span><span>;</span><span> j </span><span>&lt;=</span><span> H</span><span>;</span><span> j </span><span>+=</span><span> SIZE </span><span>)</span><span>
        </span><span>{</span><span>
            coin</span><span>.</span><span>y </span><span>=</span><span> j</span><span>;</span><span>
            dessiner_rectangle</span><span>(</span><span>coin</span><span>,</span><span> quadrillagesize</span><span>,</span><span> H</span><span>,</span><span> color </span><span>);</span><span>
            dessiner_rectangle</span><span>(</span><span>coin</span><span>,</span><span> L</span><span>,</span><span> quadrillagesize</span><span>,</span><span> color </span><span>);</span><span>
        </span><span>}</span><span>
    </span><span>}</span><span>
    dessiner_rectangle</span><span>(</span><span>bascoin</span><span>,</span><span> L</span><span>,</span><span> quadrillagesize</span><span>,</span><span> color </span><span>);</span><span>
</span><span>}</span><span>

</span><span>Point</span><span> adversaire</span><span>(</span><span> </span><span>Point</span><span> p </span><span>)</span><span>
</span><span>{</span><span>
    </span><span>Point</span><span> position</span><span>;</span><span>
    </span><span>int</span><span> hasard </span><span>=</span><span> rand</span><span>()%</span><span>5</span><span>;</span><span>  </span><span>//génère des valeurs de 0 à 5</span><span>
    </span><span>int</span><span> colonnevalues</span><span>[</span><span>8</span><span>]</span><span> </span><span>=</span><span> </span><span>{</span><span> </span><span>0</span><span>,</span><span> </span><span>100</span><span>,</span><span> </span><span>200</span><span>,</span><span> </span><span>300</span><span>,</span><span> </span><span>400</span><span>,</span><span> </span><span>500</span><span>,</span><span> </span><span>600</span><span>,</span><span> </span><span>700</span><span> </span><span>};</span><span> </span><span>//tableau avec les valeurs des colonnes</span><span>

    </span><span>//si on pose 3 pions verticalement, le bot nous bloque en le placant dans la meme colonne</span><span>
    </span><span>if</span><span>(</span><span> </span><span>(</span><span>lastesthauteur </span><span>&lt;</span><span> </span><span>450</span><span>)</span><span> </span><span>||</span><span> </span><span>(</span><span>lastesthauteur </span><span>&lt;</span><span> </span><span>550</span><span> </span><span>&amp;&amp;</span><span> hasard </span><span>==</span><span> </span><span>1</span><span>)</span><span> </span><span>)</span><span>
        position</span><span>.</span><span>x </span><span>=</span><span> p</span><span>.</span><span>x</span><span>;</span><span>
    </span><span>//si la valeur retournée par le rand est &gt;= 3, on place le pion du bot une colonne après notre pion (pour bloquer un eventuel alignement)</span><span>
    </span><span>else</span><span> </span><span>if</span><span>(</span><span> hasard </span><span>&gt;=</span><span> </span><span>3</span><span>)</span><span>
    </span><span>{</span><span>
        position</span><span>.</span><span>x </span><span>=</span><span> p</span><span>.</span><span>x </span><span>+</span><span> colonnevalues</span><span>[</span><span>1</span><span>];</span><span>
        </span><span>if</span><span>(</span><span> position</span><span>.</span><span>x </span><span>&gt;=</span><span> </span><span>800</span><span> </span><span>)</span><span> </span><span>//si le pion qui doit etre placé est en dehors de la fenetre, on le place dans une colonne au hasard</span><span>
            position</span><span>.</span><span>x </span><span>=</span><span> colonnevalues</span><span>[</span><span>rand</span><span>()%</span><span>8</span><span>];</span><span>
    </span><span>}</span><span>
    </span><span>//si la valeur retournée par le rand est &lt; 3, on place le pion du bot une colonne avant notre pion (pour bloquer un eventuel alignement)</span><span>
    </span><span>else</span><span>
    </span><span>{</span><span>
        position</span><span>.</span><span>x </span><span>=</span><span> p</span><span>.</span><span>x </span><span>-</span><span> colonnevalues</span><span>[</span><span>1</span><span>];</span><span>
        </span><span>if</span><span>(</span><span> position</span><span>.</span><span>x </span><span>&lt;</span><span> </span><span>0</span><span> </span><span>)</span><span> </span><span>//si le pion qui doit etre placé est en dehors de la fenetre, on le place dans une des 3 premieres colonnes</span><span>
            position</span><span>.</span><span>x </span><span>=</span><span> colonnevalues</span><span>[</span><span>rand</span><span>()%</span><span>3</span><span>];</span><span>
    </span><span>}</span><span>

    </span><span>return</span><span> position</span><span>;</span><span>
</span><span>}</span><span>

</span></pre>

		<p>
			La lib graphique:
		</p>

		<p>
			libgraphique.h
		</p>

		<pre class="ipsCode prettyprint prettyprinted">

<span>/*******************************************************************************
 * libraphique.c                                                               *
 * Quelques fonctions C basées sur la SDl pour réaliser des opérations         *
 * graphiques simples                                                          *
 *                                                                             *
 * Pour compiler en ligne de commande :                                        *
 * gcc ../lib/libgraphique.c prog.c -o resultat                                *
 *           `sdl-config --libs --cflags` -lm -lSDL                            *
 *                                                                             *
 * où                                                                          *
 *             prog.c : votre code source                                      *
 *             resultat    : nom de l'exécutable                               *
 *******************************************************************************
*/</span><span>

</span><span>///////////////////////////////////////////////////////////////////////////////</span><span>
</span><span>//0. Directive préprocesseur</span><span>
</span><span>#include</span><span> </span><span>&lt;SDL.h&gt;</span><span>


</span><span>///////////////////////////////////////////////////////////////////////////////</span><span>
</span><span>//1. Déclaration des types "maison"</span><span>
</span><span>typedef</span><span> </span><span>Uint32</span><span> </span><span>Couleur</span><span>;</span><span>
</span><span>typedef</span><span> </span><span>struct</span><span> </span><span>{</span><span>int</span><span> x</span><span>,</span><span>y</span><span>;}</span><span> </span><span>Point</span><span>;</span><span>

</span><span>extern</span><span> SDL_Surface </span><span>*</span><span>ecran</span><span>;</span><span>


</span><span>////////////////////////////////////////////////////////////////////////////////</span><span>
</span><span>// Déclaration des fonctions</span><span>
</span><span>////////////////////////////////////////////////////////////////////////////////</span><span>


</span><span>////////////////////////////////////////////////////////////////////////////////</span><span>
</span><span>// 1. Ouvrir et fermer une fenêtre</span><span>

</span><span>// ouvrir une fenêtre de taille largeur (x), hauteur (y)</span><span>
</span><span>void</span><span> ouvrir_fenetre</span><span>(</span><span>int</span><span> largeur</span><span>,</span><span> </span><span>int</span><span> hauteur</span><span>);</span><span>

</span><span>// terminer le programme</span><span>
</span><span>void</span><span> fermer_fenetre</span><span>();</span><span>

</span><span>// teste si la fin du programme a été demandée et le termine si nécessaire</span><span>
</span><span>// ne pas utiliser directement</span><span>
</span><span>void</span><span> _test_arret</span><span>()</span><span> </span><span>;</span><span>

</span><span>////////////////////////////////////////////////////////////////////////////////</span><span>
</span><span>// 2. Fonctions de dessin</span><span>

</span><span>// actualise l'affichage des modifications graphiques</span><span>
</span><span>// sans appel à cet fonction les modifications sont non apparentes</span><span>
</span><span>void</span><span> actualiser</span><span>();</span><span>

</span><span>// fonction de dessin principale</span><span>
</span><span>// changer la couleur du Point pix</span><span>
</span><span>void</span><span> changer_pixel</span><span>(</span><span>Point</span><span> pix</span><span>,</span><span> </span><span>Couleur</span><span> couleur</span><span>)</span><span> </span><span>;</span><span>

</span><span>// dessine un rectangle de couleur de largeur et hauteur données</span><span>
</span><span>// coin est le coin haut, gauche</span><span>
</span><span>void</span><span> dessiner_rectangle</span><span>(</span><span>Point</span><span> coin</span><span>,</span><span> </span><span>int</span><span> largeur</span><span>,</span><span> </span><span>int</span><span> hauteur</span><span>,</span><span> </span><span>Couleur</span><span> couleur</span><span>)</span><span> </span><span>;</span><span>

</span><span>// trace une ligne du Point p1 au point p2 dela couleur donnée</span><span>
</span><span>// utilise l'algorithme de Bresenham</span><span>
</span><span>void</span><span> dessiner_ligne</span><span>(</span><span>Point</span><span> p1</span><span>,</span><span> </span><span>Point</span><span> p2</span><span>,</span><span> </span><span>Couleur</span><span>);</span><span>

    </span><span>// affiche l'image sous forme .bmp (bitmap), contenue dans le même dossier</span><span>
</span><span>// nom est une chaine de caracteres qui est le nom (complet) du fichier image</span><span>
</span><span>// coin est le coin haut, gauche voulu pour l'image à afficher dans l'ecran</span><span>
</span><span>void</span><span> afficher_image</span><span>(</span><span>char</span><span> </span><span>*</span><span>nom</span><span>,</span><span> </span><span>Point</span><span> coin</span><span>);</span><span>

</span><span>////////////////////////////////////////////////////////////////////////////////</span><span>
</span><span>// 3. Gestion des événements</span><span>

</span><span>// renvoie le code SDLK de la prochaine touche pressée</span><span>
</span><span>// fonction bloquante</span><span>
</span><span>int</span><span> attendre_touche</span><span>(</span><span>void</span><span>);</span><span>

</span><span>// renvoie les coordonnees du prochain clic (gauche ou droite) de souris</span><span>
</span><span>// fonction bloquante</span><span>
</span><span>Point</span><span> attendre_clic</span><span>()</span><span> </span><span>;</span><span>

</span><span>////////////////////////////////////////////////////////////////////////////////</span><span>
</span><span>// 4. Autres</span><span>

</span><span>// renvoie une Couleur (UInt32) RGB avec les valeurs entre 0 et 255 données</span><span>
</span><span>// en rouge r, vert g et bleu b</span><span>
</span><span>Couleur</span><span> fabrique_couleur</span><span>(</span><span>int</span><span> r</span><span>,</span><span> </span><span>int</span><span> g</span><span>,</span><span> </span><span>int</span><span> b</span><span>);</span><span>

</span><span>// fait patienter la machine quelques millisecondes</span><span>
</span><span>void</span><span> attente</span><span>(</span><span>int</span><span> duree</span><span>);</span><span>

</span><span>Uint32</span><span> getpixel</span><span>(</span><span>int</span><span> x</span><span>,</span><span> </span><span>int</span><span> y</span><span>);</span><span>

</span><span>void</span><span> dessiner_cercle</span><span>(</span><span>int</span><span> x</span><span>,</span><span> </span><span>int</span><span> y</span><span>,</span><span> </span><span>int</span><span> radius</span><span>,</span><span> </span><span>Couleur</span><span> couleur</span><span>);</span><span>



</span><span>//CouleurS ///////////////////////</span><span>
</span><span>// 16 couleurs de base en francais</span><span>

</span><span>#define</span><span> argent     </span><span>0xC0C0C0</span><span>
</span><span>#define</span><span> blanc      </span><span>0xFFFFFF</span><span>
</span><span>#define</span><span> bleu       </span><span>0x0000FF</span><span>
</span><span>#define</span><span> bleumarine </span><span>0x000080</span><span>
</span><span>#define</span><span> citronvert </span><span>0x00FF00</span><span>
</span><span>#define</span><span> cyan       </span><span>0x00FFFF</span><span>
</span><span>#define</span><span> magenta    </span><span>0xFF00FF</span><span>
</span><span>#define</span><span> gris       </span><span>0x808080</span><span>
</span><span>#define</span><span> jaune      </span><span>0xFFFF00</span><span>
</span><span>#define</span><span> marron     </span><span>0x800000</span><span>
</span><span>#define</span><span> noir       </span><span>0x000000</span><span>
</span><span>#define</span><span> rouge      </span><span>0xFF0000</span><span>
</span><span>#define</span><span> sarcelle   </span><span>0x008080</span><span>
</span><span>#define</span><span> vert       </span><span>0x00FF00</span><span>
</span><span>#define</span><span> vertclair  </span><span>0x008000</span><span>
</span><span>#define</span><span> vertolive  </span><span>0x808000</span><span>
</span><span>#define</span><span> violet     </span><span>0x800080</span><span>


</span><span>// 140 couleurs en anglais</span><span>
</span><span>#define</span><span> aliceblue            </span><span>0xF0F8FF</span><span>
</span><span>#define</span><span> antiquewhite         </span><span>0xFAEBD7</span><span>
</span><span>#define</span><span> aqua                 </span><span>0x00FFFF</span><span>
</span><span>#define</span><span> aquamarine           </span><span>0x7FFFD4</span><span>
</span><span>#define</span><span> azure                </span><span>0xF0FFFF</span><span>
</span><span>#define</span><span> beige                </span><span>0xF5F5DC</span><span>
</span><span>#define</span><span> bisque               </span><span>0xFFE4C4</span><span>
</span><span>#define</span><span> black                </span><span>0x000000</span><span>
</span><span>#define</span><span> blanchedalmond       </span><span>0xFFEBCD</span><span>
</span><span>#define</span><span> blue                 </span><span>0x0000FF</span><span>
</span><span>#define</span><span> blueviolet           </span><span>0x8A2BE2</span><span>
</span><span>#define</span><span> brown                </span><span>0xA52A2A</span><span>
</span><span>#define</span><span> burlywood            </span><span>0xDEB887</span><span>
</span><span>#define</span><span> cadetblue            </span><span>0x5F9EA0</span><span>
</span><span>#define</span><span> chartreuse           </span><span>0x7FFF00</span><span>
</span><span>#define</span><span> chocolate            </span><span>0xD2691E</span><span>
</span><span>#define</span><span> coral                </span><span>0xFF7F50</span><span>
</span><span>#define</span><span> cornflowerblue       </span><span>0x6495ED</span><span>
</span><span>#define</span><span> cornsilk             </span><span>0xFFF8DC</span><span>
</span><span>#define</span><span> crimson              </span><span>0xDC143C</span><span>
</span><span>#define</span><span> cyan                 </span><span>0x00FFFF</span><span>
</span><span>#define</span><span> darkblue             </span><span>0x00008B</span><span>
</span><span>#define</span><span> darkcyan             </span><span>0x008B8B</span><span>
</span><span>#define</span><span> darkgoldenrod        </span><span>0xB8860B</span><span>
</span><span>#define</span><span> darkgray             </span><span>0xA9A9A9</span><span>
</span><span>#define</span><span> darkgreen            </span><span>0x006400</span><span>
</span><span>#define</span><span> darkkhaki            </span><span>0xBDB76B</span><span>
</span><span>#define</span><span> darkmagenta          </span><span>0x8B008B</span><span>
</span><span>#define</span><span> darkolivegreen       </span><span>0x556B2F</span><span>
</span><span>#define</span><span> darkorange           </span><span>0xFF8C00</span><span>
</span><span>#define</span><span> darkorchid           </span><span>0x9932CC</span><span>
</span><span>#define</span><span> darkred              </span><span>0x8B0000</span><span>
</span><span>#define</span><span> darksalmon           </span><span>0xE9967A</span><span>
</span><span>#define</span><span> darkseagreen         </span><span>0x8FBC8F</span><span>
</span><span>#define</span><span> darkslateblue        </span><span>0x483D8B</span><span>
</span><span>#define</span><span> darkslategray        </span><span>0x2F4F4F</span><span>
</span><span>#define</span><span> darkturquoise        </span><span>0x00CED1</span><span>
</span><span>#define</span><span> darkviolet           </span><span>0x9400D3</span><span>
</span><span>#define</span><span> deeppink             </span><span>0xFF1493</span><span>
</span><span>#define</span><span> deepskyblue          </span><span>0x00BFFF</span><span>
</span><span>#define</span><span> dimgray              </span><span>0x696969</span><span>
</span><span>#define</span><span> dodgerblue           </span><span>0x1E90FF</span><span>
</span><span>#define</span><span> firebrick            </span><span>0xB22222</span><span>
</span><span>#define</span><span> floralwhite          </span><span>0xFFFAF0</span><span>
</span><span>#define</span><span> forestgreen          </span><span>0x228B22</span><span>
</span><span>#define</span><span> fuchsia              </span><span>0xFF00FF</span><span>
</span><span>#define</span><span> gainsboro            </span><span>0xDCDCDC</span><span>
</span><span>#define</span><span> ghostwhite           </span><span>0xF8F8FF</span><span>
</span><span>#define</span><span> gold                 </span><span>0xFFD700</span><span>
</span><span>#define</span><span> goldenrod            </span><span>0xDAA520</span><span>
</span><span>#define</span><span> gray                 </span><span>0x808080</span><span>
</span><span>#define</span><span> green                </span><span>0x008000</span><span>
</span><span>#define</span><span> greenyellow          </span><span>0xADFF2F</span><span>
</span><span>#define</span><span> honeydew             </span><span>0xF0FFF0</span><span>
</span><span>#define</span><span> hotpink              </span><span>0xFF69B4</span><span>
</span><span>#define</span><span> indianred            </span><span>0xCD5C5C</span><span>
</span><span>#define</span><span> indigo               </span><span>0x4B0082</span><span>
</span><span>#define</span><span> ivory                </span><span>0xFFFFF0</span><span>
</span><span>#define</span><span> khaki                </span><span>0xF0E68C</span><span>
</span><span>#define</span><span> lavender             </span><span>0xE6E6FA</span><span>
</span><span>#define</span><span> lavenderblush        </span><span>0xFFF0F5</span><span>
</span><span>#define</span><span> lawngreen            </span><span>0x7CFC00</span><span>
</span><span>#define</span><span> lemonchiffon         </span><span>0xFFFACD</span><span>
</span><span>#define</span><span> lightblue            </span><span>0xADD8E6</span><span>
</span><span>#define</span><span> lightcoral           </span><span>0xF08080</span><span>
</span><span>#define</span><span> lightcyan            </span><span>0xE0FFFF</span><span>
</span><span>#define</span><span> lightgoldenrodyellow </span><span>0xFAFAD2</span><span>
</span><span>#define</span><span> lightgreen           </span><span>0x90EE90</span><span>
</span><span>#define</span><span> lightgrey            </span><span>0xD3D3D3</span><span>
</span><span>#define</span><span> lightpink            </span><span>0xFFB6C1</span><span>
</span><span>#define</span><span> lightsalmon          </span><span>0xFFA07A</span><span>
</span><span>#define</span><span> lightseagreen        </span><span>0x20B2AA</span><span>
</span><span>#define</span><span> lightskyblue         </span><span>0x87CEFA</span><span>
</span><span>#define</span><span> lightslategray       </span><span>0x778899</span><span>
</span><span>#define</span><span> lightsteelblue       </span><span>0xB0C4DE</span><span>
</span><span>#define</span><span> lightyellow          </span><span>0xFFFFE0</span><span>
</span><span>#define</span><span> lime                 </span><span>0x00FF00</span><span>
</span><span>#define</span><span> limegreen            </span><span>0x32CD32</span><span>
</span><span>#define</span><span> linen                </span><span>0xFAF0E6</span><span>
</span><span>#define</span><span> magenta              </span><span>0xFF00FF</span><span>
</span><span>#define</span><span> maroon               </span><span>0x800000</span><span>
</span><span>#define</span><span> mediumaquamarine     </span><span>0x66CDAA</span><span>
</span><span>#define</span><span> mediumblue           </span><span>0x0000CD</span><span>
</span><span>#define</span><span> mediumorchid         </span><span>0xBA55D3</span><span>
</span><span>#define</span><span> mediumpurple         </span><span>0x9370DB</span><span>
</span><span>#define</span><span> mediumseagreen       </span><span>0x3CB371</span><span>
</span><span>#define</span><span> mediumslateblue      </span><span>0x7B68EE</span><span>
</span><span>#define</span><span> mediumspringgreen    </span><span>0x00FA9A</span><span>
</span><span>#define</span><span> mediumturquoise      </span><span>0x48D1CC</span><span>
</span><span>#define</span><span> mediumvioletred      </span><span>0xC71585</span><span>
</span><span>#define</span><span> midnightblue         </span><span>0x191970</span><span>
</span><span>#define</span><span> mintcream            </span><span>0xF5FFFA</span><span>
</span><span>#define</span><span> mistyrose            </span><span>0xFFE4E1</span><span>
</span><span>#define</span><span> moccasin             </span><span>0xFFE4B5</span><span>
</span><span>#define</span><span> navajowhite          </span><span>0xFFDEAD</span><span>
</span><span>#define</span><span> navy                 </span><span>0x000080</span><span>
</span><span>#define</span><span> oldlace              </span><span>0xFDF5E6</span><span>
</span><span>#define</span><span> olive                </span><span>0x808000</span><span>
</span><span>#define</span><span> olivedrab            </span><span>0x6B8E23</span><span>
</span><span>#define</span><span> orange               </span><span>0xFFA500</span><span>
</span><span>#define</span><span> orangered            </span><span>0xFF4500</span><span>
</span><span>#define</span><span> orchid               </span><span>0xDA70D6</span><span>
</span><span>#define</span><span> palegoldenrod        </span><span>0xEEE8AA</span><span>
</span><span>#define</span><span> palegreen            </span><span>0x98FB98</span><span>
</span><span>#define</span><span> paleturquoise        </span><span>0xAFEEEE</span><span>
</span><span>#define</span><span> palevioletred        </span><span>0xDB7093</span><span>
</span><span>#define</span><span> papayawhip           </span><span>0xFFEFD5</span><span>
</span><span>#define</span><span> peachpuff            </span><span>0xFFDAB9</span><span>
</span><span>#define</span><span> peru                 </span><span>0xCD853F</span><span>
</span><span>#define</span><span> pink                 </span><span>0xFFC0CB</span><span>
</span><span>#define</span><span> plum                 </span><span>0xDDA0DD</span><span>
</span><span>#define</span><span> powderblue           </span><span>0xB0E0E6</span><span>
</span><span>#define</span><span> purple               </span><span>0x800080</span><span>
</span><span>#define</span><span> red                  </span><span>0xFF0000</span><span>
</span><span>#define</span><span> rosybrown            </span><span>0xBC8F8F</span><span>
</span><span>#define</span><span> royalblue            </span><span>0x4169E1</span><span>
</span><span>#define</span><span> saddlebrown          </span><span>0x8B4513</span><span>
</span><span>#define</span><span> salmon               </span><span>0xFA8072</span><span>
</span><span>#define</span><span> sandybrown           </span><span>0xF4A460</span><span>
</span><span>#define</span><span> seagreen             </span><span>0x2E8B57</span><span>
</span><span>#define</span><span> seashell             </span><span>0xFFF5EE</span><span>
</span><span>#define</span><span> sienna               </span><span>0xA0522D</span><span>
</span><span>#define</span><span> silver               </span><span>0xC0C0C0</span><span>
</span><span>#define</span><span> skyblue              </span><span>0x87CEEB</span><span>
</span><span>#define</span><span> slateblue            </span><span>0x6A5ACD</span><span>
</span><span>#define</span><span> slategray            </span><span>0x708090</span><span>
</span><span>#define</span><span> snow                 </span><span>0xFFFAFA</span><span>
</span><span>#define</span><span> springgreen          </span><span>0x00FF7F</span><span>
</span><span>#define</span><span> steelblue            </span><span>0x4682B4</span><span>
</span><span>#define</span><span> tann                 </span><span>0xD2B48C</span><span>
</span><span>#define</span><span> teal                 </span><span>0x008080</span><span>
</span><span>#define</span><span> thistle              </span><span>0xD8BFD8</span><span>
</span><span>#define</span><span> tomato               </span><span>0xFF6347</span><span>
</span><span>#define</span><span> turquoise            </span><span>0x40E0D0</span><span>
</span><span>#define</span><span> violetlight          </span><span>0xEE82EE</span><span>
</span><span>#define</span><span> wheat                </span><span>0xF5DEB3</span><span>
</span><span>#define</span><span> white                </span><span>0xFFFFFF</span><span>
</span><span>#define</span><span> whitesmoke           </span><span>0xF5F5F5</span><span>
</span><span>#define</span><span> yellow               </span><span>0xFFFF00</span><span>
</span><span>#define</span><span> yellowgreen          </span><span>0x9ACD32</span></pre>

		<p>
			libgraphique.c
		</p>

		<pre class="ipsCode prettyprint">

/*******************************************************************************
 * libraphique.c                                                               *
 * Quelques fonctions C basées sur la SDl pour réaliser des opérations         *
 * graphiques simples                                                          *
 *                                                                             *
 * Pour compiler en ligne de commande :                                        *
 * gcc ../lib/libgraphique.c prog.c -o resultat                                *
 *           `sdl-config --libs --cflags` -lm -lSDL                            *
 *                                                                             *
 * où                                                                          *
 *             prog.c : votre code source                                      *
 *             resultat    : nom de l'exécutable                               *
 *******************************************************************************
*/

////////////////////////////////////////////////////////////////////////////////
// 0. directives préprocesseur

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include "libgraphique.h"


////////////////////////////////////////////////////////////////////////////////
// 0. variables globales et macros

SDL_Surface *ecran = NULL;                 // totalité de l'écran
SDL_Event lastevent ;                      // utilisé pour gestion événements
int LARGEUR = -1 ;                         // largeur de l'écran en pixels
int HAUTEUR = -1 ;                         // hauteur de l'écran en pixels
#define octets_par_pixel ecran-&gt;format-&gt;BytesPerPixel
#define largeur_ecran (ecran-&gt;pitch / 4)


////////////////////////////////////////////////////////////////////////////////
// 1. Ouvrir et fermer une fenêtre

// ouvrir une fenêtre de taille largeur (x), hauteur (y)
void ouvrir_fenetre(int largeur, int hauteur){
    SDL_Init(SDL_INIT_VIDEO);
    //appliquer une icone a la fenetre
    SDL_WM_SetIcon(SDL_LoadBMP("image/puissance4_icone.bmp"), NULL);

    ecran = SDL_SetVideoMode(largeur, hauteur, 32, SDL_HWSURFACE );

    //titre de la fenetre
    SDL_WM_SetCaption("Puissance 4 by Arnaud", NULL);

    //initialisation des variables globales
    LARGEUR = largeur ;
    HAUTEUR = hauteur ;
    printf("LARGEUR %d HAUTEUR %d\n",LARGEUR,HAUTEUR);

    // pour permettre les répétitions de touche si elles restent enfoncées
    SDL_EnableKeyRepeat(100, 100);
}


// terminer le programme
void fermer_fenetre(){
    SDL_Quit();
    exit(0);
}

// teste si la fin du programme a été demandée et le termine si nécessaire
void _test_arret() {
    if ((lastevent.type == SDL_QUIT) ||
            ( (lastevent.type == SDL_KEYDOWN )
              &amp;&amp; (lastevent.key.keysym.sym == SDLK_ESCAPE))
       )
        fermer_fenetre() ;
}


///////////////////////////////////////////////////////////////////////////////
// 2. Fonctions de dessin

// actualise l'affichage des modifications graphiques
// sans appel à cet fonction les modifications sont non apparentes
void actualiser(){
    SDL_PollEvent(&amp;lastevent) ;
    _test_arret();
    SDL_Flip(ecran) ;
}


// fonction de dessin principale
// changer la couleur du Point pix
void changer_pixel(Point pix, Couleur couleur) {
    if ((0 &lt;= pix.x) &amp;&amp; (pix.x &lt; LARGEUR) &amp;&amp; (0 &lt;= pix.y ) &amp;&amp; (pix.y &lt; HAUTEUR))
    {
        *( (Uint32*)ecran-&gt;pixels + pix.y * largeur_ecran + pix.x ) = couleur ;
    }
}


// dessine un rectangle de couleur de largeur et hauteur données
// coin est le coin haut, gauche
void dessiner_rectangle(Point coin, int largeur, int hauteur, Couleur couleur) {
    Point p ;
    int bord_droit = coin.x + largeur ;
    int bord_bas = coin.y + hauteur ;
    for (p.x = coin.x; p.x &lt; bord_droit ; ++(p.x)) {
        for (p.y = coin.y ; p.y  &lt; bord_bas ; ++(p.y) ) {
            changer_pixel(p, couleur);
        }
    }
}

// trace une ligne du Point p1 au point p2 dela couleur donnée
// utilise l'algorithme de Bresenham
void dessiner_ligne(Point p1, Point p2, Couleur couleur)
{
    // signes deplacement x et y
    int dx, dy ;

    printf("x %d y %d   ",p2.x,p2.y);
    if (p1.x &lt; p2.x)
        dx = 1 ;
    else if (p1.x &gt; p2.x)
        dx = -1 ;
    else
        dx = 0 ;

    if (p1.y &lt; p2.y)
        dy = 1 ;
    else if (p1.y &gt; p2.y)
        dy = -1 ;
    else
        dy = 0 ;
    printf("dx %d dy %d   ",dx,dy);

    // valeur absolue pente
    float pente_abs ;

    float erreur = 0;
    Point p ; // point courant

    //lignes horizontales et certicales : plus rapide
    if (dy == 0)
    {
        printf(" H\n");
        p.y = p1.y ;
        for(p.x = p1.x ; p.x != p2.x ; p.x += dx)
            changer_pixel(p,couleur);
    }
    else if (dx == 0)
    {
        printf(" V\n");
        p.x = p1.x ;
        for(p.y = p1.y ; p.y != p2.y ; p.y += dy)
            changer_pixel(p,couleur);
    }
    else
    {

        pente_abs  = (p2.y - p1.y)/((float)(p2.x - p1.x)) ;
        if (pente_abs &lt; 0)
            pente_abs = - pente_abs ;
        printf("%f ", pente_abs);

        if (pente_abs &lt;=1 )
        {
            printf(" A\n");
            {
                p.y = p1.y ;
                for(p.x = p1.x ; p.x != p2.x ; p.x += dx)
                {
                    changer_pixel(p, couleur);
                    erreur += pente_abs ;
                    printf("erreur %f\n",erreur);
                    if (erreur &gt; 0.5)
                    {
                        erreur -= 1 ;
                        p.y += dy ;
                    }
                }
            }
        }
        else
        {
            pente_abs = 1/pente_abs ;
            printf(" B\n");
            p.x = p1.x ;
            for(p.y = p1.y ; p.y != p2.y ; p.y += dy)
            {
                changer_pixel(p, couleur);
                erreur += pente_abs ;
                if (erreur &gt; 0.5)
                {
                    erreur -= 1 ;
                    p.x += dx ;
                }
            }
        }
    }
    changer_pixel(p2,couleur);
}


// affiche l'image sous forme .bmp (bitmap), contenue dans le même dossier
// nom est une chaine de caracteres qui est le nom (complet) du fichier image
// coin est le coin haut, gauche voulu pour l'image à afficher dans l'ecran
void afficher_image(char *nom, Point coin){
    SDL_Surface *img = SDL_LoadBMP(nom) ;
    SDL_Rect position_img ;
    position_img.x = coin.x;
    position_img.y = coin.y;
    SDL_BlitSurface(img,NULL,ecran,&amp;position_img);
}


////////////////////////////////////////////////////////////////////////////////
// 3. Gestion des événements

// renvoie le code SDLK de la prochaine touche pressée
// fonction bloquante
int attendre_touche(void){
    do {
        SDL_WaitEvent(&amp;lastevent) ;
        _test_arret() ;
    }
    while (lastevent.type != SDL_KEYDOWN ) ;
    return lastevent.key.keysym.sym;
}

// renvoie les coordonnees du prochain clic (gauche ou droite) de souris
// fonction bloquante
Point attendre_clic() {
    do {
        SDL_WaitEvent(&amp;lastevent) ;
        _test_arret();
    }
    while (lastevent.type != SDL_MOUSEBUTTONDOWN) ;
    Point p ;
    p.x = lastevent.button.x ;
    p.y = lastevent.button.y ;
    return p;
}


////////////////////////////////////////////////////////////////////////////////
// 4. Autres

// renvoie une Couleur (UInt32) RGB avec les valeurs entre 0 et 255 données
// en rouge r, vert g et bleu b
Couleur fabrique_couleur(int r, int g, int b)
{
    Couleur C;
    return ((r%256)&lt;&lt;16) + ((g%256)&lt;&lt;8) + (b%256);
    return C;
}

// fait patienter la machine quelques millisecondes
void attente(int duree)
{
    SDL_Delay(duree) ;
}

Uint32 getpixel(int x, int y)
{
    //pas fait pas moi
    int bpp = ecran-&gt;format-&gt;BytesPerPixel;
    Uint8 *p = (Uint8 *)ecran-&gt;pixels + y * ecran-&gt;pitch + x * bpp;

    switch(bpp) {
    case 1:
        return *p;

    case 2:
        return *(Uint16 *)p;

    case 3:
        if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
            return p[0] &lt;&lt; 16 | p[1] &lt;&lt; 8 | p[2];
        else
            return p[0] | p[1] &lt;&lt; 8 | p[2] &lt;&lt; 16;

    case 4:
        return *(Uint32 *)p;

    default:
        return 0;
    }
}

//cred to Daniel Earwicker
void dessiner_cercle(int x, int y, int radius, Couleur couleur)
{
    Point center;
    int xx, yy;
    for(xx = -radius; xx &lt; radius ; xx++)
    {
        int height = (int)sqrt( (radius*radius) - (xx * xx));

        for(yy = -height; yy &lt; height; yy++)
        {
            center.x = xx + x; center.y = yy + y;
            changer_pixel( center, couleur );
        }
    }
}</pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	J'avais eu 19 avec ce truc j'crois
</p>
]]></description><guid isPermaLink="false">1487</guid><pubDate>Sun, 20 Dec 2015 18:37:08 +0000</pubDate></item></channel></rss>
