C语言实现的俄罗斯方块
来源:互联网 发布:电脑抽奖软件破解 编辑:程序博客网 时间:2024/05/01 03:59
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#include<dos.h>
#include<stdlib.h>
#include<math.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int Box_x[5],Box_y[5],Box_xy[15][10]={0},num,life=1,score,mx,my,key,x[5],y[5],size,grade=0;
int *buf;
void Init();
void my_ad_1();
void my_ad_2();
void my_ad_3();
void play();
void jiang();
void De_B_xy();
void Draw_Box();
void Ad_Box_y();
void Mi_Box_x();
void Ad_Box_x();
void ch_B_xy();
void rebuild();
void Draw_New();
void close();
void delay_n(int n);
void main()
{
Init();
my_ad_1();
my_ad_2();
my_ad_3();
play();
close();
}
void Init()
{
int driver=DETECT,mode;
initgraph(&driver,&mode,"");
mx=getmaxx();
my=getmaxy();
setbkcolor(BLUE);
size=imagesize(0,0,32,32);
if(size!=-1)
buf=malloc(size);
getimage(0,0,32,32,buf);
}
void my_ad_1()
{int ch1[]={100,120,100,300,120,300,120,200,200,200,200,280,180,280,180,300,220,300,220,180,120,180,120,140,300,140,300,100,280,120,100,120},
ch2[]={240,100,280,300,300,300,260,100,240,100},
ch3[]={280,160,264,280,284,280,300,160,280,160},
j1[]={300,120,340,160,360,160,320,100,300,120},
j2[]={300,180,340,220,360,220,320,160,300,180},
j3[]={300,300,340,300,380,220,360,220,300,300},
j4[]={380,120,380,140,420,140,420,280,360,280,360,300,500,300,500,280,440,280,440,140,480,140,480,120,380,120};
settextjustify(CENTER_TEXT,CENTER_TEXT);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,5);
setcolor(WHITE);
sleep(2);
outtextxy(320,200,"C Program Flash Creation");
settextstyle(3,HORIZ_DIR,3);
sleep(1);
outtextxy(320,300,"Cheng Jiang,Electronic Class 1,Physic Department, GDUT");
sleep(1);
cleardevice();
fillpoly(16,ch1);
fillpoly(5,ch2);
fillpoly(5,ch3);
fillpoly(5,j1);
fillpoly(5,j2);
fillpoly(5,j3);
fillpoly(12,j4);
sleep(2);
cleardevice();
}
void my_ad_2()
{
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(0,0,150,my);
bar(450,0,mx,my);
setviewport(150,0,450,my,1);
}
void my_ad_3()
{
int i,j;
outtextxy(150,30,"Waitting...");
setlinestyle(1,1,1);
rectangle(0,60,450,90);
setlinestyle(SOLID_LINE,1,THICK_WIDTH);
jiang();
for(i=0;i<10;i++)
{
bar(30*i,60,30*(i+1),90);
rectangle(30*i,60,30*(i+1),90);
sleep(1);
}
clearviewport();
outtextxy(150,240,"OK! Press [Enter]");
getch();
clearviewport();
}
void play()
{
int i,j;
outtextxy(150,460,"grade:0 score: 0 ");
while(1)
{
randomize();
num=random(19);
De_B_xy();
while(1)
{
while(kbhit())
{
key=bioskey(0);
Draw_Box();
switch(key)
{
case UP:getch();break;
case DOWN:Ad_Box_y();break;
case RIGHT:Ad_Box_x();break;
case LEFT:Mi_Box_x();break;
case ESC:close();break;
default:ch_B_xy();break;
}
if(check()) break;
}
Draw_Box();
if(check()) break;
for(i=1;i<5;i++)
Box_y[i]+=1;
if(!kbhit())
delay_n(10-grade);
}
rebuild();
Draw_New();
if(!life) break;
}
}
void Draw_Box()
{
int i;
for(i=1;i<5;i++)
putimage(x[i]*30-1,30*y[i]-1,buf,COPY_PUT);
if(!(y[1]&&y[2]&&y[3]&&y[0]))
for(i=4;i<8;i++)
putimage(30*i-1,0,buf,COPY_PUT);
for(i=1;i<5;i++)
{
x[i]=Box_x[i];
y[i]=Box_y[i];
bar(Box_x[i]*30, Box_y[i]*30, (Box_x[i]+1)*30, (Box_y[i]+1)*30);
rectangle(Box_x[i]*30, Box_y[i]*30, (Box_x[i]+1)*30, (Box_y[i]+1)*30);
}
}
void De_B_xy()
{
int i;
switch(num)
{
case 0: {Box_x[1]=Box_x[2]=Box_x[3]=Box_x[4]=0; Box_y[1]=0;Box_y[2]=1;Box_y[3]=2;Box_y[4]=3;} break;
case 1: {Box_y[1]=Box_y[2]=Box_y[3]=Box_y[4]=0; Box_x[1]=0;Box_x[2]=1;Box_x[3]=2;Box_x[4]=3;} break;
case 2: {Box_x[1]=0;Box_x[2]=1; Box_x[3]=0;Box_x[4]=1; Box_y[1]=0;Box_y[2]=0; Box_y[3]=1;Box_y[4]=1;} break;
case 3: {Box_x[1]=0;Box_x[2]=0; Box_x[3]=0;Box_x[4]=1; Box_y[1]=0;Box_y[2]=1; Box_y[3]=2;Box_y[4]=1;} break;
case 4: {Box_x[1]=0;Box_x[2]=1; Box_x[3]=1;Box_x[4]=2; Box_y[1]=2;Box_y[2]=1; Box_y[3]=2;Box_y[4]=2;} break;
case 5: {Box_x[1]=0;Box_x[2]=1; Box_x[3]=1;Box_x[4]=1; Box_y[1]=1;Box_y[2]=0; Box_y[3]=1;Box_y[4]=2;} break;
case 6: {Box_x[1]=0;Box_x[2]=1; Box_x[3]=1;Box_x[4]=2; Box_y[1]=1;Box_y[2]=1; Box_y[3]=2;Box_y[4]=1;} break;
case 7: {Box_x[1]=0;Box_x[2]=0; Box_x[3]=1;Box_x[4]=1; Box_y[1]=0;Box_y[2]=1; Box_y[3]=1;Box_y[4]=2;} break;
case 8: {Box_x[1]=0;Box_x[2]=1; Box_x[3]=1;Box_x[4]=2; Box_y[1]=1;Box_y[2]=0; Box_y[3]=1;Box_y[4]=0;} break;
case 9: {Box_x[1]=0;Box_x[2]=0; Box_x[3]=1;Box_x[4]=1; Box_y[1]=1;Box_y[2]=2; Box_y[3]=0;Box_y[4]=1;} break;
case 10:{Box_x[1]=0;Box_x[2]=1; Box_x[3]=1;Box_x[4]=2; Box_y[1]=1;Box_y[2]=1; Box_y[3]=2;Box_y[4]=2;} break;
case 11:{Box_x[1]=0;Box_x[2]=0; Box_x[3]=0;Box_x[4]=1; Box_y[1]=0;Box_y[2]=1; Box_y[3]=2;Box_y[4]=2;} break;
case 12:{Box_x[1]=0;Box_x[2]=1; Box_x[3]=2;Box_x[4]=2; Box_y[1]=1;Box_y[2]=1; Box_y[3]=0;Box_y[4]=1;} break;
case 13:{Box_x[1]=0;Box_x[2]=1; Box_x[3]=1;Box_x[4]=1; Box_y[1]=0;Box_y[2]=0; Box_y[3]=1;Box_y[4]=2;} break;
case 14:{Box_x[1]=0;Box_x[2]=0; Box_x[3]=1;Box_x[4]=2; Box_y[1]=0;Box_y[2]=1; Box_y[3]=0;Box_y[4]=0;} break;
case 15:{Box_x[1]=0;Box_x[2]=1; Box_x[3]=1;Box_x[4]=1; Box_y[1]=2;Box_y[2]=0; Box_y[3]=1;Box_y[4]=2;} break;
case 16:{Box_x[1]=0;Box_x[2]=1; Box_x[3]=2;Box_x[4]=2; Box_y[1]=0;Box_y[2]=0; Box_y[3]=0;Box_y[4]=1;} break;
case 17:{Box_x[1]=0;Box_x[2]=0; Box_x[3]=0;Box_x[4]=1; Box_y[1]=0;Box_y[2]=1; Box_y[3]=2;Box_y[4]=0;} break;
case 18:{Box_x[1]=0;Box_x[2]=0; Box_x[3]=1;Box_x[4]=2; Box_y[1]=0;Box_y[2]=1; Box_y[3]=1;Box_y[4]=1;} break;
}
for(i=1;i<5;i++)
Box_x[i]+=4;
}
int check()
{
int i,p=0;
for(i=1;i<5;i++)
if(Box_xy[Box_y[i]+1][Box_x[i]]||Box_y[i]>13)
p=1;
return(p);
}
void Ad_Box_y()
{
int i,p=1;
for(i=1;i<5;i++)
if(Box_xy[Box_y[i]+1][Box_x[i]]||Box_y[i]>13)
p=0;
if(p)
for(i=1;i<5;i++)
Box_y[i]+=1;
}
void Ad_Box_x()
{
int i,p=1;
for(i=1;i<5;i++)
if(Box_xy[Box_y[i]][ Box_x[i]+1]||Box_x[i]>8)
p=0;
if(p)
for(i=1;i<5;i++)
Box_x[i]+=1;
}
void Mi_Box_x()
{
int i,p=1;
for(i=1;i<5;i++)
if(Box_xy[Box_y[i]][ Box_x[i]-1]||Box_x[i]<1)
p=0;
if(p)
for(i=1;i<5;i++)
Box_x[i]-=1;
}
void ch_B_xy()
{
int i,j,t,maxx=Box_x[1],maxy=Box_y[1];
for(i=2;i<5;i++)
{
if(maxx<Box_x[i])
maxx=Box_x[i];
if(maxy<Box_y[i])
maxy=Box_y[i];
}
switch(num)
{
case 0:num=num+1;break;
case 1:num=num-1;
case 2: ;break;
case 3:num=num+1;break;
case 4:num=num+1;break;
case 5:num=num+1;break;
case 6:num=num-3;break;
case 7:num=num+1;break;
case 8:num=num-1;break;
case 9:num=num+1;break;
case 10:num=num-1;break;
case 11:num=num+1;break;
case 12:num=num+1;break;
case 13:num=num+1;break;
case 14:num=num-3;break;
case 15:num=num+1;break;
case 16:num=num+1;break;
case 17:num=num+1;break;
case 18:num=num-3;break;
}
De_B_xy();
for(i=1;i<5;i++)
{
Box_x[i]=Box_x[i]+maxx-Box_x[4];
Box_y[i]=Box_y[i]+maxy-2;
}
}
void rebuild()
{
int i,j,p,t[4]={0},k=0;
for(i=1;i<5;i++)
Box_xy[Box_y[i]][Box_x[i]]=1;
for(i=0;i<15;i++)
{
p=1;
for(j=0;j<10;j++)
if(!Box_xy[i][j])
p=0;
if(p)
{
t[k]=i;
k++;
score+=10*k;
}
}
for(k=0;k<4;k++)
{
if(t[k])
{
for(i=t[k];i>0;i--)
for(j=0;j<10;j++)
Box_xy[i][j]=Box_xy[i-1][j];
}
}
for(i=0;i<10;i++)
if(Box_xy[0][i])
life=0;
setfillstyle(1,4);
for(i=0;i<4;i++)
if(t[i])
bar(0,30*t[i],300,30*(t[i]+1));
setfillstyle(1,9);
for(i=1;i<5;i++)
{
x[i]=0;
y[i]=0;
}
grade=(score-score%100)/100 ;
delay(30000);
}
void Draw_New()
{
int i,j;
char text[20];
clearviewport();
for(i=0;i<15;i++)
for(j=0;j<10;j++)
if(Box_xy[i][j])
{
bar(30*j,30*i,30*j+30,30*i+30);
rectangle(30*j,30*i,30*j+30,30*i+30);
}
sprintf(text,"grade: %d score: %d",grade,score);
gotoxy(100,460);
outtextxy(150,460,text);
}
void close()
{
int i,j;
for(i=14;i>=0;i--)
{
for(j=0;j<10;j++)
{
bar(30*j,30*i,30*(j+1),30*(i+1));
rectangle(30*j,30*i,30*(j+1),30*(i+1));
}
delay(20000);
}
clearviewport();
jiang();
outtextxy(150,60,"game over");
getch();
closegraph();
}
void delay_n( int n)
{
int i;
for(i=0;i<n;i++) delay(50000);
}
void jiang()
{
int jx=0,jy=4;
for(jx=0;jx<3;jx++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
bar(30*jx,30*(jy+3),30*(jx+1),30*(jy+4));
rectangle(30*jx,30*(jy+3),30*(jx+1),30*(jy+4));
jy++;
}
jy=14;
for(jx=0;jx<4;jx++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
jy--;
}
jy=4;
for(jx=4;jx<9;jx++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
}
jy=14;
for(jx=3;jx<11;jx++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
}
jx=6;
for(jy=5;jy<15;jy++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
}
}
- C语言实现的俄罗斯方块
- 【C语言】实现俄罗斯方块
- 关于C语言俄罗斯方块的基本实现!
- 俄罗斯方块的c语言基本实现
- 俄罗斯方块(C语言实现)
- C实现的俄罗斯方块
- 基于VC 6.0 用C语言实现的俄罗斯方块
- C语言写的俄罗斯方块
- C语言编写的俄罗斯方块
- c语言控制台的俄罗斯方块
- C语言写的俄罗斯方块
- 【C语言】俄罗斯方块的源代码
- C语言编写的俄罗斯方块
- c语言实现扫雷和俄罗斯方块
- VC++ 6.0 C语言实现俄罗斯方块教程
- VC++ 6.0 C语言实现俄罗斯方块教程
- C语言之俄罗斯方块游戏实现
- C语言写的俄罗斯方块游戏
- contentType 'text/xml; charset=UTF-8' conflicts问题
- “比尔·盖茨的笔记”Bill Gates的个人官方站点正式上线!
- 关于shell脚本里面的的#!/bin/bash解释
- IBM MB MQ简介
- RGB与YUV图像视频格式的相互转换(转)
- C语言实现的俄罗斯方块
- SQLServer中Datetime类型数据的比较
- 新手入门:c++经典
- 给喜欢买彩票的筒子们看的代码
- SQL SERVER convert函数日期格式化应用
- msn機器人項目托管網址
- oracle 中 EXECUTE IMMEDIATE 用法 简单介绍
- D3DXMatrixLookAtLH
- 标准模板库 (STL) priority_queue