DAVID Malan: Escriurem un programa la participació d'una finestra i un cercle amb el cercle rebotant fora de l'esquerra i dreta vores d'aquesta finestra. Per a això, farem servir l'Stanford Biblioteca Portable, i anem primer incloure gevents.h perquè puguem escoltar els moviments del ratolí. Anem a continuació inclouen gobjects.h perquè podem declarar coses com ovals o cercles, de veritat. I després anem a incloure gwindow.h perquè tenim una finestra gràfica per tot. Anem a declarar principal de la forma habitual. I ara anem a declarar i crear instàncies o crear aquesta finestra, GWindow - i anem a trucar a la finestra de variables - aconsegueix newGWindow. I arbitràriament ho aconseguirem 320 píxels per 240 píxels. Anem a la propera instància d'un cercle. Però per crear instàncies d'aquest cercle, hem de fer una mica més de treball. En particular, anem a omplir en aquest cercle de manera que la cosa sencera és negre i no només el resum d'elles. GOVAL - ho anem a anomenar el cercle - aconsegueix newGOval. Anem a posar aquest oval a 0, 110, i anem a fer els ovals 20 píxels d'amplada per 20 píxels d'alt - en altres paraules, un diàmetre de 20 o d'un radi de 10. Ara anem a configurar el color d'aquest cercle ser cometes, tanca, "negre". Anem a estableix ara que s'omplirà especificant cert. I ara, finalment, anem a afegir el cercle per la finestra de la següent manera, mitjançant el qual el aquest últim s'afegeix a la primera. Ara anem a declarar un doble. L'anomenarem velocitat. I alguna cosa arbitrària, diguem que el velocitat d'aquest cercle serà 2,0, en altres paraules, 2 píxels per a cada unitat de temps. I ara anem a deliberadament induir un bucle infinit. Llavors, com fer que aquest cercle van i tornen? Bé, anem a suposar que dins d'aquest bucle que per cada unitat de temps, que estem va a moure el cercle una mica bits basat en la seva velocitat de 2 píxels per unitat de temps. Però contínuament, haurem de comprovar si el cercle està en contacte amb la vora dreta de la pantalla o l'esquerra vora de la pantalla, ja que si és així, El necessitareu per recuperar-se, per dir-ho. Com implementar la noció de rebot? Bé, si anem a 2 píxels a la dret per unitat de temps, a rebotar la vora dreta, simplement pot revertir que per ser negatius 2 píxels per unitat de temps, negant així la velocitat. Així que de fet, el rebot és relativament senzill. Primer anem a moure el cercle per ella molts píxels al llarg de l'eix x, d'aquest el nombre de píxels al llarg de l'eix i. En altres paraules, nosaltres no volem que moure al llarg de l'eix i en absolut. Només volem que rebot de nou endavant i cap a l'esquerra i la dreta. I ara anem a comprovar dins d'aquest bucle si la coordenada x del cercle més l'amplada del cercle és més gran que o igual a la amplada de la finestra - En altres paraules, si la ubicació del cercle més l'amplada del cercle sí que és ara més enllà de la vora de la finestra, estaríem millor invertir nostra velocitat - velocitat aconsegueix velocitat negativa, d'aquesta manera llançar una positiva a una negatiu o una negativa a una positiva. Però, i si el cercle s'està movent des de dreta a esquerra i, per tant, colpeja la vora esquerra? En altres paraules, si la coordenada x d' el cercle és ara menys de o igual a 0, seguirem endavant i de nou invertir la nostra velocitat. Així que per què no he afegit en el amplada del cercle aquesta temps, com ho vaig fer abans? Bé, tingui en compte que les coordenades d'un objecte es defineixen per la seva cantonada superior esquerra, no pel seu centre. I així, quan el cercle s'està movent des esquerra a dreta, hem de comprovar si la vora dreta de la cercle ha passat la vora dreta de la finestra. Així que per saber el que és això, tenim per obtenir la coordenada x del cercle més l'amplada del cercle per moure nosaltres mateixos a partir de l'esquerra superior cantonada, de manera efectiva, a la la cantonada superior dreta. Quan el cercle es mou de dreta a esquerra, per la seva banda, que no cal molestar amb l'addició, causa que el cantonada superior esquerra del cercle és ja el valor que anem a obtenir d'obtenir x. Ara anem a moure la pilota. Ara anem a guardar, compilar i executar aquest programa, fer rebotar,. / rebot. I aquí tenim un programa. Però el cercle s'està movent tan condemnadament ràpid, que és gairebé impossible veure el que hi ha realment està passant. Així que anem bastant el programa de la força per clic a la X a la part superior dreta cantonada aquí. Ara anem a tornar en el codi font i retardar les coses una mica. En altres paraules, dins d'aquesta infinita llaç, i no només ens movem i mouen una i altra vegada, fins a la sacietat, anem a persistir per uns pocs milisegons abans de procedir a moure de nou. En particular, anirem a la part inferior del bucle infinit aquí i simplement fer una pausa per, per exemple, 10 mil · lisegons en cada iteració. Ara anem a tornar a compilar i tornar a executar rebot. I ara veiem una molt més raonable posada en pràctica, en el qual podem veure el veritable cercle rebotar al esquerra i el costat dret.