云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 俄罗斯方块C语言源代码

俄罗斯方块C语言源代码

  • 62 次阅读
  • 3 次下载
  • 2025/5/3 12:36:38

t_boardx=(x-Sys_x)/BSIZE; t_boardy=(y-Sys_y)/BSIZE; mask=128;

for(n=0;n<4;n++) {

for(m=0;m<4;m++) /*看最下边四个单元*/ {

if((shapes[box_numb].box[n/2]) & mask)/*最下边有方块并且当前游戏板也有方块*/ {

if((y+BSIZE*n)>=(Sys_y+BSIZE*Vertical_boxs) )return(false);/*碰到最下边了*/ if((x+BSIZE*n)>=(Sys_x+BSIZE*Horizontal_boxs) )return(false);/*碰到最左边了*/ if((x+BSIZE*m)>=(Sys_x+BSIZE*Horizontal_boxs) )return(false);/*碰到最右边了*/

else if( Table_board[t_boardy+n][t_boardx+m].var) {

return(false); } }

mask=mask/(2);

if(mask==0)mask=128; } }

return(true); } else {

return(false); } } /*

*显示指定的方块 */

void show_box(int x,int y,int box_numb,int color) {

int i,ii,ls_x=x;

if(box_numb<0 || box_numb>=MAX_BOX)/*指定的方块不存在*/ box_numb=MAX_BOX/2;

setfillstyle(SOLID_FILL,color); /********************************* * 移位来判断第哪一位是1

* 方块是每1行用半个字节来表示 * 128d=1000 0000b

*********************************/ for(ii=0;ii<2;ii++) {

int mask=128; for(i=0;i<8;i++) {

if(i%4==0 && i!=0) /*表示转到方块的下一行了*/ {

y+=BSIZE; x=ls_x; }

if((shapes[box_numb].box[ii])&mask) {

bar(x,y,x+BSIZE,y+BSIZE); line(x,y,x+BSIZE,y); line(x,y,x,y+BSIZE);

line(x,y+BSIZE,x+BSIZE,y+BSIZE); line(x+BSIZE,y,x+BSIZE,y+BSIZE); }

x+=BSIZE; mask/=2; }

y+=BSIZE; x=ls_x; } }

void main() {

int GameOver=0; int key,nextbox;

int Currentaction=0;/*标记当前动作状态*/ int gd=VGA,gm=VGAHI,errorcode;

initgraph(&gd,&gm,\errorcode = graphresult(); if (errorcode != grOk) {

printf(\printf(\getch();

exit(1); }

setbkcolor(BgColor); setcolor(FgColor); randomize();

SetTimer(newtimer);

initialize(Sys_x,Sys_y,Horizontal_boxs,Vertical_boxs);/*初始化*/

nextbox=MkNextBox(-1);

show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color); show_box(LeftWin_x,Curbox_y+200,nextbox,shapes[nextbox].color); show_intro(Sys_x,Curbox_y+320); getch(); while(1) {

/* Currentaction=0; flag_newbox=false; 检测是否有按键*/

if (bioskey(1)){key=bioskey(0); } else { key=0; }

switch(key) {

case VK_LEFT:

if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveLeft))

{EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_x-=BSIZE;Currentaction=MoveLeft;} break;

case VK_RIGHT:

if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveRight))

{EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_x+=BSIZE;Currentaction=MoveRight;} break;

case VK_DOWN:

if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown))

{EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_y+=BSIZE;Currentaction=MoveDown;}

else flag_newbox=true; break;

case VK_UP:/*旋转方块*/

if(MoveAble(Curbox_x,Curbox_y,shapes[current_box_numb].next,MoveRoll))

{EraseBox(Curbox_x,Curbox_y,current_box_numb);current_box_numb=shapes[current_box_numb].next;

Currentaction=MoveRoll; }

break;

case VK_ESC: GameOver=1; break; default: break; }

if(Currentaction)

{ /*表示当前有动作,移动或转动*/

show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color); Currentaction=0; }

/*按了往下键,但不能下移,就产生新方块*/ if(flag_newbox) {

/*这时相当于方块到底部了,把其中出现点满一行的清去,置0*/ ErasePreBox(LeftWin_x,Sys_y+200,nextbox); nextbox=MkNextBox(nextbox);

show_box(LeftWin_x,Curbox_y+200,nextbox,shapes[nextbox].color);

if(!MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown))/*刚一开始,游戏结束*/ {

show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color); GameOver=1; } else {

flag_newbox=false; }

Currentaction=0; }

else /*自由下落*/ {

if (Currentaction==MoveDown || TimerCounter> (20-speed*2)) {

if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown)) {

EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_y+=BSIZE;

搜索更多关于: 俄罗斯方块C语言源代码 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

t_boardx=(x-Sys_x)/BSIZE; t_boardy=(y-Sys_y)/BSIZE; mask=128; for(n=0;n<4;n++) { for(m=0;m<4;m++) /*看最下边四个单元*/ { if((shapes[box_numb].box[n/2]) & mask)/*最下边有方块并且当前游戏板也有方块*/ { if((y+BSIZE*n)>=(Sys_y+BSIZE*Vertical_boxs) )return(false);/*碰到最下边了*/ if((x+BSIZE*n)>=(Sys_x+BSIZE*Horizontal_boxs) )return(false);/*碰到最左边了*/ if((x+BSIZE*m)>=(Sys_x+BSIZE*Horizontal_b

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com