• 大小: 15KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2023-07-20
  • 语言: C/C++
  • 标签:

资源简介

C语言编的俄罗斯方块,也可以在编程之余进行悠闲娱乐。有详细的注释

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include //包含memset的头文件
struct XY{
int x;
int y;//位置坐标 
struct XY *next; 
}*head*q;

int box[24][16]={0};//全部格子状态 
int score=0;//得分 
int sleeptime=30;//运行间隔 
int rank=15;//速度等级
int shape;//形状,共七种 
int nextshape;//下一个形状 
int end=0;//直接退出游戏
int turn;//旋转状态 
int deletetimes=0;//消除行 

void gotoxy(int xint y);//定位
void map();//绘制地图 
void startgame();//开始 
void newshape();//新图形 
void gameover();//游戏结束 
void fall();//下落 
void shapestop();//方块停止运动,释放内存,
void del();//消除
void nextone();//下一个 
void Pause();//暂停
void change(int style);//变换 
void spin();//旋转
void left();//左
void right();//右
void down();//直下 
bool newgames();//新一局游戏 

int main()
{
system(“mode con: cols=80 lines=30“);//初始化窗口大小 
do{
memset(box 0 sizeof(box));//将box元素全置为0
end=0;
score=0;
sleeptime=30;
deletetimes=0;
rank=15;      //全局变量全部初始化 没初始化的时候ESC之后重新开始无效 
time_t t;
srand((unsigned int)time(&t));//随机数种子生成 
head=q=NULL;//初始化指针 
map();
gotoxy(3816);
system(“pause“);//提示按键之后才开始游戏 
gotoxy(3816);
printf(“                      “);
startgame();
} while (newgames());//用户选择是否循环新游戏 


return 0;
}
void gotoxy(int x int y) //定位 
{
COORD pos;
pos.X = x ;
pos.Y = y ;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE)pos);
}
void map()//创建地图  
{
int i;
for(i=0;i<36;i+=2)//打印上下边框 
{
gotoxy(i0);
printf(“〓“);
gotoxy(i25);
printf(“〓“);
}
for(i=1;i<25;i++)//打印左右边框 
{
gotoxy(0i);
printf(“▓“);
gotoxy(34i);
printf(“▓“);
}
gotoxy(441);
printf(“俄罗斯方块“);
gotoxy(403);
printf(“下一个:“);
gotoxy(3810);
printf(“请用 ↑键旋转方向“);
gotoxy(3811);
printf(“请用 ↓ ← →键控制方块移动“);
gotoxy(3812);
printf(“请按 空格 暂停/继续 游戏“);
gotoxy(3813);
printf(“请按ESC键退出游戏“);
gotoxy(3815);
printf(“制作: “);

}
void startgame()//开始游戏 操控 
{
int number=0;
int s;//第0行 
int mark=0;//标记 
shape=rand()%7;
turn=0;
newshape();
while(1)
{
    if(mark==0) 
    {
        nextshape=rand()%7;
        nextone();
        mark=1;
    }
        
rank=15-deletetimes/5;
if(rank<=1)
    rank=1;
    
gotoxy(3817);
printf(“速度:%d“16-rank);
gotoxy(3819);
printf(“分数:%d“score);

if(head==NULL)//方块被释放 
{
shape=nextshape;
turn=0;
    newshape();
    mark=0;
}
for(s=0;s<16;s++)
    if(box[0][s]==1)//到顶,游戏结束 
    {
     Sleep(1500);
     gameover();
     return;
}
if(GetAsyncKeyState(VK_UP))//能否旋转或移动的判断在函数里实现 
            change(90);//从startgame挪到此函数实现了在最底行可进行一次操作
        else if(GetAsyncKeyState(VK_LEFT))
            change(-1);
        else if(GetAsyncKeyState(VK_RIGHT))
            change(1);
        else if(GetAsyncKeyState(VK_SPACE))
            Pause();
        else if(GetAsyncKeyState(VK_ESCAPE))
            end=1;
    
shapestop();
    if(GetAsyncKeyState(VK_DOWN)) 
            c

评论

共有 条评论