Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<conio.h>
- #include<stdio.h>
- #include<iostream>
- #include<graphics.h>
- #include<dos.h>
- #include<stdlib.h>
- #include<string.h>
- #include<time.h>
- #define RADIUS 4
- #define SPEED 0
- #define BALLCOLOR 14
- #define BACKCOLOR 0
- #define OCOLOR 12
- #define PICKCOLOR 10
- using namespace std;
- struct ball{
- int x, y, dx, dy;
- }nball[60];
- int HighScore[10];
- char* score_str = new char[10];
- void vatthe(int xleft, int xright, int ytop, int ybot, int color);
- void pick(int x, int y, int color);
- void getHighScore();
- void checkScore(int score);
- void showHighScore();
- void run_pinball();
- void giaodien();
- void getHighScore();
- void vevatthe(int xleft, int xright, int ytop, int ybot, int color)
- {
- setfillstyle(1, color);
- bar(xleft,ytop,xright,ybot);
- }
- void pick(int x, int y, int color)
- {
- setcolor(0);
- int point[] = {x, y-10, x, y+10, x+30, y, x, y-10};
- setfillstyle(1,color);
- fillpoly(4,point);
- }
- //===============Score===============
- void getHighScore()
- {
- FILE *f;
- f = fopen("highscore.txt", "w");
- for (int i=0;i<10;i++){
- fprintf(f,"%d",HighScore[i]); //ghi diem ra file
- fputs("\n",f);
- }
- fclose(f);
- }
- void checkScore(int score)
- {
- for(int i=0;i<10;i++){
- if(score>0 && score>=HighScore[i]){
- settextstyle(1,0,2);
- for(int j=0;j<50;j++){
- if(j%2==0){
- setcolor(14);
- outtextxy(150,120,"HIGH SCORE");
- }else{
- setcolor(9);
- outtextxy(150,120,"HIGH SCORE");
- }
- delay(5);
- }
- //=============================
- for(int j=9;j>i;j--)
- HighScore[j]=HighScore[j-1];
- HighScore[i]=score;
- break;
- }
- }
- getHighScore();
- }
- void showHighScore()
- {
- FILE *f;
- f = fopen("highscore.txt", "r");
- char ch[20];
- int x=130, y=100, i=0;
- settextstyle(4,0,2);
- while(!feof(f)){
- if(fgets(ch,20,f)!=NULL){
- y+=50;i++;
- sprintf(score_str,"%d. %s",i,ch);
- outtextxy(x,y,score_str);
- }
- if(i==5){
- x=400;y=100;
- }
- }
- fclose(f);
- }
- void run_pinball()
- {
- //==================Level===================
- cleardevice();
- settextstyle(2,1,9);
- setcolor(10);
- outtextxy(430,130,"Chose Level");
- settextstyle(2,1,8);
- outtextxy(342,262,"Easy");
- outtextxy(393,312,"Medium");
- outtextxy(339,362,"Hard");
- int x=230, y=250, ch;
- int score=-1, flag=0, lv;
- do{
- pick(x,y,PICKCOLOR);
- if(GetAsyncKeyState(VK_DOWN) && y<350){
- pick(x,y,0);
- y+=50;
- pick(x,y,PICKCOLOR);
- }
- if(GetAsyncKeyState(VK_UP) && y>250){
- pick(x,y,0);
- y-=50;
- pick(x,y,PICKCOLOR);
- }
- delay(80);
- }while(!GetAsyncKeyState(VK_RETURN));
- int MAXBALLS;
- if(y==250){
- MAXBALLS=20;lv=1;
- }
- if(y==300){
- MAXBALLS=40;lv=2;
- }
- if(y==350){
- MAXBALLS=60;lv=3;
- }
- cleardevice();
- //======================Giao dien==========================
- setcolor(15);
- rectangle(0, 0, 501, 371); //ve khung
- setfillstyle(SOLID_FILL,15);
- settextstyle (4,0,1);
- int a[] = {15,390, 30,390, 30,385, 45,395, 30,405, 30,400, 15,400, 15,390};
- fillpoly (8,a); outtextxy (55,383,"Right");
- int b[] = {15,440, 30,430, 30,435, 45,435, 45,445, 30,445, 30,450, 15,440};
- fillpoly (8,b);outtextxy (55,430,"Left");
- int c[] = {160,410, 160,395, 155,395, 165,380, 175,395, 170,395, 170,410, 160,410};
- fillpoly (8,c);outtextxy (185,383,"Up");
- int d[] = {160,430, 160,445, 155,445, 165,460, 175,445, 170,445, 170,430, 160,430};
- fillpoly(8,d);outtextxy (185,430,"Down");
- bar (300,380,420,410);setcolor(0);settextstyle(1,0,1);setbkcolor(15);outtextxy(310,385,"SPACE");
- setbkcolor(0);setcolor(15);settextstyle (4,0,1);outtextxy(430,382,"Pause/Resume");
- bar (300,427,420,457);setcolor(0);settextstyle(1,0,1);setbkcolor(15);outtextxy(330,432,"ESC");
- setbkcolor(0);setcolor(15);settextstyle (4,0,1);outtextxy(430,429,"End Game");
- outtextxy(525,50,"Score");
- //======================Toa do======================
- for (int i=0; i<MAXBALLS; i++){ //tao vi tri random
- do{
- nball[i].dx = rand()%3 - 1;
- }while(nball[i].dx == 0);
- do{
- nball[i].dy = rand()%3 - 1;
- }while(nball[i].dy == 0);
- do{
- nball[i].x = rand()%(500-RADIUS);
- }while(nball[i].x < 2 + RADIUS);
- do{
- nball[i].y = rand()%(370-RADIUS);
- }while(nball[i].y < 2 + RADIUS);
- }
- int xleft,xright,ytop,ybot,kc; //toa do vat the
- xleft = 240; xright = 260;
- ytop = 175; ybot = 195;
- //========================Run========================
- do{
- setcolor(BALLCOLOR);
- setfillstyle(SOLID_FILL, BALLCOLOR);
- for (int i=0; i<MAXBALLS; i++)
- fillellipse(nball[i].x, nball[i].y, RADIUS, RADIUS);
- vevatthe(xleft,xright,ytop,ybot,OCOLOR);
- //===================Vat the====================
- if(GetAsyncKeyState(VK_LEFT) && xleft>2){
- vevatthe(xleft,xright,ytop,ybot,0);
- xleft-=2;
- xright-=2;
- vevatthe(xleft,xright,ytop,ybot,OCOLOR);
- }
- if(GetAsyncKeyState(VK_RIGHT) && xright<500){
- vevatthe(xleft,xright,ytop,ybot,0);
- xright+=2;
- xleft+=2;
- vevatthe(xleft,xright,ytop,ybot,OCOLOR);
- }
- if(GetAsyncKeyState(VK_UP) && ytop>2){
- vevatthe(xleft,xright,ytop,ybot,0);
- ytop-=2;
- ybot-=2;
- vevatthe(xleft,xright,ytop,ybot,OCOLOR);
- }
- if(GetAsyncKeyState(VK_DOWN) && ybot<370){
- vevatthe(xleft,xright,ytop,ybot,0);
- ybot+=2;
- ytop+=2;
- vevatthe(xleft,xright,ytop,ybot,OCOLOR);
- }
- delay(SPEED);
- //=================Score==================
- setcolor(15);
- if(flag%60==0){
- score++;
- sprintf(score_str,"%d",score);
- settextstyle(4,0,1);
- outtextxy(550,80,score_str);
- }
- flag+=lv;
- //====================Move====================
- for (int i=0; i<MAXBALLS; i++){
- //==============Game over===========
- if((xleft==nball[i].x+RADIUS&&nball[i].y>ytop&&nball[i].y-RADIUS<=ybot) ||(xright==nball[i].x-RADIUS&&nball[i].y-RADIUS<ybot&&nball[i].y+RADIUS>=ytop) ||(ytop==nball[i].y+RADIUS&&nball[i].x<xright&&nball[i].x+RADIUS>=xleft) ||(ybot==nball[i].y-RADIUS&&nball[i].x>xleft&&nball[i].x-RADIUS<=xright))
- {
- do{
- setcolor(10);settextstyle(1,0,4);
- outtextxy(90,145,"GAME OVER");
- checkScore(score);
- delay(350);
- setcolor(10);settextstyle(1,0,3);
- outtextxy(170,220,"Play Again");
- outtextxy(170,270,"Quit");
- x=130;y=230;
- do{
- pick(x,y,PICKCOLOR);
- if(GetAsyncKeyState(VK_DOWN) && y<280){
- pick(x,y,0);
- y+=50;
- pick(x,y,PICKCOLOR);
- }
- if(GetAsyncKeyState(VK_UP) && y>230){
- pick(x,y,0);
- y-=50;
- pick(x,y,PICKCOLOR);
- }
- delay(50);
- }while(!GetAsyncKeyState(VK_RETURN));
- delay(20);
- if(y==230) run_pinball();
- else giaodien();
- }while(!GetAsyncKeyState(VK_ESCAPE));
- }
- //===========Pause==========
- if(GetAsyncKeyState(VK_SPACE)){
- do{
- setcolor(15);
- outtextxy(520,200,"Pause");
- delay(100);
- }while(!GetAsyncKeyState(VK_SPACE));
- delay(80);
- setcolor(0);
- outtextxy(520,200,"Pause");
- }
- //============Run============
- setcolor(BACKCOLOR);
- setfillstyle(1, BACKCOLOR);
- fillellipse(nball[i].x, nball[i].y, RADIUS, RADIUS);
- nball[i].x += nball[i].dx;
- nball[i].y += nball[i].dy;
- if(nball[i].x < RADIUS +1 || nball[i].x > 500 - RADIUS){
- nball[i].dx = -nball[i].dx;
- nball[i].x += 2 * nball[i].dx; //dap tuong
- }
- if (nball[i].y < RADIUS + 1 || nball[i].y > 370 - RADIUS){
- nball[i].dy = -nball[i].dy;
- nball[i].y += 2 * nball[i].dy;
- }
- }
- }while(!GetAsyncKeyState(VK_ESCAPE));
- delete score_str;
- }
- void giaodien()
- {
- cleardevice();
- //initScore();
- setcolor(10);settextstyle(2,1,9);
- outtextxy(445,130,"Dodge The Balls");
- settextstyle(2,1,8);
- outtextxy(315,262,"Play");
- outtextxy(420,312,"High Score");
- outtextxy(339,362,"About");
- outtextxy(312,412,"Quit");
- int x=210, y=250;
- do{
- pick(x,y,PICKCOLOR);
- if(GetAsyncKeyState(VK_DOWN) && y<400){
- pick(x,y,0);
- y+=50;
- pick(x,y,PICKCOLOR);
- }
- if(GetAsyncKeyState(VK_UP) && y>250){
- pick(x,y,0);
- y-=50;
- pick(x,y,PICKCOLOR);
- }
- delay(80);
- }while(!GetAsyncKeyState(VK_RETURN));
- setcolor(10);
- if(y==250) run_pinball();
- if(y==300){
- cleardevice();
- do{
- settextstyle(10,0,6);setcolor(15);
- outtextxy(110,20,"HIGH SCORE");
- showHighScore();
- delay(50);
- }while(!GetAsyncKeyState(VK_SPACE));
- giaodien();
- }
- if(y==350){
- cleardevice();
- do{
- settextstyle(10,0,6);setcolor(15);
- outtextxy(210,20,"ABOUT");
- settextstyle(3,0,3);setcolor(9);
- outtextxy(20,100,"- DE TAI:");
- settextstyle(4,0,3);setcolor(10);
- outtextxy(60,140,"GAME \"Dodge The Balls\"");
- settextstyle(3,0,3);setcolor(9);
- outtextxy(20,200,"- SINH VIEN THUC HIEN:");
- settextstyle(4,0,3);setcolor(12);
- outtextxy(60,240,"NGUYEN NGOC HA - 1581310059");
- settextstyle(3,0,3);setcolor(9);
- outtextxy(20,300,"- GIANG VIEN HUONG DAN:");
- settextstyle(4,0,3);setcolor(14);
- outtextxy(60,340,"THAY NGO NGOC THANH");
- settextstyle(1,0,3);setcolor(13);
- outtextxy(40,400,"TRUONG DAI HOC DIEN LUC");
- delay(80);
- }while(!GetAsyncKeyState(VK_SPACE));delay(80);
- giaodien();
- }
- if(y==400) closegraph();
- }
- int main()
- {
- int gr_drive = DETECT, gr_mode;
- initgraph(&gr_drive, &gr_mode, "");
- srand(time(NULL));
- giaodien();
- getch();
- closegraph();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement