资源描述
课程设计任务书
学 院
理 学 院
专 业
光信息科学与技术
学生姓名
***
班级学号
1009020216
课程名称
C语言程序设计课程设计
课 程 设 计
(论文)题目
虚幻魔方
设计要求(技术参数):
通过本教学环节的编程实践,进一步熟悉和巩固C语言语法知识和程序设计的基本方法。了解结构化程序设计,培养自顶而下、逐步细化的编程思维方式。加深学生对理论知识的理解,提高对所学知识的综合运用能力。
设计任务:
实现魔方的虚拟化,在虚拟中实现魔方的着色,变换,退出等一系列操作!
计划与进度安排:
第一天:查资料 第二天:程序设计
第三、四天:调试程序 第五天:论文答辩
成绩:
指导教师(签字)
年 月 日
专业负责人(签字):
年 月 日
主管院长(签字)
年 月 日
摘要
该虚幻魔方是用c语言编写的一个小型的游戏,该游戏通过自己编写的函数来魔方的着色,变换,复原,随机转换等功能!
其中通过up ,down来实现光标的移动,通过left,right来实现模仿的转动,通过enter实现魔方的复原,通过space实现魔方的随机转动,通过Esc实现魔方游戏的退出!
该函数的实现主要依靠库函数然后自己编写的函数来实现的!
关键字:魔方 游戏
目录
一 总体模块图 3
二 主函数流程图 4
2.1drawing( ) 作图函数流程图 5
2.2 color( )填色函数. 6
2.3 arrow( ) 指针移动函数 7
2.4 change1( )交换函数 8
2.5 changge2( )对置函数 9
三 C源程序: 10
四 总结 18
五 参考文献 18
一 总体模块图
着色
建造魔方
虚幻魔方
退
出
移动指针
转动魔方
复原
随即转动
二 主函数流程图
开辟6个3*3的二维数组并赋初值
选择图形显示器,显示模式,文件路径
构造魔方
随几转动
逆时针旋转魔方
顺时针旋转魔方
改变指针
给魔方着色
end
Esc
down
改变指针
up
right
K=?
left
复原
space
enter
While(1)
end:
clearviewport();
2.1drawing( ) 作图函数流程图
setlinestyle(0,0,3);
line(inital_x+1.5*lenth,inital_y+0,inital_x+4.5*lenth,inital_y+0);
line(inital_x+1.0*lenth,inital_y+0.5*lenth,inital_x+4.0*lenth,inital_y+0.5*lenth);
line(inital_x+0.5*lenth,inital_y+1*lenth,inital_x+3.5*lenth,inital_y+1*lenth);
line(inital_x+0,inital_y+1.5*lenth,inital_x+3*lenth,inital_y+1.5*lenth);
line(inital_x+0,inital_y+2.5*lenth,inital_x+3*lenth,inital_y+2.5*lenth);
line(inital_x+0,inital_y+3.5*lenth,inital_x+3*lenth,inital_y+3.5*lenth);
line(inital_x+0,inital_y+4.5*lenth,inital_x+3*lenth,inital_y+4.5*lenth);
line(inital_x+0,inital_y+1.5*lenth,inital_x+0,inital_y+4.5*lenth);
line(inital_x+1.0*lenth,inital_y+1.5*lenth,inital_x+1.0*lenth,inital_y+4.5*lenth);
line(inital_x+2.0*lenth,inital_y+1.5*lenth,inital_x+2.0*lenth,inital_y+4.5*lenth);
line(inital_x+3.0*lenth,inital_y+1.5*lenth,inital_x+3.0*lenth,inital_y+4.5*lenth);
line(inital_x+3.5*lenth,inital_y+1.0*lenth,inital_x+3.5*lenth,inital_y+4.0*lenth);
line(inital_x+4.0*lenth,inital_y+0.5*lenth,inital_x+4.0*lenth,inital_y+3.5*lenth);
line(inital_x+4.5*lenth,inital_y+0,inital_x+4.5*lenth,inital_y+3.0*lenth);
line(inital_x+1.5*lenth,inital_y+0,inital_x+0,inital_y+1.5*lenth);
line(inital_x+2.5*lenth,inital_y+0,inital_x+1.0*lenth,inital_y+1.5*lenth);
line(inital_x+3.5*lenth,inital_y+0,inital_x+2.0*lenth,inital_y+1.5*lenth);
line(inital_x+4.5*lenth,inital_y+0,inital_x+3.0*lenth,inital_y+1.5*lenth);
line(inital_x+4.5*lenth,inital_y+1.0*lenth,inital_x+3.0*lenth,inital_y+2.5*lenth);
line(inital_x+4.5*lenth,inital_y+2.0*lenth,inital_x+3.0*lenth,inital_y+3.5*lenth);
line(inital_x+4.5*lenth,inital_y+3.0*lenth,inital_x+3.0*lenth,inital_y+4.5*lenth);
2.2 color( )填色函数.
x1=inital_x+1.5*lenth;
y1=inital_y+0.25*lenth
For j=0 to 3
x2=x1;y2=y1;
For j=0 to 3
color_num=top[i][j];
setfillstyle(1,color_num);
floodfill(x2,y2,WHITE);
x2=x2+lenth;
x1=x1-0.5*lenth;
y1=y1+0.5*lenth;
x1=inital_x+0.5*lenth
y1=inital_y+2*lenth;
For i=0 to 3
x2=x1;y2=y1;
For j=0 to 3
color_num=front[i][j];
setfillstyle(1,color_num);
floodfill(x2,y2,WHITE);
x2=x2+lenth;
y1=y1+lenth;
x1=inital_x+3.25*lenth;y1=inital_y+2*lenth;
For i=0 to 3
x2=x1;y2=y1;
For j=0 to 3
color_num=side[i][j];
setfillstyle(1,color_num);
floodfill(x2,y2,WHITE);
x2=x2+0.5*lenth;y2=y2-0.5*lenth;
y1=y1+lenth;
2.3 arrow( ) 指针移动函数
position<=2?
真 假
真 position<=5&&position>2? 假
构建魔方
构建魔方
真 position>5? 假
构建魔方 2.4 copy ( )复制函数
For i=0 to 3
For j=0 to 3
*q=*p;
p++;
q++;
2.5 change1( )交换函数
p=p+sign;q=q+sign;
temp[0]==0 ?
真 假
For i=0 to 3
temp[i]=*p;
p=p+3;
p=p-9;
For i=0 to 3
ling=*q;*q=temp[i];temp[i]=ling;
p=p+3;q=q+3;
2.6 changge2( )对置函数
For k=0 to x
For i=0 to 3
For j=2 to 0(等于)
new[j][i]=*p;
p=p+1;
p=p-9;
For i=0 to 3
For j=0 to 3
*p=new[i][j];
p++;
p=p-9;
三 C源程序
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
int a[3][3]={1,1,1,1,1,1,1,1,1};
int b[3][3]={2,2,2,2,2,2,2,2,2};
int c[3][3]={4,4,4,4,4,4,4,4,4};
int d[3][3]={3,3,3,3,3,3,3,3,3};
int e[3][3]={5,5,5,5,5,5,5,5,5};
int f[3][3]={7,7,7,7,7,7,7,7,7};
int top[3][3],front[3][3],side[3][3];
int position=0,temp[3]={0,0,0},new[3][3];
int sign;
main()
{
int l=60,x=50,y=50,key,count,input=0,errorcode;
int a1[3][3]={1,1,1,1,1,1,1,1,1};
int b1[3][3]={2,2,2,2,2,2,2,2,2};
int c1[3][3]={4,4,4,4,4,4,4,4,4};
int d1[3][3]={3,3,3,3,3,3,3,3,3};
int e1[3][3]={5,5,5,5,5,5,5,5,5};
int f1[3][3]={7,7,7,7,7,7,7,7,7};
int graphdriver=VGA,graphmode=VGAHI;
initgraph(&graphdriver,&graphmode,"");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to exit:");
getch();
exit(1);
}
drawing(x,y,l);
drawing(x+400,y,l/2);
do
{
sign=position%3;
copy (&a,&top);
copy (&b,&front);
copy (&c,&side);
color(x,y,l);
copy (&e,&top);
change2(&top,1);
copy (&f,&front);
change2(&front,2);
copy (&d,&side);
color(x+400,y,l/2);
setcolor(14);
arrow(x,y,l);
key=bioskey(0);
switch(key)
{
case 283:printf("Esc"); /
goto end;
case 20480:setcolor(0);
arrow(x,y,l);
if(position==8)
position=0;
else
position=position+1;
break;
case 18432:setcolor(0);
arrow(x,y,l);
if(position==0)
position=8;
else
position=position-1;
break;
case 19712:input=1;
case 19200:input=3;
break;
case 7181: setcolor(0);
arrow(x,y,l);
copy(&a1,&a);
copy(&b1,&b);
copy(&c1,&c);
copy(&d1,&d);
copy(&e1,&e);
copy(&f1,&f);
position=0;
break;
case 14624:setcolor(0);
arrow(x,y,l);
randomize();
position=random(9);
input=1;
break;
}
if(input!=0)
{
for(count=0;count<input;count++)
{
if(position/3==0)
{
change2(&b,1);
change2(&c,1);
change2(&d,3);
change2(&f,1);
change1(&b,&c);
change1(&c,&d);
change1(&d,&f);
change1(&f,&b);
change2(&b,3);
change2(&c,3);
change2(&d,1);
change2(&f,3);
temp[0]=0;temp[1]=0;temp[2]=0;
if(position%3==0)
change2(&a,1);
if(position%3==2)
change2(&e,1);
}
if(position/3==1)
{
change1(&a,&b);
change1(&b,&e);
change1(&e,&d);
change1(&d,&a);
temp[0]=0;temp[1]=0;temp[2]=0;
if(position%3==0)
change2(&f,1);
if(position%3==2)
change2(&c,1);
}
if(position/3==2)
{
change2(&a,3);
change2(&e,1);
change2(&f,2);
change1(&a,&c);
change1(&c,&e);
change1(&e,&f);
change1(&f,&a);
change2(&a,1);
change2(&e,3);
change2(&f,2);
temp[0]=0;temp[1]=0;temp[2]=0;
if(position%3==0)
change2(&b,1);
if(position%3==2)
change2(&d,1);
}
}
input=0;
}
}
while(1);
end:
clearviewport();
}
drawing(int inital_x,int inital_y,int lenth)
{
setlinestyle(0,0,3);
line(inital_x+1.5*lenth,inital_y+0,inital_x+4.5*lenth,inital_y+0);
line(inital_x+1.0*lenth,inital_y+0.5*lenth,inital_x+4.0*lenth,inital_y+0.5*lenth);
line(inital_x+0.5*lenth,inital_y+1*lenth,inital_x+3.5*lenth,inital_y+1*lenth);
line(inital_x+0,inital_y+1.5*lenth,inital_x+3*lenth,inital_y+1.5*lenth);
line(inital_x+0,inital_y+2.5*lenth,inital_x+3*lenth,inital_y+2.5*lenth);
line(inital_x+0,inital_y+3.5*lenth,inital_x+3*lenth,inital_y+3.5*lenth);
line(inital_x+0,inital_y+4.5*lenth,inital_x+3*lenth,inital_y+4.5*lenth);
line(inital_x+0,inital_y+1.5*lenth,inital_x+0,inital_y+4.5*lenth);
line(inital_x+1.0*lenth,inital_y+1.5*lenth,inital_x+1.0*lenth,inital_y+4.5*lenth);
line(inital_x+2.0*lenth,inital_y+1.5*lenth,inital_x+2.0*lenth,inital_y+4.5*lenth);
line(inital_x+3.0*lenth,inital_y+1.5*lenth,inital_x+3.0*lenth,inital_y+4.5*lenth);
line(inital_x+3.5*lenth,inital_y+1.0*lenth,inital_x+3.5*lenth,inital_y+4.0*lenth);
line(inital_x+4.0*lenth,inital_y+0.5*lenth,inital_x+4.0*lenth,inital_y+3.5*lenth);
line(inital_x+4.5*lenth,inital_y+0,inital_x+4.5*lenth,inital_y+3.0*lenth);
line(inital_x+1.5*lenth,inital_y+0,inital_x+0,inital_y+1.5*lenth);
line(inital_x+2.5*lenth,inital_y+0,inital_x+1.0*lenth,inital_y+1.5*lenth);
line(inital_x+3.5*lenth,inital_y+0,inital_x+2.0*lenth,inital_y+1.5*lenth);
line(inital_x+4.5*lenth,inital_y+0,inital_x+3.0*lenth,inital_y+1.5*lenth);
line(inital_x+4.5*lenth,inital_y+1.0*lenth,inital_x+3.0*lenth,inital_y+2.5*lenth);
line(inital_x+4.5*lenth,inital_y+2.0*lenth,inital_x+3.0*lenth,inital_y+3.5*lenth);
line(inital_x+4.5*lenth,inital_y+3.0*lenth,inital_x+3.0*lenth,inital_y+4.5*lenth);
}
color(int inital_x,int inital_y,int lenth)
{
int i,j;
int color_num;
int x1=inital_x+1.5*lenth;
int y1=inital_y+0.25*lenth;
int x2,y2;
for (i=0;i<3;i++)
{
x2=x1;
y2=y1;
for (j=0;j<3;j++)
{
color_num=top[i][j];
setfillstyle(1,color_num);
floodfill(x2,y2,WHITE);
x2=x2+lenth;
}
x1=x1-0.5*lenth;
y1=y1+0.5*lenth;
}
x1=inital_x+0.5*lenth;
y1=inital_y+2*lenth;
for (i=0;i<3;i++)
{
x2=x1;
y2=y1;
for (j=0;j<3;j++)
{
color_num=front[i][j];
setfillstyle(1,color_num);
floodfill(x2,y2,WHITE);
x2=x2+lenth;
}
y1=y1+lenth;
}
x1=inital_x+3.25*lenth;
y1=inital_y+2*lenth;
for (i=0;i<3;i++)
{
x2=x1;
y2=y1;
for (j=0;j<3;j++)
{
color_num=side[i][j];
setfillstyle(1,color_num);
floodfill(x2,y2,WHITE);
x2=x2+0.5*lenth;
y2=y2-0.5*lenth;
}
y1=y1+lenth;
}
}
arrow(int inital_x,int inital_y,int lenth)
{
if(position<=2)
{
line(inital_x-30,inital_y+2*lenth-3+position*lenth,inital_x-20,inital_y+2*lenth-3+position*lenth);
line(inital_x-30,inital_y+2*lenth+3+position*lenth,inital_x-20,inital_y+2*lenth+3+position*lenth);
line(inital_x-21,inital_y+2*lenth-6+position*lenth,inital_x-15,inital_y+2*lenth+position*lenth);
line(inital_x-21,inital_y+2*lenth+6+position*lenth,inital_x-15,inital_y+2*lenth+position*lenth);
}
if(position<=5&&position>2)
{
line(inital_x+0.5*lenth+(position-3)*lenth-3,inital_y+4.5*lenth+30,inital_x+0.5*lenth+(position-3)*lenth-3,inital_y+4.5*lenth+20);
line(inital_x+0.5*lenth+(position-3)*lenth+3,inital_y+4.5*lenth+30,inital_x+0.5*lenth+(position-3)*lenth+3,inital_y+4.5*lenth+20);
line(inital_x+0.5*lenth+(position-3)*lenth-6,inital_y+4.5*lenth+21,inital_x+0.5*lenth+(position-3)*lenth,inital_y+4.5*lenth+15);
line(inital_x+0.5*lenth+(position-3)*lenth+6,inital_y+4.5*lenth+21,inital_x+0.5*lenth+(position-3)*lenth,inital_y+4.5*lenth+15);
}
if(position>5)
{
line(inital_x+3.25*lenth+(position-6)*lenth*0.5-3+5,inital_y+4.5*lenth+30-(position-5)*0.5*lenth+20,inital_x+3.25*lenth+(position-6)*0.5*lenth-3+5,inital_y+4.5*lenth+20-(position-5)*0.5*lenth+20);
line(inital_x+3.25*lenth+(position-6)*lenth*0.5+3+5,inital_y+4.5*lenth+30-(position-5)*0.5*lenth+20,inital_x+3.25*lenth+(position-6)*0.5*lenth+3+5,inital_y+4.5*lenth+20-(position-5)*0.5*lenth+20);
line(inital_x+3.25*lenth+(position-6)*lenth*0.5-6+5,inital_y+4.5*lenth+21-(position-5)*0.5*lenth+20,inital_x+3.25*lenth+(position-6)*0.5*lenth+5,inital_y+4.5*lenth+15-(position-5)*0.5*lenth+20);
line(inital_x+3.25*lenth+(position-6)*lenth*0.5+6+5,inital_y+4.5*lenth+21-(position-5)*0.5*lenth+20,inital_x+3.25*lenth+(position-6)*0.5*lenth+5,inital_y+4.5*lenth+15-(position-5)*0.5*lenth+20);
}
}
copy (int *p,int *q)
{
int i,j;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
*q=*p;
p++;
q++;
}
}
}
change1(int *p,int *q)
{
int i,ling;
p=p+sign;
q=q+sign;
if (temp[0]==0)
{
for(i=0;i<3;i++)
{
temp[i]=*p;
p=p+3;
}
p=p-9;
}
for(i=0;i<3;i++)
{
ling=*q;
*q=temp[i];
temp[i]=ling;
p=p+3;
q=q+3;
}
}
change2(int *p,int x)
{
int i,j,k;
for (k=0;k<x;k++)
{
for(i=0;i<3;i++)
{
for(j=2;j>=0;j--)
{
new[j][i]=*p;
p=p+1;
}
}
p=p-9;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
*p=new[i][j];
p++;
}
}
p=p-9;
}
}
四 总结
在本次课程设计中,先使用结构化分析方法对系统进行分析,将整个系统细分为几个模块,再针对每个小模块编写代码。由于时间比较短,源代码70%来自网上下载的一个半成品,刚开始连编译都通不过。经过我精心调试,去掉了一些错误和漏洞,是之得到了完备。出于美观化考虑,增加了刷屏的应用,使程序好看一些,虽然没有界面。
经过不到两个星期的课程设计,我对C语言有了更进一步的认识和了解,要学好它要重在实践,要通过不断的上机操作才能更好的学习好它。以前上课都是一些枯燥的东西,到真正用的时候才发现没学的还有好多好多,以前在课堂上只听而不实践地学习方法是错误的,虽然课堂上看似学会了,可到实际操作时一些问题就会出现。但是通过课程设计把所学的东西用在了实践上,设计出来一些有用的东西,这几天精力都放在了编程上,但是有好多次总是运行不了,找来找去只是一些小小的错误。这几天深深地感到自己上机编程能力很不足,编的程序可读性不太好.以后要多多学习别人的经验,增强程序的可读性。但经过这几天的改错,在查错方面也积累了一些经验。这些天虽然是有点累,但是还是学到了许多没有学到的知识,感觉很有收获。
五 参考文献
[1]谭浩强等.C语言程序设计教程.北京:高等教育出版社,1997
[2]谭浩强.C程序设计.第2版.北京:清华大学出版社,1999
[3]郭浩志.C语言程序设计.北京.北京邮电大学出版社,2005
[4]林学焦.Turbo C2.0用户手册.北京.学苑出版社,1993
[5]谭浩强、张基温. C语言程序设计教程.北京:高等教育出版社,2006
[6][美]SCHILDT H.C语言大全[M].4版.王子恢等译.北京.电子工业出版社,2001
18
展开阅读全文