俄罗斯方块 -- 暑假集训
2012-12-05 17:15
295 查看
自己写的俄罗斯方块
a s d w 控制左下右和变形,支持改变速度和图形大小(在代码中改一下15 16
17行即可)
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define CUBE_R
20//行
#define CUBE_L
11//列
#define SPEED 200
#define MOD 28
int
cur_x,cur_y;
int
score,next,cube,map[CUBE_R+10][CUBE_L+10];
int
GameSpeed=SPEED;
int
dir[28][4][2]={//七种方块共28种变形,用x
y偏移量表示
{0,0,0,1,1,0,1,1} ,{0,0,0,1,1,0,1,1} ,{0,0,0,1,1,0,1,1} ,{0,0,0,1,1,0,1,1} ,
{0,0,0,-1,0,1,1,1} ,{0,0,-1,0,1,0,1,-1} ,{0,0,0,-1,0,1,-1,-1},{0,0,-1,0,1,0,-1,1} ,
{0,0,0,-1,0,1,1,-1},{0,0,-1,0,-1,-1,1,0},{0,0,0,-1,0,1,-1,1} ,{0,0,-1,0,1,0,1,1} ,
{0,0,0,-1,0,1,0,2} ,{0,0,-1,0,1,0,2,0} ,{0,0,0,-1,0,1,0,2} ,{0,0,-1,0,1,0,2,0} ,
{0,0,0,-1,1,0,1,1} ,{0,0,-1,0,0,-1,1,-1},{0,0,0,-1,1,0,1,1} ,{0,0,-1,0,0,-1,1,-1},
{0,0,0,1,1,0,1,-1} ,{0,0,-1,0,0,1,1,1} ,{0,0,0,1,1,0,1,-1} ,{0,0,-1,0,0,1,1,1} ,
{0,0,0,-1,0,1,-1,0},{0,0,0,1,-1,0,1,0} ,{0,0,0,-1,0,1,1,0} ,{0,0,-1,0,1,0,0,-1} ,
};
void
gotoxy(int x,int y)//定位输出的函数,照抄即可
{
COORD c;
c.X=x-1;c.Y=y-1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void
Move(int x,int y,int id,int state)//移动或者消除方块
{
int i;
for(i=0;i<4;i++)
{
x=cur_x+dir[id][i][0];
y=cur_y+dir[id][i][1];
if(x>0 &&
y>0 &&
x<CUBE_R &&
y<CUBE_L)
{
gotoxy(y*2+1,x+1);
if(state)printf("■");
else
printf(" ");
}
}
}
void
Clear_Show_next(int x,int y,int id,int state)//显示或者消除下一个方块
{
int i,a,b;
a=x;b=y;
for(i=0;i<4;i++)
{
x=a+dir[id][i][0];
y=b+dir[id][i][1];
gotoxy(y*2+1,x+1);
if(state)printf("■");
else printf(" ");
}
}
void
Add_Cube(int x,int y,int id)
{
int i;
for(i=0;i<4;i++)
{
x=cur_x+dir[id][i][0];
y=cur_y+dir[id][i][1];
if(x>0 &&
y>0 &&
x<CUBE_R &&
y<CUBE_L)
map[x][y]=1;
}
}
int
Judge(int x,int y,int id)//判断越界或者冲突
{
int i,a,b;
a=x;b=y;
for(i=0;i<4;i++)
{
x=a+dir[id][i][0];
y=b+dir[id][i][1];
if(x>0 &&
y>0 &&
x<CUBE_R &&
y<CUBE_L)
{
if(map[x][y])return
0;
}
else if(!(x<=0))return 0;
}
return 1;
}
void
init(int id)
{
int i,j;
score=0;
cur_x=0;cur_y=CUBE_L/2;
memset(map,0,sizeof(map));
gotoxy(1,1);
for(i=0;i<=CUBE_R;i++)
{
for(j=0;j<=CUBE_L;j++)
{
if(i==0
&&
j==0)printf("╔");
else
if(i==0 &&
j==CUBE_L)printf("╗");
else
if(i==CUBE_R &&
j==0)printf("╚");
else
if(i==CUBE_R &&
j== CUBE_L)printf("╝");
else
if(i==0 || i==CUBE_R)printf("==");
else
if(j==0 || j==CUBE_L)printf("‖");
else
printf(" ");
}
if(i==1)printf("
相关文章推荐
- 贪吃蛇 -- 暑假集训
- sduacm2016级暑假集训 搜索&并查集
- 《Windows程序设计》学习笔记(chap11 对话框)-->重写俄罗斯方块代码
- 俄罗斯对比特币的态度不明确 …
- 【转】centos 显示中文为方块的解…
- 中兴捧月&nbsp;俄罗斯套娃奖品
- 经典 HTML5 & Javascript 俄罗斯方块游戏
- 暑假集训之gcd&exgcd简介
- sduacm2016级暑假集训 二分&尺取&三分
- 俄罗斯方块25周年·未来有可能加入腾讯QQ
- Flash AS3 学习4 - 方块的旋转效果
- 俄罗斯比特币用户世界第五 央…
- [暑假集训] jzoj 2016.7.17 noip模拟赛C&B 总结
- <Unity3D>使用Unity来制作俄罗斯方块游戏
- WHU暑假集训总结&&新学期展望
- 2017暑假集训 div1 连通图(1) POJ3694 &&POJ3177
- 贪吃蛇&&俄罗斯方块
- HDOJ&nbsp;2037&nbsp;今年暑假不AC
- SQLite的SQL语法&nbsp;CREATE&nbsp;INDEX
- Eclipse 字符编码设置。