C语言毕业设计:有没有大神愿意帮忙提供一个比较新颖的课题,做游戏要有一定趣味性,做工具要有实用性?
- 求设计c语言程序的创意
- 要做毕业设计了 用c语言编一个小游戏 请高手帮忙 留言详谈
- 我是计算机专业的 将要做毕业设计 大家来帮我想个好的新颖的题目或课题 偏软件的
- 谁帮我用C语言几个小游戏?要有源程序和论文的最好,谢谢啊!
求设计c语言程序的创意
如果是纯C 的话可以做做类似于推箱子,五子棋或者贪吃蛇等的的小游戏;或者信息管理系统都可以,我这边有之前写过的五子棋和推箱子的代码;需要的话给你一份;如有不明白, 欢迎追问
要做毕业设计了 用c语言编一个小游戏 请高手帮忙 留言详谈
专业 设计团队 需要 空间联系
我是计算机专业的 将要做毕业设计 大家来帮我想个好的新颖的题目或课题 偏软件的
计算机毕业设计的技巧就很多了,下面就简单的给你说几点吧,希望你能参考一下一、毕业设计论文答辩常见问题1、自己为什么选择这个课题?2、研究这个课题的意义和目的是什么?3、全文的基本框架、基本结构是如何安排的?4、全文的各部分之间逻辑关系如何?5、在研究本课题的过程中,发现了那些不同见解?对这些不同的意见,自己是怎样逐步认识的?又是如何处理的?6、论文虽未论及,但与其较密切相关的问题还有哪些?7、还有哪些问题自己还没有搞清楚,在论文中论述得不够透彻?8、写作论文时立论的主要依据是什么?对以上问题应仔细想一想,必要时要用笔记整理出来,写成发言提纲,在答辩时用。这样才能做到有备无患,临阵不慌。二、毕业设计论文答辩技巧学生首先要介绍一下论文的概要,这就是所谓"自述报告",须强调一点的是"自述"而不是"自读"。这里重要的技巧是必须注意不能照本宣读,把报告变成了"读书"。"照本宣读"是第一大忌。这一部分的内容可包括写作动机、缘由、研究方向、选题比较、研究范围、围绕这一论题的最新研究成果、自己在论文中的新见解、新的理解或新的突破。做到概括简要,言简意赅。不能占用过多时间,一般以十分钟为限。所谓"削繁去冗留清被,画到无时是熟时",就是说,尽量做到词约旨丰,一语中的。要突出重点,把自己的最大收获、最深体会、最精华与最富特色的部分表述出来。这里要注意一忌主题不明;二忌内容空泛,东拉西扯;三忌平平淡淡,没有重点。在答辩时,学生要注意仪态与风度,这是进入人们感受渠道的第一信号。如果答辩者能在最初的两分种内以良好的仪态和风度体现出良好的形象,就有了一个良好的开端。有人将人的体态分解为最小单位来研究(如头、肩、胸、脊、腰等)认为凹胸显现怯懦、自卑,挺胸显示情绪高昂—但过分则为傲慢自负;肩手颈正显示正直、刚强,脊背挺拔体现严肃而充满自信。但过于如此,就会被人看作拘泥刻板保守,略为弯腰有度,稍稍欠身可表示谦虚礼貌。孙中山先生曾说过"其所具风度姿态,即使全场有肃然起敬之心,举动格式又须使听者有安静详和之气"他的这番金玉良言,对我们确实有很大的启发。在听取教师提问时所要掌握的技巧要领是:沉着冷静,边听边记精神集中,认真思考既要自信,又要虚心实事求是,绝不勉强听准听清,听懂听明在回答问题时所要掌握的技巧是构思时要求每个问题所要答的"中心""症结""关健"在哪里?从哪一个角度去回答问题最好?应举什么例子来证明?回答问题的内容实质上是一段有组织的"口头作文"。这就要一、文章应有论点、论据。二、有开头主体与结尾。三、有条理、有层次。四、应用词确当,语言流畅。五、应口齿清楚、语速适度。开头要简洁:单刀直入,是最好的开头,开门见山地表述观点,在答辩中是最好的办法。主体部份的表述可条分缕析,即把所要回答的内容逐条归纳分析,实际上是对自己掌握的材料由此及彼,由表及里地做整理。这样的表述就不会流于表面,而能深入本质。条分缕析可以把自己掌握的一些实际例子合并,整理成若干条目,列成几个小标题:分成几点,一点一点,一条一条地说出。满碗的饭必须一口一口吃,满肚子的道理也必须一条一条讲出来,环环相扣,条条相连,令人听完后有清楚的印象。假如在准备的时候已经准备了一个较完整的提纲,那么沿着回答问题的主线,再穿上一些玉珠(举例子)就可以做到中心明确,条理清楚,有理有例了。
作为将要参加论文答辩同学,首先而且必须对自己所著的毕业论文内容有比较深刻理解和比较全面的熟悉。这是为回答毕业论文答辩委员会成员就有关毕业论文的深度及相关知识面而可能提出的论文答辩问题所做的准备。所谓"深刻的理解"是对毕业论文有横向的把握。例如题为《创建名牌产品发展民族产业》的论文,毕业论文答辩委员会可能会问"民族品牌"与"名牌"有何关系。尽管毕业论文中未必涉及"民族品牌",但 参加论文答辩的学生必须对自己的毕业论文有"比较全面的熟悉"和"比较深刻的理解",否则,就会出现尴尬局面。(一)、论文答辩技巧一,图表穿插任何毕业论文,无论是文科还是理科都或多或少地涉及到用图表表达论文观点的可能,故我认为应该有此准备。图表不仅是一种直观的表达观点的方法,更是一种调节论文答辩会气氛的手段,特别是对私人论文答辩委员会成员来讲,长时间地听述,听觉难免会有排斥性,不再对你论述的内容接纳吸收,这样,必然对你的毕业论文答辩成绩有所影响。所以,应该在论文答辩过程中适当穿插图表或类似图表的其它媒介以提高你的论文答辩成绩。(二)论文答辩技巧二,语流适中进行毕业论文答辩的同学一般都是首次。无数事实证明,他们论文答辩时,说话速度往往越来越快,以致毕业答辩委员会成员听不清楚,影响了毕业答辩成绩。故毕业答辩学生一定要注意在论文答辩过程中的语流速度,要有急有缓,有轻有重,不能像连珠炮似地轰向听众。(三)、论文答辩技巧三,目光移动毕业生在论文答辩时,一般可脱稿,也可半脱稿,也可完全不脱稿。但不管哪种方式,都应注意自己的目光,使目光时常地瞟向论文答辩委员会成员及会场上的同学们。这是你用目光与听众进行心灵的交流,使听众对你的论题产生兴趣的一种手段。在毕业论文答辩会上,由于听的时间过长,委员们难免会有分神现象,这时,你用目光的投射会很礼貌地将他们的神"拉"回来,使委员们的思路跟着你的思路走。(四)、论文答辩技巧四,体态语辅助虽然毕业论文答辩同其它论文答辩一样以口语为主,但适当的体态语运用会辅助你的论文答辩,使你的论文答辩效果更好。特别是手势语言的恰当运用会显得自信、有力、不容辩驳。相反,如果你在论文答辩过程中始终直挺挺地站着,或者始终如一地低头俯视,即使你的论文结构再合理、主题再新颖,结论再正确,论文答辩效果也会大受影响。所以在毕业论文答辩时,一定要注意使用体态语。(五)论文答辩技巧五,时间控制一般在比较正规的论文答辩会上,都对辩手有答辩时间要求,因此,毕业 论文答辩学生在进行论文答辩时应重视论文答辩时间的掌握。对论文答辩时间的控制要有力度,到该截止的时间立即结束,这样,显得有准备,对内容的掌握和控制也轻车熟路,容易给毕业论文答辩委员会成员一个良好的印象。故在毕业论文答辩前应该对将要答辩的内容有时间上的估计。当然在毕业论文答辩过程中灵活地减少或增加也是对论文答辩时间控制的一种表现,应该重视。(六)论文答辩技巧六,紧扣主题在校园中进行毕业论文答辩,往往辩手较多,因此,对于毕业论文答辩委员会成员来说,他们不可能对每一位的毕业论文内容有全面的了解,有的甚至连毕业论文题目也不一定熟悉。因此,在整个论文答辩过程中能否围绕主题进行,能否最后扣题就显得非常重要了。另外,委员们一般也容易就论文题目所涉及的问题进行提问,如界能自始至终地以论文题目为中心展开论述就会使评委思维明朗,对你的毕业论文给予肯定。(七)论文答辩技巧七,人称使用在毕业论文答辩过程中必然涉及到人称使用问题,我建议尽量多地使用第一人称,如"我""我们"即使论文中的材料是引用他人的,用"我们引用"了哪儿哪儿的数据或材料,特别是毕业论文大多是称自己作的,所以要更多使用而且是果断地、大胆地使用第一人称"我"和"我们"。如果是这样,会使人有这样的印象:东西是你的,工作做了不少!
参考:
谁帮我用C语言几个小游戏?要有源程序和论文的最好,谢谢啊!
/*贪吃蛇*/
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#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();/*随机数发生器*/
food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0;/*活着*/
snake.direction=1;/*方向往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇头*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*节数*/
PrScore();/*输出得分*/
while(1)/*可以重复玩游戏,压ESC键结束*/
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
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;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();/*显示失败*/
snake.life=1;
break;
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
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.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最后一节*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循环*/
break;
key=bioskey(0);/*接收按键*/
if(key==ESC)/*按ESC键退出*/
break;
else
if(key==UP&&snake.direction!=4)
/*判断是否往相反的方向移动*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
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 <stdio.h>
#include <stdlib.h> /*使用其中的int random(int a):
产生一个在0到a-1之间的整数
和 randomize():复位随机发生器*/
#include <conio.h> /*使用其中的gotoxy(int x,int y):
把光标移动到屏幕的x(1~80),y(1~25/50)处*/
/*和clrscr():清屏*/
int num[]={1,2,3,4,5,6,7,8,0}; /*方块的数字*/
main(){
char key=0; /*键盘码*/
int pos; /*九格中,空格的位置*/
clrscr(); /*清屏*/
randomize(); /*初始化随机发生器*/
newGame();
for(;;){
key=getch(); /*获得键盘输入*/
if(key==0) continue;
pos=GetTheNull(); /*得到空格*/
switch(key){ /*测试按键*/
case 72: /*按下*/
if(pos<=5) change(pos,pos+3);
break;
case 80: /*按上*/
if(pos>=3) change(pos,pos-3);
break;
case 77: /*按左*/
if(pos%3!=0) change(pos,pos-1);
break;
case 75: /*按右*/
if(pos%3!=2) change(pos,pos+1);
break;
case 110: /*按下‘n’新建游戏*/
newGame();
}
update(); /*更新*/
if(isSuccess()){ /*看是否游戏成功*/
gotoxy(26,10); /*成功了,输出一个写有Well done!的外框*/
printf("\332\304\304\304\304\304\304\304\304\304\304\304\304\267");
gotoxy(26,11);
printf("\263 \272");
gotoxy(26,12);
printf("\263 Well Done! \272");
gotoxy(26,13);
printf("\263 \272");
gotoxy(26,14);
printf("\324\315\315\315\315\315\315\315\315\315\315\315\315\274\n");
getch();
newGame(); /*新游戏*/
}
if(key==27) break; /*退出*/
}
clrscr(); /*清屏*/
}
newGame(){ /*新建游戏,实际上就是把有数字的八个方格打散,
这种效果的实现就是随机的两两交换,而怎么不与空的那个交换呢?
这涉及有没有解的问题
不管怎么样,九格游戏最后的结果只有两个:
123 | 123
456 | 456
78 | 87 (证明从略)
而要两两交换而始终有解的话,(从原序列开始)必须:相邻交换的次数为偶
但我们用一种更有效的方法:
每一个总与其下第二个交换.
第7,8个与0,1交换,只要交换次数多,仍可获得相同的效果.
而这些的前提是其中的0不能与其第奇数个作奇数次交换.
为了省事,不处理0...
其中产道理,请自己思考
*/
int i,a,b;
for(i=0;i<8;i++) num[i]=i+1;
num[8]=0; /*将数组复原*/
for(i=0;i<300;i++){
a=random(8); /*产生随机数*/
b=(a+2)%8; /*得到下第二个的数组下标*/
change(a,b); /*交换*/
}
update();
}
update(){ /*在屏幕上画出整个九格图像,关于定位的问题自己分析*/
int i,j;
for(i=0;i<=2;i++){
gotoxy(24,8+i*3);
for(j=0;j<=2;j++){
if (num[j+i*3]!=0)
printf("\332\304\304\304\304\267");
else
printf(" ");
}
gotoxy(24,9+i*3);
for(j=0;j<=2;j++){
if (num[j+i*3]!=0)
printf("\263 %d \272",num[j+i*3]);
else
printf(" ");
}
gotoxy(24,10+i*3);
for(j=0;j<=2;j++){
if (num[j+i*3]!=0)
printf("\324\315\315\315\315\274");
else
printf(" ");
}
printf("\n");
}
}
int isSuccess(){ /*判断是否游戏*/
int i,ret=1;
for(i=0;i<8;i++)
ret=ret&&(num[i]==(i+1));
return ret;
}
int GetTheNull(){ /*获得空格的位置*/
int i;
for(i=0;i<=8;i++){
if (num[i]==0)
return i;
}
}
change(int a,int b){ /*交换num[a],num[b]*/
int temp;
temp=num[a];
num[a]=num[b];
num[b]=temp;
}