连连看C语言课程设计报告
C语言实验连连看
#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct Player{int Rank;int score;int time;}player;//定义一个玩家信息结构体typedef struct Point{int x;int y;}point;//连连看地图坐标结构体player py[5];player p={4,0,0};int record=5;//记录个数int flag=0;//判断是否开始过游戏int restarttime=1;char a[9]={' ','A','B','C','D','E','F','G','H'};int **ch;void Produce(int n);//随机产生地图int OneLink(point p1,point p2);//判断两点能否直接相连void HV(point p1,point *hp,point *vp,int *n1,int *n2);//连连看算法,计算两点横向和纵向的共同部分int ExtendSearch(point p1,point p2);//通过调用OneLink(),HV(),判断两点能否消除void Judge();//调用ExtendSearch(),判断能否消除void Show(int n);//显示连连看地图void Free(int n);//释放内存void Menu();//主菜单void Menu2();//2级菜单void Sort();//排序函数,用于玩家排名void RankSelect();//游戏难度等级选择int IfWin(int n);//判断是游戏是否赢void Record();//显示记录void Start();//void GameOver();//void PlayGame();//int ReadFile();//读取文件void SaveFile();//保存文件void CreateFile();//用于刚开始的创建文件void Restart();//重置模式void Menu(){printf("************************************************************ *****\n");printf("* 1.开始游戏*\n");printf("* 2.难度选择*\n");printf("* 3.查看记录*\n");printf("* 0.退出*\n");printf("************************************************************ *****\n");}void Menu2(){printf("************************************************************ *****\n");printf("* 1.4*4 *\n");printf("* 2.6*6 *\n");printf("* 0.返回上级*\n");printf("************************************************************ *****\n");}void Produce(int n){int i,j,k,m1,m2;srand(time(NULL));ch=(int **)malloc((n+2)*sizeof(int*));for(i=0;i<n+2;i++){ch[i]=(int *)malloc((n+2)*sizeof(ch));for(j=0;j<n+2;j++){ch[i][j]=0;}}for(i=1;i<=n;i++)for(j=1;j<=n;j++){k=rand()%n+1;if(ch[i][j]==0){ch[i][j]=k;do{m1=1+rand()%n;m2=1+rand()%n;}while(ch[m1][m2]!=0);ch[m1][m2]=k;}}flag=1;}int OneLink(point p1,point p2){point max,min;int i;if(p1.x==p2.x&&p1.y==p2.y) return 1;if(p1.x==p2.x){if(p1.y>p2.y){max=p1;min=p2;}else{max=p2;min=p1;}if((max.y-1)==min.y) return 1;for(i=min.y+1;i<max.y;i++){if(ch[p1.x][i]!=0)return 0;}return 1;}if(p1.y==p2.y){if(p1.x>p2.x){max=p1;min=p2;}else{max=p2;min=p1;}if((max.x-1)==min.x) return 1;for(i=min.x+1;i<max.x;i++){if(ch[i][p1.y]!=0)return 0;}return 1;}return 0;}//横向,纵向void HV(point p1,point *hp,point *vp,int *n1,int *n2){ int i=0,j=0;point Hp,Vp;hp[j++]=p1;for(i=p1.y-1;i>=0;i--){if(ch[p1.x][i]==0){Hp.x=p1.x;Hp.y=i;hp[j++]=Hp;}else break;}for(i=p1.y+1;i<p.Rank+2;i++){if(ch[p1.x][i]==0){Hp.x=p1.x;Hp.y=i;hp[j++]=Hp;}else break;}(*n1)=j;j=0;//纵向vp[j++]=p1;for(i=p1.x-1;i>=0;i--){if(ch[i][p1.y]==0){Vp.x=i;Vp.y=p1.y;vp[j++]=Vp;}else break;}for(i=p1.x+1;i<p.Rank+2;i++){if(ch[i][p1.y]==0){Vp.x=i;Vp.y=p1.y;vp[j++]=Vp;}else break;}(*n2)=j;}int ExtendSearch(point p1,point p2){int i,j,n1=0,n2=0,n3=0,n4=0;point Hpoint1[10],Hpoint2[10],Vpoint1[10],Vpoint2[10];HV(p1,Hpoint1,Vpoint1,&n1,&n2);HV(p2,Hpoint2,Vpoint2,&n3,&n4);//公共部分//横向for(i=0;i<n1;i++){for(j=0;j<n3;j++){if(Hpoint1[i].y==Hpoint2[j].y){if(OneLink(Hpoint1[i],Hpoint2[j]))return 1;}}}//纵向for(i=0;i<n2;i++){for(j=0;j<n4;j++){if(Vpoint1[i].x==Vpoint2[j].x){if(OneLink(Vpoint1[i],Vpoint2[j]))return 1;}}}return 0;}void Restart(){int i,m1,n1,m2,n2;char tmp;srand(time(NULL));for(i=0;i<5;i++){m1=1+rand()%p.Rank;n1=1+rand()%p.Rank;m2=1+rand()%p.Rank;n2=1+rand()%p.Rank;tmp=ch[m1][n1];ch[m1][n1]=ch[m2][n2];ch[m2][n2]=tmp;}}void Judge(){int x1,x2,y1,y2;char restart;point p1,p2;printf("是否重置(y|n)?");getchar();scanf("%c",&restart);if(restart=='y'){Restart();restarttime++;}else{printf("\nPlease input the point(example:(2,3),(4,4) )\n");//清除回车getchar();scanf("(%d,%d),(%d,%d)",&x1,&y1,&x2,&y2);p1.x=x1;p1.y=y1;p2.x=x2;p2.y=y2;if(x1==x2&&y1==y2);else if(ch[x1][y1]==ch[x2][y2]&&ExtendSearch(p1,p2)){ch[x1][y1]=ch[x2][y2]=0;}}}void Show(int n){int i,j;for(i=0;i<n;i++)printf(" %3d",i+1);printf("\n");for(i=1;i<=n;i++)for(j=1;j<=n;j++){printf("%4c",a[ch[i][j]]);if((j)%n==0)printf("%3d\n",i);}}void Free(int n){ int i;if(flag){for(i=0; i<n; i++)free(ch[i]);free(ch);}}int IfWin(int n){int i,j;for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(ch[i][j]!=0)return 0;}return 1;}void Sort(){int i,j;for(i=0;(i<record)&&(py[i].score>p.score);i++);if(i<record){for(j=record-1;j>i;j--){py[j]=py[j-1];}py[i].Rank=p.Rank;py[i].score=p.score;py[i].time=p.time;return ;}return ;}void Record(){int i;system("CLS");printf("*****************************************************\n");printf("* 排名等级分数时间*\n");for(i=0;i<record;i++){if(py[i].score>0){printf("*%10d%10d%10d%10d*\n",i+1,py[i].Rank,py[i].score,py[i].time);}}printf("*****************************************************\n");do{printf("输入0退出:");scanf("%d",&i);}while(i!=0);}void RunningGame(){int n=p.Rank;time_t start,end;Produce(n);start=time(NULL);do{system("CLS");Show(n);Judge();// scanf("%d",&n);// Show(n);}while(!IfWin(n));end=time(NULL);p.time=(int)difftime(end,start);p.score=(int)((p.Rank*1000*120/p.time)/restarttime);printf(" you win!\n");printf(" costing time:%d\n",p.time);printf(" your final score:%d\n",p.score);Sort();SaveFile();printf("任意键退出\n");scanf("%d",&n);}void RankSelect(){int choice;do{system("CLS");Menu2();printf("Please input your choice:");scanf("%d",&choice);switch(choice){case 1:p.Rank=4;break;case 2:p.Rank=6;break;case 0:break;}}while(choice>3);}void Start(){int choice;int i;if(ReadFile()==0){CreateFile();i=ReadFile();}do{system("CLS");Menu();printf("Please input your choice:");scanf("%d",&choice);switch(choice){case 1:RunningGame();break;case 2:RankSelect();break;case 3:Record();break;case 0:break;}}while(choice);}void CreateFile(){FILE *file;file=fopen("./record.txt","wb");if(!file){printf("cannot create!\n");exit(1);}fclose(file);}int ReadFile(){FILE *file;int i=0,j=0,last=0;player pl;file=fopen("./record.txt","rb");if(!file){return 0;}while(fread(&py[i],sizeof(py[i]),1,file)==1) i++;for(;i<record;i++){py[i].Rank=4;py[i].score=0;py[i].time=0;}for(i=0;i<record-1;i++){for(j=0;j<record-i;j++){if(py[j].score<py[j+1].score){pl=py[j+1];py[j+1]=py[j];py[j]=pl;last=1;}}if(last==0)break;last=0;}fclose(file);return 1;}void SaveFile(){FILE *file;int i=record-1;file=fopen("./record.txt","wb");if(!file){printf("cannot open!\n");exit(1);}while(i>=0){fwrite(&py[i],sizeof(py[i]),1,file);i--;}fclose(file);}void GameOver(){Free(p.Rank);}void PlayGame(){Start();GameOver();}int main(){PlayGame();return 0;}。
连连看c课程设计
连连看 c课程设计。
一、课程目标知识目标:1. 学生能理解并掌握连连看游戏的基本规则和策略。
2. 学生能运用所学知识,分析并解决连连看游戏中遇到的问题。
3. 学生了解连连看游戏背后的数学原理,如排列组合、概率等。
技能目标:1. 学生能运用计算机操作,熟练玩转连连看游戏。
2. 学生通过连连看游戏,培养逻辑思维能力和问题解决能力。
3. 学生学会与他人合作,进行游戏策略的交流与分享。
情感态度价值观目标:1. 学生在游戏中培养积极的学习态度,主动探索和发现新知识。
2. 学生树立正确的竞争意识,学会尊重对手,敢于面对挑战。
3. 学生通过团队合作,培养集体荣誉感,增强团队协作能力。
本课程旨在通过连连看游戏,将学科知识与实际操作相结合,提高学生的逻辑思维能力、问题解决能力和团队合作能力。
针对学生的年级特点,课程设计注重知识性、趣味性和实践性,使学生学以致用,激发学习兴趣,培养良好的学习习惯和价值观。
二、教学内容1. 连连看游戏规则与策略:介绍连连看游戏的基本规则,分析游戏策略,如消除顺序、路径选择等。
- 教材章节:第三章第二节“游戏的规则与策略”2. 连连看游戏中的数学原理:讲解排列组合、概率等数学知识在连连看游戏中的应用。
- 教材章节:第四章第一节“排列组合与概率”3. 计算机操作与连连看游戏:教授如何使用计算机进行连连看游戏,包括游戏界面的认识、操作方法等。
- 教材章节:第二章第二节“计算机游戏操作基础”4. 逻辑思维与问题解决:通过连连看游戏,培养学生逻辑思维能力和问题解决能力。
- 教材章节:第五章第三节“逻辑思维与问题解决方法”5. 团队合作与交流分享:组织学生进行连连看游戏比赛,培养团队合作精神,并进行游戏策略的交流与分享。
- 教材章节:第六章第一节“团队合作与交流”教学内容按照教学大纲进行安排,共计5个课时。
第一、二课时讲解连连看游戏规则与策略,第三课时介绍数学原理在游戏中的应用,第四课时教授计算机操作,第五课时进行团队合作与交流分享。
C语言程序设计连连看
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <conio.h>#include <iostream>using namespace std;#include <ctime>int mai() //倒计时{for (int i=3; i>=0; i--){ long t = time(NULL);for(;;){long n = time(NULL);if(n != t)break; }system("cls");cout<<""<<endl;cout<<""<<endl;cout<<" 离史上最卡哇依的游戏开始还有** " << i << " **秒哦!!!"<<endl;}return 0;}void init1();void print1();int exit1();void init2();void print2();int exit2();void init3();void print3();int exit3();void near1(int a,int b,int a1,int b1);char chessman[10][10];void main() //主函数{ time_t start,end,time;start=clock();mai();int d;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<" ****************************************************************"<<endl;cout<<" ****************************************************************"<<endl;cout<<" **亲,请选择适合您智商的级别:[1]低级[2]中级[3]登峰造极**"<<endl;cout<<" ****************************************************************"<<endl;cout<<" ****************************************************************"<<endl;cout<<""<<endl;cout<<""<<endl;cout<<" 研发小组:Q Y Q"<<endl;cout<<"请选择:***- ";cin>>d;cout<<" -*** "<<endl;system("pause");switch(d){case 1:init1();break;case 2:init2();break;case 3:init3();break; default :cout<<"你个逗比"; }int op;int row,line;int row2,line2;do{ if(d==1)print1();else if(d==2)print2();else if(d==3)print3();printf("options:\n");printf("\t1.select\n");printf("\t2.restart\n");printf("\t3.sort\n");scanf("%d",&op);if(op==1){printf("不造亲第一个相中了谁呢:");scanf("%d %d",&line,&row);printf("再给他找个伴儿吧,亲:");scanf("%d %d",&line2,&row2);if(chessman[line][row]!=chessman[line2][row2]){printf("有缘无分呐!\n");system("pause");}else if(line==line2&&row==row2){printf("有搞错哦,亲!!!\n");system("pause");}else if(line<=line2){near1(line,row,line2,row2);}else{near1(line2,row2,line,row);}}if(op==2){}if(op==3){ main();}}while(exit1(),exit2(),exit3());system("pause");printf("\n\n\n\t\t哇呀!你好厉害!\n");end=clock();time=end-start; //这里的时间是计算机内部时间cout << endl << "time:" << time << endl;system("pause");cout<<"本次得分:98分! 继续保持哦!"<<endl;system("pause");}void init1() //4乘4矩阵{int i,j;int a[4]={0};srand(time(NULL));for(i=1;i<4;i++)for(j=1;j<5;j++){chessman[i][j]=rand()%4+65;if(chessman[i][j]==65) a[0]++;if(chessman[i][j]==66) a[1]++;if(chessman[i][j]==67) a[2]++;if(chessman[i][j]==68) a[3]++;}for(i=0;i<4;i++){if(a[i]%2!=0)chessman[4][i+1]=i+65;elsechessman[4][i+1]=69;}}void print1(){int i,j;system("cls");printf("\t 1 2 3 4\n");for(i=0;i<5;i++){printf("\t\n\t");for(j=0;j<5;j++){printf("%4c",chessman[i][j]);if(j==4&&i!=0&&i!=5)printf("\t%d",i);}}printf("\n\n\n\n");}int exit1(){int i,j;for(i=0;i<6;i++){for(j=0;j<6;j++)if(chessman[i][j]!=0)return 1;}return 0;}void init2() //6乘6矩阵{int i,j;int a[6]={0};srand(time(NULL));for(i=1;i<6;i++)for(j=1;j<7;j++){chessman[i][j]=rand()%6+65;if(chessman[i][j]==65) a[0]++;if(chessman[i][j]==66) a[1]++;if(chessman[i][j]==67) a[2]++;if(chessman[i][j]==68) a[3]++;if(chessman[i][j]==69) a[4]++;if(chessman[i][j]==70) a[5]++;}for(i=0;i<6;i++){if(a[i]%2!=0)chessman[6][i+1]=i+65;elsechessman[6][i+1]=71;}}void print2(){int i,j;system("cls");printf("\t 1 2 3 4 5 6\n");for(i=0;i<8;i++){printf("\t\n\t");for(j=0;j<8;j++){printf("%4c",chessman[i][j]);if(j==6&&i!=0&&i!=7)printf("\t%d",i);}}printf("\n\n\n\n");}int exit2(){int i,j;for(i=0;i<8;i++){for(j=0;j<8;j++)if(chessman[i][j]!=0)return 1;}return 0;}void init3() //8乘8矩阵{int i,j;int a[8]={0};srand(time(NULL));for(i=1;i<8;i++)for(j=1;j<9;j++){chessman[i][j]=rand()%8+65; //棋盘内容为A到Hif(chessman[i][j]==65) a[0]++; //记录A的个数if(chessman[i][j]==66) a[1]++;if(chessman[i][j]==67) a[2]++;if(chessman[i][j]==68) a[3]++;if(chessman[i][j]==69) a[4]++;if(chessman[i][j]==70) a[5]++;if(chessman[i][j]==71) a[6]++;if(chessman[i][j]==72) a[7]++;}for(i=0;i<8;i++){if(a[i]%2!=0)chessman[8][i+1]=i+65;elsechessman[8][i+1]=73;}}void print3(){int i,j;system("cls");printf("\t 1 2 3 4 5 6 7 8 \n");for(i=0;i<10;i++){printf("\t\n\t");for(j=0;j<10;j++){printf("%4c",chessman[i][j]);if(j==9&&i!=0&&i!=9)printf("\t%d",i);}}printf("\n\n\n\n");}int exit3(){int i,j;for(i=0;i<10;i++){for(j=0;j<10;j++)if(chessman[i][j]!=0)return 1;}return 0;}void near1(int a,int b,int a1,int b1) //三种路径{int arow[2];int aline[2];int brow[2];int bline[2];int start=0,end=0; //临时两个点int i,j,n; //用于循环for(i=0;i<2;i++) //初始化数组{arow[i]=a;brow[i]=a1;aline[i]=b;bline[i]=b1;}/////////////////////////////////////////(a, b)a列中有哪些列for(i=a+1;i<10;i++){if(chessman[i][b]==0)arow[1]=i; //arow【1】A点a行向下向量elsebreak;}for(i=a-1;i>=0;i--){if(chessman[i][b]==0) //arow【0】A点a行向上向量arow[0]=i;elsebreak;}////////////////////////////////////////////(a1,b1)a行中有哪些列for(i=a1+1;i<10;i++){if(chessman[i][b1]==0) //brow[1]B点a1行向下向量brow[1]=i;elsebreak;}for(i=a1-1;i>=0;i--){if(chessman[i][b1]==0) //brow[1]B点a1行向上向量brow[0]=i;elsebreak;}//////////////////////////////////////(a,b)b行有哪些列for(i=b+1;i<10;i++){if(chessman[a][i]==0) //aline[1]A点b列向右向量aline[1]=i;elsebreak;}for(i=b-1;i>=0;i--){if(chessman[a][i]==0) //aline[0]A点b列向左向量aline[0]=i;elsebreak;}/////////////////////////////(a1,b1)中b1列中有哪些行for(i=b1+1;i<10;i++){if(chessman[a1][i]==0) //bline[1]B点b1列向左向量bline[1]=i;elsebreak;}for(i=b1-1;i>=0;i--){if(chessman[a1][i]==0) //bline[1]B点b1列向右向量bline[0]=i;elsebreak;}///////////////////////////////////////关键算法////////////////////////////////////**********************情况一(a,b)(a1,b1)*********************************情况二(a.b)(a1,b1)***********************************/考虑上下向量if(brow[0]>=arow[0]) //向上方向向量有共同的列向量start=brow[0]; //取大的elsestart=arow[0];if(brow[1]<=arow[1]) //向下的方向向量有共同的列向量end=brow[1]; 取小的elseend=arow[1];for(;start<=end;start++) //列向量上共同sart到end{//b1要大于b,否则就交换如果不交换将使下面的循环出错、//if(b<b1){j=b; //小的赋值到ji=b1; //大的赋值到i.}else{j=b1;i=b;}///这里节约一个变量for(n=0;j<i;j++) //同一行上,从列j到i{if(chessman[start][j]==0) //同一行上,所有列都是0n++;elsebreak;}if((n==b-b1)&&(n>0)) //因为b和b1大小不能确定,所以有两个ifchessman[a][b]=chessman[a1][b1]=0;if((n==b1-b)&&(n>0))chessman[a][b]=chessman[a1][b1]=0;}//考虑左右向量//if(aline[0]>=bline[0]) //向左的向量有共同的列向量start=aline[0]; //取大的elsestart=bline[0];if(aline[1]<bline[1])end=aline[1];elseend=bline[1];for(i=start;i<=end;i++){for(j=a,n=0;j<a1;j++){if(chessman[j][i]==0) //同一列上所有行都是0n++;elsebreak;}if(n==a1-a&&n>0){chessman[a][b]=chessman[a1][b1]=0;break;}}//************************************************************************** 同行或者同列(a,b)或者(a,b)(a1,b1) (a1,b1)******************************************************************************* if(a==a1) //同行{if((aline[1]>=b1)||(aline[0]<=b1))chessman[a][b]=chessman[a1][b1]=0;}if(b==b1) //同列{if(arow[1]>=a1)chessman[a][b]=chessman[a1][b1]=0;} }。
(完整版)连连看C语言毕业课程设计报告
(完整版)连连看C语言毕业课程设计报告目录问题描述连连看是一款简单有趣的小游戏,曾经风靡一时,玩家要将相同的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手,游戏速度节奏快,画面清晰可爱,适合细心的玩家。
游戏胜利条件的判定:将棋盘上面的格子全部消除掉;失败的判定:规定的时间内格子没有消除。
问题分析连连看需要解决的问题包括:(1)整个游戏界面和各种图案的图形显示;(2)如何判断鼠标所点的两个图像能否相消;(3)如何判断是否消除完全;(4)如何判断游戏的结束及如何终止游戏;(5)游戏难度的设计和得分规则游戏总的流程可以描述如下:首先出现游戏界面,一幅由10*6的小图片的构成的画面,玩家需要点击2 个相同图案的对子,其连接线不多于3 根直线,也就是说连接相同图案时,直线只能有两个折点,就可以成功将对子消除。
此外,需要重点考虑的是游戏面板和各种形状的方块的数据结构表示。
格子面板可以用一个二维数组来表示。
1、开发工具的介绍【VS2008 】VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。
使用Visual Studio 2008可以高效开发Windows应用程序。
设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。
同时Visual Studio 2008支持项目模板、调试器和部署程序。
Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。
VS的开发界面分为两个版本:整合模式和孤立模式,分别对基于语言的开发和基于特别工具的开发作了优化。
【EasyX 】EasyX 是针对C++ 的图形库,可以帮助C 语言初学者快速上手图形和游戏编程。
许多学编程的都是从C 语言开始入门的,而目前的现状是:1. 有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。
连连看的实验报告(3篇)
第1篇一、实验目的1. 了解连连看游戏的基本原理和设计方法。
2. 掌握连连看游戏的设计与开发流程。
3. 提高编程能力和游戏设计能力。
二、实验内容1. 游戏背景:连连看是一款休闲益智类游戏,玩家需要通过点击相同图案的方块,将它们消除。
2. 游戏设计:(1)游戏界面:包括标题、菜单、游戏区域、分数显示等。
(2)游戏规则:点击相同图案的方块,将它们消除,消除的方块越多,分数越高。
(3)关卡设计:设置不同难度级别的关卡,提高游戏的可玩性。
3. 编程实现:(1)游戏界面:使用Java Swing库实现游戏界面。
(2)游戏逻辑:使用面向对象编程思想设计游戏逻辑,包括方块类、游戏区域类、分数类等。
(3)数据结构:使用二维数组存储游戏区域中的方块信息。
三、实验步骤1. 设计游戏界面:使用Java Swing库创建游戏窗口,包括标题、菜单、游戏区域、分数显示等。
2. 设计游戏逻辑:(1)创建方块类:包含方块的图案、位置等信息。
(2)创建游戏区域类:包含方块的创建、移动、判断是否消除等逻辑。
(3)创建分数类:用于计算和显示玩家的分数。
3. 编写代码实现:(1)实现游戏界面:使用Java Swing库创建游戏窗口,包括标题、菜单、游戏区域、分数显示等。
(2)实现游戏逻辑:使用面向对象编程思想设计游戏逻辑,包括方块类、游戏区域类、分数类等。
(3)实现数据结构:使用二维数组存储游戏区域中的方块信息。
4. 调试与优化:在开发过程中,不断调试代码,优化游戏性能,提高用户体验。
四、实验结果与分析1. 实验结果:成功设计并实现了一款连连看游戏,游戏界面美观,游戏逻辑合理,可玩性强。
2. 分析:(1)通过本次实验,掌握了连连看游戏的基本原理和设计方法。
(2)提高了编程能力和游戏设计能力,学会了使用Java Swing库和面向对象编程思想进行游戏开发。
(3)实验过程中遇到了一些问题,如数据结构设计不合理、游戏逻辑错误等,通过不断调试和优化,最终解决了这些问题。
c语言课程设计报告
c语言课程设计报告c语言课程设计报告在现在社会,我们都不可避免地要接触到报告,报告成为了一种新兴产业。
那么报告应该怎么写才合适呢?以下是店铺收集整理的c语言课程设计报告,欢迎阅读与收藏。
c语言课程设计报告11、题目要求◆ 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、居住街道、省份、城市、电子邮箱等;◆ 能够提供添加、删除和修改通讯录信息的功能;◆ 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询;◆ 将通讯录保存在文件中;◆ 能够按表格方式输出通讯录信息。
2、需求分析本程序将用到文件系统,其中单行内容代表一张纸条。
程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以应提供文件输入的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以要提供显示、排序等操作;另外应提供键盘式选择菜单实现功能选择。
3、总体设计根据项目的任务要求及以上分析,在设计方法上,采用模块化的程序设计思想,即将通讯录管理系统划分为数据输入模块,数据查询模块,数据修改模块,数据插入模块,数据删除模块,,并对每个模块按照其功能分别独立完成对应的程序设计。
在数据处理上,各模块中的数据处理(如数据读/写操作)均用文件形式来实施,并在主程序中完成操作界面的设计功能,设计思路如下:1、采用模块设计思想;2、将通讯录信息定义成结构体类型,并通过文件实施数据操作;3、通过设计一菜单界面完成具体操作。
4、详细设计c语言课程设计报告2一、传统C语言课程设计教学模式C语言是最基本的计算机编程,是计算机、电子信息类等相关专业学生的专业入门课,在其学习过程中,要求必须掌握编程的技能。
但是C语言的学习有其特点,规则比较多、知识点多,涉及到的编程程序等也比较难懂,在运行上代码的要求较高,程序执行效率高,因此更讲究教学和学习的方式方法,但是在我们的教学中,目前教学方法比较单一,随着信息化的发展,传统的教学模式已经无法适应,亟需改革。
连连看c课程设计
连连看 c课程设计一、教学目标本课程的教学目标是使学生掌握连连看游戏的设计与实现,包括算法分析、界面设计、编程实现等。
知识目标要求学生了解连连看游戏的规则,掌握常用的算法,如深度优先搜索、广度优先搜索等。
技能目标要求学生能够使用编程语言实现连连看游戏,提高编程能力和问题解决能力。
情感态度价值观目标在于培养学生的团队合作意识和创新精神,通过小组合作完成游戏设计,提高沟通协作能力。
二、教学内容本课程的教学内容主要包括连连看游戏规则介绍、算法分析、界面设计、编程实现和团队协作。
具体包括以下几个部分:1.连连看游戏规则介绍:介绍连连看游戏的规则,让学生了解游戏的基本玩法。
2.算法分析:讲解如何使用深度优先搜索、广度优先搜索等算法解决连连看游戏中的问题。
3.界面设计:教授如何设计连连看游戏的界面,包括游戏区域、提示框、菜单等。
4.编程实现:指导学生使用编程语言实现连连看游戏,包括算法实现、界面绘制等。
5.团队协作:讲解如何进行小组合作,分工完成游戏设计,提高团队合作能力。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。
包括:1.讲授法:讲解连连看游戏规则、算法分析、界面设计等理论知识。
2.案例分析法:分析经典连连看游戏案例,引导学生思考并解决问题。
3.实验法:让学生动手实践,编写代码实现连连看游戏。
4.讨论法:学生进行小组讨论,分享设计思路,互相学习。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将提供以下教学资源:1.教材:提供专门的教材,介绍连连看游戏的设计与实现方法。
2.参考书:推荐学生阅读相关编程书籍,加深对编程语言和算法的理解。
3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更好地理解课程内容。
4.实验设备:提供计算机、编程环境等实验设备,让学生能够动手实践。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面反映学生的学习成果。
平时表现占30%,主要评估学生在课堂上的参与度、提问回答和小组讨论等;作业占30%,主要评估学生的编程实践能力;考试占40%,包括理论知识考试和实际编程考试,以评估学生对课程内容的掌握程度。
连连看设计报告
连连看学号姓名指导教师2008年1月【需求分析】1.需求描述1.1.题目描述:要求同学用C语言开发一个游戏“连连看”。
游戏规则可参考原游戏。
1.2.功能要求:1.2.1界面界面由若干个小图构成,每个小图案成为一张牌。
游戏分难,易2种,分别为9行16列牌,和5行8列牌。
每张牌上的图案可由不同数字代替。
在屏幕上显示“重新洗牌”,“生命值”,“得分”。
1.2.2操作方式必须设计一种可随时结束程序的方法(例如按ESC键)。
可使用下面任何一种操作方式:(1)用键盘操作。
按键把光标移动到要选中的牌上,按ENTER键选中该牌。
(2)鼠标操作(扩展要求)。
2.需求分析2.1.功能2.1.1游戏操作选中2张牌,若2张牌的数字不同,则取消两张牌的选中状态;若2张牌的数字相同,则寻找可能存在的连线,连线最多允许两次转折,若未找到,则取消两张牌的选中状态;若找到,则画出连线,连线保留一段时间,然后再将此2张牌和连线删除。
通过键盘控制程序的运行,进行选块,消块,退出的功能。
2.1.2游戏结束有3种结束方式:成功结束:当所有牌均被连接并删除,则游戏结束,并显示“congratulation!”。
失败结束:当进度条减为0时,而界面中仍有牌未被删除,则游戏结束,并显示“you have lost!”。
强行结束:按ESC结束程序。
2.1.3进度条显示当前剩余时间自动获取系统时间,更新进度条时,设置为某个百分比,用背景色进行填充,以达到减少时间的目的。
2.2.界面2.2.1菜单进入游戏首先要设置判断键入,选择是否继续进行游戏。
若选择退出,输入0,界面返回“Thank you”如果选择进入游戏,则键入1,屏幕出现难以程度选择的界面。
2.2.2游戏界面拥户键入2后,游戏进入5行8列的界面,进行游戏。
用户键入3后,游戏进入9行16列的界面,进行游戏。
2.2.3游戏结束用户成功完成游戏后,在界面正中显示“congratulations”。
c语言课程设计连连看
c语言课程设计连连看一、教学目标本课程旨在通过C语言编程的教学,使学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,培养学生具备基本的编程能力和逻辑思维能力。
同时,通过编程实践,使学生能够运用C语言解决实际问题,提高学生的创新能力和实践能力。
此外,通过课程的学习,培养学生对计算机科学的兴趣和热情,培养学生良好的编程习惯和团队协作精神。
二、教学内容教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,以及简单的编程实践。
具体包括以下几个方面:1.C语言的基本语法和规则;2.数据类型、变量和常量的定义与使用;3.运算符和表达式的使用;4.控制结构:条件语句、循环语句;5.函数的定义和调用;6.数组、指针和字符串的基本操作;7.结构体和文件操作等高级知识。
三、教学方法为了提高学生的学习兴趣和主动性,将采用多种教学方法相结合的方式进行教学。
具体包括:1.讲授法:讲解C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识;2.案例分析法:通过分析实际案例,使学生掌握C语言编程的方法和技巧;3.实验法:安排上机实验,让学生亲自动手编写程序,巩固所学知识;4.讨论法:学生进行小组讨论,分享学习心得和编程经验,互相学习和进步。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R);2.参考书:《C Primer Plus》、《C和指针》;3.多媒体资料:教学PPT、视频教程、在线编程练习题;4.实验设备:计算机、网络环境、编程环境(如Code::Blocks、VisualStudio等)。
五、教学评估教学评估是检验学生学习成果和教学效果的重要手段。
本课程的评估方式将包括以下几个方面:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和参与程度;2.作业:布置课后编程作业,评估学生的编程能力和应用能力;3.实验报告:评估学生在实验环节的操作能力和解决问题的能力;4.考试成绩:包括期中和期末考试,全面测试学生的C语言编程知识和技能。
连连看课程设计报告
湖南涉外经济学院课程设计报告课程名称:程序设计实训(2)报告题目:连连看游戏的开发学生姓名:唐杰所在学院:信息科学与工程学院专业班级:计科1002班学生学号:指导教师:邹竞2013年6月25日课程设计任务书摘要在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活不可或缺的一部分,越来越多的人使用计算机办公、娱乐、购物等等。
游戏行业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。
连连看游戏是一款很流行的小游戏,有的是连水果图片,有的是连麻将牌,有的是连各种小图片的等等。
各种图片让人看得眼花缭乱,这也可以锻炼人的反应能力和眼力,所以这款小游戏受到了越来越多人的喜爱,尤其是小孩子的喜爱。
连连看游戏也是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C#,C++,VB,JAVA等。
在本课程设计中我是利用C#语言编写,开发平台是Microsoft Visual Studio 2010,功能较为简单,寓学于乐。
程序的功能是通过找出游戏中两个相同图案的小方块,然后分别点击两个小方块将其消除;可通过倒计时的方式控制游戏时间,游戏时间到或者没有匹配的图案时则游戏结束,需要重新开局,每一局开始倒计时都重新开始;能够响应鼠标事件。
论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。
重点介绍了在游戏过程中各种事件的处理,其中又以鼠标事件的处理最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作,消除需要消除的小方块。
关键词:连连看游戏;算法设计;事件;C#;Microsoft Visual Studio 2010目录课程设计任务书 (II)摘要 (III)一、课程设计目的 (1)二、任务描述和要求 (2)2.1 问题描述 (2)2.2 任务描述 (2)2.3 设计要求 (3)三、需求分析 (4)3.1功能分析 (4)3.2功能需求 (4)3.3 功能模块 (5)3.4系统需求分析总结 (6)四、设计方案 (7)4.1 总体设计 (7)4.1.1 系统基本功能 (7)4.1.2 系统流程 (8)4.1.3 主要功能模块 (10)4.2 详细设计 (11)4.2.1 规则详解 (11)4.2.2部分程序代码解析 (12)4.2.3运行结果分析 (17)五、总结 (20)六、参考文献 (21)一、课程设计目的《程序设计实训》课程是是计算机科学与技术专业重要的实践性课程之一,其实践性和应用性都很强。
连连看c语言课程设计
连连看c语言课程设计一、教学目标本课程旨在通过学习C语言的基础知识,使学生能够理解并运用C语言进行简单的程序设计。
具体目标如下:1.理解C语言的基本语法和数据类型。
2.掌握C语言的运算符和表达式。
3.学会使用C语言进行控制流程的编写。
4.能够使用C语言编写简单的程序。
5.能够阅读并理解简单的C语言程序。
6.能够对简单的C语言程序进行调试和修改。
情感态度价值观目标:1.培养学生对计算机科学的兴趣和热情。
2.培养学生解决问题的能力和创新思维。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、表达式和控制流程。
具体安排如下:1.C语言的基本语法和数据类型。
2.C语言的运算符和表达式。
3.C语言的控制流程,包括条件语句和循环语句。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。
具体方法如下:1.讲授法:通过讲解C语言的基本语法、数据类型、运算符和表达式,使学生理解并掌握相关知识。
2.案例分析法:通过分析具体的C语言程序案例,使学生学会运用C语言进行程序设计。
3.实验法:通过上机实验,使学生能够实际操作C语言进行程序编写和调试。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:提供相关的C语言参考书籍,供学生自主学习。
3.多媒体资料:制作相关的教学PPT和视频资料,以便学生更好地理解教学内容。
4.实验设备:提供计算机实验室,供学生进行上机实验和实践。
五、教学评估为了全面反映学生的学习成果,本课程将采用以下评估方式:1.平时表现:通过学生在课堂上的参与度、提问和回答问题的情况,以及小组讨论的表现来评估。
2.作业:布置适量的作业,通过学生的作业完成情况来评估其对知识的掌握程度。
3.考试:进行期中考试和期末考试,通过考试的成绩来评估学生的学习成果。
以上评估方式将客观、公正地评价学生的学习情况,同时也将鼓励学生的自主学习和积极参与。
c语言课程设计报告书3篇
c语言课程设计报告书3篇c语言课程设计报告书1我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。
在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理。
简单界面程序。
高级界面程序。
程序的添加修改。
用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1、加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的.语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
C 课程设计_连连看游戏
课程设计报告课程名称:面向对象程序设计C++设计题目:连连看游戏专业:计算机科学与技术姓名:学号:指导教师:李晓虹2016 年 1 月 1 日1、系统需求分析本程序是一款连连看游戏,该程序应该具备以下功能:(1)该游戏界面为黑色背景加方格图片类型,不同的图片上有不同的图案,位置为随机打乱。
(2)游戏规则为将相同图案的图片进行连接,但需满足只能至少单边无阻呈直线连接,否则无效。
一旦成功连接两个相同的图案,则这两个图案消失,如此反复直到所有的图片消失,游戏通关。
(3)图片的位置具有随机性,但要求都是必须成对出现。
1.1 功能需求(1)主界面需求显示玩家当前关卡数及得分数提供“新游戏”按钮,单击后可以重新开始游戏提供“退出”按钮,单击后可以退出程序提供“帮助”按钮,单击后可以弹出制作人信息,联系方式等(2)消除需求玩家点击图案,图案会变色以提示被选中;此时再点击另一个图案,如果图案相同,则这两个图案消失;此外,两个图案中间必须无其他图片阻碍才有效,消除规则如下:一条直线相连:图1-1两条直线相连:图1-2图1-3(3)新游戏需求当玩家点击新游戏按钮时,游戏将重新生成新的图案并重排,且重排的方式是随机的。
(4)帮助当玩家点击帮助时,将弹出制作者信息以及秘籍。
(5)退出点击退出按钮,将退出程序。
1.2时间性能需求响应速度:3秒以内客户端:可执行文件,点开即可运行,方便快捷。
1.3界面友好需求系统提供统一的界面操作方式。
要求界面操作方式美观大方,布局合理,功能完善,整个操作简单,对于初级用户容易上手。
良好的操作界面可以给游戏玩家带来更好地游戏体验和愉悦的心情。
复杂的游戏界面会造成玩家的负担,所以在设计程序时,功能以及各种操作都应当尽量简单明了。
1.4系统可用性需求系统操作快捷,内容完整是保证用户进行使用的基础。
因此,应准确而详细的理解各用户区的特征,任务和使用环境,在“有效性”、“效率”等各个方面满足各类用户对系统的需要。
c语言课程设计实验报告
c语言课程设计实验报告c语言课程设计实验报告c语言是一门通用计算机编程语言,应用广泛。
下面就随小编一起去阅读c语言课程设计实验报告,相信能带给大家帮助。
第一章基础掌握1.1 实验目的掌握C程序设计编程环境Visual C++,掌握运行一个C程序的基本步骤,包括编辑、编译、链接和运行。
(]1.2 实验要求在报告中记录建立、保存C程序实习过程。
1.3 实验基本内容编写程序,在屏幕上显示一个短句“Hello World”(1)程序:1)编译如下程序:#includeVoid main(){printf (“Hello World! ”);}2)链接。
执行Build-命令。
3)运行。
执行Build Execute 命令。
显示结果。
4)关闭程序工作区。
(2)运行结果:输出结果:Hello World!总结:掌握C语言程序设计的基本框架,能够编写简单的程序。
第二章数据类型2.1 实验目的(1)掌握C语言的运算符和表达式的正确使用以及C语言的几种基本数据类型和基本输入输出函数的使用方法。
()(2)通过编程进一步理解和掌握运算符的确切含义和功能。
2.2 实验要求(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
2.3 实验基本内容输入程序,观察输出结果 1>./*test2.1c*/1)编译如下程序: #includevoid main() {char ch; int k;ch='a',k='b';printf("%d,%x,%c",ch,ch,ch,ch,k); printf("k=%%d ",k) }2)链接。
执行Build-命令。
3)运行。
执行Build Execute 命令。
显示结果。
4)关闭程序工作区。
2>./*test2.2c*/1)编译如下程序: #includevoid main() {float a1,a2; double b1,b2; a1=1234.12; a2=0.000001; b1=1234.12;b2=0.000001;printf("%f,%l f ",a1+a2,b1+b2);}2)链接。
c语言课程设计设计报告
c语言课程设计设计报告一、教学目标本课程的教学目标是让学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基础知识,培养学生编写简单C程序的能力,使学生了解程序设计的基本思路和方法,培养学生的逻辑思维和问题解决能力。
具体来说,知识目标包括:1.理解C语言的基本语法和编程规范;2.掌握基本数据类型、运算符和表达式;3.熟悉控制结构,如条件语句、循环语句等;4.了解函数的定义和调用方法。
技能目标包括:1.能够使用C语言编写简单的程序;2.能够阅读和理解简单的C语言程序;3.能够使用调试工具对程序进行调试和优化。
情感态度价值观目标包括:1.培养学生对编程的兴趣和热情;2.培养学生克服困难、解决问题的决心和勇气;3.培养学生团队协作、共同进步的精神。
二、教学内容根据教学目标,本课程的教学内容主要包括以下几个部分:1.C语言基本语法和编程规范;2.数据类型、运算符和表达式;3.控制结构,如条件语句、循环语句等;4.函数的定义和调用方法;5.简单程序的设计和调试。
教材选用《C程序设计语言》(K&R),章节安排如下:1.第1-3章:C语言基本语法和编程规范;2.第4-5章:数据类型、运算符和表达式;3.第6-7章:控制结构;4.第8章:函数的定义和调用方法;5.课后练习和案例分析。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解基本语法、数据类型、运算符、控制结构和函数等基础知识;2.案例分析法:分析典型程序,使学生了解编程思路和方法;3.实验法:上机编程实践,培养学生的动手能力;4.讨论法:分组讨论问题,培养学生的团队协作和问题解决能力。
四、教学资源本课程所需教学资源包括:1.教材:《C程序设计语言》(K&R);2.参考书:C语言相关辅导书籍;3.多媒体资料:PPT课件、教学视频等;4.实验设备:计算机、编程环境等。
以上教学资源将用于支持教学内容和教学方法的实施,丰富学生的学习体验。
C 课程设计_连连看游戏1
课程设计报告课程名称:面向对象程序设计C++设计题目:连连看游戏专业:计算机科学与技术姓名:学号:指导教师:李晓虹2016 年 1 月7 日第一章系统需求分析相信大多数玩过QQ游戏的人对这款游戏都不陌生。
这款游戏不止操作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在操作过程中充满了快乐与紧张的气氛。
除了游乐当中能带给使用者快乐之外,游戏的设计内容无形中也不断训练使用者的逻辑思考能力,对于依靠高度脑力工作的现代人,都可以通过这个游戏,不时的检验一下自己,所以我们不难发现,在各种可携带的电子产品上都有这款游戏的踪影。
第二章总体设计本游戏主要给用户提供的是游戏的娱乐功能,所以怎么提高游戏的娱乐性成为问题的关键,那么娱乐性主要体现在那些方面呢?1,用户界面,具有良好的用户界面能吸引人去玩;2,游戏的娱乐功能,具有良好的娱乐功能是游戏具有持久魅力的基础,需要设计游戏的不同级别以充分调动用户积极性;3,具有友好的提示功能,满足不同游戏级别的人的不同需要,增加必要的音乐效果,使用户玩起来不觉得单调乏味。
鉴于上面分析,本次设计设置不同的游戏级别主要是缩短时间的进行速度,因为图标是随机列换的,所以通过控制产生随机数的难度显得不现实。
通过菜单和快捷键的操作可以适时做出游戏的提示功能,满足提示要求,如果用户对某次产生的图标分布效果不满意可以对现在有的图表资源进行有限次的重排,以满足用户的需要。
关于算法问题,这是游戏设计的核心问题,算法的选择好坏涉及到游戏的质量,采用的产生的二维随机数索引分别和对应图标对应形成游戏界面。
算法需要计算两个相同图标的连通性,计算连通性需要分别判断多次,所以算法的根本在于如何判断区域连通。
第三章详细设计3.1 连连看的要求1,要连接的两点上的图形是相同的。
2,两点间存在一条没有“障碍”的并且折点不超过两个的路线。
那么分析一下可以看到,一般分为三种情况。
图例说明:假设以一个2维数组来表示一张连连看的地图,数组中元素值为0的代表游戏界面中的空格子,值大于0的代表游戏中的各种连接对象。
连连看c语言课程设计
连连看c语言课程设计一、课程目标知识目标:1. 学生能理解C语言中结构体的概念和使用方法,掌握结构体数组的相关操作。
2. 学生能运用指针和结构体相关知识实现连连看游戏的逻辑设计。
3. 学生了解并掌握C语言中的文件操作,实现对连连看游戏数据的保存和读取。
技能目标:1. 学生能独立设计并编写C语言程序,完成连连看游戏的框架和基本功能。
2. 学生通过课程学习,培养逻辑思维能力和问题解决能力,学会运用所学知识解决实际问题。
3. 学生能运用调试工具对程序进行调试和优化,提高程序性能。
情感态度价值观目标:1. 学生通过参与课程学习,培养对编程的兴趣和热情,提高主动学习的积极性。
2. 学生在团队协作中,学会沟通与交流,培养合作精神和团队意识。
3. 学生在课程实践中,体验编程的乐趣,增强自信心和成就感,培养克服困难的意志。
本课程针对高年级学生,结合C语言学科特点,注重理论知识与实践操作的结合。
课程以连连看游戏为载体,引导学生运用所学知识,培养编程能力和逻辑思维能力。
同时,关注学生的情感态度,激发学习兴趣,提高合作意识,为学生的终身发展奠定基础。
通过本课程的学习,期望学生能够达到以上所述的具体学习成果。
二、教学内容1. 结构体和结构体数组:讲解结构体的定义和用法,结构体数组的创建与初始化,以及结构体变量的访问和操作。
2. 指针与结构体:介绍指针与结构体的结合使用,包括结构体指针的定义、访问结构体成员,以及结构体指针数组的应用。
3. 文件操作:讲解C语言中文件的基本操作,包括文件的打开、关闭、读取和写入,重点掌握文件读写结构体数据的方法。
4. 游戏逻辑设计:分析连连看游戏的规则和逻辑,引导学生运用结构体、指针和文件操作等知识,设计游戏的数据结构和算法。
5. 编程实践:结合教材实例,指导学生编写连连看游戏的代码,实现游戏的基本功能,包括游戏界面的显示、数据的保存与读取、游戏逻辑判断等。
教学内容参照教材相关章节,按照以下进度安排:第一课时:结构体和结构体数组;第二课时:指针与结构体;第三课时:文件操作;第四课时:游戏逻辑设计;第五课时:编程实践与调试优化。
c课课程设计(连连看)
c 课课程设计(连连看)一、教学目标本课程的教学目标是使学生掌握XX学科的基本概念、原理和方法,提高学生的XX能力。
具体来说,知识目标包括:掌握XX学科的基本知识、概念和原理,了解XX学科的发展趋势;技能目标包括:能够运用XX方法分析问题和解决问题,具备XX技能;情感态度价值观目标包括:培养学生的创新意识、科学精神和合作精神。
二、教学内容根据课程目标,本课程的教学内容主要包括XX学科的基本概念、原理和方法。
教学大纲如下:第1章:XX学科概述1.1 XX学科的定义和发展历程1.2 XX学科的应用领域和意义第2章:XX基本概念2.1 XX概念的定义和内涵2.2 XX概念的应用和举例第3章:XX原理3.1 XX原理的表述和解释3.2 XX原理的应用和案例第4章:XX方法4.1 XX方法的原理和步骤4.2 XX方法的实践应用三、教学方法为了实现课程目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
通过多样化的教学方法,激发学生的学习兴趣和主动性,提高学生的参与度和实践能力。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。
教材和参考书将用于引导学生掌握基本知识和概念;多媒体资料将用于辅助讲解和展示;实验设备将用于实践操作和验证。
教学资源的选择和准备将充分支持教学内容和教学方法的实施,丰富学生的学习体验。
五、教学评估本课程的评估方式包括平时表现、作业和考试等。
平时表现主要评估学生的课堂参与度、提问和回答问题的积极性等;作业主要评估学生的理解和应用能力;考试主要评估学生对知识的掌握和运用能力。
评估方式应客观、公正,能够全面反映学生的学习成果。
具体的评估标准和权重分配将在课程开始时明确告知学生。
六、教学安排本课程的教学安排如下:共计XX课时,每周安排XX时间段进行课堂教学,教学地点为XX教室。
教学进度将根据课程内容和学生的实际情况进行调整,确保在有限的时间内完成教学任务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录问题描述连连看是一款简单有趣的小游戏,曾经风靡一时,玩家要将相同的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手,游戏速度节奏快,画面清晰可爱,适合细心的玩家。
游戏胜利条件的判定:将棋盘上面的格子全部消除掉;失败的判定:规定的时间内格子没有消除。
问题分析连连看需要解决的问题包括:(1)整个游戏界面和各种图案的图形显示;(2)如何判断鼠标所点的两个图像能否相消;(3)如何判断是否消除完全;(4)如何判断游戏的结束及如何终止游戏;(5)游戏难度的设计和得分规则游戏总的流程可以描述如下:首先出现游戏界面,一幅由10*6的小图片的构成的画面,玩家需要点击2 个相同图案的对子,其连接线不多于3 根直线,也就是说连接相同图案时,直线只能有两个折点,就可以成功将对子消除。
此外,需要重点考虑的是游戏面板和各种形状的方块的数据结构表示。
格子面板可以用一个二维数组来表示。
1、开发工具的介绍【VS2008 】VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。
使用Visual Studio 2008可以高效开发Windows应用程序。
设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。
同时Visual Studio 2008支持项目模板、调试器和部署程序。
Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。
VS的开发界面分为两个版本:整合模式和孤立模式,分别对基于语言的开发和基于特别工具的开发作了优化。
【EasyX 】EasyX 是针对C++ 的图形库,可以帮助C 语言初学者快速上手图形和游戏编程。
许多学编程的都是从C 语言开始入门的,而目前的现状是:1. 有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。
2. 有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。
可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。
初学编程想要绘图就得用TC,很是无奈。
3. 还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。
所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。
新的图形学的书有不少是用的OpenGL,可是门槛依然很高。
所以,于是就有了EasyX 库方便的开发平台和TC 简单的绘图功能。
2、设计【程序总体结构】:【界面设计】:界面的设计通过插入背景图片beijing.bmp , 在对每一个格子的赋图片,通过getimage( )从board.bmp中截下所需要的图,再利用putimage( )放置每一个小图。
具体算法:loadimage(&beijing,"D:\\llk\\beijing.bmp");//载入背景图putimage(0,0,&beijing);//放置背景图for(int i = 0 ;i < ROW; i ++)for(int j = 0 ;j < COL ; j++){idy = i * 54 + board_Y ,idx = j * 48+ board_X;putimage(idx,idy,&image[board[i + 1][j + 1]]); //根据赋的值放置每一个格子图}beijing.bmpboard.bmp【重要数据的数据结构设计】:struct BOARD //点击的格子信息{int tx,ty; //格子坐标int xx,yy; //屏幕坐标int data; //图片类型};定义BOARD型的结构体,里面包含的是鼠标点击以后,所读取的点击点在屏幕里的坐标(xx,yy)在二维数组里的坐标board[tx][ty],以及在给每一个二维数组元素赋的值data(用来判断两个格子是否相等,相等以后赋值为0,以便判断是否存在格子,为之后的寻找路径铺垫)int board[ROW + 2][COL + 2];二维数组,用来记录格子的信息,其值是判定是否有方块的标志。
MOUSEMSG mouse;鼠标的记录类型struct MOUSEMSG{UINT uMsg; // 当前鼠标消息bool mkCtrl; // Ctrl 键是否按下bool mkShift; // Shift 键是否按下bool mkLButton; // 鼠标左键是否按下bool mkMButton; // 鼠标中键是否按下bool mkRButton; // 鼠标右键是否按下int x; // 当前鼠标x 坐标(物理坐标)int y; // 当前鼠标y 坐标(物理坐标)int wheel; // 鼠标滚轮滚动值};#define board_X 140 //格子区距左边框距离#define board_Y 140 //格子呢区距上边框距离#define COL 10 //格子区列数#define ROW 6 //格子区行数#define board_number 15 //游戏图片数目【函数设计】:函数的功能列表:void Init(); //初始化界面void load_picture (); //加载图片void del(BOARD &rec); //每个格子赋值为void leftbottondown (MOUSEMSG mouse); //实现鼠标左击效果void frame (int leftx,int lefty); //画边框bool judge_mouse(int leftx,int lefty); //判断鼠标是否在游戏区void select(int leftx,int lefty); //显示选中效果void accurate(int& leftx,int& lefty); //使格子的坐标都在边缘void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); //覆盖直线void line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) ; //用直线连接void exchange(BOARD& pre,BOARD& cur); //交换格子信息bool click(int mousex,int mousey); //判断单击是否有效void record(int leftx,int lefty,BOARD &rec);//记录选中的格子void mouse_to_board(int mousex,int mousey,int *idx,int *idy);//鼠标的坐标转为格子的数组下标int findpath(BOARD &pre,BOARD &cur);//寻找路径,判断是否相等void progressbar();//画进度条void updateprogressbar(long t);//更新进度条因为有许多的函数是执行图像处理以及坐标转化的简单操作,这里画出包含关键算法的主要函数的流程图,其他的函数只做文字的描述介绍。
findpath(BOARD &pre,BOARD &cur)函数cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)函数Init()函数load_picture ()函数:这是一个类似于初始图片的函数,利用 loadimage ,SetWorkingImage ,对含有格子图片信息的图进行分割读取,并存入image[]的IMAGE 类型的数组里,同时还读入了填充背景的图(填充线条)。
del(BOARD &rec)函数:删除函数,将之前记录的鼠标信息全部赋值为0;leftbottondown (MOUSEMSG mouse)函数:记录鼠标的信息,如果鼠标是第一次点击的话,将其信息存入pre里,如果鼠标是第二次点击的话,将其存入cur里,通过findpath()函数来相消与否,如果能相消,则将鼠标点的两块区域覆盖,同时调用del函数,来清除信息,在此过程中,根据统计剩余格子对数的变量counter,来给出分数(用s[]数组来存储分数信息,并在相应位置输出)。
frame (int leftx,int lefty)函数:根据导入的参数画一个格子边框。
judge_mouse(int leftx,int lefty)函数:判断鼠标的点击区域是否在规定的范围里。
select(int leftx,int lefty)函数:在鼠标点击选择以后,显示frame的效果,并记录数据。
accurate(int& leftx,int& lefty)函数:规范坐标的函数,鼠标点击的区域是在一个范围内的,此函数能把属于一个区域的坐标归整为统一的坐标。
line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) 函数:连线函数,通过导入的点的坐标来调用moveto,lineto函数画线。
exchange(BOARD& pre,BOARD& cur)函数:交换格子信息的函数,在点击2次后,发现两个格子并不能相消后,将pre取第二次点击的格子信息。
click(int mousex,int mousey)函数:判断点击的地方是不是有效,即已经被消去的格子,点击时,没有像有格子的地方一样会出现线框的情况。
record(int leftx,int lefty,BOARD &rec)函数:将鼠标的屏幕坐标转化并记录在BOARD类型的变量里。
mouse_to_board(int mousex,int mousey,int *idx,int *idy)函数:将鼠标的坐标转化为格子信息。
progressbar( )函数:画进度条,作矩形,并填充相应颜色。
updateprogressbar(long t)函数:进度条的更新函数,读取当前系统时间与游戏开始时系统时间的差,来画图覆盖进度条,从而达到进度条运动的效果。
【程序运行整体视图】3、源程序#include<stdio.h>#include<graphics.h>#include<conio.h>#include<time.h>#include<windows.h>#include<mmsystem.h>//播放音乐用的库#pragma comment(lib, "WINMM.LIB")//播放音乐用的库#define ture 1#define flase 0#define board_X 140 //格子区距左边框距离#define board_Y 140 //格子呢区距上边框距离#define COL 10 //格子区列数#define ROW 6 //格子区行数#define board_number 15 //游戏图片数目#define W 48 //格子的长#define H 54 //格子的宽#define N 555 //背景的宽#define M 797 //背景的长#define max(a,b) a>b?a:b#define min(a,b) a<b?a:b#define DGREE 2 //时间条的运动速度struct BOARD //点击的格子信息{int tx,ty; //格子坐标int xx,yy; //屏幕坐标int data; //图片类型}pre,cur,dur;IMAGE image[board_number+ 1]; //图片库IMAGE tianchong; //填充图片IMAGE tianchong1; //覆盖分数的图片IMAGE tianchong2; //覆盖分数的图片int board[ROW + 2][COL + 2]; //游戏图纸MOUSEMSG mouse;int counter=board_number*2;void Init(); //初始化界面void load_picture (); //加载图片void del(BOARD &rec); //每个格子赋值为void leftbottondown (MOUSEMSG mouse); //实现鼠标左击效果void frame (int leftx,int lefty); //画边框bool judge_mouse(int leftx,int lefty); //判断鼠标是否在游戏区void select(int leftx,int lefty); //显示选中效果void accurate(int& leftx,int& lefty); //使格子的坐标都在边缘void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); //覆盖直线void line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) ; //用直线连接void exchange(BOARD& pre,BOARD& cur); //交换格子信息bool click(int mousex,int mousey); //判断单击是否有效void record(int leftx,int lefty,BOARD &rec); //记录选中的格子void mouse_to_board(int mousex,int mousey,int *idx,int *idy); //鼠标的坐标转为格子的数组下标int findpath(BOARD &pre,BOARD &cur);//寻找路径,判断是否相等void progressbar();//画进度条void updateprogressbar(long t);//更新进度条int findpath(BOARD &pre,BOARD &cur){int i,j,path,min1,max1,min2,max2,left,right,top,bottom;int m,n;if (board[pre.ty][pre.tx]!= board[cur.ty][cur.tx]) //判断是否点中相同return false;min1=max1=pre.tx;min2=max2=cur.tx;while (min1-1>=0 && board[pre.ty][min1-1]==0) min1--;//查找水平方向公共区域while (min2-1>=0 && board[cur.ty][min2-1]==0) min2--;left=max(min1,min2); // 左边界while (max1+1<=11 && board[pre.ty][max1+1]==0) max1++;while (max2+1<=11 && board[cur.ty][max2+1]==0) max2++;right=min(max1,max2); // 右边界if (left==0){line(pre.tx,pre.ty,0,pre.ty,0,cur.ty,cur.tx,cur.ty);//左边缘连通Sleep(300);cover(pre.xx,pre.yy,board_X-48,pre.yy,board_X-48,cur.yy,cur.xx,cur.yy);//覆盖线条return true;}if (right==11){line(pre.tx,pre.ty,11,pre.ty,11,cur.ty,cur.tx,cur.ty);Sleep(300);cover(pre.xx,pre.yy,board_X+480,pre.yy,board_X+480,cur.yy,cur.xx,cur.yy);//覆盖线条return true;}for (i=left;i<=right;i++){path=0;//记录竖直方向上的长度m=min(pre.ty,cur.ty);n=max(pre.ty,cur.ty);for (j=m+1;j<n;j++){path=path+board[j][i];if (path>0) break;}if (path==0){line(pre.tx,pre.ty,i,pre.ty,i,cur.ty,cur.tx,cur.ty);Sleep(300);cover(pre.xx,pre.yy,board_X+(i-1)*48,pre.yy,board_X+(i-1)*48,cur.yy,cur.xx,cur.yy);//覆盖线条return true;}}min1=max1=pre.ty;//查找垂直方向公共区域min2=max2=cur.ty;while (min1-1>=0 && board[min1-1][pre.tx]==0) min1--;while (min2-1>=0 && board[min2-1][cur.tx]==0) min2--;top=max(min1,min2);while (max1+1<=7 && board[max1+1][pre.tx]==0) max1++;while (max2+1<=7 && board[max2+1][cur.tx]==0) max2++;bottom=min(max1,max2);if (top==0){line(pre.tx,pre.ty,pre.tx,0,cur.tx,0,cur.tx,cur.ty);//同在顶端消除Sleep(300);cover(pre.xx,pre.yy,pre.xx,board_Y-54,cur.xx,board_Y-54,cur.xx,cur.yy);//覆盖线条return true;}if (bottom==7){line(pre.tx,pre.ty,pre.tx,7,cur.tx,7,cur.tx,cur.ty);Sleep(300);cover(pre.xx,pre.yy,pre.xx,board_Y+324,cur.xx,board_Y+324,cur.xx,cur.yy);//覆盖线条return true;}for (j=top;j<=bottom;j++){path=0;//记录水平方向的长度m=min(pre.tx,cur.tx);n=max(pre.tx,cur.tx);for (i=m+1; i<n; i++){path+=board[j][i];if (path>0) break;}if (path==0){line(pre.tx,pre.ty,pre.tx,j,cur.tx,j,cur.tx,cur.ty);Sleep(300);cover(pre.xx,pre.yy,pre.xx,board_Y+(j-1)*54,cur.xx,board_Y+(j-1)*54,cur.xx,cur.yy);//覆盖线条return true;}}return false;}void Init() //初始化{int ix,iy,jx,jy,idx,idy,temp;srand((unsigned)time(NULL));load_picture();IMAGE beijing;for(int i= 0, x = 1; x <= ROW; ++x ){for( int y = 1; y <= COL; ++y ){board[x][y] = i++ % board_number + 1;}}loadimage(&beijing,"D:\\llk\\beijing.bmp");//载入背景图putimage(0,0,&beijing);//放置背景图getimage(&tianchong,3 * 48,2 * 54,49,55);getimage(&tianchong1,3 * 48,2 * 54,70,55);getimage(&tianchong2,758,150,50,55);for( int k = 0; k <60; ++k ){ix = rand() % ROW + 1;iy = rand() % COL + 1;jx = rand() % ROW + 1;jy = rand() % COL + 1;if( board[ix][iy] != board[jx][jy]) //使数据打乱{temp= board[ix][iy];board[ix][iy] = board[jx][jy];board[jx][jy] =temp;}}for(int i = 0 ;i < ROW; i ++)for(int j = 0 ;j < COL ; j++){idy = i * 54 + board_Y ,idx = j * 48+ board_X;putimage(idx,idy,&image[board[i + 1][j + 1]]); //根据赋的值放置每一个格子图}setbkmode(TRANSPARENT);setfont(35, 0,"华文琥珀");setcolor(YELLOW);outtextxy(700, 100,"分数");outtextxy(700, 150,"000");}void load_picture(){IMAGE image1,background;loadimage(&image1,"D:\\llk\\board.bmp");SetWorkingImage(&image1);for(int i = 1 ;i <=board_number;i ++)getimage(&image[i],0,i * 54,48, 54);loadimage(&background,"IMAGE","bg");SetWorkingImage(&background);getimage(&tianchong,3 * 56,2 * 60,56,60);SetWorkingImage();putimage(0,0,&background);}void leftbottondown (MOUSEMSG mouse) //单击左键{static int click1 = 0,x,y;char s[3];int number,i;click1++;select(mouse.x,mouse.y); //显示选中效果if(click1 == 1){record(mouse.x,mouse.y,pre);}if(click1 == 2){mouse_to_board(mouse.x,mouse.y,&x,&y);if(x != pre.tx||y != pre.ty){record(mouse.x,mouse.y,cur);if(findpath(pre,cur)){board[pre.ty][pre.tx] = board[cur.ty][cur.tx] =0;putimage(pre.xx,pre.yy,&tianchong);putimage(cur.xx,cur.yy,&tianchong);del(pre);del(cur);click1 = 0;counter--;putimage(700,150,&tianchong1);number=20*(board_number*2-counter);for(i=2;i>=0;i--){s[i] = number % 10 + '0';number/= 10;}setbkmode(TRANSPARENT);setfont(35, 0,"华文琥珀");setcolor(YELLOW);outtextxy(700, 150,s);putimage(758,150,&tianchong2);}else{exchange(dur,pre);exchange(pre,cur);del(cur);click1 = 1;putimage(dur.xx,dur.yy,&image[board[dur.ty][dur.tx]]);}}else click1= 1;}}void select (int leftx,int lefty) //选中时效果{if(judge_mouse(leftx,lefty)){int x,y;mouse_to_board(leftx,lefty,&x,&y);accurate(leftx,lefty);frame(leftx,lefty);}}bool judge_mouse(int leftx,int lefty) //判断鼠标是否在游戏区{return leftx >board_X && leftx < board_X + W * COL &&lefty >board_Y && lefty < board_Y+ H * ROW;}void mouse_to_board(int mousex,int mousey ,int *x,int *y) //鼠标坐标转化为图纸坐标{if(judge_mouse(mousex,mousey)){*x = (mousex -board_X) / 48 + 1;*y = (mousey -board_Y) / 54 + 1 ;} }void record(int leftx,int lefty,BOARD &rec) //记录选中的信息{mouse_to_board(leftx,lefty,&rec.tx,&rec.ty);rec.xx = (rec.tx - 1) * 48 +board_X;rec.yy = (rec.ty - 1) * 54 +board_Y;rec.data = board[rec.ty][rec.tx];}bool click(int mousex,int mousey) //判断单击是否有效{int x,y;mouse_to_board(mousex,mousey,&x,&y); //转化为格子坐标if(judge_mouse(mouse.x,mouse.y) && board[y][x] != 0)return true;return false;}void frame(int leftx,int lefty) //画方框{setcolor(RGB(126,91,68));setlinestyle(PS_SOLID,3);rectangle(leftx,lefty,leftx+47,lefty+53);rectangle(leftx + 2,lefty + 2,leftx+47,lefty+53);setcolor(RGB(250,230,169));rectangle(leftx + 1,lefty + 1,leftx+48,lefty+54);}void accurate(int& leftx,int& lefty){leftx = ((leftx -board_X) / 48) *48 +board_X;lefty = ((lefty -board_Y) / 54) *54 +board_Y;}void exchange(BOARD &pre,BOARD &cur) //交换格子信息{pre.data = cur.data;pre.tx = cur.tx;pre.ty = cur.ty;pre.xx= cur.xx;pre.yy = cur.yy;}void del(BOARD &rec) //每个格子赋值为{rec.data = 0;rec.tx = 0;rec.ty = 0;rec.xx = 0;rec.yy = 0;}void line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4){setlinestyle(PS_SOLID,NULL,3);setcolor(RGB(252,228,20));moveto(board_X+24+48*(x1-1),board_Y+27+54*(y1-1));lineto(board_X+24+48*(x2-1),board_Y+27+54*(y2-1));lineto(board_X+24+48*(x3-1),board_Y+27+54*(y3-1));lineto(board_X+24+48*(x4-1),board_Y+27+54*(y4-1));}void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) {int minx,miny,maxx,maxy;if(x1 == x2){maxy = y1 > y2? y1:y2;miny = y1 < y2? y1:y2;for(int i = miny; i <= maxy;i += 54)putimage(x1,i,&tianchong);}else if(y1 == y2){maxx = x1 > x2? x1:x2;minx = x1 < x2? x1:x2;for(int j = minx; j <= maxx;j += 48)putimage(j,y1,&tianchong);}if(x2 == x3){maxy = y2 > y3? y2:y3;miny = y2 < y3? y2:y3;for(int i = miny; i <= maxy;i += 54)putimage(x2,i,&tianchong);}else if(y2 == y3){maxx = x2 > x3? x2:x3;minx = x2 < x3? x2:x3;for(int j = minx; j <= maxx;j += 48)putimage(j,y2,&tianchong);}if(x3 == x4){maxy = y3 > y4? y3:y4;miny = y3 < y4? y3:y4;for(int i = miny; i <= maxy;i += 54)putimage(x3,i,&tianchong);}else if(y3 == y4){maxx = x3 > x4? x3:x4;minx = x3 < x4? x3:x4;for(int j = minx; j <= maxx;j += 48)putimage(j,y3,&tianchong);}}void progressbar()//进度条的初始化{setcolor(YELLOW);rectangle(150,50,530,75);setcolor(YELLOW);rectangle(153,53,527,72);setfillstyle(RED);floodfill(151,51,YELLOW);setfillstyle(RED);floodfill(160,60,YELLOW);}void updateprogressbar(long t)//进度条的更新{setcolor(WHITE);rectangle(524-DGREE*t,54,526,71);setfillstyle(WHITE);floodfill(525-DGREE*t,60,WHITE);}void main(){long t_base,t_run,t;IMAGE bye,fail;initgraph(M,N);Init();loadimage(&bye,"d:\\llk\\end.bmp");//成功时的图loadimage(&fail,"d:\\llk\\fail.bmp");//失败时的图PlaySound("d:\\llk\\sound.wav", NULL, SND_FILENAME | SND_ASYNC);//背景音乐progressbar();t_base= time(NULL);while(1){t_run=time(NULL);t=t_run-t_base;updateprogressbar(t);mouse = GetMouseMsg();switch(mouse.uMsg){case WM_MOUSEMOVE:break;case WM_LBUTTONDOWN:if(click(mouse.x,mouse.y)){leftbottondown(mouse);} break;default: break;}if(counter==0){putimage(0,0,&bye);}if((525-DGREE*t)<=150){putimage(0,0,&fail);}}closegraph(); }4、测试刚开始消去游戏进行中胜利的图案失败的图案。