版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、俄罗斯方块和贪吃蛇的C语言源程序刚刚在群里听某些人说发上来可以拿奖金,于是我就发了脸皮比较厚,大家见笑了虽然写的没有网上现成的那些好,但是这些100%是自己写的,因为是写着玩的,所以就没有优化,也没有用什么复杂的技术,但是这样的程序反而更容易看懂编译环境是古老的turboc2.0,喜欢dos编程的朋友可以拿来消遣一下。嘿嘿嘿嘿附件是源文件和编译好的文件俄罗斯方块-#include graphics.h#include stdio.h#include stdlib.h#include string.h#include bios.h#include time.h#include stdlib.h#
2、include dos.h#define VK_ESC 0x11b#define VK_UP 0x4800#define VK_DOWN 0x5000#define VK_LEFT 0x4b00#define VK_RIGHT 0x4d00#define TIMER 0x1c#define SEC(N) N*18.8typedef box44;FILE *fp;int space2618;box bar12,bar21,bar34,bar42,bar52,bar64,bar74;float count;int nexttype,nextvalue;int overed;int score,hi
3、gher;char scoretext50,highscore50;structint i;int j;box *t;int v; cur_bar;void SetScreen();void SetValue();void Draw();void SetBox();void DrawBack();void DrawBox();void CreateBar(int i,int j,box *type,int value);void SetTimer(void interrupt (*theProc)();void KillTimer();void interrupt Proc();void in
4、terrupt (*oldtimer)();void OneStep();int IsFall();void CheckState();void ClearLine(int Line);void MoveLeft();void MoveRight();void ChangeBar();void ShowScore();void ShowNextWindow();void ReadHigh();void WriteHigh();int main()int key;count=0;overed=0;score=0;ReadHigh();randomize();oldtimer=getvect(TI
5、MER);SetBox();SetScreen();DrawBack();Draw();CreateBar(0,5,bar3,2);nexttype=random(7)+1;nextvalue=0;ShowNextWindow();SetTimer(Proc);setcolor(BLUE);outtextxy(520,60,YOUR SCORE);outtextxy(520,80,0);outtextxy(520,100,HIGH SCORE);outtextxy(520,120,highscore);while(1) if(countSEC(0.5) count=0; OneStep();
6、if(bioskey(1) key=bioskey(0); if(key=VK_ESC) break; if(!overed) switch(key) case VK_LEFT: MoveLeft(); break; case VK_RIGHT: MoveRight(); break; case VK_UP: ChangeBar(); break; case VK_DOWN: OneStep(); CheckState(); break; else break; closegraph();KillTimer();if(scorehigher)higher=score;WriteHigh();r
7、eturn 0;void SetScreen()int GraphDriver=DETECT;int GraphMode=VGAHI;initgraph(&GraphDriver,&GraphMode,);setbkcolor(LIGHTMAGENTA);void SetValue()int i,j;for(i=0;i24;i+) for(j=0;j16;j+) spacej=0;void Draw()int i,j;setfillstyle(SOLID_FILL,LIGHTBLUE);setcolor(BLACK);for(i=0;i24;i+) for(j=0;j16;j+) if(spa
8、cej) bar(160+j*20,i*20,160+j*20+20,i*20+20); rectangle(160+j*20,i*20,160+j*20+20,i*20+20); void SetBox()int i,j,k;for(i=0;i2;i+) for(j=0;j4;j+) for(k=0;k4;k+) bar1jk=0;bar1001=1;bar1011=1;bar1021=1;bar1031=1;bar1120=1;bar1121=1;bar1122=1;bar1123=1;for(i=0;i1;i+) for(j=0;j4;j+) for(k=0;k4;k+) bar2jk=
9、0;bar2011=1;bar2012=1;bar2021=1;bar2022=1;for(i=0;i4;i+) for(j=0;j4;j+) for(k=0;k4;k+) bar3jk=0;bar3011=1;bar3020=1;bar3021=1;bar3031=1;bar3111=1;bar3120=1;bar3121=1;bar3122=1;bar3211=1;bar3221=1;bar3222=1;bar3231=1;bar3320=1;bar3321=1;bar3322=1;bar3331=1;for(i=0;i2;i+) for(j=0;j4;j+) for(k=0;k4;k+)
10、 bar4jk=0;bar4012=1;bar4021=1;bar4022=1;bar4031=1;bar4121=1;bar4122=1;bar4132=1;bar4133=1;for(i=0;i2;i+) for(j=0;j4;j+) for(k=0;k4;k+) bar5jk=0;bar5011=1;bar5021=1;bar5022=1;bar5032=1;bar5131=1;bar5122=1;bar5123=1;bar5132=1;for(i=0;i4;i+) for(j=0;j4;j+) for(k=0;k4;k+) bar6jk=0;bar6011=1;bar6012=1;ba
11、r6022=1;bar6032=1;bar6121=1;bar6122=1;bar6123=1;bar6131=1;bar6211=1;bar6221=1;bar6231=1;bar6232=1;bar6330=1;bar6331=1;bar6332=1;bar6322=1;for(i=0;i4;i+) for(j=0;j4;j+) for(k=0;k4;k+) bar7jk=0;bar7011=1;bar7012=1;bar7021=1;bar7031=1;bar7121=1;bar7131=1;bar7132=1;bar7133=1;bar7212=1;bar7222=1;bar7232=
12、1;bar7231=1;bar7320=1;bar7321=1;bar7322=1;bar7332=1;void CreateBar(int i,int j,box *type,int value)while(bioskey(1)bioskey(0);cur_bar.i=i;cur_bar.j=j;cur_bar.t=type;cur_bar.v=value;DrawBox();void DrawBox()int i,j;setfillstyle(SOLID_FILL,LIGHTBLUE);setcolor(BLACK);for(i=0;i4;i+) for(j=0;j4;j+) if( (c
13、ur_bar.t)cur_bar.vj) bar(160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+i*20,160+(cur_bar.j*20)+j*20+20,(cur_bar.i*20)+i*20+20); rectangle (160+ (cur_bar.j*20) +j*20,(cur_bar.i*20) +i*20,160+ (cur_bar.j*20) + j*20+20,(cur_bar.i*20) +i*20+20); setfillstyle(SOLID_FILL,YELLOW);for(i=1;i4;i+) for(j=0;j0) & (!(c
14、ur_bar.t)cur_bar.vi-1j) & (!spacecur_bar.i+i-1cur_bar.j+j) if(j+cur_bar.j15)setfillstyle(SOLID_FILL,LIGHTMAGENTA); bar(160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+(i-1)*20,160+(cur_bar.j*20)+j*20+20,(cur_bar.i*20)+(i-1)*20+20); rectangle(160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+(i-1)*20,160+(cur_bar.j*20)+
15、j*20+20,(cur_bar.i*20)+(i-1)*20+20); if(j+cur_bar.j15)setfillstyle(SOLID_FILL,YELLOW); i=0;for(j=0;j0) & (!spacecur_bar.i+i-1cur_bar.j+j) if(j+cur_bar.j15)setfillstyle(SOLID_FILL,LIGHTMAGENTA); bar(160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+(i-1)*20,160+(cur_bar.j*20)+j*20+20,(cur_bar.i*20)+(i-1)*20+20)
16、; rectangle(160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+(i-1)*20,160+(cur_bar.j*20)+j*20+20,(cur_bar.i*20)+(i-1)*20+20); if(j+cur_bar.j15)setfillstyle(SOLID_FILL,YELLOW); void SetTimer(void interrupt (*theProc)()disable();setvect(TIMER,theProc);enable();void KillTimer()disable();setvect(TIMER,oldtimer);e
17、nable();void interrupt Proc()count+;oldtimer();void OneStep()int i,j;cur_bar.i+;Draw();DrawBox();CheckState();if(IsFall() for(i=0;i4;i+) for(j=0;j4;j+) spacecur_bar.i+icur_bar.j+j=cur_bar.tcur_bar.vj | spacecur_bar.i+icur_bar.j+j; switch(nexttype) case 1: CreateBar(0,7,bar1,nextvalue); break; case 2
18、: CreateBar(0,7,bar2,nextvalue); break; case 3: CreateBar(0,7,bar3,nextvalue); break; case 4: CreateBar(0,7,bar4,nextvalue); break; case 5: CreateBar(0,7,bar5,nextvalue); break; case 6: CreateBar(0,7,bar6,nextvalue); break; case 7: CreateBar(0,7,bar7,nextvalue); break; nexttype=random(7)+1; switch(n
19、exttype) case 1: nextvalue=random(2); break; case 2: nextvalue=random(1); break; case 3: nextvalue=random(4); break; case 4: nextvalue=random(2); break; case 5: nextvalue=random(2); break; case 6: nextvalue=random(4); break; case 7: nextvalue=random(4); break; ShowNextWindow();int IsFall()int res=0;
20、int i,j;for(i=0;i4;i+) for(j=0;j22) ) res=1; return res;void ClearLine(int Line)int i,j,col;i=0;col=0;while(1) if(countSEC(0.2) count=0; col=!col; if(col=1)setcolor(RED); else setcolor(GREEN); rectangle(160,Line*20,480,Line*20+20); i+; if(i6)break;for(i=Line;i0;i-) for(j=0;j16;j+) spacej=spacei-1j;D
21、rawBack();Draw();DrawBox();score+=100;ShowScore();while(bioskey(1)bioskey(0);void CheckState()int i,j,ept;for(i=0;i=0;i-) ept=0; for(j=0;j16;j+) if(spacej=0)ept=1; if(!ept)ClearLine(i);void MoveLeft()int can=1;int i,j;for(i=0;i4;i+) for(j=0;j4;j+) if(cur_bar.tcur_bar.vj) if( (cur_bar.j+j-10)|(spacec
22、ur_bar.i+icur_bar.j+j-1) )can=0; if(can) cur_bar.j-; DrawBox(); for(i=0;i4;i+) for(j=0;j4;j+) if(cur_bar.tcur_bar.vj) & !cur_bar.tcur_bar.vj+1) bar(160+(cur_bar.j*20)+j*20+20,(cur_bar.i*20)+i*20,160+(cur_bar.j*20)+j*20+40,(cur_bar.i*20)+i*20+20); rectangle(160+(cur_bar.j*20)+j*20+20,(cur_bar.i*20)+i
23、*20,160+(cur_bar.j*20)+j*20+40,(cur_bar.i*20)+i*20+20); if(IsFall() for(i=0;i4;i+) for(j=0;j4;j+) spacecur_bar.i+icur_bar.j+j=cur_bar.tcur_bar.vj | spacecur_bar.i+icur_bar.j+j; CheckState(); switch(nexttype) case 1: CreateBar(0,7,bar1,nextvalue); break; case 2: CreateBar(0,7,bar2,nextvalue); break;
24、case 3: CreateBar(0,7,bar3,nextvalue); break; case 4: CreateBar(0,7,bar4,nextvalue); break; case 5: CreateBar(0,7,bar5,nextvalue); break; case 6: CreateBar(0,7,bar6,nextvalue); break; case 7: CreateBar(0,7,bar7,nextvalue); break; nexttype=random(7)+1; switch(nexttype) case 1: nextvalue=random(2); br
25、eak; case 2: nextvalue=random(1); break; case 3: nextvalue=random(4); break; case 4: nextvalue=random(2); break; case 5: nextvalue=random(2); break; case 6: nextvalue=random(4); break; case 7: nextvalue=random(4); break; ShowNextWindow();void MoveRight()int can=1;int i,j;for(i=0;i4;i+) for(j=0;j15)|
26、(spacecur_bar.i+icur_bar.j+j+1) )can=0; if(can) cur_bar.j+; DrawBox(); for(i=0;i4;i+) for(j=0;j4;j+) if(cur_bar.tcur_bar.vj) & !cur_bar.tcur_bar.vj-1) bar(160+(cur_bar.j*20)+j*20-20,(cur_bar.i*20)+i*20,160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+i*20+20); rectangle(160+(cur_bar.j*20)+j*20-20,(cur_bar.i*2
27、0)+i*20,160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+i*20+20); if(IsFall() for(i=0;i4;i+) for(j=0;j4;j+) spacecur_bar.i+icur_bar.j+j=cur_bar.tcur_bar.vj | spacecur_bar.i+icur_bar.j+j; CheckState(); switch(nexttype) case 1: CreateBar(0,7,bar1,nextvalue); break; case 2: CreateBar(0,7,bar2,nextvalue); break;
28、 case 3: CreateBar(0,7,bar3,nextvalue); break; case 4: CreateBar(0,7,bar4,nextvalue); break; case 5: CreateBar(0,7,bar5,nextvalue); break; case 6: CreateBar(0,7,bar6,nextvalue); break; case 7: CreateBar(0,7,bar7,nextvalue); break; nexttype=random(7)+1; switch(nexttype) case 1: nextvalue=random(2); b
29、reak; case 2: nextvalue=random(1); break; case 3: nextvalue=random(4); break; case 4: nextvalue=random(2); break; case 5: nextvalue=random(2); break; case 6: nextvalue=random(4); break; case 7: nextvalue=random(4); break; ShowNextWindow();void DrawBack()int i,j;setfillstyle(SOLID_FILL,YELLOW);setcol
30、or(BLACK);bar(160,0,480,480);for(i=0;i24;i+) for(j=0;j16;j+) rectangle(160+j*20,i*20,160+j*20+20,i*20+20); void ChangeBar()int can=1;int roundempty=1;int i,j;int maxvalue7=2,1,4,2,2,4,4;int bartype;for(i=0;i4;i+) for(j=0;j4;j+) if(spacecur_bar.i+icur_bar.j+j)roundempty=0;if(cur_bar.j12 | !roundempty
31、) can=0;if(cur_bar.t=bar1)bartype=1;if(cur_bar.t=bar2)bartype=2;if(cur_bar.t=bar3)bartype=3;if(cur_bar.t=bar4)bartype=4;if(cur_bar.t=bar5)bartype=5;if(cur_bar.t=bar6)bartype=6;if(cur_bar.t=bar7)bartype=7;if(can) if(cur_bar.v+1maxvaluebartype-1) cur_bar.v+; else cur_bar.v=0; for(i=0;i4;i+) for(j=0;j4
32、;j+) if( (cur_bar.t)cur_bar.vj) setfillstyle(SOLID_FILL,LIGHTBLUE); setcolor(BLACK); bar(160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+i*20,160+(cur_bar.j*20)+j*20+20,(cur_bar.i*20)+i*20+20); rectangle (160+ (cur_bar.j*20) +j*20,(cur_bar.i*20) +i*20,160+ (cur_bar.j*20) + j*20+20,(cur_bar.i*20) +i*20+20); e
33、lse setfillstyle(SOLID_FILL,YELLOW); setcolor(BLACK); bar(160+(cur_bar.j*20)+j*20,(cur_bar.i*20)+i*20,160+(cur_bar.j*20)+j*20+20,(cur_bar.i*20)+i*20+20); rectangle (160+ (cur_bar.j*20) +j*20,(cur_bar.i*20) +i*20,160+ (cur_bar.j*20) + j*20+20,(cur_bar.i*20) +i*20+20); void ShowScore()int i=0,l=0,tem=
34、0;char temtex50;tem=score;while(tem) temtexi+=tem%10; tem/=10;l=i;for(i=0;il;i+) scoretext=temtexl-i-1+48;scoretext=0;setcolor(BLUE);setfillstyle(SOLID_FILL,LIGHTMAGENTA);outtextxy(520,60,YOUR SCORE);bar(520,80,640,90);outtextxy(520,80,scoretext);outtextxy(520,100,HIGH SCORE);bar(520,120,640,130);ou
35、ttextxy(520,120,highscore);void ShowNextWindow()int i,j,type;box *tt;if(nexttype=1)tt=bar1;if(nexttype=2)tt=bar2;if(nexttype=3)tt=bar3;if(nexttype=4)tt=bar4;if(nexttype=5)tt=bar5;if(nexttype=6)tt=bar6;if(nexttype=7)tt=bar7;setcolor(BLUE);outtextxy(520,340,NEXT ONE);setfillstyle(SOLID_FILL,LIGHTMAGEN
36、TA);bar(520,360,600,440);setcolor(LIGHTGREEN);setfillstyle(SOLID_FILL,YELLOW);for(i=0;i4;i+) for(j=0;jSEC(level) count=0; MoveOneStep(); if(bioskey(1) key=bioskey(0); if(key=VK_ESC)break; switch(key) case VK_LEFT: if(theSnake-x-1!=theSnake-next-x) theSnake-will=LEFT; break; case VK_RIGHT: if(theSnak
37、e-x+1!=theSnake-next-x) theSnake-will=RIGHT; break; case VK_UP: if(theSnake-y-1!=theSnake-next-y) theSnake-will=UP; break; case VK_DOWN: if(theSnake-y+1!=theSnake-next-y) theSnake-will=DOWN; break; if(getvect(TIMER)!=oldtimer)MoveOneStep(); closegraph();if(longer*100higher)higher=longer*100;WriteHig
38、h();return 0;void ScreenStart()int GraphDrivers=VGA;int GraphMode=VGAHI;clrscr();initgraph(&GraphDrivers,&GraphMode,);setbkcolor(LIGHTBLUE);setfillstyle(SOLID_FILL,BLUE);bar(80,0,560,480);void ReFillScreen()setbkcolor(LIGHTBLUE);setfillstyle(SOLID_FILL,BLUE);bar(80,0,560,480);setfillstyle(SOLID_FILL
39、,RED);bar(80+theApple.x*10,theApple.y*10,80+theApple.x*10+10,theApple.y*10+10);DrawSnake();void CreateApple()randomize();theApple.x=random(48);theApple.y=random(48);void CreateSnake()theSnake=malloc(sizeof(Snake);theSnake-x=0;theSnake-y=0;theSnake-will=RIGHT;theSnake-next=NULL;void DrawSnake()Snake
40、*p=theSnake;setfillstyle(SOLID_FILL,LIGHTGREEN);do bar(80+(p-x)*10,(p-y)*10,80+(p-x)*10+10,(p-y)*10+10); if(p-next!=NULL)p=p-next; else break;while(1);setfillstyle(SOLID_FILL,BLUE);switch(p-will)case UP: if(p-y+1x*10,(p-y+1)*10,80+p-x*10+10,(p-y+1)*10+10); break; case DOWN: if(p-y-1=0) bar(80+p-x*10,(p-y-1)*10,80+p-x*10+10,(p-y-1)*10+10); break; case LEFT: if(p-x+1x+1)*10,p-y*10,80+(p-x+1)*10+10,p-y*10+10); brea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安宁护理政策法规与伦理实践
- 统编版四年级下册语文古诗词三首《四时田园杂兴(其二十五)》教案简案
- 2026年LED光疗面罩超薄贴合技术临床应用
- 2026年数据资产质押登记的有效期管理与续期 变更操作规范
- 2026年消防应急疏散演练培训
- 2026年防范和化解拖欠中小企业账款长效机制实施方案
- 突发事件如火灾地震等的应急处理
- 2026年网络安全漏洞培训
- 2026年水上安全教育
- 2026年实验室废弃物处理
- 2026年山西药科职业学院单招职业技能考试题库含答案详解ab卷
- 2026年部编版三年级道德与法治下册全册教案
- 医护人员手卫生的重要性
- 危重患者感染控制
- 2025四川遂宁市中心医院公开招聘非在编卫生专业技术人员30人护理笔试历年典型考题及考点剖析附带答案详解试卷2套
- 2026年及未来5年中国耐火粘土行业发展运行现状及投资战略规划报告
- 2024版2026春新教科版科学三年级下册教学课件:第一单元 辨别方向 单元小结复习
- 2025年上海大专自主招生免笔试及答案
- 汽车制造焊接工艺技术规范
- 2025年黑龙江生态工程职业学院单招职业倾向性测试模拟测试卷附答案解析
- 融媒体应聘考试题及答案
评论
0/150
提交评论