当前位置:文档之家› C语言实训-小球碰撞游戏

C语言实训-小球碰撞游戏

C语言实训-小球碰撞游戏
C语言实训-小球碰撞游戏

实训项目一小球碰撞游戏程序的调试与运行

一、实训目的

通过本实例,主要目的是让学生掌握以下知识点:1、在C语言中如何绘制常见图形,绘图函数的使用。2、如何实现图形动画。3、如何处理按键响应。4、游戏算法的实现。

二、功能描述

本程序实现的游戏规则如下:游戏者通过键盘上的LEFT键和RIGH键控制屏幕下方的一个黄色矩形框左右移动,拦截向下运动的小球,小球碰到矩形上边的不同部位,会以不同的角度反弹。运动的小球碰到上边缘、左边缘、右边缘、和9个固定位置的小球都会发生碰撞反弹。如果运动的小球将屏幕上9个固定位置的小球全部打掉,则玩家获胜;如果小球掉出下边缘,则玩家失败,游戏结束。

三、编程参考

1、程序中使用的库函数说明

(1)图形模式的初始化与退出

在未设置图形模式之前, 微机系统默认屏幕为文本模式(80列, 25行字符模式), 此时所有图形函数均不能工作。设置屏幕为图形模式, 可用下列图形初始化函数: void far initgraph(int far *gdriver, int far *gmode, char *path);

其中gdriver和gmode分别表示图形驱动器和模式, path是指图形驱动程序所在的目录路径。

图形驱动程序由Turbo C出版商提供, 文件扩展名为.BGI。根据不同的图形适配器有不同的图形驱动程序。例如对于EGA、 VGA 图形适配器就调用驱动程序EGAVGA.BGI,所以 PATH 对应的实参应为文件EGAVGA.BGI的实际路径名。

void far closegraph(void);

该函数用于退出图形状态进入文本方式,并释放用于保存图形驱动程序和字体的系统内存。(2)屏幕颜色的设置和清屏函数

对于图形模式的屏幕颜色设置, 同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数。

设置背景色: void far setbkcolor( int color);

设置作图色: void far setcolor(int color);

其中color 为图形方式下颜色的规定数值, 对EGA, VGA显示器适配器, 有关颜色的符号常数及数值见下表所示。

有关屏幕颜色的符号常数表

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数数值含义符号常数数值含义

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

BLACK 0 黑色DARKGRAY 8 深灰

BLUE 1 兰色LIGHTBLUE 9 深兰

GREEN 2 绿色LIGHTGREEN 10 淡绿

CYAN 3 青色LIGHTCYAN 11 淡青

RED 4 红色LIGHTRED 12 淡红

MAGENTA 5 洋红LIGHTMAGENTA 13 淡洋红

BROWN 6 棕色YELLOW 14 黄色

LIGHTGRAY 7 淡灰WHITE 15 白色

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

清除图形屏幕内容使用清屏函数, 其调用格式如下:

voide far cleardevice(void);

有关颜色设置请参照上表。

(3)基本图形函数

基本图形函数包括画点, 线以及其它一些基本图形的函数。

(a)画点函数

void far putpixel(int x, int y, int color);

该函数表示有指定的象元画一个按color所确定颜色的点。x, y是指图形象元的坐标。(b)画线函数

TURBO C提供了一系列画线&&函数, 下面分别叙述

void far line(int x0, int y0, int x1, int y1);

画一条从点(x0, y0)到(x1, y1)的直线。

void far lineto(int x, int y);

画一作从现行游标到点(x, y)的直线。

void far linerel(int dx, int dy);

画一条从现行游标(x, y)到按相对增量确定的点(x+dx, y+dy)的直线。

void far circle(int x, int y, int radius);

以(x, y)为圆心, radius为半径, 画一个圆。

void far arc(int x, int y, int stangle, int endangle, int radius);

以(x, y)为圆心, radius为半径, 从stangle开始到endangle结束(用度表示)画一段圆弧线。在TURBO C中规定x轴正向为0度, 逆时针方向旋转一周, 依次为90, 180, 270和360度(其它有关&&函数也按此规定, 不再重述)。

void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius);以(x, y)为中心, xradius, yradius为x轴和y轴半径, 从角stangle 开始到endangle 结束画一段椭圆线, 当stangle=0, endangle=360时, 画出一个完整的椭圆。

void far rectangle(int x1, int y1, int x2, inty2);

以(x1, y1)为左上角, (x2, y2)为右下角画一个矩形框。

void far drawpoly(int numpoints, int far *polypoints);

画一个顶点数为numpoints, 各顶点坐标由polypoints 给出的多边形。polypoints整型数组必须至少有2倍顶点数个无素。每一个顶点的坐标都定义为x, y, 并且x在前。值得注意的是当画一个封闭的多边形时, numpoints 的值取实际多边形的顶点数加一, 并且数组polypoints中第一个和最后一个点的坐标相同。

(4)文本输出函数

下列用于在图形显示模式下的文本输出。

void far outtext(char far *textstring);

该函数在现行位置输出字符串指针textstring所指的文本。

void far outtextxy(int x, int y, char far *textstring);

该函数在规定的(x, y)位置输出字符串指针textstring所指的文本。其中x和y为象元坐标。(5)有关文本字体、字型和输出方式的设置

有关图形方式下的文本输出函数, 可以通过setcolor()函数设置输出文本的颜色。另外, 也可以改变文本字体大小以及选择是水平方向输出还是垂直方向输出。

void far settextstyle(int font, int direction, int charsize);

该函数用来设置输出字符的字形(由font确定)、输出方向(由direction确定)和字符大小(由charsize确定)等特性。Turbo C2.0对&&函数中各个参数的规定见下列各表所示:

font的取值

━━━━━━━━━━━━━━━━━━━━━━━━

符号常数数值含义

────────────────────────

DEFAULT_FONT 0 8*8点阵字(缺省值)

TRIPLEX_FONT 1 三倍笔划字体

SMALL_FONT 2 小号笔划字体

SANSSERIF_FONT 3 无衬线笔划字体

GOTHIC_FONT 4 黑体笔划字

━━━━━━━━━━━━━━━━━━━━━━━━

direction的取值

━━━━━━━━━━━━━━━━━━━━━━━━

符号常数数值含义

────────────────────────

HORIZ_DIR 0 从左到右

VERT_DIR 1 从底到顶

━━━━━━━━━━━━━━━━━━━━━━━━

charsize的取值

━━━━━━━━━━━━━━━━━━━━━━━━

符号常数或数值含义

────────────────────────

1 8*8点阵

2 16*16点阵

3 24*24点阵

4 32*32点阵

5 40*40点阵

6 48*48点阵

7 56*56点阵

8 64*64点阵

9 72*72点阵

10 80*80点阵

USER_CHAR_SIZE=0 用户定义的字符大小

━━━━━━━━━━━━━━━━━━━━━━━━

void far setusercharsize(int mulx, int divx, int muly, int divy);

该函数用来设置笔划型字和放大系数, 它只有在settextstyle( )函数中的charsize为0(或USER_CHAR_SIZE)时才起作用, 并且字体为函数settextstyle()规定的字体。调用该函数后, 每个显示在屏幕上的字符都以其缺省大小乘以mulx/divx为输出字符宽, 乘以muly/divy为输出字符高。

(6)其它函数

int bioskey(int cmd);

该函数用来执行各种键盘操作,由cmd确定操作。 cmd可为以下值:

取值为0 :返回敲键盘上的下一个键。若低8位为非0,即为ASCII字符;若低8位为0,则返回扩充了的键盘代码。

取值为1 :测试键盘是否可用于读。返回0表示没有键可用;否则返回下一次敲键之值。敲键本身一直保持由下次调用具的cmd值为0的bioskey所返回的值。

取值为2 :返回当前的键盘状态,由返回整数的每一个位表示,见下表:

┌──┬───────────┬───────────┐

│位│为0时意义│为1时意义│

├──┼───────────┼───────────┤

│ 7 │插入状态│改写状态│

│ 6 │大写状态│小写状态│

│ 5 │数字状态,NumLock灯亮│光标状态,NumLock灯熄│

│ 4 │ScrollLock灯亮│ScrollLock灯熄│

│ 3 │Alt按下│Alt未按下│

│ 2 │Ctrl按下│Ctrl未按下│

│ 1 │左Shift按下│左Shift未按下│

│ 0 │右Shift按下│右Shift未按下│

└──┴───────────┴───────────┘

int kbhit(void);

该函数检查当前按下的键。

void delay(unsigned milliseconds);

该函数将程序的执行暂停一段时间(毫秒)。

unsigned sleep(unsigned seconds);

该函数将程序执行挂起一段时间(秒)。

2、源程序

#include "GRAPHICS.H"

#include "MATH.H"

#include "stdio.h"

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define ESC 0x011b

int x,y,x1,y1,key,t1,t2,keyx,keylong,keymove,over=0,i,tt=0,fast;

int ballx[9]={53,183,263,120,86,390,40,350,600};

int bally[9]={158,139,160,113,30,213,120,263,281};

int ballz[9]={0};

float ls;

win()

{

float lx,ly,l1;

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

{

if(ballz[i]==1)

continue;

lx=(float)(ballx[i]-x);

ly=(float)(bally[i]-y);

l1=lx*lx+ly*ly;

ls=sqrt(l1);

if((int)ls<17)

{

tt++;

fast-=50;

if(i%2==0)

keymove+=5;

else

{

setcolor(0);

rectangle(keyx,460,key+keylong,470);

keylong-=10;

setcolor(YELLOW);

rectangle(keyx,460,keyx+keylong,470);

}

ballz[i]=1;

setcolor(0);

circle(ballx[i],bally[i],10);

if(y

if(x

{

t1=-1;

t2=-1;

}

else

{

t1=1;

t2=-1;

}

else

if(x

{

t1=1;

t2=1;

}

else

if(x

{

t1=-1;

t2=1;

}

else

{

t1=1;

t2=1;

}

}

}

}

fungo()

{

x=100,y=50,keyx=200,keylong=100,keymove=15,fast=5000;

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

{

setcolor(i+1);

circle(ballx[i],bally[i],10);

}

sleep(1);

t1=t2=1;

while(1)

{

while(!kbhit())

{

setcolor(YELLOW);

rectangle(keyx,460,keyx+keylong,470);

x1=x;

y1=y;

x+=t1;

y+=t2;

setcolor(4);

circle(x,y,6);

delay(fast);

setcolor(0);

circle(x,y,6);

win();

if(tt==9)

{

cleardevice();

over=1;

setcolor(RED);

settextstyle(0,0,4);

setusercharsize(3,1,3,1);

outtextxy(200,200,"YOU WIN!");

break;

}

if(y>480)

{

cleardevice();

over=1;

setcolor(RED);

settextstyle(0,0,4);

setusercharsize(3,1,3,1);

outtextxy(200,200,"GAME OVER");

break;

}

else if(x==6&&y==6)

{

t1=1;

t2=1;

}

else if(x==633&&y==6)

{

t1=-1;

t2=1;

}

else if(x==6)

{

if(y

{

t1=1;

t2=-1;

}

else

{

t1=1;

t2=1;

}

}

else if(y==6)

{

if(x

{

t1=-1;

t2=1;

}

else

{

t1=1;

t2=1;

}

}

else if(x==633)

{

if(y1>y)

{

t1=-1;

t2=-1;

}

else

{

t1=-1;

t2=1;

}

}

else if(y==454)

{

if(x>=keyx&&x<=keyx+keylong)

{

if(x<(keyx+keylong/4))

{

t1=-1;

t2=-1;

}

else if(x>=(keyx+keylong/4)&&x<(keyx+keylong/2))

{

t1=-1;

t2=-2;

}

else if(x>=(keyx+keylong/2)&&x<(keyx+keylong/4*3))

{

t1=1;

t2=-2;

}

else

{

t1=1;

t2=-1;

}

}

}

}

if (over) break;

key=bioskey(0);

setcolor(0);

rectangle(keyx,460,keyx+keylong,470);

if(key==ESC)

{cleardevice();break;}

else if(key==LEFT)

keyx-=keymove;

else if(key==RIGHT)

keyx+=keymove;

}

}

main()

{

int gd=DETECT,gr;

initgraph(&gd,&gr,"C:\\TC\\BGI");

setcolor(100);

fungo();

getch();

sleep(1);

closegraph();

}

四、实训习题

1、画出函数fungo()和win()的程序流程图。

2、改变固定小球的颜色、个数、位置和半径。

3、改变运动小球的速度和反弹的轨迹。

4、通过键盘输入运动小球的半径。

实训项目二学生成绩管理系统

一、实训目的

通过本实例,主要目的是让学生掌握以下知识点:1、结构体数组的定义和使用。2、结构体数据的输入与输出方法。3、插入、排序、查找、删除算法的实现。4、初步了解一个简单管理系统的设计方法。

完成下列功能:

1、输入:函数input把10个学生的学号、姓名、性别、年龄、四科成绩以及平均成绩和总成绩放在一个结构体数组中,学生的学号、姓名、四科成绩由键盘输入,然后计算出平均成绩和总成绩放在结构体对应的域中。

2、插入:insert 函数输入一个学生的记录,按学号的先后顺序插入该学生的全部内容。

3、排序:sort函数对所有学生按要求排序(1.学号 2.总成绩),并输出。

4、查找:find函数输入一个学生的学号或姓名,找到该学生并输出该学生的全部内容。要求能查询多次。

5、删除:delete函数输入一个学生的学号或姓名,找到该学生并删除该学生的全部内容。

6、输出:函数output 输出全部学生的记录。

7、main调用所有函数,实现全部函数功能(注:除了定义结构外,不允许使用全局变量,函数之间的数据全部使用参数传递)。

# include

# include

# include

struct node

{

int code;

char name[20];

char type;

int age;

int chinese;

int english;

int computer;

int math;

int total;

int average;

}stud[100];

struct node temp;

void menu(void)

{

system("clear");

printf("\t\t**************************\n");

printf("\t\t* *\n");

printf("\t\t* [1] 输入数据 *\n");

printf("\t\t* [2] 查找数据 *\n");

printf("\t\t* [3] 插入数据 *\n");

printf("\t\t* [4] 删除数据 *\n");

printf("\t\t* [5] 打印数据 *\n");

printf("\t\t* [6] 排序数据 *\n");

printf("\t\t* [7] 退出 *\n");

printf("\t\t* *\n");

printf("\t\t* *\n");

printf("\t\t**************************\n");

printf("\t\t 请输入你的选项(1-7):");

}

void input()

{

int i;

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

{printf("请输入第%d个学生学号:",i);

scanf("%d",&stud[i].code);

printf("请输入第%d个学生姓名:",i);

scanf("%s",stud[i].name);

getchar();

printf("请输入第%d个学生性别:",i);

scanf("%c",&stud[i].type);

printf("请输入第%d个学生年龄:",i);

scanf("%d",&stud[i].age);

printf("请输入第%d个学生英文成绩:",i);

scanf("%d",&stud[i].english);

printf("请输入第%d个学生国文成绩:",i);

scanf("%d",&stud[i].chinese);

printf("请输入第%d个学生计算机成绩:",i);

scanf("%d",&stud[i].computer);

printf("请输入第%d个学生数学成绩:",i);

scanf("%d",&stud[i].math);

stud[i].total=stud[i].english+stud[i].chinese+stud[i].computer+stud[i].math;

stud[i].average=stud[i].total/4;

}

}

void find(int c)

{

int n,m,i,j,l;

char k[20];

system("clear");

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

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

printf("请选择:");

scanf("%d",&n);

if (n==1)

{

printf("请输入学号:");

scanf("%d",&m);

for(i=0;i

{

if(stud[i].code==m)

{

printf("**********************\n");

printf("学号:%d\n",stud[i].code);

printf("姓名:%s\n",stud[i].name);

printf("性别:%c\n",stud[i].type);

printf("年龄:%d\n",stud[i].age);

printf("英语成绩:%d\n",stud[i].english);

printf("国文成绩:%d\n",stud[i].chinese);

printf("计算机成绩:%d\n",stud[i].computer);

printf("数学成绩:%d\n",stud[i].math);

printf("总分:%d\n",stud[i].total);

printf("平均分:%d\n",stud[i].average);

printf("**********************\n");

getchar();

}

}

}

else

if (n==2)

{

getchar();

printf("请输入姓名:");

fgets(k,20,stdin);

l=strlen(k);

k[l-1]='\0';

for(j=0;j

{

if(strcmp(k,stud[j].name)==0)

{

printf("**********************\n");

printf("学号:%d\n",stud[j].code);

printf("姓名:%s\n",stud[j].name);

printf("性别:%c\n",stud[j].type);

printf("年龄:%d\n",stud[j].age);

printf("英语成绩:%d\n",stud[j].english);

printf("国文成绩:%d\n",stud[j].chinese);

printf("计算机成绩:%d\n",stud[j].computer);

printf("数学成绩:%d\n",stud[j].math);

printf("总分:%d\n",stud[i].total);

printf("平均分:%d\n",stud[i].average);

printf("**********************\n");

}

}

}

else

{

getchar();

getchar();

}

}

void insert(int c)

{

int i,j;

system("clear");

printf("请输入要插入学生的信息:\n");

printf("请输入学生学号:");

scanf("%d",&temp.code);

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

scanf("%s",https://www.doczj.com/doc/4e3741670.html,);

getchar();

printf("请输入学生性别:");

scanf("%c",&temp.type);

printf("请输入学生年龄:");

scanf("%d",&temp.age);

printf("请输入学生英文成绩:");

scanf("%d",&temp.english);

printf("请输入学生国文成绩:");

scanf("%d",&temp.chinese);

printf("请输入学生计算机成绩:");

scanf("%d",&https://www.doczj.com/doc/4e3741670.html,puter);

printf("请输入学生数学成绩:");

scanf("%d",&temp.math);

temp.total=temp.english+temp.chinese+https://www.doczj.com/doc/4e3741670.html,puter+temp.math;

temp.average=temp.total/4;

for (i=0;i

{

if (temp.code

{

for (j=c;j>i;j--)

{

stud[j].code=stud[j-1].code;

strcpy(stud[j].name,stud[j-1].name);

stud[j].type=stud[j-1].type;

stud[j].age=stud[j-1].age;

stud[j].english=stud[j-1].english;

stud[j].chinese=stud[j-1].chinese;

stud[j].computer=stud[j-1].computer;

stud[j].math=stud[j-1].math;

stud[j].total=stud[j-1].total;

stud[j].average=stud[j-1].average;

}

stud[j].code=temp.code;

strcpy(stud[j].name,https://www.doczj.com/doc/4e3741670.html,);

stud[j].type=temp.type;

stud[j].age=temp.age;

stud[j].english=temp.english;

stud[j].chinese=temp.chinese;

stud[j].computer=https://www.doczj.com/doc/4e3741670.html,puter;

stud[j].math=temp.math;

stud[j].total=temp.total;

stud[j].average=temp.average;

break;

}

}

if(i>=c)

{

stud[i].code=temp.code;

strcpy(stud[i].name,https://www.doczj.com/doc/4e3741670.html,);

stud[i].type=temp.type;

stud[i].age=temp.age;

stud[i].english=temp.english;

stud[i].computer=https://www.doczj.com/doc/4e3741670.html,puter;

stud[i].math=temp.math;

stud[i].chinese=temp.chinese;

stud[i].total=temp.total;

stud[i].average=temp.average;

}

}

void delete(int c)

{

int i,j,l,n,k;

char name[20];

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

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

scanf("%d",&k);

if(k==1)

{

printf("请输入学号:\n");

scanf("%d",&n);

for(i=0;i

{

if(stud[i].code==n)

{

c=c-1;

for(j=i;j

stud[j].code=stud[j+1].code;

strcpy(stud[j].name,stud[j+1].name);

stud[j].type=stud[j+1].type;

stud[j].age=stud[j+1].age;

stud[j].english=stud[j+1].english;

stud[j].chinese=stud[j+1].chinese;

stud[j].computer=stud[j+1].computer;

stud[j].math=stud[j+1].math;

stud[j].total=stud[j+1].total;

stud[j].average=stud[j+1].average;} }

}

}

else

if(k==2)

{

getchar();

printf("请输入姓名:\n");

fgets(name,20,stdin);

l=strlen(name);

name[l-1]='\0';

for(i=0;i

{

if(strcmp(name,stud[i].name)==0)

{

for(j=i;j

stud[j].code=stud[j+1].code;

strcpy(stud[j].name,stud[j+1].name);

stud[j].type=stud[j+1].type;

stud[j].age=stud[j+1].age;

stud[j].english=stud[j+1].english;

stud[j].chinese=stud[j+1].chinese;

stud[j].computer=stud[j+1].computer;

stud[j].math=stud[j+1].math;

stud[j].total=stud[j+1].total;

stud[j].average=stud[j+1].average;} }

}

}

else

{

getchar();

getchar();

}

}

void print(int c)

{

int i;

system("clear");

for(i=0;i

{

printf("**********************\n");

printf("学号:%d\n",stud[i].code);

printf("姓名:%s\n",stud[i].name);

printf("性别:%c\n",stud[i].type);

printf("年龄:%d\n",stud[i].age);

printf("英语成绩:%d\n",stud[i].english);

printf("国文成绩:%d\n",stud[i].chinese);

printf("计算机成绩:%d\n",stud[i].computer);

printf("数学成绩:%d\n",stud[i].math);

printf("总分:%d\n",stud[i].total);

printf("平均分:%d\n",stud[i].average);

printf("**********************\n");

}

printf("按回车键继续.....\n");

getchar();

getchar();

}

void sort(int c)

{

int i,j,n;

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

printf("姓名排序(按2)\n");

printf("请输入排序的方式:\n");

scanf("%d",&n);

if(n==1)

{

c=c-1;

for(i=c;i>0;i--)

{

for(j=0;j

{

if(stud[j].code>stud[j+1].code)

{

temp.code=stud[j].code;

strcpy(https://www.doczj.com/doc/4e3741670.html,,stud[j].name);

temp.type=stud[j].type;

temp.age=stud[j].age;

temp.english=stud[j].english;

temp.chinese=stud[j].chinese;

temp.math=stud[j].math;

https://www.doczj.com/doc/4e3741670.html,puter=stud[j].computer;

temp.total=stud[j].total;

temp.average=stud[j].average;

stud[j].code=stud[j+1].code;

strcpy(stud[j].name,stud[j+1].name);

stud[j].type=stud[j+1].type;

stud[j].age=stud[j+1].age;

stud[j].english=stud[j+1].english;

stud[j].chinese=stud[j+1].chinese;

stud[j].math=stud[j+1].math;

stud[j].computer=stud[j+1].computer;

stud[j].total=stud[j+1].total;

stud[j].average=stud[j+1].average;

stud[j+1].code=temp.code;

strcpy(stud[j+1].name,https://www.doczj.com/doc/4e3741670.html,);

stud[j+1].type=temp.type;

stud[j+1].age=temp.age;

stud[j+1].english=temp.english;

stud[j+1].chinese=temp.chinese;

stud[j+1].computer=https://www.doczj.com/doc/4e3741670.html,puter;

stud[j+1].math=temp.math;

stud[j+1].total=temp.total;

stud[j+1].average=temp.average;

}

}

}

}

else

if(n==2)

{

c=c-1;

for(i=c;i>0;i--)

{

for(j=0;j

{

if(strcmp(stud[j].name,stud[j+1].name)>0)

{

temp.code=stud[j].code;

strcpy(https://www.doczj.com/doc/4e3741670.html,,stud[j].name);

temp.type=stud[j].type;

temp.age=stud[j].age;

temp.english=stud[j].english;

temp.chinese=stud[j].chinese;

temp.math=stud[j].math;

https://www.doczj.com/doc/4e3741670.html,puter=stud[j].computer;

temp.total=stud[j].total;

temp.average=stud[j].average;

stud[j].code=stud[j+1].code;

strcpy(stud[j].name,stud[j+1].name);

stud[j].type=stud[j+1].type;

stud[j].age=stud[j+1].age;

stud[j].english=stud[j+1].english;

stud[j].chinese=stud[j+1].chinese;

stud[j].math=stud[j+1].math;

stud[j].computer=stud[j+1].computer;

stud[j].total=stud[j+1].total;

stud[j].average=stud[j+1].average;

stud[j+1].code=temp.code;

strcpy(stud[j+1].name,https://www.doczj.com/doc/4e3741670.html,);

stud[j+1].type=temp.type;

stud[j+1].age=temp.age;

stud[j+1].english=temp.english;

stud[j+1].chinese=temp.chinese;

stud[j+1].computer=https://www.doczj.com/doc/4e3741670.html,puter;

stud[j+1].math=temp.math;

stud[j+1].total=temp.total;

stud[j+1].average=temp.average;

}

}

}

}

else

{

getchar();

getchar();

}

}

void error()

{

printf("输入错误,请输入(1-7):\n");

printf("按回车键继续....\n");

getchar();

getchar();

getchar();

}

int main (void)

{

int n,c=0;

while(1)

{

menu();

scanf("%d",&n);

switch(n)

{

case 1:input();c=c+10;break;

case 2:find(c);break;

case 3:insert(c);++c;break;

case 4:delete(c);--c;break;

case 5:print(c);break;

case 6:sort(c);break;

case 7:exit(0);break;

default:error();break;

}

}

}

c语言课程设计——扫雷

C语言程序设计报告 题目:扫雷游戏 班级:网101 组长:~~ 成员:~~,~~ 日期:2011.9-2011.11

目录 一基本情况P.3 二游戏规则p.4 三设计思路p.5 四函数说明 1.游戏控制部分p.7 2.图形处理部分p.10 3.鼠标处理部分p.11五调试与测试p.12 六附录p.15

一基本情况 开发平台:win-tc(windows-xp) 开发进度:9.10~9.20 小组进行图形处理及鼠标相关资料收集,掌握相关图形处理及鼠标相关技术 9.21~10.10 小组成员讨论程序实现算法及任务分配 10.10~11.3 代码实现,调试 任务划分:陈超负责程序总体设计,游戏控制部分实现,后期调试 张艳负责程序图形处理及鼠标处理部分实现,总结文档编写

二游戏规则 玩家进入游戏界面后,只能通过鼠标进行操作,一旦有键盘输入,则退出游戏程序。游戏框图左上方显示的数字为此局游戏中包含的地雷数目。中间黄色笑脸为重新开始按钮,一旦鼠标左键单击此位置,则退出正在进行的扫雷游戏,游戏重新开始。游戏中包含10*10个空格,可以通过鼠标左键单击或者右键单击来进行扫雷游戏。鼠标单击表示打开此空格位置,若此位置为地雷,则输出所有的地雷分布,玩家输,游戏结束,等待玩家的选择退出或者继续开始下一次游戏。若此位置已经被左单击过,则再次进行鼠标左键单击时,游戏不做任何响应。单击过后若此位置无雷则显示空格或者数字。空格表示此处无雷,数字表示此处无雷且周围八个格子中的地雷数目为空格中的

数字数目,若某个空格周围亦没有地雷分布则继续以每个方格为中心继续判断无雷就展开,显示数字或者空格,直至遇到地雷或者是边界。鼠标右键单击表示游戏玩家标识此位置为地雷,若游戏玩家在某位置右键单击过之后,再次右键单击此位置,则表示取消此处标注的地雷标志,若在此处鼠标左键单击,不做任何响应。游戏玩家依次对每一个空格,当游戏玩家把所有的非雷区域全部处理完毕,则游戏结束,玩家胜利,输出“YOU WIN”,等待玩家进一步选择。 三设计思路 扫雷程序主要用了一个10行10列的二维数组,数组的每个元素都是结构体类型,结构体中的num代表格内当前处于什么状态,值1表示有雷,值0表

C语言做游戏常用到的一些函数大全 2011

C语言做游戏常用到的一些函数大全2010-10-10 14:10|(分类:默认分类) 原文:C语言做游戏常用到的一些函数大全 时间延迟函数 函数名: delay 功能: 将程序的执行暂停一段时间(毫秒) 用法: void delay(unsigned milliseconds); 重画屏幕区域的函数 函数名:getimage 功能:将指定区域的一个位图存到主存中 用法:void far getimage( int left, int top, int right, int bottom, void far *bitmap); 函数名:putimage 功能:在屏幕上输出一个位图 用法:void far putimage( int x, int y, void far *bitmap, int op ); 图像大小函数 函数名: imagesize 功能: 返回保存位图像所需的字节数 用法: unsigned far imagesize( int left, int top, int right, int bottom ); 异或模式函数 函数名: setwritemode 功能: 设置图形方式下画线的输出模式 用法: void far setwritemode(int mode); 参数MODE可以被设置位COPY_PUT或者XOR_PUT两种模式。当mode被设置为XOR_PUT,其后的图形操作将都采用异或方式。此外之前提到的putimage()函数也可以采用异或模式向屏幕复制图像。 检测键盘输入函数 函数名: kbhit 功能: 检查当前按下的键 用法: int kbhit(void); 键盘接口函数 函数名: bioskey 功能: 直接使用BIOS服务的键盘接口 用法: int bioskey(int cmd); 该函数通过bois中断0×16执行键盘操作,由参数cmd来决定具体的操作。 Cmd 具体操作 0 读取按键的ascii码 1 测试是否有按键如果没有按键返回0 如果按键为ctrl+brk 返回-1 如果是其他按键返回按键本身键

C程序课程设计报告(扫雷游戏)

C程序设计 扫雷游戏 一、设计题目:扫雷游戏 二、设计目的 1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养学生综合运用所学知识独立完成课题的能力。 3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基

本素质。 5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。 三、设计要求 1.汪洋和孔维亮组成设计小组。小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。 2.查阅相关资料,自学具体课题中涉及到的新知识。 3.采用结构化、模块化程序设计方法,功能要完善,界面要美观。 4.按要求写出课程设计报告,并于设计结束后1周内提交。 一概述 1)掌握数组指针的概念及其应用 2)培养团结合作精神 2. 课程设计的要求 要求我们有扎实的C语言知识,以及良好的编程习惯,能够熟练的应用循环,有毅力,还要求我们有较强的合作精神,善于总结。同时还要求我们自学C语言作图部分知识。在必要时还要上网查相关资料。 3.课程设计的主要设计思想 扫雷游戏主要用了一个10行10列的二维数组,刚开始利用random随机布雷。 每一个程序最主要的是算法。扫雷游戏算法的重点是一开始统计好每个格子周围有多少雷,当鼠标左键点在格子上时做出判断,如果周围8个格子有雷则显示出雷数,如果没有雷则显示空白格(在四个角的格子显示周围3个格子,其它边缘的格子显示周围5个的状态),我们在主函数中用两个for语句来判断周围雷数。我们还加了鼠标处理函数。 如果格子上有雷则调用函FailExitGame(),显示“Fail!”,游戏结束。若所有的雷都标出,且所有的格子都处理过,则调用函数ExitGame(),显示“OK,Good!”,游戏结束。游戏结束后,按任意键出去。

【C语言吧】做游戏常用函数

时间延迟函数 函数名: delay 功能: 将程序的执行暂停一段时间(毫秒) 用法: void delay(unsigned milliseconds); 重画屏幕区域的函数 函数名:getimage 功能:将指定区域的一个位图存到主存中 用法:void far getimage( int left, int top, int right, int bottom, void far *bitmap); 函数名:putimage 功能:在屏幕上输出一个位图 用法:void far putimage( int x, int y, void far *bitmap, int op ); 图像大小函数 函数名: imagesize 功能: 返回保存位图像所需的字节数 用法: unsigned far imagesize( int left, int top, int right, int bottom ); 异或模式函数 函数名: setwritemode 功能: 设置图形方式下画线的输出模式 用法: void far setwritemode(int mode); 参数MODE可以被设置位COPY_PUT或者XOR_PUT两种模式。当mode被设置为XOR_PUT,其后的图形操作将都采用异或方式。此外之前提到的putimage()函数也可以采用异或模式向屏幕复制图像。 检测键盘输入函数 函数名: kbhit 功能: 检查当前按下的键 用法: int kbhit(void); 键盘接口函数 函数名: bioskey 功能: 直接使用BIOS服务的键盘接口 用法: int bioskey(int cmd); 该函数通过bois中断0x16执行键盘操作,由参数cmd来决定具体的操作。 Cmd 具体操作 0 读取按键的ascii码 1 测试是否有按键如果没有按键返回0 如果按键为ctrl+brk 返回-1 如果是其他按键返回按键本身键值(直到此按键被取出后恢复0) 2 返回shift key 状态 以下是当cmd为2的时候,返回值的具体含义

c语言课程设计_菜单设计

C语言课程设计_菜单设计 调试环境为TC2.0或者3.0。运行这个程序需要tc提供的几个头文件。建议修改options菜单中的include 目录项到tc的include的目录下(具体方法可以参见本书第一章的讲解);或者把源程序拷贝到tc目录下运行。 #include #include #include #include #include /*定义一些常数*/ #define NO 0 #define YES 1 #define NONE -1 #define MAX_MENU 7/*根据情况改变可以在菜单显示的最大项*/ /*全局参数*/ int X,Y; int Selection; int button,x,y; void *p; size_t area; /*菜单结构*/ struct MENU { /*左上角*/ int x; int y; /*右下角*/ int x1; int y1; unsigned char Active[MAX_MENU];/* 菜单项是否激活的标志*/ char *head;/* 菜单的名字(可选项)*/ }; int MouseOn(struct MENU *t); void Process(); void Xorbar(int sx,int sy,int ex,int ey,int c); void Show(); void Hide(); void Status(); /* 通过下面的参数用户可以改变按钮的位置。*/ struct MENU File={200,110,250,130}; struct MENU Edit={295,110,345,130}; struct MENU Help={390,110,440,130}; struct MENU Close={600,10,620,30}; struct MENU Neeraj={380,300,460,315}; void main() { int gd = DETECT,gm;

C语言游戏源代码

语言游戏源代码1、简单地开机密码程序 "" "" "" () {()()()()(" ! ' !!!"); (); *若有错误不能通过程序* } () { *,*; *":\\\\"; *本程序地位置* []; *"",*".^^^"; *是地备份*(); * :*("\\"); * \*(,""); () {(,""); () ();}(); *读取前各字符* []'\'; (()) *若读取地和指针一样就关闭文件,不然就添加*(); {(,""); () ()()('\'); (); (()) {()();} (); (); (()){()();}()(); (); * * } } () { *""; [] ; () {()()()(); ; ()()()()(":"); () {[](); (>) {(); ;} *若字符多于个字符就结束本次输入* ([]) ;

([]> []<) *若字符是数字或字母才算数* {('*'); ;} ([]) *删除键* (>) {("\ \"); []'\'; ;} } []'\'; (()) ; {(); ()()()()(" !")();} } } () {(); (); } 2、彩色贪吃蛇 <> <> ; * 游戏速度*, , ; * 游戏分数* [] { , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

C语言课程设计报告_扫雷

西安文理学院信息工程学院课程设计报告 设计名称:数据结构课程设计 设计题目:实现一个n*m的扫雷游戏 学生学号:1402130417 专业班级:软件13级4班 学生姓名:李美静 学生成绩: 指导教师(职称): 课题工作时间:2015.6.22 至2015.7.3

说明: 1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个学生。 2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。 3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不 及格处理。答辩由指导教师实施。 4、报告正文字数一般应不少于3000字,也可由指导教师根据本门综合设计的情 况另行规定。 5、平时表现成绩低于6分的学生,取消答辩资格,其本项综合设计成绩按不及 格处理。

信息工程学院课程设计任务书 指导教师:院长: 日期:2015年6月22日

信息工程学院课程设计进度安排表 学生姓名:学号:专业:班级: 指导教师签名: 2014年6月22日

成绩评定表 学生姓名:学号:专业:班级:

摘要 摘要:摘要是论文内容的简要陈述,是一篇具有独立性和完整性的短文,150~200字左右。摘要的内容应包括目的、依据、方法、概要工作及其结果与结论,摘要中尽量不要出现“本文、我们、作者”之类的词汇,不宜使用公式、图表,不标注引用文献编号。避免将摘要写成目录式的内容介绍。(摘要正文为小4号宋体) 关键词:关键词用小4号宋体,每个关键词之间用“;”,结尾没有标点。关键词是供检索用的主题词条,应采用能覆盖文章主要内容的通用技术词条。关键词一般列3~5个。

纯C语言写的一个小型游戏-源代码

/* A simple game*/ /*CopyRight: Guanlin*/ #include #include #include #include #include #include struct object_fix { char name[20]; char id[5]; char desc[500]; char action[30]; char im[5]; }; struct object_move { char name[20]; char id[5]; char desc[500]; int loc; int pwr; int strg; char im[5]; }; struct rover { char name[20]; char id[5]; char desc[500]; int pwr; int strg; int location[2]; char im[5]; }; struct map /* this is the map structure*/ { char data[20]; char add_data[20]; int amount; int x; /* this were the successor keeps it's x & y values*/ int y; }; struct location /*this structure is for the successor lister*/ { float height; char obj;

c语言课程设计——扫雷

扫雷设计 网101 陈超张艳 1.游戏规则 设计1010格区域,单击鼠标后,该格显示数字,则表示它周围8个空格内含有的地雷数,周围没有地雷的显示空白,则不能再单击了.如果是地雷,则游戏结束.如果判断是地雷,可以单击鼠标右键标出,显示红旗,要取消红旗标志则单击鼠标右键,当所有地雷都标出时,每个空格都处理过了,则胜利结束。 2.设计思路 扫雷程序主要用了一个10行10列的二维数组,数组的每个元素都是结构体类型,结构体中的num代表格内当前处于什么状态,值1表示有雷,值0表示已经变成空白格或者显示过数字,roundnum 统计每个格子周围有多少地雷,flag是鼠标右键的标志,如果flag为1表示格子显示红旗,这样鼠标左键点击在这个格子上无效。 在程序一开始统计好每个格子周围有多少地雷,然后当鼠标左键点击在没有地雷的格子上时进行两种判断,如果格子周围没有地雷,就在原来的格子位置显示空白格,然后用递归的方法同样判断周围的8个格子;如果格子周围有地雷,就在该空格显示具体的雷数。 在递归判断8个格子时,如果格子上有雷或者格子已经显示过雷数或者空白,以及格子上有红旗标志的话,就不再对格子进行任何判断。 具体函数流程图如下:

(1)main()主函数 定义使用到的常数,全局变量,函数原型说明。然后初始化图形系统,调用游戏控制函数,按任意键结束游戏,关闭图形系统,游戏结束。 (2)Control()游戏控制函数 调用函数GameBegain()显示游戏初始化界面,调用

GamePlay()函数具体实现游戏操作,该函数的返回值有可能有两种:一是正在玩中,提前结束游戏;一是玩完,要么失败,要么胜利。如果是前者,则重新开始游戏。如果是后者,则判断是否单击了笑脸,是则重新开始,否则结束程序。 (3)GameBegin()画初始界面 这个函数完成初始界面的设计以及随机生成地雷。初始界面的主要工作是确定图的位置和方格显示的位置。外边框的左上角为(190,60),右上角坐标为(390,290),显示笑脸和地雷数的区域为(190,60)~(390,90),每个方格的宽度和高度均为16. (4)DrawSmile()画笑脸 利用画椭圆的函数fillellipse()和bar()画笑脸,设置好填充模式。 (5)DrawEmpty()两种格子的显示 函数的参数为四个,确定格子的坐标i和j模式,颜色。格子有两种:一是可以单击的格子;一是已经显示空白的格子,比前一种格子小,通过参数模式和颜色来控制。 (6)DrawFlag()显示红旗 用单击鼠标右键表示起地雷,起雷后显示一个小红旗 (7)GamePlay()游戏控制 游戏过程主要是对鼠标按键的处理,集体算法实现如下: a.如果单击了鼠标左键则判断 如果单击了笑脸,则游戏重新开始‘

C语言小游戏程序设计

程序设计实验 大作业 学院: 班级: 学号: 指导老师: 姓名: 实验项目名称:猜数字游戏成绩:

一、实验要求 根据所学知识编写一个小游戏--猜数字游戏 二、实验目的 为了加深对编程课程的基本知识的理解和掌握,并且掌握编程和程序调试的技巧通过程序的设计训练和提高学生的基本技能,掌握字符串的表示方法和字符串函数的功能、编程软件操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高解决实际问题的能力,巩固语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。 三、功能模块分析 1.系统能够随机产生一个1到1000的数字 2.比较输入数字与随机产生数字的大小 3.选择是否继续游戏 四、修改处 1.将输出内容由英文变为汉字 2.改变背景及输出字体的颜色 3将随机产生的数值范围由1-100变为1-1000 四、设计思路 # include # include # include main() { void textbackground(int color); system("color fc"); int a,b; char c; srand(time(NULL)); a=1+(rand()%1000); printf("这有一个数字从1到1000.\n你能猜出它吗?\n输入你猜的数字.\n"); scanf("%d",&b); while(b!=-1) { if(b==a) { printf("恭喜你猜对了!\n你喜欢再玩一遍吗?(y or n)?");

C语言课程设计参考题目及要求

C语言课程设计参考设计题目 1、学生信息管理 (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: ●系统以菜单方式工作 ●学生信息录入功能(学生信息用文件保存)---输入 ●学生信息浏览功能——输出 ●查询、排序功能——算法 1、按学号查询 2、按姓名查询 ●学生信息的删除与修改(可选项) (2)功能要求 ●界面简单明了; ●有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新 输入; ●最好用链表的方式实现。 (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式:是定义一个数组来存储,还是定义一个链表呢?在这里假如我们以数组的方式来存储,当然可以,但是我们知道,假如我们定义一个数组的话,我们首先必须知道学生人数大概是多少,以便我们确定数组的大小,但是题目中没有给出,而且题目要求中有大量的删除、插入操作,所以用链表的方式比较方便。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 2、学生综合测评系统 每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。 A、学生信息处理 (1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。 提示:学生信息可先输入到数组中,排序后可写到文件中。 (2) 插入(修改)同学信息: 提示:先输入将插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容, (3) 删除同学信息: 提示:输入将删除同学号,读出该同学信息,要求对此进行确认,以决定是否删除将删

c语言小游戏

c语言小游戏 #include #include//基本型态定义。支援型态定义函数。使用者界面函数图形装置界面函数。 #include //用户通过按键盘产生的对应操作(控制台) #include #include //日期和时间头文件 #define LEN 30 #define WID 25

int Snake[LEN][WID] = {0}; //数组的元素代表蛇的各个部位 char Sna_Hea_Dir = 'a';//记录蛇头的移动方向 int Sna_Hea_X, Sna_Hea_Y;//记录蛇头的位置 int Snake_Len = 3;//记录蛇的长度 clock_t Now_Time;//记录当前时间,以便自动移动int Wait_Time ;//记录自动移动的时间间隔

int Eat_Apple = 1;//吃到苹果表示为1 int Level ; int All_Score = -1; int Apple_Num = -1; HANDLE hConsole = GetStdHandle(STD_OUTPUT _HANDLE); //获取标准输出的句柄 //句柄:标志应用程序中的不同对象和同类对象中的不同的实例方便操控,void gotoxy(int x, int y)//设置光标位置

COORD pos = {x,y}; //定义一个字符在控制台屏幕上的坐标POS SetConsoleCursorPosition(h Console, pos); //定位光标位置的函数 } void Hide_Cursor()//隐藏光标固定函数

C语言入门必做习题100例(三)

C语言的学习其实很简单的,下面是我整理的关于C语言的试题,希望对C语言的初学者有所帮助! 1. (数列的最小代价) 给定一个正整数序列,例如:4,1,2,3, 不改变数的位置把 它们相加,并且由括号来标记每一次加法所得到的和。例如:((4+1)+(2+3))= ((5)+(5))=10. 除去原数4、1、2、3之外,其余都为中间结果,如:5,5,10, 将中 间结果相加,得到:5+5+10=20, 数20 称为此数列的一个代价。对于另一种算法: (4+((1+2)+3))=(4+((3+3))=(4+(6))=10, 得到数列的另一个代价为:3+6+10=19. 若给出N 个数的数列,求出此数列的最小代价。 2. 设有一个字符串,长度小于100,且全部以英文字母组成。对字串中的每个字母可用0,1,2 三个数字进行编码,且数字可以重复使用。 程序要求:(1) 输入字符串,并能判断输入是否有错; (2) 输出对应的编码表及码长,要求字串的编码总长度为最短; (3) 根据上述编码表,给出一些编码,然后求出其原字符串。 例如:输入的字符为:ABCBAAADDEF 其对应的编码表为: A: 2 B: 10 C: 11 D: 12 E: 00 F: O1 对应的编码为:210111022212120001 总码长为:18 3. 某些密码由N 个英文字母组成(N〈26), 每个字母的平均使用率为:W1,W2,... ,Wn, 要求编程完成下列任务: ①键入英文字母及个数; ②键入N个英文字母的使用频率; ③用二进制数对该N个英文字母进行编码(最短,无二义性); ④键入字母短文(单词用空格区分),输出相应编码; ⑤键入二进制编码短文,输出译文。 4. 将4个红球,3个白球与3个黄球排成一排,共有多少种排法? 5. 有面值为M..N 的邮票各一枚,共能拼出多少不同的面额。 6. 有一个四阶方阵,随机产生1..16 这16 个自然数(不重复),依次填入每 个方格中。要求用最少的对调次数,使每一行、每一列以及对角线上的四个数之和均相等。打印每一次对调的过程。 7. 微型蓝球赛. 甲,乙两队进行蓝球比赛,结果甲队以S:T 获胜.(T

C语言试题 四

C语言试题四 6.9 巧分橘子 一家农户以果园为生,一天,父亲拿出一堆橘子,共2520个,准备分给他的6个儿子。 父亲按事先写在一张纸上的数字把这堆橘子分完,每个人分到的橘子的个数都不相同。 然后他说:“老大,把你分到的橘子分1/8给老二,老二拿到后,连同原来的橘子分1/7给老三,老三拿到后, 连同原来的橘子分1/6给老四,以此类推,最后老六拿到后,连同原来的橘子分1/3给老大,这样, 你们每个人分到的橘子就一样多了。”问兄弟6人原先各分到多少只橘子。请将兄弟6人的橘子数存储到一维数组中, 并按照下列各式输出(下面只提供格式,数据不准确): x[1]=111 x[2]=222 x[3]=333 x[4]=444 x[5]=555 x[6]=666 #include<stdio.h> void main() { int a[6],b[6],i; for(i=0;i<6;i++) { a[i]=2520/6; b[i]=8-i; } a[0]=a[0]-(a[5]/(b[5]-1)); for(i=5;i>=1;i--) { a[i]=a[i]+(a[i]/(b[i]-1))-(a[i-1]/(b[i-1]-1)); } a[0]=a[0]*b[0]/(b[0]-1); for(i=0;i<6;i++) printf("x[%d]=%d\n",i+1,a[i]); } 选做题6.1 大家一起做游戏 幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,

从第一个小朋友开始报数, 凡是报到固定数字(例如5)的,都退出该游戏, 直到只剩下一位小朋友游戏才中止。 每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。 现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。 输入:小朋友的个数(<=50),要被练习的数字 输出:最终被留下的小朋友的序号 说明:如“要被练习的数字”是5,则每次数到5的同学要退出该游戏 #include<stdio.h> void main() { int N,n,i,s=0,a; scanf("%d%d",&N,&n); for(i=2;i<=N;i++) s=(s+n)%i; a=s+1; printf("The left child is NO %d.\n",a); } 选做题6.2 猜数字 有如下一组数字,其中每个数字都在 1 ~ 63 之间, 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 34 35 38 39 42 43 46 47 50 51 54 55 58 59 62 63 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 36 37 38 39 44 45 46 47 52 53 54 55 60 61 62 63 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47 56 57 58 59 60 61 62 63 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。 输入:程序的输入是一串以空白 符分开的数字,当输入0 时表示输入结束。 输出:输出猜到的数字。 #include<stdio.h> #include<math.h>

使用C语言编写简单小游戏

纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘on line》.它是e 时代常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式 .作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1,总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude <> /*把输入输出函数的头文件包含进来*/ int main() { printf("Hello, world!");/*在屏幕上输出字符串"Hello,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过 .2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们. 让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch ();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c", 2)来输出一个笑脸. 现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧! 2,心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构: struct move_point { int x, y;/*该点的位置,包括x坐标和y坐标*/ int xv, yv;/*该点在x轴,y轴的速度*/ }; 运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码: gotoxy, ;/*把光标移到指定的坐标*/ printf(" ");/*输出一个空格,把先前的字符擦去*/ 然后我们让物体按其速度运动: += ;/*水平方向按x轴的速度运动*/ += ;/*垂直方向按y轴的速度运动*/ 运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸: gotoxy, ; printf("%c\b", 2); /*输出ASCII码值为2的"笑脸"字符*/ 怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧! 3,交互的实现——让我们来控制笑脸运动 这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略处理.接受按键我们用以下两条语句: while (bioskey(1) == 0);/*等待按键*/ key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/ 然后用switch语句来判断按键以及执行相关操作,如下: switch (key) /*对变量key的值进行判断*/ { case UP: /*如果按的是向上键*/ … break; /*让物体向上运动,并退出switch*/

C语言扫雷源代码

C语言扫雷源代码

#include #include #include #include /*鼠标信息宏定义*/ #define WAITING 0xff00 #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define RIGHTPRESS 0xff02 #define RIGHTCLICK 0xff20 #define RIGHTDRAG 0xff2a #define MIDDLEPRESS 0xff04 #define MIDDLECLICK 0xff40 #define MIDDLEDRAG 0xff4c #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; int up[16][16],down[16][16],mouse_draw[16][16 ],pixel_save[16][16]; void MouseMath()/*计算鼠标的样子*/ {int i,j,jj,k;

C语言课程设计 猜字游戏

《C语言程序设计》课程设计报告 题目 学号 姓名 年级专业 指导教师 完成日期年月日 安徽师范大学物理与电子信息学院 College of Physics and Electronic Information, Anhui Normal University

一、问题描述: 通过查找资料以及老师的讲解和指导下,运用C语言编程课本所学过的知识设计一个计算器猜数软件,并要求能够实现加减乘除功能;要求单字符输入即输入的数字或符号不需要按回车键具有一定的容错能力按回车键或等号键则显示计算结果。 通过课程设计,初步锻炼运用所学基础知识解决实际问题的能力,加强学生研发调试程序的能力,掌握软件开发的基本过程和基本方法以及良好的编程风格,培养在软件开发中相互合作的团队意识,丰富课余生活。 二、基本要求:(猜数软件) a)能够随机产生5位不重复数字。 b)输入5位数后能够提示与目标数值的大小。 c)记录猜数次数,给出分数。 d)给出猜数历程评价。

三、系统分析与设计: 首先使用程序随机产生一个五位数,且各位数都不同;根据提示输入一个五位数,输入后程序会给出进一步提示:“大了”或者“小了”并重新输入一个五位数;记录所猜次数直至最后输入数字与预产生数字相同,同时给出评价。 四、程序图: 进入turbo C++系统使程序初始化

五、程序清单: #include #include #include #include int main() { int c = 10000; int issuccess = 1; long int b = 0; char r[6]; long int d; int times = 1; register int i; srand ((unsigned)time((time_t *)NULL)); for (i=0; i<5; i++) { b += (rand() % 9 + 1) * c; \*计算机生成五位随机不同数据*\ c /= 10; } printf ("游戏开始\n"); printf ("请输入你猜的数!\n"); printf ("输入exit退出\n"); for (;;)

c语言大家一起做游戏

C语言大家一起做游戏 Cxy,Bit. 自己写的,和答案不同但是不保证是高效程序。请勿抄袭。(妹的这个绝对和答案不同!答案 用了一个什么什么函数还是公式,直接套公式做了(事后看了那个公式表示不太懂),我TM 直接自己弄了个超复杂方法出来。编的时候因为太复杂修改了n次差点吐血!!!!!) 题目:大家一起做游戏 幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都退出该游戏,直到只剩下一位小朋友游戏才中止。 每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。 现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。 输入:小朋友的个数(<=50)要被练习的数字 输出:最终被留下的小朋友的序号 说明:如“要被练习的数字”是5,则每次数到5的同学要退出该游戏 代码: #include int main() {int i,k=0,j,e,s,z=0,p,d,l=0,m=0,q; static int a[52]={0},b[52]={0}; scanf("%d %d",&e,&s); q=s; for(i=1;i<=e;i++) a[i]=i; for(k=0;k<=52;k++) {if(z!=0) {d=z;p=0;m=0; for(j=1;j<=e;j++) b[j]=0; for(;z<=e;z++) { if(a[z]!=0) {p+=1;b[p]=a[z];}} for(j=1;j<=e;j++) { if(p==0&&a[j]!=0) {b[1]=a[j];p+=1;} else if(p!=0&&a[j]!=0) {if (p!=1&&a[j]==b[1]) break; else {p+=1;b[p]=a[j];}}} for(j=1;j<=e;j++) a[j]=0; for(j=1;j<=e;j++) {a[j]=b[j];} k=0;z=0;} for(i=1;i<=e;i++)

《C语言程序设计》课程设计扫雷

《C++语言程序设计》课程设计-扫雷

————————————————————————————————作者:————————————————————————————————日期:

辽宁工业大学 《C++语言程序设计》课程设计(论文)题目:扫雷 院(系):软件学院 专业班级:软件工程111班 学号: 学生姓名: 指导教师:翟宝峰 教师职称:副教授 起止时间:2011.12.12-2011.12.25 课程设计(论文)任务及评语

院(系):软件学院教研室:软件教研室 学号学生姓名专业班级软件工程166班 课程设计 (论文) 题目 扫雷 课程设计(论文)任务程序设计的任务与要求: (1).掌握面向对象程序设计语言C++的基本语法 (2).掌握C++面向对象设计的思想 (3).掌握VC++6.0与DEV C++ 开发工具的使用 (4). 运用标准C++规范设计应用程序 设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出设计报告。 指 导 教 师 评 语 及 成 绩 成绩:指导教师签字: 年月日

目录 第1章课程设计目的与要求 (1) 1.1 设计目的 (1) 1.2实验环境 (1) 1.3预备知识 (1) 1.4设计要求 (1) 第2章课程设计内容 (2) 2.1 课题描述 (2) 2.2 系统设计 (2) 2.2.1功能分析 (2) 2.2.2面向对象设计 (3) 2.2.2类成员描述 (5) 2.3程序实现 (9) 2.3.1源码分析 (9) 2.3.2运行结果 (13) 第3章课程设计总结 (14) 参考文献 (15)

相关主题
文本预览
相关文档 最新文档