• Aucun résultat trouvé

Introduction to Programming

N/A
N/A
Protected

Academic year: 2022

Partager "Introduction to Programming"

Copied!
3
0
0

Texte intégral

(1)

Introduction to Programming

Practical #2

1 Variables, loops, conditions, functions

1.1 First program with functions

1. Get the example program :

Download archiveTp2.zipon webpage, extract the files and open the project by opening theCMakeLists.txt of Tp2_Initial from Qt Creator. Check projectHopwhose source looks like :

1 #i n c l u d e <i o s t r e a m >

2 u s i n g namespace s t d ; 3

4 i n t p l u s (i n t a ,i n t b ) {

5 i n t c ;

6 c=a+b ;

7 r e t u r n c ; 8 }

9

10 v o i d t r i p l e 1 (i n t a ) { 11 a=a∗3 ;

12 } 13

14 v o i d t r i p l e 2 (i n t& a ) { 15 a=a∗3 ;

16 } 17

18 i n t main ( ) { 19 i n t i , j =2 ,k ;

20 i =3;

21 k=p l u s ( i , j ) ; 22 t r i p l e 1 ( i ) ; 23 t r i p l e 2 ( i ) ; 24 r e t u r n 0 ; 25 }

Mini tennis. . .

2. Debugger :

Run the program step by step and study how variables change. You must use the program in Debug mode.

1.2 First program with Imagine++

In this practical session and the following, we will use the graphics library of Imagine++ (see Appendix of lecture notes). It allows to manage easily the windowing system, drawings, and input/output of keyboard and mouse.

1. Starter program :

Input your name in the placeholder of file tennis.cpp. You must do that at each practical. Study the code of projectTennis:

1 #i n c l u d e <I m a g i n e / G r a p h i c s . h>

2 u s i n g namespace I m a g i n e ; 3 . . .

4 i n t main ( ) {

1

(2)

5 // Open window

6 openWindow ( 2 5 6 , 2 5 6 ) ;

7 // P o s i t i o n and s p e e d o f b a l l

8 i n t xb =128 ,

9 yb =20 ,

10 ub=2 ,

11 vb =3;

12 // Main l o o p 13 w h i l e(t r u e) {

14 // D i s p l a y b a l l

15 f i l l R e c t ( xb−3 ,yb−3 , 7 , 7 ,RED) ; 16 // T e m p o r i s a t i o n

17 m i l l i S l e e p ( 2 0 ) ;

18 // Erase b a l l

19 f i l l R e c t ( xb−3 ,yb−3 , 7 , 7 ,WHITE) ;

20 // Rebound

21 i f( xb+ub >253) 22 ub=−ub ;

23 // u p d a t e b a l l p o s i t i o n

24 xb+=ub ;

25 yb+=vb ;

26 }

27 e n d G r a p h i c s ( ) ; 28 r e t u r n 0 ; 29 }

Do not care how function keyboard() works (it is a bit technical)

Build then execute the program.1 What happens ?

2. Online help. At any moment, the keyF1allows accessing the documentation of the keyword under cursor.

Test this with keywords if, whileandreturn.

Useful key : F1 = Access documentation 3. Understand how the program works :

Identify the main loop of the program. It proceeds so : (a) Display ball

(b) Temporisation of a few milliseconds so that the ball does not move too fast (c) Erase ball

(d) Handle rebounds by updating speed (e) Update ball coordinates.

The line with instruction whilemay signal a warning. Can you understand why ? What is the point of the condition by instruction if?

4. Managing all rebounds :

Complete the program so that all rebounds are handled. For example, inverse the horizontal component ubof the speed vector when the balls is going to meet the left or right border of the window.

5. Global variables :

Double the window height. Modify the ball size. This requires hanging the code at several locations.

Instead of placing numerical variables “in the rock”, it is better to define variables for them. To make it clear, use constant global variables. For that, insert right after the two include lines the following code :

c o n s t i n t width = 2 5 6 ; // Window w i d t h c o n s t i n t h e i g h t = 2 5 6 ; // Window h e i g h t c o n s t i n t b a l l _ s i z e = 3 ; // Radius o f b a l l

and reformulate numeric values in the program with these variables. The keywordconst indicates that the variables cannot be modified after their initalization. Try to add the line width=300; at the start of function main and note that it makes a compilation error.

1. Since the project has two executable programs, make sure the project Tennis is selected with the Project button on top of the start green triangle

2

(3)

6. Usage of functions :

The ball is drawn twice in the loop, the first time in red and the second one in white to erase it. Here, drawing the ball requires a single line but could be much more if it had a more complex shape. Thus, to structure the program and make the code more readable while minimizing duplication, group the display of the ball and its erasure in a function DrawBall defined before the function main :

v o i d DrawBall (i n t x , i n t y , C o l o r c o l ) { . . .

}

In the same manner, define a function

void MoveBall(int&x,int&y,int &u,int &v) to handle rebounds and movement of the ball.

1.3 Tennis

We are going to make the program more fun by adding two rackets moving horizontally at top and bottom of the screen, and controlled by the keyboard.

1. Display of rackets :

Add in function main variables xr1,yr1,xr2,yr2 dedicated to the position of both rackets. Then define a function DrawRacket taking example from DrawBall. Put the calls to these functions at appropriate locations in the loop.

2. Keyboard handling :

Management of the keyboard is ready for use in function keyboard whose content we will not comment.

This functions allows knowing directly if one of the keys of interest (s and d for the first raquet, k and l for the second) are pressed or not. This function, keyboard(int& sens1,int& sens2), returns in sens1 and sens2, the values 0, -1 or 1 (0 : no move, -1 : to the left, 1 : to the right).

3. Racket motion :

Code the motion of a racket in a function void MoveRacket(int&x,intsens)

then call this function in the main loop for each racket. Naturally, make sure the rackets do not move outside the window.

4. Rebounds on rackets :

Take inspiration from the management of rebounds of the ball. Here, we have to check not only whether the ball will reach the top or bottom of the screen, but also if it is close enough in abscissa to the corresponding racket.

5. Count and display score :

Modify the function MoveBall so as to keep track of the score of the players and display it in the terminal.

6. For the ones that have finished :

During a rebound on the racket, modify the inclination of the trajectory of the ball as a function of the speed of the racket and of the location of the rebound.

You should have obtained a program looking like the one in the figure.

3

Références

Documents relatifs

As we can see it offers no method for getState() as the original O BSERVER pattern does, this is because I NTELLIGENT S UBJECT enforces a push model,

Usually, you run most of your user programs in the user's Shell process, using the input and transcript pads already created by the Display Manager command,

Check that everything could be restarted from scratch : quit Qt Creator, erase your source and build folders, extract the source folder from your archive ; if a file

In this practical, we will program a game of Mastermind, where the player has to guess a combination generated randomly by the computer1. The user has a predetermined number

Create (and use instead of initial conditions given for the sun) a function initializing a Ball, with position in the window, null speed, radius between 5 and 15, and mass being

Each player in turn can launch a Ball with the chosen initial speed, the ball undergoing the gravitation of the different suns and disappearing after 250 display time steps.. The

Global constraints are a fundamental compo- nent of a modern constraint solver that not only allow common combi- natorial substructures to be modelled, but they also significantly

The basic rule for using mutual exclusion is straightforward: in a multi-threaded program all shared mutable data must be protected by associating it with some object’s lock, and