《嵌入式系统原理与应用》吃金豆源程序.docx
- 文档编号:30192007
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:19
- 大小:17.30KB
《嵌入式系统原理与应用》吃金豆源程序.docx
《《嵌入式系统原理与应用》吃金豆源程序.docx》由会员分享,可在线阅读,更多相关《《嵌入式系统原理与应用》吃金豆源程序.docx(19页珍藏版)》请在冰豆网上搜索。
《嵌入式系统原理与应用》吃金豆源程序
#include"stdio.h"
#include"gtk/gtk.h"
#include
#include
#include"time.h"
#include"string.h"
#defineUP72
#defineDOWN80
#defineLEFT75
#defineRIGHT77
#defineesc27
introws;
intcols;
ints;
clock_tstart,end,K;
intG=0;
charplayername[10];
voidplay();
voiddrawA();
voiddrawM1();
voiddrawM2();
voidinit(structlist*L);
voidjudge1();
voidjudge2();
voidjudge3();
voidface();
voidscore();
voidexit();
voidclear(structlist*L);
voidMd();
voidrank(structlist*L);
voidLoad1;
voidsaveuser(structlist*L);
structpacman
{
introw;
intcol;
intdirection;
intlive;
}A,p;
structmonster
{
introw;
intcol;
intdirection;
}M1,M2,q1,q2;
structCell
{
introw;
intcol;
intlife;
}c[39];
structwall
{
introw;
intcol;
}w[60];
structplayer
{charname[10];
inttime;
intf;
}T;
structnode//设置节点
{
structplayerdata;
structnode*next;
};
structlist
{
structnode*tail,*head;
}L;
voidmain()//主函数
{
intselect;
face();
QFilefile("/home/scene.txt");
Load1();
select=getch();
switch(select)
{
case'1':
cleardevice();init(&L);play();break;
case'2':
rank(&L);
}
}
voidload1(char*filename)//场景对象设计
{
FILE*fp;
charst[10];
inti,j,t=0,d=0;
if((fp=fopen(filename,"r"))==NULL)
exit();
fscanf(fp,"%d,%d\n",&rows,&cols);
for(i=0;i { fgets(st,30,fp); for(j=0;j switch(st[j]) { case'1': w[d].row=i;w[d].col=j; d++; setcolor(BLACK); setfillcolor(WHITE); fillrectangle(200+j*40,100+i*40,200+j*40+39,100+i*40+39); break; case'0': c[t].row=i; c[t].col=j; c[t].life=1; t++; setcolor(BLACK); setfillcolor(LIGHTGREEN); fillcircle(200+j*40+20,100+i*40+20,15); break; case'A': A.row=i; A.col=j; setcolor(BLACK); setfillcolor(LIGHTRED); fillcircle(200+A.col*40+20,100+A.row*40+20,15); break; case'M': setcolor(BLACK); setfillcolor(GREEN); fillrectangle(200+j*40,100+i*40,200+j*40+39,100+i*40+39); break; } } getch(); fclose(fp); } voiddrawA()//画精灵 { setlinecolor(BLACK); setfillcolor(BLACK); fillcircle(200+p.col*40+20,100+p.row*40+20,15); setfillcolor(LIGHTBLUE); fillcircle(200+A.col*40+20,100+A.row*40+20,15); } voiddrawM1()//画怪物1 { setlinecolor(BLACK); setfillcolor(BLACK); fillrectangle(200+q1.col*40,100+q1.row*40,200+q1.col*40+39,100+q1.row*40+39); inti; for(i=0;i<42;i++) { if(q1.col==c[i].col&&q1.row==c[i].row) { if(c[i].life==1) { setlinecolor(BLACK); setfillcolor(LIGHTGREEN); fillcircle(200+c[i].col*40+20,100+c[i].row*40+20,15); } } } setfillcolor(RED); fillrectangle(200+M1.col*40,100+M1.row*40,200+M1.col*40+39,100+M1.row*40+39); } voiddrawM2()//画怪物2 { setlinecolor(BLACK); setfillcolor(BLACK); fillrectangle(200+q2.col*40,100+q2.row*40,200+q2.col*40+39,100+q2.row*40+39); inti; for(i=0;i<42;i++) { if(q2.col==c[i].col&&q2.row==c[i].row) { if(c[i].life==1) { setlinecolor(BLACK); setfillcolor(LIGHTGREEN); fillcircle(200+c[i].col*40+20,100+c[i].row*40+20,15); } } } setfillcolor(RED);fillrectangle(200+M2.col*40,100+M2.row*40,200+M2.col*40+39,100+M2.row*40+39); } voidMd()//怪物移动 { inta,b; Sleep(400); a=rand()%4; switch(a) { case0: q1.col=M1.col; q1.row=M1.row;M1.col--; judge2(); drawM1(); break; case1: q1.col=M1.col; q1.row=M1.row;M1.row--; judge2(); drawM1(); break; case2: q1.col=M1.col; q1.row=M1.row; M1.col++; judge2(); drawM1(); break; case3: q1.col=M1.col; q1.row=M1.row; M1.row++; judge2(); drawM1(); break; } b=rand()*123%4; switch(b) { case0: q2.col=M2.col; q2.row=M2.row; M2.col--; judge3(); drawM2(); break; case1: q2.col=M2.col; q2.row=M2.row; M2.row--; judge3(); drawM2(); break; case2: q2.col=M2.col; q2.row=M2.row; M2.col++; judge3(); drawM2(); break; case3: q2.col=M2.col; q2.row=M2.row; M2.row++; judge3(); drawM2(); break; } } voidjudge1()//精灵移动判定 { intk; for(k=0;k<42;k++) { if(A.col==c[k].col&&A.row==c[k].row) if(c[k].life==1) { c[k].life=0; G++; score(); } } for(k=0;k<60;k++) { if(A.col==w[k].col&&A.row==w[k].row) { A.col=p.col; A.row=p.row; } } } voidjudge2()//怪物1移动判定 { intk; for(k=0;k<60;k++) { if(M1.col==w[k].col&&M1.row==w[k].row) { M1.col=q1.col; M1.row=q1.row; } } if(M1.col==A.col&&M1.row==A.row) exit(); } voidjudge3()//怪物2移动判定 { intk; for(k=0;k<60;k++) { if(M2.col==w[k].col&&M2.row==w[k].row) { M2.col=q2.col; M2.row=q2.row; } } if(M2.col==A.col&&M2.row==A.row) exit(); } voidface()//初始界面 { initgraph(800,600); setbkcolor(BLACK); cleardevice(); settextcolor(YELLOW); outtextxy(250,180,"PacMan--吃豆豆"); outtextxy(250,300,"1.Startthegame"); outtextxy(250,350,"2.Rankinglist"); outtextxy(250,500,"092715206"); } voidinit(structlist*L)//游戏初始化 { structnode*p; p=(structnode*)malloc(sizeof(structnode)); inti=0,j=100; setbkcolor(BLACK); cleardevice(); setcolor(YELLOW); rectangle(40,40,760,560); settextcolor(WHITE); settextcolor(YELLOW); outtextxy(100,j,"Enteryourname: "); scanf("%s",T.name); outtextxy(600,100,T.name); strcpy(p->data.name,T.name); p->next=NULL; if(L->head==NULL) { L->head=p; L->tail=p; } else { L->tail->next=p; L->tail=p; } getch(); cleardevice(); outtextxy(50,50,"SCORE: 0"); outtextxy(400,50,"Time: 0"); QFilefile("/home/scene.txt"); A.col=1; A.row=1; M1.col=1; M1.row=8; M2.col=7; M2.row=8; } voidplay()//进行游戏 { srand(time(NULL)); start=clock(); A.live=1; intch; do { while(A.live==1&&G<39) { while(kbhit()) { ch=getch(); K=clock(); T.time=K-start;score(); switch(ch) { case72: p.col=A.col;p.row=A.row;A.row--;judge1();drawA();break; case80: p.col=A.col;p.row=A.row;A.row++;judge1();drawA();break; case75: p.col=A.col;p.row=A.row;A.col--;judge1();drawA();break; case77: p.col=A.col;p.row=A.row;A.col++;judge1();drawA();break; case27: exit();break; } Sleep(10); Md(); if(G==50) { A.live=0; clear(&L);saveuser(&L);rank(&L); } } while(! kbhit()) { Md(); K=clock();T.time=K-start;score(); } if(G==10) { A.live=0; clear(&L);saveuser(&L);rank(&L); } } } while (1); } voidclear(structlist*L)//游戏通关 { structnode*p; p=(structnode*)malloc(sizeof(structnode)); chartime[5]; ints; cleardevice(); outtextxy(250,250,"CLEAR"); end=clock(); T.time=(end-start)/CLOCKS_PER_SEC; s=(100-T.time)*10; sprintf(time,"%d",T.time); outtextxy(100,250,"Youuseseconds"); outtextxy(300,250,time); sprintf(time,"%d",s); outtextxy(100,400,"Yougetscore"); outtextxy(300,400,time); p->data.time=T.time; strcpy(p->data.name,T.name); p->data.f=s; p->next=NULL; if(L->head==NULL) { L->head=p; L->tail=p; } else { L->tail->next=p; L->tail=p; } getch(); } voidexit()//游戏失败 { A.live=0; cleardevice(); outtextxy(250,250,"GAMEOVER"); getch(); closegraph(); } voidscore()//得分 { s=G*10; charo[5],o2[5]; settextcolor(RED); sprintf(o,"%d",s); outtextxy(190,50,o); T.time=(K-start)/CLOCKS_PER_SEC; sprintf(o2,"%d",T.time); outtextxy(525,50,o2); } voidsaveuser(structlist*L)//保存文件 { structnode*p; FILE*fp; if(QFilefile("/home/scene.txt"))==NULL) exit(); for(p=L->head;p! =NULL;p=p->next) { fwrite(p,sizeof(structnode),1,fp); } fclose(fp); } voidrank(structlist*L)//排行榜 { structnode*q; structnode*p; structnode*t; inti=0; charr[20]; p=(structnode*)malloc(sizeof(structnode)); q=(structnode*)malloc(sizeof(structnode)); t=(structnode*)malloc(sizeof(structnode)); for(p=L->head;p! =L->tail;p=p->next) for(q=p->next;q! =NULL;q=q->next) { if(p->data.f { strcpy(t->data.name,p->data.name); strcpy(p->data.name,q->data.name); strcpy(q->data.name,t->data.name); t->data.time=p->data.time;p->data.time=q->data.time;q->data.time=t->data.time; t->data.f=p->data.f;p->data.f=q->data.f;q->data.f=t->data.f; } } cleardevice(); p=L->head; settextcolor(CYAN); outtextxy(300,60,"Rank"); outtextxy(200,80,"Player"); outtextxy(400,80,"Score"); for(i=0;i<5;i++) { if(p! =NULL) { strcpy(r,p->data.name); outtextxy(200,100+i*20,r); sprintf(r,"%d",p->data.f); outtextxy(400,100+i*20,r); p=p->next; } } getch(); closegraph(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统原理与应用 嵌入式 系统 原理 应用 吃金豆 源程序