编游戏 C语言程序设计案例精编_c语言程序设计小游戏

其他范文 时间:2020-02-27 05:58:33 收藏本文下载本文
【www.daodoc.com - 其他范文】

编游戏 C语言程序设计案例精编由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言程序设计小游戏”。

编游戏 C语言程序设计案例精编.txt让人想念而死,是谋杀的至高境界,就连法医也鉴定不出死因。。。C语言 编游戏案例精编 案例一 贪吃蛇游戏 #define N 200 #include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key;int score=0;/*得分*/ int gamespeed=50000;/*游戏速度自己调整*/ struct Food { int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/ struct Snake { int x[N];int y[N];int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ }snake;void Init(void);/*图形驱动*/ void Close(void);/*图形结束*/ void DrawK(void);/*开始画面*/ void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏具体过程*/ void PrScore(void);/*输出成绩*/ /*主函数*/ void main(void){ Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/ } /*图形驱动*/ void Init(void){ int gd=DETECT,gm;initgraph(&gd,&gm,“c: c”);cleardevice();} /*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/ void DrawK(void){ /*setbkcolor(LIGHTGREEN);*/ setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ for(i=50;i

food.x++;while(food.y%10!=0)

food.y++;

food.yes=0;/*画面上有食物了*/ } if(food.yes==0)/*画面上有食物了就要显示*/ { setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);} for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ { snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];} /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction){ case 1:snake.x[0]+=10;break;case 2: snake.x[0]-=10;break;case 3: snake.y[0]-=10;break;case 4: snake.y[0]+=10;break;} for(i=3;i595||snake.y[0]455)/*蛇是否撞到墙壁*/ { GameOver();/*本次游戏结束*/ snake.life=1;/*蛇死*/ } if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break;if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/ { setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node]=-20;snake.y[snake.node]=-20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10;PrScore();/*输出新得分*/ } setcolor(4);/*画出蛇*/ for(i=0;i

snake.direction=2;else

if(key==DOWN&&snake.direction!=3)

snake.direction=4;}/*endwhile(1)*/ } /*游戏结束*/ void GameOver(void){ cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,“GAME OVER”);getch();} /*输出成绩*/ void PrScore(void){ char str[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,“score:%d”,score);outtextxy(55,20,str);} /*图形结束*/ void Close(void){ getch();closegraph();}

案例二 计算器

#include /*DOS接口函数*/ #include /*数学函数的定义*/ #include /*屏幕操作函数*/ #include /*I/O函数*/ #include /*库函数*/ #include /*变量长度参数表*/ #include /*图形函数*/ #include /*字符串函数*/ #include /*字符操作函数*/ #define UP 0x48 /*光标上移键*/ #define DOWN 0x50 /*光标下移键*/ #define LEFT 0x4b /*光标左移键*/ #define RIGHT 0x4d /*光标右移键*/ #define ENTER 0x0d /*回车键*/ void *rar;/*全局变量,保存光标图象*/ struct palettetype palette;/*使用调色板信息*/ int GraphDriver;/* 图形设备驱动*/ int GraphMode;/* 图形模式值*/ int ErrorCode;/* 错误代码*/ int MaxColors;/* 可用颜色的最大数值*/ int MaxX, MaxY;/* 屏幕的最大分辨率*/ double AspectRatio;/* 屏幕的像素比*/ void drawboder(void);/*画边框函数*/ void initialize(void);/*初始化函数*/ void computer(void);/*计算器计算函数*/ void changetextstyle(int font, int direction, int charsize);/*改变文本样式函数*/ void mwindow(char *header);/*窗口函数*/ int specialkey(void);/*获取特殊键函数*/ int arrow();/*设置箭头光标函数*/ /*主函数*/ int main(){ initialize();/* 设置系统进入图形模式 */ computer();/*运行计算器 */ closegraph();/*系统关闭图形模式返回文本模式*/ return(0);/*结束程序*/ } /* 设置系统进入图形模式 */ void initialize(void){ int xasp, yasp;/* 用于读x和y方向纵横比*/ GraphDriver = DETECT;/* 自动检测显示器*/ initgraph(&GraphDriver, &GraphMode, “”);/*初始化图形系统*/ ErrorCode = graphresult();/*读初始化结果*/ if(ErrorCode!= grOk)/*如果初始化时出现错误*/ { printf(“Graphics System Error: %sn”, grapherrormsg(ErrorCode));/*显示错误代码*/ exit(1);/*退出*/ } getpalette(&palette);/* 读面板信息*/ MaxColors = getmaxcolor()+ 1;/* 读取颜色的最大值*/ MaxX = getmaxx();/* 读屏幕尺寸 */ MaxY = getmaxy();/* 读屏幕尺寸 */ getaspectratio(&xasp, &yasp);/* 拷贝纵横比到变量中*/ AspectRatio =(double)xasp/(double)yasp;/* 计算纵横比值*/ } /*计算器函数*/ void computer(void){ struct viewporttype vp;/*定义视口类型变量*/ int color, height, width;int x, y,x0,y0, i, j,v,m,n,act,flag=1;float num1=0,num2=0,result;/*操作数和计算结果变量*/ char cnum[5],str2[20]={“”},c,temp[20]={“”};char str1[]=“1230.456+-789*/Qc=^%”;/* 定义字符串在按钮图形上显示的符号 */ mwindow(“Calculator”);/* 显示主窗口 */ color = 7;/*设置灰颜色值*/ getviewsettings(&vp);/* 读取当前窗口的大小*/ width=(vp.right+1)/10;/* 设置按钮宽度 */ height=(vp.bottom-10)/10;/*设置按钮高度 */ x = width /2;/*设置x的坐标值*/ y = height/2;/*设置y的坐标值*/ setfillstyle(SOLID_FILL, color+3);bar(x+width*2, y, x+7*width, y+height);/*画一个二维矩形条显示运算数和结果*/ setcolor(color+3);/*设置淡绿颜色边框线*/ rectangle(x+width*2, y, x+7*width, y+height);/*画一个矩形边框线*/ setcolor(RED);/*设置颜色为红色*/ outtextxy(x+3*width,y+height/2,“0.”);/*输出字符串“0.”*/ x =2*width-width/2;/*设置x的坐标值*/ y =2*height+height/2;/*设置y的坐标值*/ for(j=0;j=x0+6*width)/*如果右移,移到尾,则移动到最左边字符位置*/ {

x=x0;

m=0;} else {

x=x+width+width/2;

m++;} /*否则,右移到下一个字符位置*/ if(v==LEFT)/*左移箭头时新位置计算*/ if(x

x=x0+6*width;

m=4;} /*如果移到头,再左移,则移动到最右边字符位置*/ else {

x=x-width-width/2;

m--;} /*否则,左移到前一个字符位置*/ if(v==UP)/*上移箭头时新位置计算*/ if(y

y=y0+4*height+height/2;

n=3;} /*如果移到头,再上移,则移动到最下边字符位置*/ else { y=y-height-height/2;n--;} /*否则,移到上边一个字符位置*/ if(v==DOWN)/*下移箭头时新位置计算*/ if(y>=7*height){

y=y0;n=0;} /*如果移到尾,再下移,则移动到最上边字符位置*/ else {

y=y+height+height/2;

n++;} /*否则,移到下边一个字符位置*/ putimage(x,y,rar,XOR_PUT);/*在新的位置显示光标箭头*/ } c=str1[n*5+m];/*将字符保存到变量c中*/ if(isdigit(c)||c=='.')/*判断是否是数字或小数点*/ { if(flag==-1)/*如果标志为-1,表明为负数*/ { strcpy(str2,“-”);/*将负号连接到字符串中*/ flag=1;} /*将标志值恢复为1*/ sprintf(temp,“%c”,c);/*将字符保存到字符串变量temp中*/ strcat(str2,temp);/*将temp中的字符串连接到str2中*/ setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,str2);/*显示字符串*/ } if(c=='+'){ num1=atof(str2);/*将第一个操作数转换为浮点数*/ strcpy(str2,“”);/*将str2清空*/ act=1;/*做计算加法标志值*/ setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,“0.”);/*显示字符串*/ } if(c=='-'){ if(strcmp(str2,“”)==0)/*如果str2为空,说明是负号,而不是减号*/ flag=-1;/*设置负数标志*/ else { num1=atof(str2);/*将第二个操作数转换为浮点数*/ strcpy(str2,“”);/*将str2清空*/ act=2;/*做计算减法标志值*/ setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);/*画矩形*/ outtextxy(5*width,height,“0.”);/*显示字符串*/ } } if(c=='*'){ num1=atof(str2);/*将第二个操作数转换为浮点数*/ strcpy(str2,“”);/*将str2清空*/ act=3;/*做计算乘法标志值*/ setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,“0.”);/*显示字符串*/ } if(c=='/'){ num1=atof(str2);/*将第二个操作数转换为浮点数*/ strcpy(str2,“”);/*将str2清空*/ act=4;/*做计算除法标志值*/ setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,“0.”);/*显示字符串*/ } if(c=='^'){ num1=atof(str2);/*将第二个操作数转换为浮点数*/ strcpy(str2,“”);/*将str2清空*/ act=5;/*做计算乘方标志值*/ setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2);/*画矩形*/ outtextxy(5*width,height,“0.”);/*显示字符串*/ } if(c=='%'){ num1=atof(str2);/*将第二个操作数转换为浮点数*/ strcpy(str2,“”);/*将str2清空*/ act=6;/*做计算模运算乘方标志值*/ setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2);/*画矩形*/ outtextxy(5*width,height,“0.”);/*显示字符串*/ } if(c=='='){ num2=atof(str2);/*将第二个操作数转换为浮点数*/ switch(act)/*根据运算符号计算*/ { case 1:result=num1+num2;break;/*做加法*/ case 2:result=num1-num2;break;/*做减法*/ case 3:result=num1*num2;break;/*做乘法*/ case 4:result=num1/num2;break;/*做除法*/ case 5:result=pow(num1,num2);break;/*做x的y次方*/ case 6:result=fmod(num1,num2);break;/*做模运算*/ } setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/ sprintf(temp,“%f”,result);/*将结果保存到temp中*/ outtextxy(5*width,height,temp);/*显示结果*/ } if(c=='c'){ num1=0;/*将两个操作数复位0,符号标志为1*/ num2=0;flag=1;strcpy(str2,“”);/*将str2清空*/ setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/ outtextxy(5*width,height,“0.”);/*显示字符串*/ } if(c=='Q')exit(0);/*如果选择了q回车,结束计算程序*/ } putimage(x,y,rar,XOR_PUT);/*在退出之前消去光标箭头*/ return;/*返回*/ } /*窗口函数*/ void mwindow(char *header){ int height;cleardevice();

/* 清除图形屏幕 */ setcolor(MaxColors1);/*设置当前颜色为白色 */ setlinestyle(SOLID_LINE, 0, NORM_WIDTH);/*设置画线方式*/ getviewsettings(&vp);/*将当前视口信息装入vp所指的结构中*/ rectangle(0, 0, vp.right-vp.left, vp.bottom-vp.top);/*画矩形边框*/ } /*设计鼠标图形函数*/ int arrow(){ int size;int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4};/*定义多边形坐标*/ setfillstyle(SOLID_FILL,2);/*设置填充模式*/ fillpoly(8,raw);/*画出一光标箭头*/ size=imagesize(4,4,16,16);/*测试图象大小*/ rar=malloc(size);/*分配内存区域*/ getimage(4,4,16,16,rar);/*存放光标箭头图象*/ putimage(4,4,rar,XOR_PUT);/*消去光标箭头图象*/ return 0;} /*按键函数*/ int specialkey(void){ int key;while(bioskey(1)==0);/*等待键盘输入*/ key=bioskey(0);/*键盘输入*/ key=key&0xff? key&0xff:key>>8;/*只取特殊键的扫描值,其余为0*/ return(key);/*返回键值*/ }

案例三 黑白棋游戏

#include “graphics.h” /*图形系统头文件*/ #define LEFT 0x4b00 /*光标左键值*/ #define RIGHT 0x4d00 /*光标右键值*/ #define DOWN 0x5000 /*光标下键值*/ #define UP 0x4800 /*光标上键值*/ #define ESC 0x011b /* ESC键值*/ #define ENTER 0x1c0d /* 回车键值*/ int a[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/ char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/ void playtoplay(void);/*人人对战函数*/ void DrawQp(void);/*画棋盘函数*/ void SetPlayColor(int x);/*设置棋子第一次的颜色*/ void MoveColor(int x,int y);/*恢复原来棋盘状态*/ int QpChange(int x,int y,int z);/*判断棋盘的变化*/ void DoScore(void);/*处理分数*/ void PrintScore(int n);/*输出成绩*/ void playWin(void);/*输出胜利者信息*/ /******主函数*********/ void main(void){ int gd=DETECT,gr;initgraph(&gd,&gr,“c: c”);/*初始化图形系统*/ DrawQp();/*画棋盘*/ playtoplay();/*人人对战*/ getch();closegraph();/*关闭图形系统*/ } void DrawQp()/*画棋盘*/ { int i,j;score1=score2=0;/*棋手一开始得分都为0*/ setbkcolor(BLUE);for(i=100;i

a[(x-120)/40][(y-120)/40]=1;else/*否则棋手2移动*/

a[(x-120)/40][(y-120)/40]=2;if(!QpChange(x,y,t))/*落子后判断棋盘的变化*/ { a[(x-120)/40][(y-120)/40]=0;/*恢复空格状态*/ cc++;/*开始统计尝试次数*/ if(cc>=64-score1-score2)/*如果尝试超过空格数则停步*/ {

MoveColor(x,y);

fillellipse(x,y,15,15);

break;} else

continue;/*如果按键无效*/ } DoScore();/*分数的改变*/ break;/*棋盘变化了,则轮对方走棋*/ } else/*已经有棋子就继续按键*/ continue;} else /*四个方向按键的判断*/ if(key==LEFT&&x>120)/*左方向键*/ { MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse(x,y,15,15);} else if(key==RIGHT&&x80)/*右方向键*/ { MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);} else if(key==UP&&y>120)/*上方向键*/ { MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);} else if(key==DOWN&&y1)/*判断左边*/ { for(k=j-1;k>=0;k--)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]!=0&&k>=0){ for(kk=j-1;kk>k&&k>=0;kk--){ a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15);} if(kk!=j-1)yes=1;} } if(i1)/*判断上边*/ { for(k=i-1;k>=0;k--)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k>=0){ for(kk=i-1;kk>k&&k>=0;kk--){ a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);} if(kk!=i-1)yes=1;} } if(i>1&&j=0&&kk=0&&kkk&&k>=0;ii--,jj++){ a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);} if(ii!=i-1)yes=1;} } if(i1)/*左下*/ { for(k=i+1,kk=j-1;k=0;k++,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k=0){ for(ii=i+1,jj=j-1;ii1&&j>1)/*左上*/ { for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k>=0&&kk>=0){ for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--){ a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);} if(ii!=i-1)yes=1;} } if(iscore1)/*开始判断最后的结果*/ outtextxy(100,50,“black win!”);else if(score2

案例四 迷宫问题

#include #include #include #include #include #define N 20/*迷宫的大小,可改变*/ int oldmap[N][N];/*递归用的数组,用全局变量节约时间*/ int yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/ int way[100][2],wayn=0;/*way数组是显示路线用的,wayn是统计走了几个格子*/ void Init(void);/*图形初始化*/ void Close(void);/*图形关闭*/ void DrawPeople(int *x,int *y,int n);/*画人工探索物图*/ void PeopleFind(int(*x)[N]);/*人工探索*/ void WayCopy(int(*x)[N],int(*y)[N]);/*为了8个方向的递归,把旧迷宫图拷贝给新数组*/ int FindWay(int(*x)[N],int i,int j);/*自动探索函数*/ void MapRand(int(*x)[N]);/*随机生成迷宫函数*/ void PrMap(int(*x)[N]);/*输出迷宫图函数*/ void Result(void);/*输出结果处理*/ void Find(void);/*成功处理*/ void NotFind(void);/*失败处理*/ void main(void)/*主函数*/ { int map[N][N];/*迷宫数组*/ char ch;clrscr();printf(“n Please select hand(1)else auton”);/*选择探索方式*/ scanf(“%c”,&ch);Init();/*初始化*/ MapRand(map);/*生成迷宫*/ PrMap(map);/*显示迷宫图*/ if(ch=='1')PeopleFind(map);/*人工探索*/ else FindWay(map,1,1);/*系统自动从下标1,1的地方开始探索*/ Result();/*输出结果*/ Close();} void Init(void)/*图形初始化*/ { int gd=DETECT,gm;initgraph(&gd,&gm,“c: c”);} void DrawPeople(int *x,int *y,int n)/*画人工控制图*/ {/*如果将以下两句注释掉,则显示人工走过的路径,*/ setfillstyle(SOLID_FILL,WHITE);/*设置白色实体填充样式*/ bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);/*恢复原通路*/ switch(n)/*判断x,y的变化,8个方向的变化*/ { case 1:(*x)--;break;/*上*/ case 2:(*x)--;(*y)++;break;/*右上*/ case 3:(*y)++;break;/*右*/ case 4:(*x)++;(*y)++;break;/*右下*/ case 5:(*x)++;break;/*下*/ case 6:(*x)++;(*y)--;break;/*左下*/ case 7:(*y)--;break;/*左*/ case 8:(*x)--;(*y)--;break;/*左上*/ } setfillstyle(SOLID_FILL,RED);/*新位置显示探索物*/ bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);} void PeopleFind(int(*map)[N])/*人工手动查找*/ { int x,y;char c=0;/*接收按键的变量*/ x=y=1;/*人工查找的初始位置*/ setcolor(11);line(500,200,550,200);outtextxy(570,197,“d”);line(500,200,450,200);outtextxy(430,197,“a”);line(500,200,500,150);outtextxy(497,130,“w”);line(500,200,500,250);outtextxy(497,270,“x”);line(500,200,450,150);outtextxy(445,130,“q”);line(500,200,550,150);outtextxy(550,130,“e”);line(500,200,450,250);outtextxy(445,270,“z”);line(500,200,550,250);outtextxy(550,270,“c”);/*以上是画8个方向的控制介绍*/ setcolor(YELLOW);outtextxy(420,290,“Pre 'Enter' to end”);/*压回车键结束*/ setfillstyle(SOLID_FILL,RED);bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);/*入口位置显示*/ while(c!=13)/*如果按下的不是回车键*/ { c=getch();/*接收字符后开始各个方向的探索*/ if(c=='w'&&map[x-1][y]!=1)DrawPeople(&x,&y,1);/*上*/ else if(c=='e'&&map[x-1][y+1]!=1)DrawPeople(&x,&y,2);/*右上*/ else if(c=='d'&&map[x][y+1]!=1)DrawPeople(&x,&y,3);/*右*/ else if(c=='c'&&map[x+1][y+1]!=1)

DrawPeople(&x,&y,4);/*右下*/ else

if(c=='x'&&map[x+1][y]!=1)

DrawPeople(&x,&y,5);/*下*/

else

if(c=='z'&&map[x+1][y-1]!=1)

DrawPeople(&x,&y,6);/*左下*/

else

if(c=='a'&&map[x][y-1]!=1)

DrawPeople(&x,&y,7);/*左*/

else if(c=='q'&&map[x-1][y-1]!=1)

DrawPeople(&x,&y,8);/*左上*/ } setfillstyle(SOLID_FILL,WHITE);/*消去红色探索物,恢复原迷宫图*/ bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);if(x==N-2&&y==N-2)/*人工控制找成功的话*/ yes=1;/*如果成功标志为1*/ } void WayCopy(int(*oldmap)[N],int(*map)[N])/*拷贝迷宫数组 */ { int i,j;for(i=0;i=0;i--){ bar(100+way[i][1]*15-6,50+way[i][0]*15-6,100+ way[i][1]*15+6,50+way[i][0]*15+6);sleep(1);/*控制显示时间*/ } bar(100+(N-2)*15-6,50+(N-2)*15-6,100+(N-2)*15+6,50+(N-2)*15+6);/*在目标点标红色*/ setcolor(GREEN);settextstyle(0,0,2);/*设置字体大小*/ outtextxy(130,400,“Find a way!”);} void NotFind(void)/*没找到通路*/ { setcolor(GREEN);settextstyle(0,0,2);/*设置字体大小*/ outtextxy(130,400,“Not find a way!”);} void Result(void)/*结果处理*/ { if(yes)/*如果找到*/ Find();else/*没找到路*/ NotFind();getch();} void Close(void)/*图形关闭*/ { closegraph();}

案例五 扫地雷游戏 #include #include #include #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define MOUSEMOVE 0xff08 struct { int num;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/ int roundnum;/*统计格子周围有多少雷*/ int flag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/ }Mine[10][10];int gameAGAIN=0;/*是否重来的变量*/ int gamePLAY=0;/*是否是第一次玩游戏的标志*/ int mineNUM;/*统计处理过的格子数*/ char randmineNUM[3];/*显示数字的字符串*/ int Keystate;int MouseExist;int MouseButton;int MouseX;int MouseY;void Init(void);/*图形驱动*/ void MouseOn(void);/*鼠标光标显示*/ void MouseOff(void);/*鼠标光标隐藏*/ void MouseSetXY(int,int);/*设置当前位置*/ int LeftPre(void);/*左键按下*/ int RightPre(void);/*鼠标右键按下*/ void MouseGetXY(void);/*得到当前位置*/ void Control(void);/*游戏开始,重新,关闭*/ void GameBegain(void);/*游戏开始画面*/ void DrawSmile(void);/*画笑脸*/ void DrawRedflag(int,int);/*显示红旗*/ void DrawEmpty(int,int,int,int);/*两种空格子的显示*/ void GameOver(void);/*游戏结束*/ void GameWin(void);/*显示胜利*/ int MineStatistics(int,int);/*统计每个格子周围的雷数*/ int ShowWhite(int,int);/*显示无雷区的空白部分*/ void GamePlay(void);/*游戏过程*/ void Close(void);/*图形关闭*/ void main(void){ Init();Control();Close();} void Init(void)/*图形开始*/ { int gd=DETECT,gm;initgraph(&gd,&gm,“c: c”);} void Close(void)/*图形关闭*/ { closegraph();} void MouseOn(void)/*鼠标光标显示*/ { _AX=0x01;geninterrupt(0x33);} void MouseOff(void)/*鼠标光标隐藏*/ { _AX=0x02;geninterrupt(0x33);} void MouseSetXY(int x,int y)/*设置当前位置*/ { _CX=x;_DX=y;_AX=0x04;geninterrupt(0x33);} int LeftPre(void)/*鼠标左键按下*/ { _AX=0x03;geninterrupt(0x33);return(_BX&1);} int RightPre(void)/*鼠标右键按下*/ { _AX=0x03;geninterrupt(0x33);return(_BX&2);} void MouseGetXY(void)/*得到当前位置*/ { _AX=0x03;geninterrupt(0x33);MouseX=_CX;MouseY=_DX;} void Control(void)/*游戏开始,重新,关闭*/ { int gameFLAG=1;/*游戏失败后判断是否重新开始的标志*/ while(1){ if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/ { GameBegain();/*游戏初始画面*/ GamePlay();/*具体游戏*/ if(gameAGAIN==1)/*游戏中重新开始*/ { gameAGAIN=0;continue;} } MouseOn();gameFLAG=0;if(LeftPre())/*判断是否重新开始*/ { MouseGetXY();if(MouseX>280&&MouseX65&&MouseY

if(i==9&&j==9)/*右下角格子的统计*/ { if(Mine[9][8].num==1)nNUM++;if(Mine[8][9].num==1)nNUM++;if(Mine[8][8].num==1)nNUM++;} else if(j==0)/*左边第一列格子的统计*/ { if(Mine[i][j+1].num==1)nNUM++;if(Mine[i+1][j].num==1)nNUM++;if(Mine[i-1][j].num==1)nNUM++;if(Mine[i-1][j+1].num==1)nNUM++;if(Mine[i+1][j+1].num==1)nNUM++;} else if(j==9)/*右边第一列格子的统计*/ { if(Mine[i][j-1].num==1)nNUM++;if(Mine[i+1][j].num==1)nNUM++;if(Mine[i-1][j].num==1)nNUM++;if(Mine[i-1][j-1].num==1)nNUM++;if(Mine[i+1][j-1].num==1)nNUM++;} else if(i==0)/*第一行格子的统计*/ { if(Mine[i+1][j].num==1)nNUM++;if(Mine[i][j-1].num==1)nNUM++;if(Mine[i][j+1].num==1)nNUM++;if(Mine[i+1][j-1].num==1)

nNUM++;if(Mine[i+1][j+1].num==1)

nNUM++;} else if(i==9)/*最后一行格子的统计*/ { if(Mine[i-1][j].num==1)

nNUM++;if(Mine[i][j-1].num==1)

nNUM++;if(Mine[i][j+1].num==1)

nNUM++;if(Mine[i-1][j-1].num==1)

nNUM++;if(Mine[i-1][j+1].num==1)

nNUM++;} else/*普通格子的统计*/ { if(Mine[i-1][j].num==1)

nNUM++;if(Mine[i-1][j+1].num==1)

nNUM++;if(Mine[i][j+1].num==1)

nNUM++;if(Mine[i+1][j+1].num==1)

nNUM++;if(Mine[i+1][j].num==1)

nNUM++;if(Mine[i+1][j-1].num==1)

nNUM++;if(Mine[i][j-1].num==1)

nNUM++;if(Mine[i-1][j-1].num==1)

nNUM++;} return(nNUM);/*把格子周围一共有多少雷数的统计结果返回*/ } int ShowWhite(int i,int j)/*显示无雷区的空白部分*/ { if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就不对该格进行任何判断*/ return;mineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利*/ if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*显示空格*/ { DrawEmpty(i,j,1,7);Mine[i][j].num=0;} else if(Mine[i][j].roundnum!=0)/*输出雷数*/ { DrawEmpty(i,j,0,8);sprintf(randmineNUM,“%d”,Mine[i][j].roundnum);setcolor(RED);outtextxy(195+j*20,95+i*20,randmineNUM);Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/ return;} /*8个方向递归显示所有的空白格子*/ if(i!=0&&Mine[i-1][j].num!=1)ShowWhite(i-1,j);if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1)ShowWhite(i-1,j+1);if(j!=9&&Mine[i][j+1].num!=1)ShowWhite(i,j+1);if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)ShowWhite(i+1,j+1);if(i!=9&&Mine[i+1][j].num!=1)ShowWhite(i+1,j);if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)ShowWhite(i+1,j-1);if(j!=0&&Mine[i][j-1].num!=1)ShowWhite(i,j-1);if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)ShowWhite(i-1,j-1);} void GamePlay(void)/*游戏过程*/ { int i,j,Num;/*Num用来接收统计函数返回一个格子周围有多少地雷*/ for(i=0;i

*/

*/

MouseGetXY();if(MouseX>280&&MouseX65&&MouseY190&&MouseX90&&MouseY190&&MouseX90&&MouseY

案例六 速算24 #define N 20 #define COL 100 #define ROW 40 #include “stdio.h” #include “time.h” /*系统时间函数*/ #include “graphics.h” /*图形函数*/ #include “alloc.h”/*动态地址分配函数*/ #include “stdlib.h” /*库函数*/ #include “string.h” /*字符串函数*/ #include “ctype.h” /*字符操作函数*/ char p[4][13]={ {'A','2','3','4','5','6','7','8','9','0','J','Q','K'},/*扑克牌,10用0来表示*/ {'A','2','3','4','5','6','7','8','9','0','J','Q','K'}, {'A','2','3','4','5','6','7','8','9','0','J','Q','K'}, {'A','2','3','4','5','6','7','8','9','0','J','Q','K'}};typedef struct node { int data;struct node *link;}STACK1;/*栈1*/ typedef struct node2 { char data;struct node2 *link;}STACK2;/*栈2*/ void init(void);/*图形驱动*/ void close(void);/*图形关闭*/ void play(void);/*发牌的具体过程*/ void rand1(int j);/*随机发牌函数*/ void change(char *e,char *a);/*中缀变后缀函数*/ int computer(char *s);/*后缀表达式计算函数*/ STACK1 *initstack1(STACK1 *top);/*栈1初始化*/ STACK1 *push(STACK1 *top,int x);/*栈1入栈运算*/ STACK1 *pop(STACK1 *top);/*栈1删除栈顶元素*/ int topx(STACK1 *top);/*栈1读栈顶元素*/ STACK1 *ptop(STACK1 *top,int *x);/*栈1读出栈顶元素值并删除栈顶元素*/ int empty(STACK1 *top);/*判栈1是否为空函数*/ STACK2 *initstack2(STACK2 *top);/*栈2初始化*/ STACK2 *push2(STACK2 *top,char x);/*栈2入栈运算*/ STACK2 *pop2(STACK2 *top);/*栈2删除栈顶元素*/ char topx2(STACK2 *top);/*栈2读栈顶元素*/ STACK2 *ptop2(STACK2 *top,char *x);/*栈2读出栈顶元素值并删除栈顶元素*/ int empty2(STACK2 *top);/*判栈2是否为空函数* int text1(char *s);/*显示文本*/ main(){ char s[N],s1[N],ch;int i,result;int gdriver, gmode;clrscr();/*清屏*/ init();/*初始化函数*/ while(1){ setbkcolor(BLACK);/*设置背景颜色*/ cleardevice();/*清屏*/ play();/*发牌*/ gotoxy(1,15);/*移动光标*/ printf(“--------------------Note-------------------n”);printf(“ Please enter expre accroding to above four numbern”);/*提示信息*/ printf(“ Format as follows:2.*(5.+7.)n”);/*提示输入字符串格式*/ printf(“---------------n”);scanf(“%s%c”,s1,&ch);/*输入字符串压回车键*/ change(s1,s);/*调用change函数将中缀表达式s1转换为后缀表达式s*/ result=computer(s);/*计算后缀表达式的值,返回结果result */ if(result==24)/*如果结果等于24*/ text1(“very good”);/*调用函数text1显示字符串“very good”*/ else text1(“wrong!!”);/*否则函数text1显示字符串“wrong!!”*/ printf(“Continue(y/n)?n”);/*提示信息,是否继续*/ scanf(“%c”,&ch);/*输入一字符*/ if(ch=='n'||ch=='N')/*如果该字符等于n或N*/ break;/*跳出循环,程序结束*/ } /*否则,开始下一轮循环*/ close();return;/*返回*/ } void rand1(int j)/*随机发牌函数*/ { int kind,num;char str[3],n;randomize();while(1)/*循环直到有牌发*/ { kind=random(4);/*花色随机数*/ num=random(13);/*大小随机数*/ if(p[kind][num]!=-1)/*该数未取过*/ { n=p[kind][num];/*取相应位置的扑克牌数*/ p[kind][num]=-1;/*牌发好以后相应位置的元素置-1*/ break;} } switch(kind)/*花式的判断*/ { case 0:setcolor(RED);sprintf(str,“%c”,3);break;/*红桃*/ case 1:setcolor(BLACK);sprintf(str,“%c”,3);break;/*黑桃*/ case 2:setcolor(RED);sprintf(str,“%c”,4);break;/*方片*/ case 3:setcolor(BLACK);sprintf(str,“%c”,5);break;/*草花*/ } settextstyle(0,0,2);outtextxy(COL+j*100-30,ROW+100-46,str);/*显示左上角花色*/ outtextxy(COL+j*100+16,ROW+100+32,str);/*显示右下角花色*/ if(n!='0')/*输出其他牌*/ { settextstyle(0,0,3);sprintf(str,“%c”,n);outtextxy(COL+j*100-5,ROW+100-5,str);/*显示牌的大小*/ } else/*输出10的时候*/ { sprintf(str,“%d”,10);outtextxy(COL+j*100-6,ROW+100-5,str);} } void play(void)/*发牌的具体过程*/ { int j;for(j=0;j

break;/*跳出循环*/ else

w=topx2(top);/*否则读栈顶元素*/ } } top=push2(top,e[i]);/*将当前e的字符元素压入堆栈*/ } if(e[i]=='*'||e[i]=='/')/*如果字符是乘或除号时*/ { if(!empty2(top))/*如栈不为空*/ { w=topx2(top);/*读栈顶元素存入w*/ while(w=='*'||w=='/')/*当栈顶元素是乘或除时反复循环*/ { a[j]=w;j++;/*将栈顶元素存入字符串a中,a的下标加1*/ top=pop2(top);/*删除栈顶元素*/ if(empty2(top))/*如果栈为空*/

break;/*跳出循环*/ else

w=topx2(top);/*否则读栈顶元素*/ } } top=push2(top,e[i]);/*将当前e字符元素压入堆栈*/ } i++;/*e的下标加1*/ } while(!empty2(top))/*当不为空时反复循环*/ top=ptop2(top,&a[j++]);/*将栈顶元素存入数组a中*/ a[j]='';/*将字符串结束标记写入最后一个数组元素中构成字符串*/ } int computer(char *s)/* 计算函数*/ { STACK1 *top=NULL;int i,k,num1,num2,result;i=0;while(s[i]!='')/*当字符串没有结束时作以下处理*/ { if(isdigit(s[i]))/*判字符是否为数字*/ { k=0;/*k初值为0*/ do{ k=10*k+s[i]-'0';/*将字符连接为十进制数字*/ i++;/*i加1*/ }while(s[i]!='.');/*当字符不为‘.’时重复循环*/ top=push(top,k);/*将生成的数字压入堆栈*/ } if(s[i]=='+')/*如果为'+'号*/ { top=ptop(top,&num2);/*将栈顶元素取出存入num2中*/ top=ptop(top,&num1);/*将栈顶元素取出存入num1中*/ result=num2+num1;/*将num1和num2相加存入result中*/ top=push(top,result);/*将result压入堆栈*/ } if(s[i]=='-')/*如果为'-'号*/ { top=ptop(top,&num2);/*将栈顶元素取出存入num2中*/ top=ptop(top,&num1);/*将栈顶元素取出存入num1中*/ result=num1-num2;/*将num1减去num2结果存入result中*/ top=push(top,result);/*将result压入堆栈*/ } if(s[i]=='*')/*如果为'*'号*/ { top=ptop(top,&num2);/*将栈顶元素取出存入num2中*/ top=ptop(top,&num1);/*将栈顶元素取出存入num1中*/ result=num1*num2;/*将num1与num2相乘结果存入result中*/ top=push(top,result);/*将result压入堆栈*/ } if(s[i]=='/')/*如果为'/'号*/ { top=ptop(top,&num2);/*将栈顶元素取出存入num2中*/ top=ptop(top,&num1);/*将栈顶元素取出存入num1中*/ result=num1/num2;/*将num1除num2结果存入result中* top=push(top,result);/*将result压入堆栈*/ } i++;/*i加1*/ } top=ptop(top,&result);/*最后栈顶元素的值为计算的结果*/ return result;/*返回结果*/ } STACK1 *initstack1(STACK1 *top)/*初始化*/ { top=NULL;/*栈顶指针置为空*/ return top;/*返回栈顶指针*/ } STACK1 *push(STACK1 *top,int x)/*入栈函数*/ { STACK1 *p;/*临时指针类型为STACK1*/ p=(STACK1 *)malloc(sizeof(STACK1));/*申请STACK1大小的空间*/ if(p==NULL)/*如果p为空*/ { printf(“memory is overflown!”);/*显示内存溢出*/ exit(0);/*退出*/ } p->data=x;/*保存值x到新空间*/ p->link=top;/*新结点的后继为当前栈顶指针*/ top=p;/*新的栈顶指针为新插入的结点*/ return top;/*返回栈顶指针*/ } STACK1 *pop(STACK1 *top)/*出栈*/ { STACK1 *q;/*定义临时变量*/ q=top;/*保存当前栈顶指针*/ top=top->link;/*栈顶指针后移*/ free(q);/*释放q*/ return top;/*返回栈顶指针*/ } int topx(STACK1 *top)/*读栈顶元素*/ { if(top==NULL)/*栈是否为空*/ { printf(“Stack is nulln”);/*显示栈为空信息*/ return 0;/*返回整数0*/ } return top->data;/*返回栈顶元素*/ } STACK1 *ptop(STACK1 *top,int *x)/*取栈顶元素,并删除栈顶元素*/ { *x=topx(top);/*读栈顶元素*/ top=pop(top);/*删除栈顶元素*/ return top;/*返回栈顶指针*/ } int empty(STACK1 *top)/*判栈是否为空*/ { if(top==NULL)/*如果为空*/ return 1;/*返回1*/ else return 0;/*否则返回0*/ } STACK2 *initstack2(STACK2 *top)/*初始化*/ { top=NULL;/*栈顶指针置为空*/ return top;/*返回栈顶指针*/ } STACK2 *push2(STACK2 *top,char x)/*入栈函数*/ { STACK2 *p;/*临时指针类型为STACK2*/ p=(STACK2 *)malloc(sizeof(STACK2));/*申请STACK2大小的空间*/ if(p==NULL)/*如果p为空*/ { printf(“memory is overflown!”);/*显示内存溢出*/ exit(0);/*退出*/ } p->data=x;/*保存值x到新空间*/ p->link=top;/*新结点的后继为当前栈顶指针*/ top=p;/*新的栈顶指针为新插入的结点*/ return top;/*返回栈顶指针*/ } STACK2 *pop2(STACK2 *top)/*出栈*/ { STACK2 *q;/*定义临时变量*/ q=top;/*保存当前栈顶指针*/ top=top->link;/*栈顶指针后移*/ free(q);/*释放q*/ return top;/*返回栈顶指针*/ } char topx2(STACK2 *top)/*读栈顶元素*/ { if(top==NULL)/*栈是否为空*/ { printf(“Stack is nulln”);/*显示栈为空信息*/ return '';/*返回空字符*/ } return top->data;/*返回栈顶元素*/ } STACK2 *ptop2(STACK2 *top,char *x)/*取栈顶元素,并删除栈顶元素*/ { *x=topx2(top);/*读栈顶元素*/ top=pop2(top);/*删除栈顶元素*/ return top;/*返回栈顶指针*/ } int empty2(STACK2 *top)/*判栈是否为空*/ { if(top==NULL)/*如果为空*/ return 1;/*返回1*/ else return 0;/*否则返回0*/ }

int text1(char *s){ setbkcolor(BLUE);/*设置背景颜色为蓝色*/ cleardevice();/*清除屏幕*/ setcolor(12);/*设置文本颜色为淡红色*/ settextstyle(1, 0, 8);/*三重笔划字体, 放大8倍*/ outtextxy(120, 120, s);/*输出字符串s*/ setusercharsize(2, 1, 4, 1);/*水平放大2倍, 垂直放大4倍*/ setcolor(15);/*设置文本颜色为*白色/ settextstyle(3, 0, 5);/*无衬字笔划, 放大5倍*/ outtextxy(220, 220, s);/*输出字符串s*/ getch();/*键盘输入任一字符*/ return;/*返回*/ }

案例七 数据结构CAI系统 案例八 进程调度 #include “stdio.h” #include “stdlib.h” #include “string.h” typedef struct node { char name[10];/*进程标识符*/ int prio;/*进程优先数*/ int round;/*进程时间轮转时间片*/ int cputime;/*进程占用CPU时间*/ int needtime;/*进程到完成还要的时间*/ int count;/*计数器*/ char state;/*进程的状态*/ struct node *next;/*链指针*/ }PCB;PCB *finish,*ready,*tail,*run;/*队列指针*/ int N;/*进程数*/ /*将就绪队列中的第一个进程投入运行*/ firstin(){ run=ready;/*就绪队列头指针赋值给运行头指针*/ run->state='R';/*进程状态变为运行态*/ ready=ready->next;/*就绪对列头指针后移到下一进程*/ } /*标题输出函数*/ void prt1(char a){ if(toupper(a)=='P')/*优先数法*/ printf(“ name cputime needtime priority staten”);else printf(“ name cputime needtime count round staten”);} /*进程PCB输出*/ void prt2(char a,PCB *q){ if(toupper(a)=='P')/*优先数法的输出*/ printf(“ %-10s%-10d%-10d%-10d %cn”,q->name, q->cputime,q->needtime,q->prio,q->state);else/*轮转法的输出*/ printf(“ %-10s%-10d%-10d%-10d%-10d %-cn”,q->name, q->cputime,q->needtime,q->count,q->round,q->state);} /*输出函数*/ void prt(char algo){ PCB *p;prt1(algo);/*输出标题*/ if(run!=NULL)/*如果运行指针不空*/ prt2(algo,run);/*输出当前正在运行的PCB*/ p=ready;/*输出就绪队列PCB*/ while(p!=NULL){ prt2(algo,p);p=p->next;} p=finish;/*输出完成队列的PCB*/ while(p!=NULL){ prt2(algo,p);p=p->next;} getch();/*压任意键继续*/ } /*优先数的插入算法*/ insert1(PCB *q){ PCB *p1,*s,*r;int b;s=q;/*待插入的PCB指针*/ p1=ready;/*就绪队列头指针*/ r=p1;/*r做p1的前驱指针*/ b=1;while((p1!=NULL)&&b)/*根据优先数确定插入位置*/ if(p1->prio>=s->prio){ r=p1;p1=p1->next;} else b=0;if(r!=p1)/*如果条件成立说明插入在r与p1之间*/ { r->next=s;s->next=p1;} else { s->next=p1;/*否则插入在就绪队列的头*/ ready=s;} } /*轮转法插入函数*/ insert2(PCB *p2){ tail->next=p2;/*将新的PCB插入在当前就绪队列的尾*/ tail=p2;p2->next=NULL;} /*优先数创建初始PCB信息*/ void create1(char alg){ PCB *p;int i,time;char na[10];ready=NULL;/*就绪队列头指针*/ finish=NULL;/*完成队列头指针*/ run=NULL;/*运行队列指针*/ printf(“Enter name and time of procen”);/*输入进程标识和所需时间创建PCB*/ for(i=1;iname,na);p->cputime=0;p->needtime=time;p->state='w';p->prio=50-time;if(ready!=NULL)/*就绪队列不空调用插入函数插入*/ insert1(p);else { p->next=ready;/*创建就绪队列的第一个PCB*/ ready=p;} } clrscr();printf(“ output of priority:n”);printf(“************************************************n”);prt(alg);/*输出进程PCB信息*/ run=ready;/*将就绪队列的第一个进程投入运行*/ ready=ready->next;run->state='R';} /*轮转法创建进程PCB*/ void create2(char alg){ PCB *p;int i,time;char na[10];ready=NULL;finish=NULL;run=NULL;printf(“Enter name and time of round procen”);for(i=1;iname,na);p->cputime=0;p->needtime=time;p->count=0;/*计数器*/ p->state='w';p->round=2;/*时间片*/ if(ready!=NULL)insert2(p);else { p->next=ready;ready=p;tail=p;} } clrscr();printf(“ output of roundn”);printf(“************************************************n”);prt(alg);/*输出进程PCB信息*/ run=ready;/*将就绪队列的第一个进程投入运行*/ ready=ready->next;run->state='R';} /*优先数调度算法*/ priority(char alg){ while(run!=NULL)/*当运行队列不空时,有进程正在运行*/ { run->cputime=run->cputime+1;run->needtime=run->needtime-1;run->prio=run->prio-3;/*每运行一次优先数降低3个单位*/ if(run->needtime==0)/*如所需时间为0将其插入完成队列*/ { run->next=finish;finish=run;run->state='F';/*置状态为完成态*/ run=NULL;/*运行队列头指针为空*/ if(ready!=NULL)/*如就绪队列不空*/ firstin();/*将就绪对列的第一个进程投入运行*/ } else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/ if((ready!=NULL)&&(run->prioprio)){ run->state='W';insert1(run);firstin();/*将就绪队列的第一个进程投入运行*/ } prt(alg);/*输出进程PCB信息*/ } } /*时间片轮转法*/ roundrun(char alg){ while(run!=NULL){ run->cputime=run->cputime+1;run->needtime=run->needtime-1;run->count=run->count+1;if(run->needtime==0)/*运行完将其变为完成态,插入完成队列*/ { run->next=finish;finish=run;

C语言程序设计扫雷游戏

C语言程序设计报告题目: 扫雷小游戏设计电子通信与物理学院 日期:2018年7月 12 日指导教师评语目录1.课程设计内容 ............................................................

C语言程序设计

1.Problem A: Hello world! Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。Input 无Output 请输出: Hello Da_min, Hello......

C 语言程序设计

《C 语言程序设计》主要在计算机软件、计算机网络、计算机应用、通信技术、智能电子、电子信息工程、多媒体以及核工程与核技术等专业中开设,是电子信息类、机械类等工科专业......

C语言程序设计扫雷游戏实验报告

中南大学程序设计基础实践报告学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 完成时间 2014.1 题 目 设计一个和window系统类似的小游戏【挖地雷】......

C语言程序设计扫雷游戏实验报告

中南大学程序设计基础实践报告学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 完成时间 2014.1 题 目 设计一个和window系统类似的小游戏【挖地雷】......

下载编游戏 C语言程序设计案例精编word格式文档
下载编游戏 C语言程序设计案例精编.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文