c语言写俄罗斯方块,C语言写的俄罗斯方块

《C语言写的俄罗斯方块》由会员分享,可在线阅读,更多相关《C语言写的俄罗斯方块(17页珍藏版)》请在人人文库网上搜索。

1、请大家指教一下,由于自己算法的问题向左位移有些问题在TC2下通过#include#include#include#include#include#include#include#define ESC 0x011b#define UP 0x4800#define DOWN 0x5000#define LEFT 0x4b00#define RIGHT 0x4d00#define SPACE 0x3920#define Y 0x1579#define N 0x316e#define clearkbd(); while(bioskey(1) bioskey(0); /*清空键盘缓冲队列*/void u。

2、pdate();void messagebox();void process();void initremove();void initinfo();void initbox();void initposition();void next_shape();typedef struct shape /*形状单一状态的记录*/ int attr;int co8;shape;typedef struct RE_AB /*相对,绝对坐标记录*/ int Rx,Ry;int x1,x2,y1,y2;RE_AB;RE_AB RA;shape p19= RED,0,1,1,0,1,1,2,1 , /*数组中。

3、保证y最大的在最后,以便initposition使用*/ RED,0,1,1,0,1,1,1,2 , RED,0,0,1,0,2,0,1,1 , RED,0,0,0,1,1,1,0,2 , GREEN,0,0,1,0,2,0,3,0 , GREEN,0,0,0,1,0,2,0,3 , CYAN,0,0,0,1,1,0,1,1 , BROWN,0,0,1,0,1,1,2,1 , BROWN,1,0,0,1,1,1,0,2 , BLUE,1,0,2,0,1,1,0,1 , BLUE,0,0,0,1,1,1,1,2 , MAGENTA,0,0,0,1,0,2,1,2 , MAGENTA,2,0,0,。

4、1,1,1,2,1, MAGENTA,0,0,1,0,1,1,1,2 , MAGENTA,0,0,0,1,1,0,2,0 , YELLOW,0,2,1,0,1,1,1,2 , YELLOW,0,0,1,0,2,0,2,1 , YELLOW,1,0,0,0,0,1,0,2, YELLOW,0,0,0,1,1,1,2,1 ,;int nback,nleft,nright,r_f1222,rs1,rs2,xcors,xcorb,ycors,ycorb;/*检查方快有没有左,右,下接触,游戏区内所有格子有无颜色记录数组,rs1形状记录,rs2为提示框用,记录小格子在游戏区中的位置,按键存储*/void。

5、 interrupt (*oldint)(); /*系统定时中断*/int count_down=0,count_other=0; /*中断记时*/void interrupt newint() /*设置新的中断程序*/ count_down+;count_other+;oldint();void intenable() /*设置中断向量表,启动新的中断程序*/ oldint=getvect(0x1c);disable();setvect(0x1c,newint);enable();void intrestore() /*恢复中断向量*/ disable();setvect(0x1c,oldi。

6、nt);enable();void HZ12(int x0,int y0,int w,int color,char *s) /*根据字模,在dos下显示汉字*/*横坐标,纵坐标,字间隔,汉字颜色,汉字字符串*/ FILE *fp;register char buffer24;register char str2;unsigned long fpos;/*fpos为最终偏移动量*/register int i,j,k;fp=fopen(hzk12,r);/*打开12*12汉字苦*/while(*s)/*一直到字符串结束为止*/if(*s(7-k)&0x1)!=NULL)/*是一就画点*/putp。

7、ixel(x0+8*j+k,y0+i,color);s+=2;/*一个汉字占两个字节,现在将指针移动两个字节*/x0+=w;/*显示坐标也按照间隔移动*/else/*显示非汉字字符*/ settextstyle(0,0,1);setcolor(color);str0=*s;str1=0;outtextxy(x0,y0+3,str);/*显示单个字符*/x0+=w-7;/*显示单个字符后的x坐标变化*/s+;/*指针移动到下一个字节*/fclose(fp);void translation() /*把相对坐标解释为绝对坐标*/ if(RA.Rx=1) RA.x1=1; RA.x2=16; els。

8、e RA.x1=16*(RA.Rx-1); RA.x2=16*RA.Rx; if(RA.Ry=1) RA.y1=1; RA.y2=16; else RA.y1=16*(RA.Ry-1); RA.y2=16*RA.Ry; int check_b() /*检查是否到达低部*/ int x,y,i,zf=0; /*zf为是否有颜色填充记录*/for(i=0;i=6)zf+=r_fx-15y-6+1;if(zf=0)return 1;elsereturn 0;int finish() int tfull=0,i; /*判断顶层空间是否有填充*/for(i=1;i6)zf+=r_fx-15-1y-6;i。

9、f(y6)zf+=r_fx-15+1y-6;if(y6)zf+=r_fx-15y-6;if(zf!=0)rs1=status;buffer=rs1;rs1=status;status=buffer;draw(2);buffer=rs1;rs1=status;status=buffer;nback=check_b(); /*判断变化后的形状是不是到达了低部,这个检查是十分必要的*/if(nback)draw(1);elsedraw(3);void accelerate() if(count_down=1) check_touch(); /*消除上一步动作对方块状态的影响*/count_down=。

10、0;if(nback) /*0表示到达底部,1表示没有到达*/mov(DOWN);void drawbox() /*画方块所在方框*/ int xcor,ycor;for(xcor=xcors;xcor0;j-) for(i=1;i=1) count_other=0;if(bioskey(1) /*对按键的处理*/ int key=bioskey(0);clearkbd(); /*清除键盘缓冲队列*/if(key=ESC)EXIT();if(key=LEFT&nleft&nback)mov(LEFT);if(key=RIGHT&nright&nback)mov(RIGHT);if(key=UP&nback)change();if(key=SPACE)pause();if(key=DOWN)accelerate();if(count_down=4) check_touch(); /*消除上一步动作对方块状态的影响*/count_down=0;if(nback) /*0表示到达底部,1表示没有到达*/mov(DOWN);/*for*/main() int gdriver=DETECT,gmode=0;initgraph(&gdriver,&gmode,d:turboc); /*启动图形与中断部分*/intenable();update(。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值