求C语言小游戏源程序

求C语言小游戏源程序,第1张

我的楼主可以自己玩一下

试试吧

#define N 200

#include <graphicsh>

#include <stdlibh>

#include <dosh>

#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:\\tc");

cleardevice();

}

/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙/

void DrawK(void)

{

/setbkcolor(LIGHTGREEN);/

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/设置线型/

for(i=50;i<=600;i+=10)/画围墙/

{

rectangle(i,40,i+10,49); /上边/

rectangle(i,451,i+10,460);/下边/

}

for(i=40;i<=450;i+=10)

{

rectangle(50,i,59,i+10); /左边/

rectangle(601,i,610,i+10);/右边/

}

}

/玩游戏具体过程/

void GamePlay(void)

{

randomize();/随机数发生器/

foodyes=1;/1表示需要出现新食物,0表示已经存在食物/

snakelife=0;/活着/

snakedirection=1;/方向往右/

snakex[0]=100;snakey[0]=100;/蛇头/

snakex[1]=110;snakey[1]=100;

snakenode=2;/节数/

PrScore();/输出得分/

while(1)/可以重复玩游戏,压ESC键结束/

{

while(!kbhit())/在没有按键的情况下,蛇自己移动身体/

{

if(foodyes==1)/需要出现新食物/

{

foodx=rand()%400+60;

foody=rand()%350+60;

while(foodx%10!=0)/食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到/

foodx++;

while(foody%10!=0)

foody++;

foodyes=0;/画面上有食物了/

}

if(foodyes==0)/画面上有食物了就要显示/

{

setcolor(GREEN);

rectangle(foodx,foody,foodx+10,foody-10);

}

for(i=snakenode-1;i>0;i--)/蛇的每个环节往前移动,也就是贪吃蛇的关键算法/

{

snakex[i]=snakex[i-1];

snakey[i]=snakey[i-1];

}

/1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/

switch(snakedirection)

{

case 1:snakex[0]+=10;break;

case 2: snakex[0]-=10;break;

case 3: snakey[0]-=10;break;

case 4: snakey[0]+=10;break;

}

for(i=3;i<snakenode;i++)/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来/

{

if(snakex[i]==snakex[0]&&snakey[i]==snakey[0])

{

GameOver();/显示失败/

snakelife=1;

break;

}

}

if(snakex[0]<55||snakex[0]>595||snakey[0]<55||

snakey[0]>455)/蛇是否撞到墙壁/

{

GameOver();/本次游戏结束/

snakelife=1; /蛇死/

}

if(snakelife==1)/以上两种判断以后,如果蛇死就跳出内循环,重新开始/

break;

if(snakex[0]==foodx&&snakey[0]==foody)/吃到食物以后/

{

setcolor(0);/把画面上的食物东西去掉/

rectangle(foodx,foody,foodx+10,foody-10);

snakex[snakenode]=-20;snakey[snakenode]=-20;

/新的一节先放在看不见的位置,下次循环就取前一节的位置/

snakenode++;/蛇的身体长一节/

foodyes=1;/画面上需要出现新的食物/

score+=10;

PrScore();/输出新得分/

}

setcolor(4);/画出蛇/

for(i=0;i<snakenode;i++)

rectangle(snakex[i],snakey[i],snakex[i]+10,

snakey[i]-10);

delay(gamespeed);

setcolor(0);/用黑色去除蛇的的最后一节/

rectangle(snakex[snakenode-1],snakey[snakenode-1],

snakex[snakenode-1]+10,snakey[snakenode-1]-10);

} /endwhile(!kbhit)/

if(snakelife==1)/如果蛇死就跳出循环/

break;

key=bioskey(0);/接收按键/

if(key==ESC)/按ESC键退出/

break;

else

if(key==UP&&snakedirection!=4)

/判断是否往相反的方向移动/

snakedirection=3;

else

if(key==RIGHT&&snakedirection!=2)

snakedirection=1;

else

if(key==LEFT&&snakedirection!=1)

snakedirection=2;

else

if(key==DOWN&&snakedirection!=3)

snakedirection=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<stdioh>

#include <stringh>

#define NULL 0

#define LEN sizeof(struct student)

struct date

{ int year;

int month;

int day;

};

struct xueke

{

int pingshi;

int shiyan;

int kaoshi;

float zchji;

};

struct student

{

int num;

char name[10];

char sex;

struct date birthday;

struct xueke xk[2];

struct student next; /指向下一个结构体数据类型/

};

typedef struct student score; /用score来代替类型struct student/

int n,k; /nk为全局变量,n表示结点个数,k表示人数/

score r=NULL; /定义一个全局变量指针/

score stu;

/菜单/

int caidan(k)

{

int i;

printf("\n\n\n\t\t\t\t考试成绩管理系统\n");

printf("\t\t\t作者:薛文波、魏文清、姚志浩\n");

for(i=1;i<79;i++)

printf("");

printf("\n");

printf("1输入学生资料\t\t2输出学生资料\t\t3统计学生资料\n");

printf("4删除学生资料\t\t5查询学生资料\t\t6排序学生资料\n");

printf("7插入学生资料\t\t8更新学生资料\t\t9保存学生资料\n");

printf("0退出!\n");

for(i=1;i<79;i++)

printf("");

printf("\n");

printf("请输入你所要 *** 作的选项:");

scanf("%d",&k);

printf("\n");

getchar();

return(k);

}

//

save(score head)

{

score q=head;

FILE fp; /调用fopen()函数打开磁盘文件/

char wjlj[90];

printf("请输入文件的路经:");

scanf("%s",wjlj);

if((fp=fopen(wjlj,"w"))==NULL) /为读、写建立一个新的二进制文件 /

{

printf("文件打开失败!\n");

return(0);

}

fprintf(fp,"\n");

fprintf(fp,"|学号|姓名|性别|生 日 |");

fprintf(fp,"C(平时实验考试综合)|");

fprintf(fp,"高数(平时实验考试综合)\n");

fprintf(fp,"\n");

while(q!=NULL)

{

fprintf(fp,"|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthdayyear,q->birthdaymonth,q->birthdayday);

fprintf(fp,"%5d|%5d|%5d|%1f|",q->xk[0]pingshi,q->xk[0]shiyan,q->xk[0]kaoshi,q->xk[0]zchji);

fprintf(fp,"%5d|%5d|%5d|%1f\n",q->xk[1]pingshi,q->xk[1]shiyan,q->xk[1]kaoshi,q->xk[1]zchji);

q=q->next;

}

fclose(fp); /关闭文件指针fP指向的文件/

printf("文件已保存\n");

return(0);

}

/输入模块/

score creat(void)

{

score head,p1,p2; /定义一个头指针和两个工作点/

int i;

head=NULL;

n=0;

p1=(struct student )malloc(LEN); /用P1开辟一个新单元/

printf("1请输入学生资料(输0退出):\n");

printf("a请输入学生学号(学号应大于0):");

scanf("%d",&p1->num);

while(p1->num<0)

{

printf("输入错误,请重新输入:"); / 学号小于零报错/

scanf("%d",&p1->num);

}

while(p1->num!=0)

{ printf("b请输入学生的姓名:");

scanf("%s",p1->name);

printf("请输入学生的性别(M&&F):");

scanf(" %c",&p1->sex);

while(p1->sex!='M'&&p1->sex!='F') /判断输入性别时的字母是否为M或F/

{

printf("输入错误,请重新输入学生的性别:");

scanf(" %c",&p1->sex);

}

printf("c请输入学生的生日(年月日):");

scanf(" %d%d%d",&p1->birthdayyear,&p1->birthdaymonth,&p1->birthdayday);

printf("d请输入学生的成绩!\n");

printf("1请输入 C 成绩(平时,实验,考试):");

scanf(" %d,%d,%d",&p1->xk[0]pingshi,&p1->xk[0]shiyan,&p1->xk[0]kaoshi);

p1->xk[0]zchji=p1->xk[0]pingshi01+p1->xk[0]shiyan02+p1->xk[0]kaoshi07;

printf("2请输入高数成绩(平时,实验,考试):");

scanf(" %d,%d,%d",&p1->xk[1]pingshi,&p1->xk[1]shiyan,&p1->xk[1]kaoshi);

p1->xk[1]zchji=p1->xk[1]pingshi01+p1->xk[1]shiyan02+p1->xk[1]kaoshi07;

n=n+1; /结点个数加一/

if(n==1) head=p2=p1; /若为首结点,则头指针指向本结点/

else p2->next=p1;

p2=p1; /若不是首结点 则把本结点链接到尾部/

p1=(struct student )malloc(LEN);

printf("\n");

printf("1请输入学生资料(输0退出):\n");

printf("a请输入学生的学号(学号应大于0):");

scanf("%d",&p1->num);

while(p1->num<0) /判断输入的学号是否小于0/

{

printf("输入错误,输入错误请重新输入学号:");

scanf("%d",&p1->num);

}

}

p2->next=NULL; / 最后结点不指向任何地址/

free(p1); /释放结点占用空间/

return(head);

}

/输出模块/

void print(score head)

{

score q=head;

printf("\n输出%d个学生的资料:\n",n);

printf("\n");

printf("|学号|姓名|性别|生 日 |");

printf("C(平时实验考试综合)|");

printf("高数(平时实验考试综合)\n");

printf("\n");

if(head==NULL)

{

printf("\n没有这个学生的资料!\n");

return;

}

while(q!=NULL)

{

printf("|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthdayyear,q->birthdaymonth,q->birthdayday);

printf("%5d|%5d|%5d|%1f|",q->xk[0]pingshi,q->xk[0]shiyan,q->xk[0]kaoshi,q->xk[0]zchji);

printf("%5d|%5d|%5d|%1f \n",q->xk[1]pingshi,q->xk[1]shiyan,q->xk[1]kaoshi,q->xk[1]zchji);

q=q->next; /q指针依次向下扫描/

}

printf("\n\n");

}

/统计模块/

score tongji(score head)

{

score q=head,max,min;

int i,k1[2]={0,0},k2[2]={0,0},k3[2]={0,0}; /将人数统计值的初始值赋为0/

float czong=0,gzong=0,caver,gaver;

q=head; /工作点首先指向头指针/

max=q;

min=q;

while(q!=NULL)

{

czong+=q->xk[0]zchji; /P1指向学生总成绩/

gzong+=q->xk[1]zchji;

for(i=0;i<2;i++)

{

if(q->xk[i]zchji>max->xk[i]zchji)

max=q; /将最大值的地址赋给P1/

if(q->xk[i]zchji<min->xk[i]zchji)

min=q;

if(q->xk[i]zchji>=80) k1[i]++; /k1[i]++为人数的统计/

else if(q->xk[i]zchji>=60) k2[i]++;

else k3[i]++; /分段成绩的人数统计/

}

q=q->next;

}

caver=czong/n; /计算C的平均成绩/

gaver=gzong/n; /计算math平均成绩/

printf("C 语言成绩的总分为:%2f C 语言成绩的平均分为:%2f\n",czong,caver);

printf("C 语言成绩的最高分为:%2f C 语言成绩的最低分为:%2f\n",max->xk[0]zchji,min->xk[0]zchji);

printf("C 语言成绩优秀的人数为:%d\n",k1[0]);

printf("C 语言成绩良好的成绩为:%d\n",k2[0]);

printf("C 语言成绩及格的人数为:%d\n",k1[0]+k2[0]);

printf("C 语言成绩不及格的人数为:%d\n",k3[0]);

printf("高数成绩的总分为:%2f 高数成绩的平均分为:%2f\n",gzong,gaver);

printf("高数成绩的最高分为:%2f 高数成绩的最低分为:%2f\n",max->xk[1]zchji,min->xk[1]zchji);

printf("高数成绩优秀的人数为:%d\n",k1[1]);

printf("高数成绩良好的人数为:%d\n",k2[1]);

printf("高数成绩及格的人数为:%d\n",k1[1]+k2[1]);

printf("高数成绩不及格的人数为:%d\n",k3[1]);

return(head);

}

/按学号查询模块/

void chaxun2(score head)

{

score q=head;

int sss=0;

char name[10];

printf("请输入要查询的学生姓名:");

scanf("%s",name);

while(q!=NULL)

{

if(strcmp(name,q->name)==0) /通过字符串的比较按姓名查找/

{

printf("\n");

printf("|学号|姓名|性别|生 日 |");

printf("C(平时实验考试综合)|");

printf("高数(平时实验考试综合)\n");

printf("\n");

printf("|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthdayyear,q->birthdaymonth,q->birthdayday);

printf("%5d|%5d|%5d|%1f|",q->xk[0]pingshi,q->xk[0]shiyan,q->xk[0]kaoshi,q->xk[0]zchji);

printf("%5d|%5d|%5d|%1f\n",q->xk[1]pingshi,q->xk[1]shiyan,q->xk[1]kaoshi,q->xk[1]zchji);

printf("\n");

sss=3; /定义变量不等于初始值则退出循环体/

}

q=q->next;

}

if(sss==0) printf("没有这个学生的资料!\n\n");

}

/按学号查询/

void chaxun1(score head)

{

score q=head;

int num,sss=0;

printf("请输入要查询的学生学号:");

scanf("%d",&num);

while(q!=NULL)

{

if(num==q->num)

{

printf("\n");

printf("|学号|姓名|性别|生 日 |");

printf("C(平时实验考试综合)|");

printf("高数(平时实验考试综合)\n");

printf("\n");

printf("|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthdayyear,q->birthdaymonth,q->birthdayday);

printf("%5d|%5d|%5d|%1f|",q->xk[0]pingshi,q->xk[0]shiyan,q->xk[0]kaoshi,q->xk[0]zchji);

printf("%5d|%5d|%5d|%1f\n",q->xk[1]pingshi,q->xk[1]shiyan,q->xk[1]kaoshi,q->xk[1]zchji);

printf("\n");

sss=3;

}

q=q->next;

}

if(sss==0) printf("没有这个学生的资料!\n\n");

}

/查询二级菜单/

chaxun_cd()

{

int m=0,i;

while(m==0)

{

printf("查询学生的资料\n");

printf("1按学号查询\n");

printf("2按姓名查询\n");

printf("请选择你所要 *** 作的选项(按0退出):");

scanf("%d",&i);

switch(i)

{

case 1:chaxun1(r);break; /break表示跳出循环结构结束循环退出包含break语句的那层循环体/

case 2:chaxun2(r);break;

case 0:m=1;break;

default:printf("错误,重新选择:");break;

}

}

}

/按学号删除/

score del1(score head)

{

score p1,p2;

int num;

printf("请输入要删除学生的学号:");

scanf("%d",&num);

if(head==NULL)

{

printf("没有这个学生的资料!\n\n");

return(head);

}

p2=p1=head;

while(num!=p1->num&&p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(num==p1->num)

{

if(head==p1)

head=head->next;

else

p2->next=p1->next;

free(p1);

p1=p2;

printf("第%d 学生的资料已删除完毕!\n\n",num);

}

else printf("没有这个学生的资料!\n\n");

return(head);

}

//

score del2(score head)

{

score p1,p2;

char name[10];

printf("请输入要删除学生的姓名:");

scanf("%s",name);

if(head==NULL)

{

printf("没有这个学生的资料!\n\n");

return(head);

}

p2=p1=head;

while(strcmp(name,p1->name)!=0&&p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(strcmp(name,p1->name)==0)

{

if(head==p1)

head=head->next;

else

p2->next=p1->next;

free(p1);

p1=p2;

printf("名字叫%s的学生的资料已被删除!\n\n",name);

}

else printf("没有这个学生的资料!\n\n");

return(head);

}

//

del_cd()

{

int m=0,i;

while(m==0)

{

printf("删除学生的资料\n");

printf("1按学号删除\n");

printf("2按姓名删除\n");

printf("3查看删除结果\n");

printf("请选择你所要 *** 作的选项(按0退出):");

scanf("%d",&i);

switch(i)

{

case 1:r=del1(r);break;

case 2:r=del2(r);break;

case 3:print(r);break;

case 0:m=1;break;

default:printf("错误,重新选择:");break;

}

}

}

/按学号排序/

score paixu2(score head)

{

score p1,p2,k,h;

int i;

if(head==NULL)

{

printf("没有任何学生的资料!");

return(head);

}

p1=head;

p2=head->next;

k=p1;

for(i=0;i<n-1;i++)

{

while(p2!=NULL)

{

if(k->num>p2->num)

k=p2;

p2=p2->next;

}

if(k!=p1)

{

h=k;

k=p1;

p1=h;

hnext=k->next;

k->next=p1->next;

p1->next=hnext;

}

p1=p1->next;

p2=p1->next;

k=p1;

}

printf("排序成功!\n\n");

return(head);

}

//

score paixu1(score head)

{

score p1,p2,k,h;

int i;

if(head==NULL)

{

printf("没有任何学生的资料!");

return(head);

}

p1=head;

p2=head->next;

k=p1;

for(i=0;i<n-1;i++)

{

while(p2!=NULL)

{

if(k->xk[0]zchji>p2->xk[0]zchji)

k=p2;

p2=p2->next;

}

if(k!=p1)

{

h=k;

k=p1;

p1=h;

hnext=k->next;

k->next=p1->next;

p1->next=hnext;

}

p1=p1->next;

p2=p1->next;

k=p1;

}

printf("排序成功!\n\n");

return(head);

}

//

paixu_cd()

{

int m=0,i;

while(m==0)

{

printf("对学生的资料进行排序\n");

printf("1按C语言成绩排序\n");

printf("2按学号排序\n");

printf("请选择你所要 *** 作的选项(按0退出):");

scanf("%d",&i);

switch(i)

{

case 1:r=paixu1(r);break;

case 2:r=paixu2(r);break;

case 0:m=1;break;

default:printf("错误,重新选择:");break;

}

}

}

/按C成绩插入/

score charu1(score head,score stu)

{

score p1,p2;

int i;

p1=head;

r=paixu1(r);

stu=(score)malloc(LEN); /开辟一个新单元,用于保存要插入的信息/

printf("请输入要增加的学生资料:\n");

printf("请输入要增加的学生学号:");

scanf("%d",&stu->num);

while(stu->num<0) /判断学号是否小于0/

{

printf("输入错误,输入错误请重新输入学号:");

scanf("%d",&stu->num);

}

printf("b请输入要增加的学生姓名:");

scanf("%s",stu->name);

printf("请输入要增加的学生性别(F或M):");

scanf(" %c",&stu->sex);

while(stu->sex!='M'&&stu->sex!='F')

{

printf("输入错误,输入错误请重新输入性别:");

scanf(" %c",&stu->sex);

}

printf("c请输入要增加的学生生日(年月日):");

scanf(" %d%d%d",&stu->birthdayyear,&stu->birthdaymonth,&stu->birthdayday);

printf("d请输入要增加的学生成绩!\n");

printf("1请输入要增加的学生C语言成绩(平时,实验,考试):");

scanf(" %d,%d,%d",&stu->xk[0]pingshi,&stu->xk[0]shiyan,&stu->xk[0]kaoshi);

stu->xk[0]zchji=stu->xk[0]pingshi01+stu->xk[0]shiyan02+stu->xk[0]kaoshi07;

printf("2请输入要增加的学生高数成绩(平时,实验,考试):");

scanf(" %d,%d,%d",&stu->xk[1]pingshi,&stu->xk[1]shiyan,&stu->xk[1]kaoshi);

stu->xk[1]zchji=stu->xk[1]pingshi01+stu->xk[1]shiyan02+stu->xk[1]kaoshi07;

if(head==NULL) /判断头指针是否为空/

{

head=stu;

stu->next=NULL; /如果为空,直接插入头上/

n++; /人数加一/

return(head);

}

while(p1->xk[0]zchji<stu->xk[0]zchji&&p1->next!=NULL) /根据C成绩确定要插入的位置/

{

p2=p1;

p1=p1->next;

}

if(stu->xk[0]zchji<=p1->xk[0]zchji)

{

if(p1==head) /如果p1指向头指针 /

{

head=stu;

stu->next=p1;

n++;

}

else

{

stu->next=p2->next;

p2->next=stu;

n++;

}

}

else

{

p1->next=stu;

stu->next=NULL;

n++;

}

printf("增加学生资料成功!\n");

return(head);

}

/按学号插入/

score charu2(score head,score stu)

{

score p1,p2;

int i=0;

p1=head;

r=paixu2(r); /调用排序函数/

stu=(score)malloc(LEN); /开辟一个新单元,用于保存要插入的信息/

printf("请输入要增加的学生资料:\n");

printf("请输入要增加的学生学号:");

scanf("%d",&stu->num);

while(stu->num<0)

{

printf("输入错误,输入错误请重新输入学号:");

scanf("%d",&stu->num);

}

printf("b请输入要增加的学生姓名:");

scanf("%s",stu->name);

printf("请输入要增加的学生性别(F或M):");

scanf(" %c",&stu->sex);

while(stu->sex!='M'&&stu->sex!='F')

{

printf("输入错误,输入错误请重新输入性别:");

scanf(" %c",&stu->sex);

}

printf("c请输入要增加的学生生日(年月日):");

scanf(" %d%d%d",&stu->birthdayyear,&stu->birthdaymonth,&stu->birthdayday);

printf("d请输入要增加的学生的成绩!\n");

printf("1请输入要增加的学生C语言成绩(平时,实验,考试):");

scanf(" %d,%d,%d",&stu->xk[0]pingshi,&stu->xk[0]shiyan,&stu->xk[0]kaoshi);

stu->xk[0]zchji=stu->xk[0]pingshi01+stu->xk[0]shiyan02+stu->xk[0]kaoshi07;

printf("2请输入要增加的学生高数的成绩(平时,实验,考试):");

scanf(" %d,%d,%d",&stu->xk[1]pingshi,&stu->xk[1]shiyan,&stu->xk[1]kaoshi);

stu->xk[1]zchji=stu->xk[1]pingshi01+stu->xk[1]shiyan02+stu->xk[1]kaoshi07;

if(head==NULL) /判断头指针是否为空/

{

head=stu;

stu->next=NULL;

n++;

return(head);

}

while(p1->num<stu->num&&p1->next!=NULL) /根据学号确定要插入的位置/

{

p2=p1;

p1=p1->next;

}

if(stu->num<=p1->num)

{

if(p1==head)

{

head=stu;

stu->next=p1;

n++;

}

else

{

stu->next=p2->next;

p2->next=stu;

n++;

}

}

else

{

p1->next=stu;

stu->next=NULL;

n++;

}

printf("增加学生资料成功!\n");

printf("\n");

return(head); /返回头指针/

}

/插入的二级菜单/

charu_cd()

{

int m=0,i;

while(m==0)

{

printf("增加学生的人数\n");

printf("\n1按C语言成绩增加\n");

printf("2按学号增加\n");

printf("请选择你所要 *** 作的选项(按0退出):");

scanf("%d",&i);

switch(i)

{

case 1:r=charu1(r,stu);break;

case 2:r=charu2(r,stu);break;

case 0:m=1;break;

default:printf("错误,重新选择:");break;

}

}

}

#include <stdioh>

#include <stdlibh>

struct node

{

int num;

struct node next;

};

/建立链表/

struct node creat(int n)

{

int x, i;

struct node head, p, r;

head=(struct node)malloc(sizeof(struct node));

r=head;

printf("请输入数字\r\n");

for(i=0; i<n; i++)

{

scanf("%d", &x);

p=(struct node)malloc(sizeof(struct node));

p->num=x;

r->next=p;

r=p;

}

r->next=NULL;

return(head);

}

/删除重复结点/

void delet(struct node head)

{

struct node p, q, r;

p=head->next;

while(p!=NULL)

{

q=p;

while(q->next!=NULL)

{

r=q->next;

if(r->num==p->num)

{

if(r->next!=NULL)

{

q->next=r->next;

free(r);

}

else

{

q->next=NULL;

free(r);

}

}

else

{

q=r;

}

}

p=p->next;

}

}

/排序/

void sort(struct node head)

{

struct node p, q, small;

int temp;

for(p=head->next; p->next!=NULL; p=p->next)

{

small=p;

for(q=p->next; q!=NULL ;q=q->next)

{

if(q->num<small->num)

small=q;

}

if(small!=p)

{

temp=small->num;

small->num=p->num;

p->num=temp;

}

}

}

/输出/

void output(struct node head)

{

struct node pt;

pt=head->next;

while(pt!=NULL)

{

printf("%d\r\n", pt->num);

pt=pt->next;

}

}

main()

{

int n;

struct node head;

printf("输入数字的个数n\r\n");

scanf("%d", &n);

head=creat(n);

printf("输入的数字\r\n");

output(head);

delet(head);

printf("删除重复结点后输出数字\r\n");

output(head);

sort(head);

printf("排序后输出数字\r\n");

output(head);

free(head);

}

希望能对你有帮助,俺也学C不到两个月,共同进步啊!

这个一个VC中画圆的代码(可能你还需要配置编译环境):

#include <GL/gluth> // 设置头文件

#include <stdlibh>

#include <mathh>

/void setPixel ( int x, int y)

{

glBegin ( GL_POINTS);

glVertex2i (x, y);

glEnd ();

}

inline int round (const float a ) { return int (a + 05); }

void lineDDA (int x0, int y0, int xEnd, int yEnd)

{

int dx = xEnd - x0, dy = yEnd - y0, steps, k;

float xIncrement, yIncrement, x = x0, y = y0;

if (fabs (dx) > fabs (dy))

steps = fabs (dx);

else

steps = fabs (dy);

xIncrement = float (dx) / float (steps);

yIncrement = float (dy) / float (steps);

setPixel (round (x), round (y));

for (k = 0; k < steps; k++) {

x += xIncrement;

y += yIncrement;

setPixel (round (x), round (y));

}

} /

class screenPt

{

private:

GLint x,y;

public:

screenPt()

{

x=y=0;

}

void setCoords (GLint xCoordValue,GLint yCoordValue)

{

x=xCoordValue;

y=yCoordValue;

}

GLint getx() const{

return x;

}

GLint gety() const{

return y;

}

void incrementx()

{

x++;

}

void decrementy()

{

y--;

}

};

void setPixel(GLint xCoord,GLint yCoord)

{

glBegin (GL_POINTS);

glVertex2i(xCoord,yCoord);

glEnd();

}

void circleMidpoint(GLint xc,GLint yc,GLint radius)

{

screenPt circPt;

GLint p=1-radius; //决策参数

circPtsetCoords(0,radius);

void circlePlotPoints (GLint ,GLint,screenPt);

circlePlotPoints(xc,yc,circPt);

while(circPtgetx()<circPtgety())

{

circPtincrementx();

if(p<0)

p += 2circPtgetx() + 1;

else

{

circPtdecrementy();

p += 2(circPtgetx() - circPtgety()) + 1;

}

circlePlotPoints(xc,yc,circPt);

}

}

void circlePlotPoints(GLint xc,GLint yc,screenPt circPt)

{

setPixel (xc + circPtgetx(),yc + circPtgety());

setPixel (xc - circPtgetx(),yc + circPtgety());

setPixel (xc + circPtgetx(),yc - circPtgety());

setPixel (xc - circPtgetx(),yc - circPtgety());

setPixel (xc + circPtgety(),yc + circPtgetx());

setPixel (xc - circPtgety(),yc + circPtgetx());

setPixel (xc + circPtgety(),yc - circPtgetx());

setPixel (xc - circPtgety(),yc - circPtgetx());

}

void init (void) // 初始化函数

{

glClearColor (10, 10, 10, 00); // 设置清屏的颜色(Red,green,blue),但不能让该颜色在显示窗上

// 出现

glMatrixMode (GL_PROJECTION); // 设置投影矩阵

glLoadIdentity (); // 单位化上述投影矩阵

gluOrtho2D (00, 8000, 00, 6000); // 设置具体投影 矩阵为平面正交投影 4/3

}

void lineSegment (void) //绘图函数

{

glClear (GL_COLOR_BUFFER_BIT); // 按glClearColor (10, 10, 10, 00);指定的颜色刷新颜色

glColor3f (10, 00, 00); //设置前景色,即画图的颜色

circleMidpoint(400,300,200);

glFlush ( ); // 在每一画面或场景的结尾处调用,强制前面发出的OpenGL 命令开始执行

}

void main (int argc, char argv) // OpenGL 绘图主函数

{

glutInit (&argc, argv); // 初始化GLUT 库

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // 设置 显示模式

glutInitWindowPosition (50, 100); // 窗口左上角像素坐标

glutInitWindowSize (800, 600); // 设置设备显示窗口大小 4/3

glutCreateWindow ("An Example OpenGL Program"); // 创建一个窗口,参数为窗口的标题

init ( ); // 函数调用

glutDisplayFunc (lineSegment); // 绘制当前窗口

glutMainLoop ( ); //通常用于程序的结尾,表示开始运行程序显示出所有创建的窗口

}

以上就是关于求C语言小游戏源程序全部的内容,包括:求C语言小游戏源程序、求一个C语言课程设计题的源程序代码,题目是:商品进销存管理程序。、求一个C语言链表源程序代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9989543.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存