如何用C语言编写一个俄罗斯方块的小游戏(配注释)
#include windows.h
创新互联建站-专业网站定制、快速模板网站建设、高性价比蕉城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式蕉城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖蕉城地区。费用合理售后完善,十年实体公司更值得信赖。
#include time.h
#include conio.h
#include stdio.h
const int back=34;
const int speed[]={0,12,9,6,3,1};
const int number[]={0,2,3,5,7,11,15};
const int col[]={11,15,12,12,13,13,14};
int rank=1;
int level=0; //0表示既不是向右也不是向左,1表示向左,2表示向右
int kind;
int pri_kind; // 7大类,颜色标记,调用col[col_kind];
int revolve=0; // 旋转状态标记
struct
{
int x;
int y;
}current,before;
struct
{
int x;
int y;
int color;
bool having;
}board[15][25];
struct
{
int vary_x[4];
int vary_y[4];
} vary[]={
{{0, 2, 4, 6},{0, 0, 0, 0}},{{0, 0, 0, 0},{0,-1,-2,-3}},
{{0, 2, 2, 0},{0, 0,-1,-1}},{{0,-2,-2,-4},{0 ,0,-1,-1}},
{{0, 0, 2, 2},{0,-1,-1,-2}},{{0, 2, 2, 4},{0, 0,-1,-1}},
{{0, 0,-2,-2},{0,-1,-1,-2}},{{0, 0, 2, 4},{0,-1, 0, 0}},
{{0, 0, 0, 2},{0,-1,-2,-2}},{{0, 0,-2,-4},{0,-1,-1,-1}},
{{0, 2, 2, 2},{0, 0,-1,-2}},{{0, 2, 4, 4},{0, 0, 0,-1}},
{{0,-2,-2,-2},{0, 0,-1,-2}},{{0, 0, 2, 4},{0,-1,-1,-1}},
{{0, 0, 0,-2},{0,-1,-2,-2}},{{0 ,2, 4, 2},{0, 0, 0,-1}},
{{0, 0, 2, 0},{0,-1,-1,-2}},{{0,-2, 0, 2},{0,-1,-1,-1}},
{{0, 0,-2, 0},{0,-1,-1,-2}},
};
struct
{
int sum;
int connection_x[5];
int connection_y[5];
}connection[]={
{2,{-2,2},{0,1}},
{1,{0},{0}},
{2,{2,-2},{0,0}},
{2,{-2,2},{0,0}},
{4,{-2,0,4,-2},{0,0,-1,1}},
{4,{-4,2,-2,4},{0,0,-1,1}},
{4,{-2,2,0,0},{0,0,0,0}},
};
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void color(int b)
{
HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
SetConsoleTextAttribute(hConsole, b) ;
}
void PrintGarphy()
{
color(1593);
int i,j;
gotoxy(2,2);
for(i=0;i26;i++)
printf("▓");
gotoxy(2,28);
for(i=0;i26;i++)
printf("▓");
for(i=0;i26;i++)
{
gotoxy(2,2+i);
puts("▓");
gotoxy(34,2+i);
if(i==8||i==16)
printf("▓▓▓▓▓▓▓▓▓");
else
puts("▓");
gotoxy(52,2+i);
puts("▓");
}
int t;
FILE *fp=fopen("C:\\els.txt","r");
fscanf (fp,"%d",t);
fclose(fp);
color(43);
gotoxy(37,12);
printf("最高纪录: %d",t);
color(46);
gotoxy(37,14);
puts("当前得分: 0");
color(44);
gotoxy(37,16);
puts("级数 ");
color(39);
gotoxy(37,20);
puts(" ↑ ↓ ← →");
gotoxy(37,22);
puts(" 按空格 暂停");
gotoxy(37,24);
puts(" 按 ESC 退出");
gotoxy(37,26);
puts(" 编写人 ");
color(back);
for(i=0;i15;i++)
{
for(j=0;j25;j++)
{
board[i][j].x=4+2*i;
board[i][j].y=3+j;
board[i][j].having=0;
gotoxy(board[i][j].x,board[i][j].y);
puts(" ");
}
}
}
void GameOver()
{
color(391);
for(int i=24;i=0;i--)
for(int j=0;j15;j++)
{
gotoxy(32-j*2,3+i);
puts("▆");
Sleep(5);
}
color(back);
for(int j=0;j25;j++)
for(int i=0;i15;i++)
{
board[i][j].having=0;
gotoxy(4+2*i,j+3);
puts("▆");
Sleep(5);
}
gotoxy(42,16);
while(rank--)
printf(" ");
color(46);
gotoxy(47,14);
puts(" ");
}
void GetDepth(int *pdepth)
{
(*pdepth)=24;
for(int j=0;j4;j++)
{
int sum=0;
int n=(current.x+vary[kind].vary_x[j]-4)/2;
int m=current.y+vary[kind].vary_y[j]-3;
if(m0) m=0;
for(++m;m25;m++)
if(board[n][m].having==0n=0n15m=0m25)
sum++;
else
break;
if(sum(*pdepth))
(*pdepth)=sum;
}
}
void CheckFull(int *pscore)
{
int i,j;
int sum=0;
int s[]={0,1,3,6,10};
for(i=0;i25;i++)
{
bool mark=1;
for(j=0;j15;j++)
{
if(board[j][i].having==0)
{
mark=0;
board[j][i].color=back;
}
}
if(mark)
{
sum++;
for(int t=i;t0;t--)
{
gotoxy(4,3+t);
for(j=0;j15;j++)
{
if(board[j][t-1].having)
{
color(board[j][t-1].color);
printf("▆");
board[j][t].color=board[j][t-1].color;
board[j][t].having=1;
board[j][t-1].having=0;
}
else
{
color(back);
printf(" ");
board[j][t].color=board[j][t].color;
board[j][t].having=0;
board[j][t-1].having=0;
}
}
}
}
}
(*pscore)+=s[sum];
color(46);
gotoxy(47,14);
printf("%d",*pscore);
if(*pscore=140) rank=5;
else if(*pscore=90) rank=4;
else if(*pscore=50) rank=3;
else if(*pscore=20) rank=2;
else if(*pscore=1) rank=1;
color(44);
gotoxy(42,16);
for(i=0;irank*pscore;i++)
printf("★");
int t;
FILE *fp=fopen("C:\\els.txt","r");
fscanf (fp,"%d",t);
fclose(fp);
if(*pscoret)
{
fp=fopen("C:\\els.txt","w");
fprintf (fp,"%d",*pscore);
fclose(fp);
color(43);
gotoxy(47,12);
printf("%d",*pscore);
}
fclose(fp);
}
void PrintNext(int pkind)
{
int i;
int x=43,y=6;
color(34);
for(i=0;i4;i++)
{
gotoxy(x-3,y+i-2);
puts(" ");
}
pri_kind=pkind;
if(pkind==6) pkind=15,x--;
else if(pkind==5) pkind=11,x--;
else if(pkind==4) pkind=7,x--;
else if(pkind==3) pkind=5,x-=2;
else if(pkind==2) pkind=3,x+=2;
else if(pkind==1) pkind=2,x--;
else pkind=0,x-=3;
color(col[pri_kind]);
for(i=0;i4;i++)
{
gotoxy(x+vary[pkind].vary_x[i],y+vary[pkind].vary_y[i]);
puts("▆");
}
}
void CheckBoundary()
{
int i,n,m;
for(i=0;i4;i++)
{
m=current.x+vary[kind].vary_x[i];
if(m4||m32)
{
current.x+=(m4?2:-2);
i=0;
}
}
for(i=0;i4;i++) // 对四个方块分别检查
{
m=current.x+vary[kind].vary_x[i];
n=current.y+vary[kind].vary_y[i];
m=(m-4)/2;
n-=3;
if(n0||n24||board[m][n].having)
{
if(level==1) // 左移
current.x+=2; //复原
else if(level==2) // 右移
current.x-=2; //复原
level=0;
break;
}
}
}
void LevelMove()
{
CheckBoundary();
if(level==0) return;
int i;
color(back);
for(i=0;i4;i++)
{
if(current.y+vary[kind].vary_y[i]2)
{
gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" ");
}
}
color(col[pri_kind]);
for(i=0;i4;i++)
{
if(current.y+vary[kind].vary_y[i]2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆");
}
}
before.x=current.x;
}
void Revolve(int **prev_count) //旋转函数
{
int i;
before.x=current.x;
before.y=current.y;
(**prev_count)++;
(**prev_count)%=connection[pri_kind].sum;
current.x=current.x+connection[pri_kind].connection_x[**prev_count];
current.y=current.y+connection[pri_kind].connection_y[**prev_count];
CheckBoundary();
for(i=0;i4;i++)
{
int m=(current.x-4+vary[number[pri_kind]+**prev_count].vary_x[i])/2;
int n=current.y+vary[number[pri_kind]+**prev_count].vary_y[i]-3;
if(board[m][n].having||m14||m0||n24)
{
current.x=current.x-connection[pri_kind].connection_x[**prev_count];
current.y=current.y-connection[pri_kind].connection_y[**prev_count];
revolve=0;
(**prev_count)--;
before.x=current.x;
before.y=current.y;
return ;
}
}
color(back);
for(i=0;i4;i++)
{
if(before.y+vary[kind].vary_y[i]2)
{
gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" ");
}
}
kind=number[pri_kind]+**prev_count;
color(col[pri_kind]);
for(i=0;i4;i++)
{
if(current.y+vary[kind].vary_y[i]2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆");
}
}
Sleep(speed[rank]);
before.x=current.x;
before.y=current.y;
}
void ChoiceDirection(int *prev_count)
{
int t=50/rank;
while(t--)
{
if(_kbhit())
{
char c=_getch();
switch(c)
{
case 0x48:// up
revolve=1;
Revolve(prev_count);
break;
case 0x50: //down
level=0;
return;
case 0x4b: //left
before.x=current.x;
current.x-=2;
level=1;
LevelMove();
break;
case 0x4d: //right
before.x=current.x;
current.x+=2;
level=2;
LevelMove();
break;
case ' ':
_getch();
break;
case 27:
color(back);
exit(1);
default:break;
}
}
Sleep(speed[rank]);
}
}
void StraightFall(int depth)
{
int i;
int rev_count=0;
before.x=current.x;
before.y=current.y;
while(GetDepth(depth),depth--)
{
ChoiceDirection(rev_count);
GetDepth(depth);
if(depth==0)
{
revolve=0;
before.x=current.x;
before.y=current.y;
break;
}
color(back);
for(i=0;i4;i++)
{
if(before.y+vary[kind].vary_y[i]2)
{
gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" ");
}
}
current.y++;
color(col[pri_kind]);
for(i=0;i4;i++)
{
if(current.y+vary[kind].vary_y[i]2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆");
}
}
revolve=0;
before.x=current.x;
before.y=current.y;
}
ChoiceDirection(rev_count);
if(level||revolve)
{
level=0;
revolve=0;
ChoiceDirection(rev_count);
StraightFall(depth); //递归调用
}
}
int main()
{
srand((unsigned long)time(0));
system("mode con cols=56 lines=30");
system("color 24");
int score=0;
FILE *fp=fopen("C:\\els.txt","r");
if(fp==NULL)
{
fp=fopen("C:\\els.txt","w");
fprintf (fp,"%d",score);
fclose(fp);
}
PrintGarphy();
kind=rand()%7;
int depth;
while(1)
{
int pkind=rand()%7;
PrintNext(pkind);
current.x=18;
current.y=2; // 方块初始出现的坐标
GetDepth(depth); // 初始深度
if(depth==0)
{
GameOver();
score=0;
rank=1;
}
pri_kind=kind;
if(kind==6) kind=15,current.x-=2;
else if(kind==5) kind=11;
else if(kind==4) kind=7;
else if(kind==3) kind=5;
else if(kind==2) kind=3,current.x+=2;
else if(kind==1) kind=2;
else kind=0,current.x-=2;
StraightFall(depth);
for(int i=0;i4;i++)
{
int m=(current.x-4+vary[kind].vary_x[i])/2;
int n=current.y-3+vary[kind].vary_y[i];
board[m][n].having=1;
board[m][n].color=col[pri_kind];
}
CheckFull(score);
kind=pkind;
}
return 0;
}
C语言的问题
#include"graphics.h"
#include"stdio.h"
#define LEN sizeof(struct dian)
#define NULL 0
int dian[8][8],result[10][2]; /*dian[][]中存格子的状态,无子,黑子或白子*/
int N,M,s=0,K=0;
int dx,dy,key;
char COMPUTER=0;
int computer=2;
struct dian /*记录所有已经下的子的位置*/
{
int x;
int y;
struct dian *next;
};
struct dian a,*p1,*p,*head;
void init(void) /*初始化*/
{
int gd=DETECT,gm;
initgraph(gd,gm,"c:\\tc");
cleardevice();
}
void jiemian1(void) /*第一个界面*/
{
setlinestyle(0,0,3);
setcolor(3);
rectangle(1,1,640,480);
setcolor(4);
rectangle(3,3,638,478);
setcolor(6);
rectangle(5,5,636,476);
settextstyle(0,0,6);
setcolor(7);
outtextxy(160,160,"HEI BAI");
settextstyle(0,0,1);
setcolor(9);
outtextxy(240,280,"press 1 to play with computer");
outtextxy(240,320,"press 2 to play with another");
do{ /*选择是和人玩还是和电脑下去*/
COMPUTER=bioskey(0);
}while(COMPUTER!='1'COMPUTER!='2');
cleardevice();
}
void qipan(void) /*画棋盘*/
{
int i;
setlinestyle(0,0,3);
setcolor(9);
for(i=0;i=160;i+=20)
{
line(240,i+160,400,i+160);
line(i+240,160,i+240,320);
}
}
void insert(int x,int y) /*将下子的位置插入链表*/
{
struct dian *p2;
p2=(struct dian*)malloc(LEN);
p2-x=x; p2-y=y;
p1-next=p2;
p2-next=NULL;
p1=p2;
}
void paint(int x,int y,int t) /*画棋子*/
{
setcolor(t);
setlinestyle(0,0,1);
circle(20*x+250,20*y+170,8);
setfillstyle(SOLID_FILL,t);
floodfill(20*x+250,20*y+170,t);
}
void jiemian2(void) /*下棋的界面*/
{
int i,j;
for(i=0;i8;i++)
for(j=0;j8;j++)
dian[i][j]=1;
setcolor(8);
rectangle(236,156,404,324);
setfillstyle(SOLID_FILL,6);
bar(238,158,402,322);
setcolor(3);
rectangle(8,8,160,378);
bar(10,10,158,376);
settextstyle(0,0,1);
outtextxy(20,20,"LEFT : change");
outtextxy(20,50,"RIGHT : change");
outtextxy(20,80,"ENTER: play");
outtextxy(20,110,"ESC : leave");
setcolor(9);
outtextxy(20,200,"anything wrong:");
outtextxy(10,230,"zhenlin220@126.com");
qipan();
a.x=3;a.y=3;a.next=NULL;dian[3][3]=0; /*刚开局时候棋盘上的四个棋子*/
p=head=a;p1=a;
paint(3,3,0);
insert(3,4);paint(3,4,7); dian[3][4]=7;
insert(4,3);paint(4,3,7); dian[4][3]=7;
insert(4,4);paint(4,4,0); dian[4][4]=0;
}
void shine(int x,int y,int t) /*棋子闪烁*/
{
static int i=0,j=0;
if(i==xj==y) return 0;
do{
paint(x,y,t);
delay(50000);
paint(x,y,6);
delay(50000);
}while(!kbhit());
key=bioskey(0);
i=x;j=y;
}
void scan(int x,int y,int t) /*查找可以下子的位置或是要变颜色的棋子*/
{
int b,c,d,e,i,j,m,n,r;
K=0;
if(dian[x][y]==1) r=1;
else r=t;
b=x-1; c=x+1; d=y-1; e=y+1;
if(b0) b=0; /*查一个子如黑子四周格子的情况,有可能出边界,把边界限制一下*/
if(c7) c=7;
if(d0) d=0;
if(e7) e=7;
for(i=b;i=c;i++)
for(j=d;j=e;j++)
{
if(dian[i][j]==t||dian[i][j]==1) continue;
dx=i-x;dy=j-y;m=i;n=j;
while(dian[m][n]==s){m+=dx;n+=dy;}
if(dian[m][n]==r) continue;
if(m0||m7||n0||n7) continue;
result[K][0]=m;result[K][1]=n;
K++;
}
}
void vary(int x,int y,int t) /*下子,插入链表,查找并改变需要改变颜色的棋子*/
{
int i,m,n;
if(t==0) N+=1;
else M+=1;
paint(x,y,t);
insert(x,y);
scan(x,y,t);
dian[x][y]=t;
for(i=0;iK;i++)
{
dx=result[i][0]-x;
dy=result[i][1]-y;
if(dx==0) dx=0;
else dx=dx/abs(dx);
if(dy==0) dy=0;
else dy=dy/abs(dy);
m=x; n=y; m+=dx; n+=dy;
do{
if(t==0) { N++; M--;}
else { M++; N--;}
paint(m,n,t);
dian[m][n]=t;
m+=dx; n+=dy;
}while(dian[m][n]!=t);
}
}
void presskey(int t) /*按键*/
{
int i;
for(i=0;iK;i++)
{
if(computer) /*如果和电脑下并且这一步不是电脑下*/
do{
shine(result[i][0],result[i][1],t); /*闪烁棋子*/
}while(key!=0x4b00key!=0x4d00key!=0x1c0dkey!=0x011b);/*如果没有按键继续闪烁*/
if(computer==0)
{
srand(time(NULL)); /*电脑下棋随机选择下哪个位置*/
i=rand()%K;
}
if(computer==0||key==0x1c0d)
{
vary(result[i][0],result[i][1],t);break;
}
if(key==0x011b) exit(0); /*如果按ESC离开游戏*/
}
}
void run(int t)
{
int i;
if(t==0) s=7;
if(t==7) s=0;
a: p=head;
do{
if(dian[p-x][p-y]==s) continue;
scan(p-x,p-y,t); /*查找可以下子的地方并存在result数组中*/
if(K==0) continue;
presskey(t);
if(computer==0||key==0x1c0d) break;
}while((p=p-next)!=NULL);
if(key==0x4b00||key==0x4d00) goto a;
}
void score(void) /*显示分数*/
{
char str1[4],str2[4];
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
setcolor(3);
rectangle(4,4,636,476);
setcolor(4);
rectangle(6,6,634,474);
setfillstyle(SOLID_FILL,YELLOW);
rectangle(8,380,632,472);
setcolor(9);
rectangle(10,382,630,470);
bar(12,384,628,468);
settextstyle(0,0,2);
setcolor(6);
outtextxy(280,400,"score");
sprintf(str1,"%d",N);
sprintf(str2,"%d",M);
outtextxy(120,430,"PLAYER1");
outtextxy(260,430,str1);
outtextxy(300,430,":");
outtextxy(330,430,str2);
if(COMPUTER=='1') outtextxy(390,430,"COMPUTER");
else outtextxy(390,430,"PLAYER2");
}
void winer(void) /*胜利显示*/
{
settextstyle(0,0,4);
setcolor(9);
if(NM) outtextxy(200,50,"player1 win!");
else if(NM) outtextxy(200,50,"player2 win!");
else outtextxy(200,50,"no winer!");
}
main()
{int i;
init(); /*初始化*/
jiemian1(); /*第一个界面*/
b:
cleardevice();
N=2; M=2; /*初始分数*/
jiemian2();
do{
if(COMPUTER=='1')
{
if(s==0) computer=1;
else computer=0;
}
score();
run(s);
}while(N+M!=64||N==0||M==0);
score();
winer();
settextstyle(0,0,1);
outtextxy(260,120,"press any key to restart");
getch();
goto b;
}
求个能在VC下运行的俄罗斯方块的C语言代码,不用GRAPHIC的头文件的
#include windows.h
#include time.h
#include conio.h
#include stdio.h
const int back=34;
const int speed[]={0,12,9,6,3,1};
const int number[]={0,2,3,5,7,11,15};
const int col[]={11,15,12,12,13,13,14};
int rank=1;
int level=0; //0表示既不是向右也不是向左,1表示向左,2表示向右
int kind;
int pri_kind; // 7大类,颜色标记,调用col[col_kind];
int revolve=0; // 旋转状态标记
struct
{
int x;
int y;
}current,before;
struct
{
int x;
int y;
int color;
bool having;
}board[15][25];
struct
{
int vary_x[4];
int vary_y[4];
}vary[]={{{0, 2, 4, 6},{0, 0, 0, 0}},{{0, 0, 0, 0},{0,-1,-2,-3}},{{0, 2, 2, 0},{0, 0,-1,-1}},{{0,-2,-2,-4},{0 ,0,-1,-1}},{{0, 0, 2, 2},{0,-1,-1,-2}},{{0, 2, 2, 4},{0, 0,-1,-1}},{{0, 0,-2,-2},{0,-1,-1,-2}},{{0, 0, 2, 4},{0,-1, 0, 0}},{{0, 0, 0, 2},{0,-1,-2,-2}},{{0, 0,-2,-4},{0,-1,-1,-1}},{{0, 2, 2, 2},{0, 0,-1,-2}},{{0, 2, 4, 4},{0, 0, 0,-1}},{{0,-2,-2,-2},{0, 0,-1,-2}},{{0, 0, 2, 4},{0,-1,-1,-1}},{{0, 0, 0,-2},{0,-1,-2,-2}},{{0 ,2, 4, 2},{0, 0, 0,-1}},{{0, 0, 2, 0},{0,-1,-1,-2}},{{0,-2, 0, 2},{0,-1,-1,-1}},{{0, 0,-2, 0},{0,-1,-1,-2}},};
struct
{
int sum;
int connection_x[5];
int connection_y[5];
}connection[]={{2,{-2,2},{0,1}},{1,{0},{0}},{2,{2,-2},{0,0}},{2,{-2,2},{0,0}},{4,{-2,0,4,-2},{0,0,-1,1}},{4,{-4,2,-2,4},{0,0,-1,1}},{4,{-2,2,0,0},{0,0,0,0}},};
void gotoxy(int x, int y)
{
COORD pos;//WINDOWS API中定义的一个结构表示一个字符在控制台屏幕上的坐标,坐上角(0,0)
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void color(int b)
{
HANDLE hConsole=GetStdHandle((STD_OUTPUT_HANDLE)) ;
SetConsoleTextAttribute(hConsole,b);
}
void PrintGarphy()
{
color(1593);
int i,j;
gotoxy(2,2);
for(i=0;i26;i++)
printf("▓");
gotoxy(2,28);
for(i=0;i26;i++)
printf("▓");
for(i=0;i26;i++)
{
gotoxy(2,2+i);
puts("▓");
gotoxy(34,2+i);
if(i==8||i==16)
printf("▓▓▓▓▓▓▓▓▓");
else
puts("▓");
gotoxy(52,2+i);
puts("▓");
}
int t;
FILE *fp=fopen("C:\\els.txt","r");
fscanf (fp,"%d",t);
fclose(fp);
color(43);
gotoxy(37,12);
printf("最高纪录: %d",t);
color(46);
gotoxy(37,14);
puts("当前得分: 0");
color(44);
gotoxy(37,16);
puts("级数 ");
color(39);
gotoxy(37,20);
puts(" ↑ ↓ ← →");
gotoxy(37,22);
puts(" 按空格 暂停");
gotoxy(37,24);
puts(" 按 ESC 退出");
gotoxy(37,26);
puts(" 编写人 ");
color(back);
for(i=0;i15;i++)
{
for(j=0;j25;j++)
{
board[i][j].x=4+2*i;
board[i][j].y=3+j;
board[i][j].having=0;
gotoxy(board[i][j].x,board[i][j].y);
puts(" ");
}
}
}
void GameOver()
{
color(391);
for(int i=24;i=0;i--)
for(int j=0;j15;j++)
{
gotoxy(32-j*2,3+i);
puts("▆");
Sleep(5);
}
color(back);
for(int j=0;j25;j++)
for(int i=0;i15;i++)
{
board[i][j].having=0;
gotoxy(4+2*i,j+3);
puts("▆");
Sleep(5);
}
gotoxy(42,16);
while(rank--);
printf(" ");
color(46);
gotoxy(47,14);
puts(" ");
}
void GetDepth(int *pdepth)
{
*pdepth=24;
for(int j=0;j4;j++)
{
int sum=0;
int n=(current.x+vary[kind].vary_x[j]-4)/2;
int m=current.y+vary[kind].vary_y[j]-3;
if(m0)
m=0;
for(++m;m25;m++)
if(board[n][m].having==0n=0n15m=0m25)
sum++;
else
break;
if(sum*pdepth)
*pdepth=sum;
}
}
void CheckFull(int *pscore)
{
int i,j;
int sum=0;
int s[]={0,1,3,6,10};
for(i=0;i25;i++)
{
bool mark=1;
for(j=0;j15;j++)
{
if(board[j][i].having==0)
{
mark=0;
board[j][i].color=back;
}
}
if(mark)
{
sum++;
for(int t=i;t0;t--)
{
gotoxy(4,3+t);
for(j=0;j15;j++)
{if(board[j][t-1].having)
{
color(board[j][t-1].color);
printf("▆");
board[j][t].color=board[j][t-1].color;
board[j][t].having=1;
board[j][t-1].having=0;
}
else
{
color(back);
printf(" ");
board[j][t].color=board[j][t].color;
board[j][t].having=0;
board[j][t-1].having=0;
}
}
}
}
}
(*pscore)+=s[sum];
color(46);
gotoxy(47,14);
printf("%d",*pscore);
if(*pscore=140) rank=5;
else if(*pscore=90) rank=4;
else if(*pscore=50) rank=3;
else if(*pscore=20) rank=2;
else if(*pscore=1) rank=1;
color(44); gotoxy(42,16);
for(i=0;irank*pscore;i++)
printf("★");
int t;
FILE *fp=fopen("C:\\els.txt","r");
fscanf (fp,"%d",t);
fclose(fp);
if(*pscoret)
{
fp=fopen("C:\\els.txt","w");
fprintf (fp,"%d",*pscore);
fclose(fp);
color(43);
gotoxy(47,12);
printf("%d",*pscore);
}
fclose(fp);
}
void PrintNext(int pkind)
{
int i;
int x=43,y=6;
color(34);
for(i=0;i4;i++)
{
gotoxy(x-3,y+i-2);
puts(" ");
}
pri_kind=pkind;
if(pkind==6)
pkind=15,x--;
else if(pkind==5)
pkind=11,x--;
else if(pkind==4) pkind=7,x--; else if(pkind==3) pkind=5,x-=2;
else if(pkind==2) pkind=3,x+=2;
else if(pkind==1)
pkind=2,x--;
else
pkind=0;x-=3;
color(col[pri_kind]);
for(i=0;i4;i++)
{ gotoxy(x+vary[pkind].vary_x[i],y+vary[pkind].vary_y[i]);
puts("▆"); }}
void CheckBoundary()
{
int i,n,m;
for(i=0;i4;i++)
{
m=current.x+vary[kind].vary_x[i];
if(m4||m32)
{ current.x+=(m4?2:-2);
i=0;
}
}
for(i=0;i4;i++) // 对四个方块分别检查
{
m=current.x+vary[kind].vary_x[i];
n=current.y+vary[kind].vary_y[i];
m=(m-4)/2;
n-=3;
if(n0||n24||board[m][n].having)
{
if(level==1) // 左移
current.x+=2; //复原
else if(level==2) // 右移
current.x-=2; //复原
level=0;
break;
}
}
}
void LevelMove()
{
CheckBoundary();
if(level==0)
return;
int i;
color(back);
for(i=0;i4;i++)
{ if(current.y+vary[kind].vary_y[i]2)
{ gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" "); } }
color(col[pri_kind]);
for(i=0;i4;i++)
{
if(current.y+vary[kind].vary_y[i]2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆"); } }
before.x=current.x;}void Revolve(int **prev_count) //旋转函数
{ int i;
before.x=current.x;
before.y=current.y;
(**prev_count)++;
(**prev_count)%=connection[pri_kind].sum;
current.x=current.x+connection[pri_kind].connection_x[**prev_count];
current.y=current.y+connection[pri_kind].connection_y[**prev_count];
CheckBoundary();
for(i=0;i4;i++)
{
int m=(current.x-4+vary[number[pri_kind]+**prev_count].vary_x[i])/2;
int n=current.y+vary[number[pri_kind]+**prev_count].vary_y[i]-3;
if(board[m][n].having||m14||m0||n24)
{ current.x=current.x-connection[pri_kind].connection_x[**prev_count];
current.y=current.y-connection[pri_kind].connection_y[**prev_count];
revolve=0;
(**prev_count)--;
before.x=current.x;
before.y=current.y;
return ;
}
}
color(back);
for(i=0;i4;i++)
{
if(before.y+vary[kind].vary_y[i]2)
{
gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" ");
}
}
kind=number[pri_kind]+**prev_count;
color(col[pri_kind]);
for(i=0;i4;i++)
{
if(current.y+vary[kind].vary_y[i]2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆");
} } Sleep(speed[rank]); before.x=current.x; before.y=current.y;}
void ChoiceDirection(int *prev_count){
int t=50/rank;
while(t--)
{
if(_kbhit())
{ char c=_getch();
switch(c)
{ case 0x48:// up
revolve=1; Revolve(prev_count);
break; case 0x50: //down
level=0;
return;
case 0x4b: //left
before.x=current.x;
current.x-=2; level=1;
LevelMove();
break; case 0x4d: //right
before.x=current.x;
current.x+=2;
level=2;
LevelMove();
break;
case ' ':
_getch();
break;
case 27:
color(back);
exit(1);
default:break;
} }
Sleep(speed[rank]); }}
void StraightFall(int depth)
{ int i;
int rev_count=0;
before.x=current.x;
before.y=current.y;
while(GetDepth(depth),depth--)
{
ChoiceDirection(rev_count);
GetDepth(depth);
if(depth==0)
{ revolve=0;
before.x=current.x;
before.y=current.y;
break; }
color(back);
for(i=0;i4;i++)
{
if(before.y+vary[kind].vary_y[i]2)
{ gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" ");
} }
current.y++;
color(col[pri_kind]);
for(i=0;i4;i++) {
if(current.y+vary[kind].vary_y[i]2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆"); } } revolve=0; before.x=current.x; before.y=current.y; }
ChoiceDirection(rev_count); if(level||revolve) { level=0;
revolve=0;
ChoiceDirection(rev_count); StraightFall(depth); //递归调用
}}int main(){ srand((unsigned long)time(0)); system("mode con cols=56 lines=30");
system("color 24"); int score=0; FILE *fp=fopen("C:\\els.txt","r");
if(fp==NULL)
{ fp=fopen("C:\\els.txt","w"); fprintf (fp,"%d",score);
fclose(fp); } PrintGarphy(); kind=rand()%7; int depth; while(1)
{
int pkind=rand()%7;
PrintNext(pkind);
current.x=18;
current.y=2; // 方块初始出现的坐标
GetDepth(depth); // 初始深度
if(depth==0)
{
GameOver();
score=0; rank=1; }
pri_kind=kind;
if(kind==6) kind=15,current.x-=2;
else if(kind==5) kind=11;
else if(kind==4) kind=7;
else if(kind==3) kind=5;
else if(kind==2) kind=3,current.x+=2;
else if(kind==1) kind=2;
else kind=0,current.x-=2;
StraightFall(depth);
for(int i=0;i4;i++)
{
int m=(current.x-4+vary[kind].vary_x[i])/2;
int n=current.y-3+vary[kind].vary_y[i];
board[m][n].having=1;
board[m][n].color=col[pri_kind];
}
CheckFull(score);
kind=pkind;
}
return 0;
}
c语言如何给一个二维数组求每一行的方差?
#include stdio.h
void main()
{
double a[2][1000],vx=0,vy=0,varx,vary,ax=0,ay=0;
int i,n;
scanf("%d",n); //n是整型,所以用%d
for(i=0;i=n-1;i++)
{
scanf("%lf",a[0][i]); //数组起始为0,不是1
scanf("%lf",a[1][i]);
ax+=a[0][i]; //求和
ay+=a[1][i];
}
ax=ax/n; //求均值
ay=ay/n;
for(i=0;i=n-1;i++)
{
vx=vx+(a[0][i]-ax)*(a[0][i]-ax);
vy=vy+(a[1][i]-ay)*(a[1][i]-ay);
}
varx=vx/n;
vary=vy/n;
printf("varx=%lf\nvary=%lf\n",varx,vary);
}
网站栏目:c语言vary函数 函数变量c语言
文章转载:http://lswzjz.com/article/hpophg.html