in a few different pages and when i enter one of them and press a key it's as if i pressed a key in all that pages that has the getch(); / kbhit(); command.
EX: i enter the High score page, i press some random key to make the page go back to the menu,
and then i go to the Instructions page and it enters it for a second and then it go back to the menu as if i pressed a key again. (which i didn't).
My teacher and i sat down on my code and tried changing the getch(); to kbhit(); , or using flushall(); command,
and nothing seems to fix this problem.
(the flushall command is still in my code i didn't removed it)
heres the menu page (game.cpp):
#include <graphics.h> #include "d:\1vs100\button.h" #include "d:\1vs100\mouse.h" #include "d:\1vs100\screens.h" #include "d:\1vs100\q_music.h" #include "d:\1vs100\q_sports.h" #include "d:\1vs100\q_tech.h" #include "d:\1vs100\q_enter.h" #include "d:\1vs100\q_game1.h" void game1(int flag,char *name,int Pflag) { int a,c,d,i,l,x,y,status,places=7,mone=0,degel=1,left=185,top=125; int index,mone_admin=0,admin[]={'a','d','m','i','n'}; char ch,temp[2]; button *array; array=(button*)malloc(places*sizeof(button)); // array of button if (array==NULL) // if memory=not enough room > NULL { printf("Not enough memory to allocate buffer!\n"); getch(); exit(0); } array[0]=InitButton(190,380,290,410,0,13,"Music"); array[1]=InitButton(190,420,290,450,0,13,"Sports"); array[2]=InitButton(300,420,400,450,0,13,"Technology"); array[3]=InitButton(300,380,400,410,0,13,"Entertainment"); array[4]=InitButton(20,45,100,65,0,13,"Quit"); array[5]=InitButton(20,20,100,40,0,13,"Main Menu"); array[6]=InitButton(243,125,343,155,0,13,"1VS100"); setfillstyle(8,9); // s,c bar(15,480,0,0); // left frame bar(0,15,640,0); // up frame bar(623,480,640,0); // right frame bar(0,480,640,465); // down frame setcolor(5); settextstyle(0,0,0); // f,d,s if(flag) { x=left+20; y=top+60; setfillstyle(1,13); bar(left,top,left+217,top+90); setcolor(5); outtextxy(left+52,top+10,"Player's Name:"); line(x,y+14,x+180,y+14); while(degel) { l=-1; ch=getch(); if(ch>=65&&ch<=90 || ch>=97&&ch<=122 && mone<15) { l++; temp[l]=ch; temp[++l]='\0'; strcat(name,temp); outtextxy(x,y,temp); mone++; x+=8; for(index=0;index<5;index++) { if(temp[l]==admin[index]) { mone_admin++; } if(mone_admin>4) { setcolor(0); setfillstyle(0,0); bar(left,top,left+217,top+90); outtextxy(left+52,top+10,"Player's Name:"); line(x,y+14,x+180,y+14); setcolor(4); outtextxy(240,20,"Welcome, Oren"); degel=0; } } } else if(ch==8 && mone>0) { x-=8; bar(x,y,x+10,y+13); mone--; name[mone]='\0'; } else if(ch==13 && mone>0) { setcolor(0); setfillstyle(0,0); bar(left,top,left+217,top+90); outtextxy(left+52,top+10,"Player's Name:"); line(x,y+14,x+180,y+14); setcolor(5); outtextxy(240,20,"Welcome,"); outtextxy(313,20,name); degel=0; } } // while } // if else { outtextxy(240,20,"Welcome,"); outtextxy(313,20,name); } setcolor(9); // light blue settextstyle(4,0,4); // f,d,s outtextxy(205,70,"THE GAME"); setcolor(9); circle(293,199,10); // stick head line(293,209,293,232); // stick body line(314,210,294,220); // stick right arm line(271,210,292,220); // stick left arm line(293,233,300,252); // stick right leg line(293,233,286,252); // stick left leg /* N-heb */ line(308-2,276-17,308-2,286-17); line(303-2,286-17,307-2,286-17); /* G-heb */ line(298-2,276-17,298-2,282-17); line(292-2,282-17,298-2,282-17); line(292-2,282-17,292-2,286-17); line(292-2,286-17,298-2,286-17); /* D-heb */ line(286-2,277-17,286-2,286-17); line(279-2,277-17,288-2,277-17); line(260,270,260,304); // (1) digget one circle(284,290,13); // (0) first digget zero circle(317,290,13); // (0) second digget zero setcolor(1); line(248,255,339,255); // seperate line rectangle(247,185,339,320); // box setcolor(5); settextstyle(4,0,4); // f,d,s outtextxy(246,325,"Practice"); for(i=0;i<places;i++) DrawButton(array[i]); mouse_cursor_on(); while(1) { for (i=0;i<places;i++) { read_mouse(&c,&d,&status); if ((c>=array[i].x1)&&(c<=array[i].x2)&&(d>=array[i].y1)&&(d<=array[i].y2)&&(status&0x01)) { sound(250); delay(50); nosound(); if (BPos(array[i])==0) // if button is pressed { array[i].pos=1; DrawButton(array[i]); delay(200); // illusion of button being pressed array[i].pos=0; DrawButton(array[i]); if (i==0) // Music { mouse_cursor_off(); clearviewport(); free(array); music(name,0); } if (i==1) // Sports { mouse_cursor_off(); clearviewport(); free(array); sports(name,0); } if (i==2) // Technology { mouse_cursor_off(); clearviewport(); free(array); tech(name,0); } if (i==3) // Entertainment { mouse_cursor_off(); clearviewport(); free(array); enter(name,0); } if (i==4) // Quit Game { closegraph(); free(array); sound(250); delay(4); nosound(); exit(1); } if (i==5) // Main Menu { mouse_cursor_off(); clearviewport(); free(array); menu(); } if (i==6) // 1vs100 { if(Pflag) { mouse_cursor_off(); clearviewport(); free(array); game_mat(name); } else { setcolor(4); settextstyle(0,0,0); outtextxy(235,164,"-ACCESS DENIED-"); delay(1000); outtextxy(172,175,"Must pass 1 category of practice"); delay(2850); setcolor(0); outtextxy(235,164,"-ACCESS DENIED-"); outtextxy(172,175,"Must pass 1 category of practice"); } } } // if if (BPos(array[i])==1) { array[i].pos=0; DrawButton(array[i]); if (i==2) { closegraph(); free(array); sound(250); delay(4); nosound(); exit(1); } // if break; } // if } // if } // for } // while } // game func
game.h
typedef struct { char question[50]; char ans1[20]; char ans2[20]; char ans3[20]; int right_ans; }question; void game1(int flag,char * name,int Pflag);
high score page(high.cpp), has the getch(); code:
#include <graphics.h> #include <string.h> #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <dos.h> #include "d:\1vs100\high.h" #include "d:\1vs100\menu.h" #include "d:\1vs100\screens.h" list *head=NULL; void high() { int color; setcolor(9); // light blue settextstyle(4,0,4); // f,d,s outtextxy(224,15,"High Scores"); setfillstyle(8,9); // s,c bar(15,480,0,0); // left frame bar(0,15,640,0); // up frame bar(623,480,640,0); // right frame bar(0,480,640,465); // down frame settextstyle(0,0,0); // f,d,s h_main(); randomize(); color = ( color + rand() ) %15 +1; setcolor(color); delay(800); outtextxy(215,450,"Press any key to return"); delay(800); setcolor(0); outtextxy(215,450,"Press any key to return"); flushall(); while (!kbhit()) { color = ( color + rand() ) %15 +1; setcolor(color); delay(800); outtextxy(215,450,"Press any key to return"); delay(800); setcolor(0); outtextxy(215,450,"Press any key to return"); } flushall(); clearviewport(); menu(); } // high func void addItem(list **headPtr,rec data) { list *ptr; ptr=(list *)malloc(sizeof(list)); // 1*sizeof if(ptr) { if (*headPtr==NULL) { ptr->record=data; ptr->next=NULL; *headPtr=ptr; } else { list *temp=*headPtr; while(temp->next) temp=temp->next; ptr->record=data; ptr->next=NULL; temp->next=ptr; } } // if ptr } // addItem func void printList(list *headPtr) { rec data; list *temp=headPtr; while(temp) { data=temp->record; setcolor(11); outtextxy(205,110,data.name); outtextxy(340,110,data.nikud); temp=temp->next; } // while } // printList func void addInsertSort(list **ptr,rec data) { list *temp=(list *)malloc(sizeof(list)); if(temp) { temp->record=data; temp->next=*ptr; *ptr=temp; } } // addInsertSort func void insertSort(list **headPtr,rec data) { list *temp,*ptr; temp=*headPtr; while((temp)&&(temp->record.nikud>data.nikud)) { ptr=temp; temp=temp->next; } if(ptr==*headPtr) addInsertSort(headPtr,data); else addInsertSort(&(ptr->next),data); } // InsertSort func void h_main() { rec data; strcpy(data.name,"OrEn"); strcpy(data.nikud,"1,000,000"); addItem(&head,data); printList(head); } // h_main func
high.h
typedef struct { char name[25]; char nikud[10]; }rec; typedef struct list { rec record; struct list *next; }list; void high(); void addItem(); void printList(); void addInsertSort(); void insertSort(); void h_main();
instructions page(ins.cpp), has the getch(); code as well:
#include <graphics.h> #include <string.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <dos.h> #include "d:\1vs100\screens.h" #include "d:\1vs100\menu.h" void ins() { int i,color,x=100,y=59; char s[81],ch; flushall(); setcolor(9); // light blue settextstyle(4,0,4); // f,d,s outtextxy(240,15,"Instructions"); setfillstyle(8,9); // s,c bar(15,480,0,0); // left frame bar(0,15,640,0); // up frame bar(623,480,640,0); // right frame bar(0,480,640,465); // down frame setcolor(9); settextstyle(3,0,1); // f,d,s FILE*fp; fp=fopen("d:\\1vs100\\ins.txt","rt"); if(fp) { while(fgets(s,80,fp)) { i=0; while(s[i]=='\t') i++; strcpy(s,s+i); s[strlen(s)-1]='\0'; outtextxy(x,y,s); y+=23; } } fclose(fp); settextstyle(0,0,0); // f,d,s randomize(); while(1) { color = ( color + rand() ) %15 +1; setcolor(color); delay(800); outtextxy(215,450,"Press any key to return"); delay(800); setcolor(0); outtextxy(215,450,"Press any key to return"); if(kbhit()) { flushall(); clearviewport(); menu(); } } } // ins func
ins.h
void ins();
Thanks a lot in advance.
This post has been edited by ISAI: 06 March 2008 - 12:47 AM