звіт. Гра "ПінПонг"
Скачать 50.37 Kb.
|
МІНАСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ АВІАЦІЙНИЙ УНІВЕРСИТЕТ НАВЧАЛЬНО-НАУКОВИЙ ІНСТИТУТ КОМП’ЮТЕРНИХ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ КАФЕДРА КОМП’ТЕРИЗОВАНИХ СИСТЕМ УПРАВЛІННЯ Проект «Гра ”Пін-Понг”» Виконав студент групи СП-127: Шинкарук О. Перевірила : Старший викладач Станко С.М. Київ 2016 Вступ Сучасний світ сповнений безліччю стресів. І інколи хочеться відволіктися від навколишнього світу. Саме для цього я вирішив створити невеличку гру , що , як я надіюсь дозволить вам забути про всі ваші проблеми та зробить ваш день хоч трішки кращим. Для створення програми мені довелося використати:
Опис роботи програми При запуску, програма інформує вас про правила гри. Щоб розпочати вам потрібно натиснути Enter. Гра продовжуватиметься до перетину м’ячика вашої лінії воріт, або лінії суперника. Після закінчення ви побачите результат гри. Щоб запобігти небажаних дій в системі для виходу з програми потрібно ввести будь яку літеру. Лістинг програми можна побачити в додатку А. Підключені бібліотеки: #include #include #include #include #include Глобально оголошені змінні: #define width 40//константа, що задає ширину поля; #define heigh 20//константа, що задає висоту поля; bool gameOver;//змінна, що характеризує стан гри struct Xacix{ int plx; int plix; int ballx; int speedx; int pl; int pli; }x={width/2, width/2, width/2, 0, 0, 0};/*структура яка включає елементи, що рухаються по осі ох*/ struct Yacix { int ply; int pliy; int bally; int speedy; }y={heigh-1, 0, 8, 1}; };/*структура яка включає елементи, що рухаються по осі оy*/ Програму я реалізував за допомогою трьох функцій: void Draw();//функція в якій виконується малюнок таблиці void Move();//функція, що описує рух м’яча та вашої платформи void Intel();//функція що описує рух платформи супротивника Усі функції виконуються у функції int(): int main() { printf("Welcome at the Pin-Pong!!!\nTo move right press D\nTo move left press A\nTo get out of the game press W\nTo start, type any letter: ");/*привітання та розповідь про правила*/ scanf("%c");//затримка перед початком while(!gameOver){ usleep(10000);//затримка Draw(); Move(); Intel(); }//цикл за допомогою якого виконується програма return 0; } Лістинг кожної із функцій можна знайти в додатках: B(Draw()); C(Move()); D(Intel()); Запуск програми: Після натискання клавіші Enter, розпочинається гра: У разі програшу ви отримаєте: У разі виграшу ви отримаєте: Додаток А #include #include #include #include #include #define width 40 #define heigh 20 bool gameOver; struct Xacix{ int plx; int plix; int ballx; int speedx; int pl; int pli; }x={width/2, width/2, width/2, 0, 0, 0}; struct Yacix { int ply; int pliy; int bally; int speedy; }y={heigh-1, 0, 8, 1}; void Draw(); void Move(); Додаток А void Intel(); int main() { printf("Welcome at the Pin-Pong!!!\nTo move right press D\nTo move left press A\nTo get out of the game press W\nTo start, press Enter: "); scanf("%c"); while(!gameOver){ usleep(10000); Draw(); Move(); Intel(); } return 0; } Додаток В void Draw() { char you[5][46];//матриця виводу результату char he[5][47];//матриця виводу результату char *e,*e1;//оголошення визначників e=&you[0][0]; e1=&he[0][0];//присвоення елементів мариці визначникам HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);/*отримуємо дескриптор який ідентифікує консоль*/ COORD cd; cd.X =0; cd.Y = 0;//позиція курсора SetConsoleCursorPosition(hd, cd);//функція для зміни положення курсора for(int i=0;i printf("#"); }//цикл , що виводить верхню частину таблиці printf("\n"); for(int i=0;i for(int j=0;j if(j==0||j==width-1) printf("#"); Додаток В if(j==x.plx+x.pl && i==y.ply && x.pl!=9){ printf("="); x.pl++; } else if(j==x.plix+x.pli && i==y.pliy && x.pli!=9){ printf("="); x.pli++; } else if (j==x.ballx && i==y.bally){ printf("O"); } else printf(" "); } printf("\n"); }//цикли, що виводять бокові частини поля, а також м’яч і дві платформи x.pl=0; x.pli=0;/*обнуляємо значення довжини платформи для подальшої зміни значеннь*/ for(int i=0;i printf("#");//цикл, що виводить нижню частину поля printf("\n"); if(y.bally>y.ply){//умова завершення for(int i=0;i<5;i++){ for(int j=0;j<46;j++){ if(i==0){ if(j==0||j==4||(j>=8&&j<=10)||j==14||j==18||j==24||(j>=31&&j<=33)||j==38|| Додаток В j==39||(j>=41 && j<=45)){ *(e+4*i+j)='^'; } else{ *(e+46*i+j)=' '; } } if(i==1){ if(j==1||j==3||j==7||j==11||j==14||j==18||j==24||j==30||j==34||j==37||j==42){ *(e+46*i+j)='^'; } else{ *(e+46*i+j)=' '; } } if(i==2){ if(j==2||j==7||j==11||j==14||j==18||j==24||j==30||j==34||j==37||j==38||(j>=42 && j<=45)){ *(e+46*i+j)='^'; } else{ *(e+46*i+j)=' '; } } if(i==3){ if(j==2||j==7||j==11||j==14||j==18||j==24||j==30||j==34||j==39||j==42){ *(e+46*i+j)='^'; Додаток В } else{ *(e+46*i+j)=' '; } } if(i==4){ if(j==2||(j>=8 && j<=10)||(j>=14 && j<=18)||(j>=24&&j<=27)||(j>=31&&j<=33)||j==37||j==38||(j>=42&&j<=45)){ *(e+46*i+j)='^'; } else{ *(e+46*i+j)=' '; } } printf("%c",*(e+46*i+j)); } printf("\n"); }//цикл, що виводить результат гри printf("Try again.....\n"); printf("To exit type any letter: "); scanf("%d"); gameOver=true;//завершення програми } if (y.bally for(int i=0;i<5;i++){ for(int j=0;j<47;j++){ Додаток В if(i==0){ if(j==0||j==4||(j>=8&&j<=10)||j==14||j==18||j==24||j==36||j==39||j==42||j==46){ *(e1+47*i+j)='^'; } else{ *(e1+47*i+j)=' '; } } if(i==1){ if(j==1||j==3||j==7||j==11||j==14||j==18||j==25||j==35||j==39||j==42||j==43||j==46){ *(e1+47*i+j)='^'; } else{ *(e1+47*i+j)=' '; } } if(i==2) if(j==2||j==7||j==11||j==14||j==18||j==26||j==30||j==34||j==39||j==42||j==44||j==46){ *(e1+47*i+j)='^'; } else{ *(e1+47*i+j)=' '; } } Додаток В if(i==3){ if(j==2||j==7||j==11||j==14||j==18||j==27||j==29||j==31||j==33||j==39||j==42||j==45||j==46){ *(e1+47*i+j)='^'; } else{ *(e1+47*i+j)=' '; } } if(i==4){ if(j==2||(j>=8 && j<=10)||(j>=14 && j<=18)||j==28||j==32||j==39||j==42||j==46){ *(e1+47*i+j)='^'; } else{ *(e1+47*i+j)=' '; } } printf("%c",*(e1+47*i+j)); } printf("\n"); } //вивід результату гри printf("My congratulations!!!\n"); printf("To exit type any letter: "); scanf("%d"); gameOver=true; } } Додаток С void Move(){ if(_kbhit()){//виконується отримання данних про натиск клавіші switch (getch()){//оператор що розпізнає клавіші, що ви натискаєте case 'a': x.plx--;//при натисненні на клавішу а виконується рух в ліво break; case 'd': x.plx++;// при натисненні на клавішу d виконується рух в право break; case 'w': gameOver=true;/*при натисненні на клавішу w виконується вихід з програми*/ break; } } if (x.plix+9>38){ x.plix--; } if(x.plix<=0){ x.plix++; } if (x.plx+9>38){ x.plx--; } if(x.plx<=0){ x.plx++; }//умови запобігання виходу платформи за межі поля Додаток С if(x.ballx>=x.plx && x.ballx<=x.plx+2 && y.bally == y.ply-1){ x.speedx=-1; } if(x.ballx>=x.plx+8 && x.ballx<=x.plx+9 && y.bally == y.ply-1){ x.speedx=1; } if ( x.ballx==x.plx+5 && y.bally == y.ply-1){ x.speedx=0; } if(x.ballx>=x.plx+3 && x.ballx<=x.plx+4 && y.bally == y.ply-1){ x.speedx=-2; } if(x.ballx>=x.plx+6 && x.ballx<=x.plx+7 && y.bally == y.ply-1){ x.speedx=2; }//все показане вище описує відбиття від вашої платформи if(x.ballx<=1 || x.ballx>=width-2){ x.speedx=-x.speedx; }//відбиття від стінки поля if(x.ballx>=x.plx && x.ballx<=x.plx+9 && y.bally == y.ply-1){ y.speedy=-y.speedy; }//зміна напрямку при відбитті від вашої платформи if(x.ballx>=x.plix && x.ballx<=x.plix+2 && y.bally == y.pliy+1){ x.speedx=-1; } Додаток С if(x.ballx>=x.plix+8 && x.ballx<=x.plix+9 && y.bally == y.pliy+1){ x.speedx=1; } if (x.ballx==x.plix+5 && y.bally == y.pliy+1){ x.speedx=0; } if(x.ballx>=x.plix+3 && x.ballx<=x.plix+4 && y.bally == y.pliy-1){ x.speedx=-2; } if(x.ballx>=x.plix+6 && x.ballx<=x.plix+7 && y.bally == y.pliy-1){ x.speedx=2; } //все показане вище описує відбиття від платформи супротивника if(x.ballx>=x.plix && x.ballx<=x.plix+9 && y.bally == y.pliy+1){ y.speedy=-y.speedy; }}//зміна напрямку при відбитті від платформи противника x.ballx+=x.speedx;//рух м’ячика по осі ox y.bally+=y.speedy;// рух м’ячика по осі oy } Додаток С void Intel(){ if (x.plix+4 x.plix++; } if (x.plix+4 x.plix++; } if(x.plix+4 x.plix+15; } if(x.plix+4 x.plix-10; } if(x.plix+4 x.plix+10; } if (x.plix+4>x.ballx && (x.speedx==-2 || x.speedx==-1) && y.speedy==-1){ x.plix--; } if (x.plix+4>x.ballx && (x.speedx==-2 || x.speedx==-1) && y.speedy==-1 && y.bally<8){ x.plix+10; } if (x.plix+4 x.plix-10; } Додаток С if (x.plix+4>x.ballx && x.speedx==0 && y.speedy==-1){ x.plix--; } if(x.plix+4>x.ballx && (x.speedx==2 || x.speedx==1) && y.speedy==1){ x.plix+10; } if(x.plix+4>x.ballx && (x.speedx==-2 || x.speedx==-1) && y.speedy==1){ x.plix-10; } if(x.plix+4>x.ballx && (x.speedx==2 || x.speedx==1) && y.speedy==-1){ x.plix++; } }/*Усі наведені вище логічні операції виконуються задля забезпечення руху платформи противника*/ Висновок В ході розробки та виконання проекту я поглибив свої знання з дисципліни програмування мовою С, навчився застосовувати на практиці структури даних, вказівники, масиви |