第一范文网 - 专业文章范例文档资料分享平台

俄罗斯方块C语言源代码

来源:用户分享 时间:2025/7/5 1:40:29 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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语言源代码 的文档
俄罗斯方块C语言源代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9mt7d5y8cw2v3bu3zrbl_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top