Witajcie
Musze do szkoly napisac gre tetris w c++ pod konsole korzystajac z pliku console.h i nie bardzo wiem jak sie zabrac. Poszukalem kody w necie ale zadne nie spelniaja wymogow - te ktore sa pod console.h nie sa napisane z wykorzystaniem klas. Czy ma ktos kod takiej gry z w.w. wymaganiami?[???]
Wiele godzin szukalem - podejrzewam ze w tym czasie ktos sprawny bylby w stanie napisac sama gre ;)
Czy trudno bedzie przerobic ponizszy kod na wykorzystywanie w console.h i klas ? Why tak czesto goto jest wykorzystywane? Po co jest wstawka asemblerowa ? :| Ja moge miec najprostsza wersje bez hightstores itd.
#include<conio.h>
#define AR 72
#define AB 80
#define IZ 75
#define DE 77
#define ESP 32
#define ESC 27
#define ENTER 13
struct {int tx,ty,fig,gi;} pieza;
char figura[7][4][64],temp[64],dib[7][64];
int op,i,j,c=0,vel=250,ret=1,y=1,pun,lin,sig,niv;
unsigned int seed;
void retardo(unsigned int segundos) {
asm {
mov AX, segundos
mov BX, 1000
mul BX
mov CX, DX
mov DX, AX
mov AH, 0x86
int 0x15
};
}
void dibuja(void) {
textbackground(BLACK);
clrscr();
textcolor(LIGHTBLUE);
gotoxy(1,1);cputs(" ŰŰŰŰ ŰŰŰŰ ");
gotoxy(1,2);cputs(" ŰŰ ŰŰŰŰ ŰŰ ");
gotoxy(1,3);cputs(" ŰŰŰŰ ŰŰŰŰ ");
gotoxy(1,4);cputs(" ŰŰ ŰŰŰŰ ŰŰ ");
textcolor(LIGHTGREEN);
gotoxy(1,5);cputs(" ŰŰŰŰ ŰŰŰŰ ");
gotoxy(1,6);cputs(" ŰŰ ŰŰŰŰ ŰŰ ");
gotoxy(1,7);cputs(" ŰŰŰŰ ŰŰŰŰ ");
gotoxy(1,8);cputs(" ŰŰ ŰŰŰŰ ŰŰ ");
textcolor(YELLOW);
gotoxy(1,9);cputs(" ŰŰŰŰŰŰ ŰŰ ");
gotoxy(1,10);cputs(" ŰŰŰŰ ŰŰ ŰŰ ");
gotoxy(1,11);cputs(" ŰŰ ŰŰŰŰŰŰ ");
gotoxy(1,12);cputs(" ŰŰ ŰŰ ŰŰŰŰ ");
textcolor(LIGHTMAGENTA);
gotoxy(1,13);cputs(" ŰŰŰŰŰŰ ŰŰ ");
gotoxy(1,14);cputs(" ŰŰ ŰŰ ŰŰŰŰ ");
gotoxy(1,15);cputs(" ŰŰ ŰŰŰŰŰŰ ");
gotoxy(1,16);cputs(" ŰŰŰŰ ŰŰ ŰŰ ");
textcolor(CYAN);
gotoxy(1,17);cputs(" ŰŰŰŰ ŰŰŰŰ ");
gotoxy(1,18);cputs(" ŰŰŰŰ ŰŰŰŰ ");
gotoxy(1,19);cputs(" ŰŰŰŰ ŰŰŰŰ ");
gotoxy(1,20);cputs(" ŰŰŰŰ ŰŰŰŰ ");
textcolor(BROWN);
gotoxy(1,21);cputs(" ŰŰŰŰŰŰ ŰŰ ");
gotoxy(1,22);cputs(" ŰŰ ŰŰŰŰ ŰŰ ");
gotoxy(1,23);cputs(" ŰŰ ŰŰŰŰŰŰ ");
gotoxy(1,24);cputs(" ŰŰ ŰŰŰŰ ŰŰ ");
for (i=0;i<=5;i++)
for (j=0;j<=3;j++) {
c++;
gettext(1,c,32,c, figura[i][j]);
};
textcolor(RED);
gotoxy(34,5);cputs(" ŰŰ ŰŰ ŰŰ ŰŰ ");
gotoxy(34,6);cputs(" ŰŰŰŰŰŰŰŰ ");
gotoxy(34,7);cputs(" ŰŰ ŰŰ ŰŰ ŰŰ ");
gotoxy(34,8);cputs(" ŰŰŰŰŰŰŰŰ ");
for (j=0;j<4;j++) gettext(34,j+5,65,j+5,figura[6][j]);
textcolor(LIGHTBLUE);
gotoxy(34,9); cputs(" ŰŰŰŰ ŰŰŰŰ ");
textcolor(LIGHTGREEN);
gotoxy(34,10);cputs(" ŰŰŰŰ ŰŰŰŰ ");
textcolor(YELLOW);
gotoxy(34,11);cputs(" ŰŰŰŰŰŰ ŰŰ ");
textcolor(LIGHTMAGENTA);
gotoxy(34,12);cputs(" ŰŰŰŰŰŰ ŰŰ ");
textcolor(CYAN);
gotoxy(34,13);cputs(" ŰŰŰŰ ŰŰŰŰ ");
textcolor(BROWN);
gotoxy(34,14); cputs(" ŰŰŰŰŰŰ ŰŰ ");
textcolor(RED);
gotoxy(34,15); cputs(" ŰŰ ŰŰ ŰŰ ŰŰ ");
for (j=0;j<7;j++) gettext(34,j+9,65,j+9,dib[j]);
clrscr();
outport(0x60,0xf3);
retardo(200);
outport(0x60,0);
}
void test(void){
for (int i=0;i<=6;i++)
for (int j=0;j<=3;j++) {
puttext(1,1,8,4,figura[i][j]);
getch();
};
}
void ventana(int ix, int iy, int fx, int fy, int c) {
textcolor(c);
for (int i=iy+1;i<fy;i++) {
gotoxy(ix,i);putch('ł');
gotoxy(fx,i);putch('ł');
};
for (i=ix+1;i<fx;i++) {
gotoxy(i,fy);putch('Ä');
};
gotoxy(ix,iy);cputs("ÚÄÄÄÄÄ");
gotoxy(fx-5,iy);cputs("ÄÄÄÄÄż");
gotoxy(ix,fy);putch('Ŕ');
gotoxy(fx,fy);putch('Ů');
}
int aleat(void){
unsigned int a;
a=seed;
a*=36421;
a++;
seed=a;
return(a&0x7fff);
};
int pon(int ix, int iy, int fg, int po) {
int bool=1;
char temp2[64];
gettext(pieza.tx,pieza.ty,pieza.tx+7,pieza.ty+3,temp);
gettext(pieza.tx,pieza.ty,pieza.tx+7,pieza.ty+3,temp2);
for (c=0;c<=63;c+=2) if ((temp[c]==figura[pieza.fig][pieza.gi][c])) temp[c]=' ';
puttext(pieza.tx,pieza.ty,pieza.tx+7,pieza.ty+3,temp);
gettext(ix,iy,ix+7,iy+3,temp);
if ((pieza.tx==ix)&&(pieza.ty==iy)) {
for (c=0;c<=63;c+=2)
if ((temp[c]!=' ')&&((figura[pieza.fig][po][c]!=' ')||(figura[fg][pieza.gi][c]!=' '))) bool=0;
}
else
for (c=0;c<=63;c+=2) if ((temp[c]!=' ')&&(figura[pieza.fig][pieza.gi][c]!=' ')) bool=0;
if (bool) {
for (c=0;c<=63;c+=2)
if (figura[fg][po][c]=='Ű') {
temp[c]=figura[fg][po][c];
temp[c+1]=figura[fg][po][c+1];
};
if ((ix==34)&&(iy==y)&&(ret==0)) puttext(pieza.tx,pieza.ty,pieza.tx+7,pieza.ty+3,temp2);
if ((iy<=1)&&(pieza.ty<=1)) return(2);
puttext(ix,iy,ix+7,iy+3,temp);
pieza.tx=ix;
pieza.ty=iy;
pieza.fig=fg;
pieza.gi=po;
return(0);
}
else {
puttext(pieza.tx,pieza.ty,pieza.tx+7,pieza.ty+3,temp2);
return(1);
};
}
int delay(){
if (ret==0) ret=vel;
for (ret;ret!=0;ret--){
retardo(1);
if (kbhit())
return(1);
};
return(0);
}
void linea(void) {
char temp3[40];
int bool2,pun2=50;
for (i=2;i<=22;i++) {
bool2=1;
gettext(28,i,47,i,temp3);
for (c=0;c<=38;c+=2)
if (temp3[c]==' ') bool2=0;
if (bool2) {
for (j=i;j>3;j--) {
gettext(28,j-1,47,j-1,temp3);
puttext(28,j,47,j,temp3);
retardo(20);
};
lin++;
pun2*=2;
pun+=pun2;
if (!(lin%10)) {niv++;vel-=10;};
gotoxy(60,11);cprintf("%.6d",pun);
gotoxy(61,15);cprintf("%.4d",lin);
gotoxy(62,19);cprintf("%.2d",niv);
};
};
}
int main(void) {
directvideo=1;
do {
dibuja();
vel=250;y=ret=1;lin=sig=niv=pun=0;
ventana(27,2,48,23,LIGHTBLUE);
ventana(58,10,67,12,LIGHTGRAY);
gotoxy(60,11);cprintf("%.6d",pun);
gotoxy(60,10);cputs("PUNTOS");
ventana(58,14,67,16,LIGHTGRAY);
gotoxy(61,15);cprintf("%.4d",lin);
gotoxy(60,14);cputs("LINEAS");
ventana(58,18,67,20,LIGHTGRAY);
gotoxy(62,19);cprintf("%.2d",lin);
gotoxy(60,18);cputs("NIVEL");
gotoxy(2,2);cputs("Jos? Fco. Montelongo");
gotoxy(2,3);cputs("I.E.C. VII Junio 2001 ");
pieza.tx=34;
pieza.ty=y;
pieza.fig=aleat()%7;
pieza.gi=0;
pon(34,y,pieza.fig,0);
sig=aleat()%7;
ventana(58,3,67,8,LIGHTGRAY);
puttext(59,4,66,7,dib[sig]);
do {
if (kbhit()) {
switch(op=getch()) {
case AR:pon(pieza.tx,pieza.ty,pieza.fig,(pieza.gi==0)?3:pieza.gi-1);break;
case AB:if (!pon(pieza.tx,pieza.ty+1,pieza.fig,pieza.gi))ret=vel;break;
case IZ:pon(pieza.tx-2,pieza.ty,pieza.fig,pieza.gi);break;
case DE:pon(pieza.tx+2,pieza.ty,pieza.fig,pieza.gi);break;
case '0':pon(pieza.tx,pieza.ty,pieza.fig,(pieza.gi+1)%4);break;
};
};
if (!delay())
if (pon(pieza.tx,pieza.ty+1,pieza.fig,pieza.gi)) {
linea();
if (pon(34,y,sig,0)==2) break;
sig=aleat()%7;
puttext(59,4,66,7,dib[sig]);
ret=1;
};
}while(op!=ESC);
gotoxy(59,22);cputs("GAME OVER");
gotoxy(51,24);cputs("ESC->SALIR | ENTER->NUEVO");
op=0;
while ((op!=ESC)&&(op!=ENTER)) op=getch();
}while (op!=ESC);
return(0);
}
Pozdrawiam