游戏C语言学习知识实验报告.docx

上传人:b****8 文档编号:13024752 上传时间:2023-06-10 格式:DOCX 页数:14 大小:72.29KB
下载 相关 举报
游戏C语言学习知识实验报告.docx_第1页
第1页 / 共14页
游戏C语言学习知识实验报告.docx_第2页
第2页 / 共14页
游戏C语言学习知识实验报告.docx_第3页
第3页 / 共14页
游戏C语言学习知识实验报告.docx_第4页
第4页 / 共14页
游戏C语言学习知识实验报告.docx_第5页
第5页 / 共14页
游戏C语言学习知识实验报告.docx_第6页
第6页 / 共14页
游戏C语言学习知识实验报告.docx_第7页
第7页 / 共14页
游戏C语言学习知识实验报告.docx_第8页
第8页 / 共14页
游戏C语言学习知识实验报告.docx_第9页
第9页 / 共14页
游戏C语言学习知识实验报告.docx_第10页
第10页 / 共14页
游戏C语言学习知识实验报告.docx_第11页
第11页 / 共14页
游戏C语言学习知识实验报告.docx_第12页
第12页 / 共14页
游戏C语言学习知识实验报告.docx_第13页
第13页 / 共14页
游戏C语言学习知识实验报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

游戏C语言学习知识实验报告.docx

《游戏C语言学习知识实验报告.docx》由会员分享,可在线阅读,更多相关《游戏C语言学习知识实验报告.docx(14页珍藏版)》请在冰点文库上搜索。

游戏C语言学习知识实验报告.docx

游戏C语言学习知识实验报告

成绩评定

教师签名

评定日期

嘉应学院计算机学院

实验报告

 

课程名称:

C程序设计

开课学期:

2015—2016学年第1学期

班级:

计算机1505

指导老师:

陈广明

设计题目:

游戏2048

学生姓名(学号):

第3组:

钟瞻宇15111025梁佳151110233房嘉泽151110240陈祺151110249

一、实验目的和要求

(1)使用C语言编写2048这款游戏。

(2)能够正常运行,拥有游戏界面。

(3)能正常进行游戏从开始到结束。

 

(4)用户操作方便。

二、实验环境、内容和方法

实验内容:

1、游戏开始时随机产生两个数值为2/4的方格,其中一个方格置于4个角中的一个位置,另一个方格随机的置于其他位置,其他方格置于0。

2、每次按方向键(w,s,a,d)后,逐行计算移动后的方格值。

每行移动的算法是:

先将所有值为0的数移至行首。

能后从行尾开始逐一和前一个数比较,如果相等则合并这2个格子。

3、每合并一次格子,将其值累计到游戏总分中。

4、一次移动结束后,在所有值为0的方格中随机的分配一个2/4的值。

5、所有方格值不为0且上下、左右相邻的方格都不相等,则游戏结束。

6、2出现的概率为70%,4出现的概率为30%。

实验方法:

通过上机操作完成各内容。

实验环境:

实验用PC机一台,使用操作系统为Windows7/Windows8/Windows10,安装vc++或v2008等编译软件

三、程序设计

开始

显示4*4的游戏方格窗口,并随机产生2个方块。

键盘(w,s,a,d)操作上下左右方向

根据操作方向所有方块在4*4格子里的范围向一边靠拢

靠拢的方向是否有两个相邻的值相等?

合并相加为一个方块,所有方块再往原来的方向靠拢。

方块的格子是否满格或有方块的值为2048?

随机产生一个方块。

刷新4*4窗口,重新显示当前方块内容。

 

Y

 

 

Y

 

N

N

 

Y

游戏结束

输出游戏结束。

 

 

四、源代码

#include

#include

#include

#include

#defineM2048

voidup();//上操作。

voiddown();//下操作。

voidright();//右操作。

voidleft();//左操作。

voidplay();//操作函数。

voidrandom();//随机函数。

voidintegral(intx);//积分函数。

voidall_printf();//输出图像函数。

intA[4][4]={0};

intC=0;//得分的最终数值。

voidmain()

{

printf("游戏规则很简单:

\n");

printf("开始时棋盘内随机出现两个数字,出现的数字仅可能为2或4.\n");

printf("玩家可以选择上(w)下(s)左(a)右(d)四个方向,若棋盘内的数字出现位移或合并,视为有效移动.\n");

printf("若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并.\n");

printf("合并所得的所有新生成数字想加即为该步的有效得分.\n");

printf("玩家选择的方向行或列前方有空格则出现位移.\n");

printf("每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4).\n");

printf("棋盘被数字填满,无法进行有效移动,判负,游戏结束.\n");

printf("棋盘上出现2048,判胜,游戏结束");

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

printf("\t\t\t按回车开始游戏.\n");

getchar(\n);

system("cls");

system("color70");

random();

random();

all_printf();

intflag=1,i,j;

charjudge;

for(;flag==1;)

{

play();

for(i=0,flag=0;i<=3;i++)

{

for(j=0;j<=3;j++)

if(A[i][j]==0&&(flag==0||flag==1))flag=1;

elseif(A[i][j]==M)flag=2;

}

if(flag==0)

{

system("colorc7");

printf("\n\t\t\t任务失败!

你总共获得%d分!

\n",C);

}

elseif(flag==2)printf("\n\t\t\t恭喜你获得胜利!

你总共获得%d分!

\n",C);

if(flag==0||flag==2)

{

printf("是否重新开始?

(yorn):

");

judge=getch();

if(judge=='y')

{

system("cls");

C=0;

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

for(j=0;j<=3;j++)

A[i][j]=0;

random();

random();

all_printf();

flag=1;

system("color70");

}

elsebreak;

}

else

{

random();

system("cls");

all_printf();

printf("\n");

printf("\t分数为:

%6d\t\t",C);

}

}

}

voidplay()/*操作函数*/

{

chardirection;

direction=getch();

switch(direction)

{

case'w':

up();break;

case's':

down();break;

case'a':

left();break;

case'd':

right();break;

default:

printf("输入错误!

\n");

}

}

voidup()

{

inta[4][4]={0},i,j,m;

for(j=0;j<=3;j++)

for(i=0,m=0;i<=3;i++)

if(A[i][j]==0)continue;

elsea[m++][j]=A[i][j];//A[i][j]的有效值赋给a[i][j],所有有效值向上靠拢。

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

for(j=0;j<=3;j++)

A[i][j]=0;//对整个A数组赋0。

for(j=0;j<=3;j++)

for(i=0,m=0;i<=3;i++)

{

if(i==3&&a[i][j]!

=0)A[m][j]=a[i][j];

elseif(a[i][j]==0)continue;

elseif(a[i][j]==a[i+1][j])

{

A[m++][j]=a[i][j]*2;

a[i+1][j]=0;

integral(a[i][j]*2);

}

elseif(a[i][j]!

=a[i+1][j])

{

A[m++][j]=a[i][j];

}

}//分析计算回归赋值。

}

//向上。

voiddown()

{

inta[4][4]={0},i,j,m;

for(j=0;j<=3;j++)

for(i=3,m=3;i>=0;i--)

if(A[i][j]==0)continue;

elsea[m--][j]=A[i][j];//A[i][j]的有效值赋给a[i][j],所有有效值向下靠拢。

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

for(j=0;j<=3;j++)

A[i][j]=0;//对整个A数组赋0。

for(j=0;j<=3;j++)

for(i=3,m=3;i>=0;i--)

{

if(i==0&&a[i][j]!

=0)A[m][j]=a[i][j];

elseif(a[i][j]==0)continue;

elseif(a[i][j]==a[i-1][j])

{

A[m--][j]=a[i][j]*2;

a[i-1][j]=0;

integral(a[i][j]*2);

}

elseif(a[i][j]!

=a[i-1][j])

{

A[m--][j]=a[i][j];

}

}//分析计算回归赋值。

}

//向下。

voidleft()

{

inta[4][4]={0},i,j,m;

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

for(j=0,m=0;j<=3;j++)

if(A[i][j]==0)continue;

elsea[i][m++]=A[i][j];//A[i][j]的有效值赋给a[i][j],所有有效值向左靠拢。

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

for(j=0;j<=3;j++)

A[i][j]=0;//对整个A数组赋0。

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

for(j=0,m=0;j<=3;j++)

{

if(j==3&&a[i][j]!

=0)A[i][m]=a[i][j];

elseif(a[i][j]==0)continue;

elseif(a[i][j]==a[i][j+1])

{

A[i][m++]=a[i][j]*2;

a[i][j+1]=0;

integral(a[i][j]*2);

}

elseif(a[i][j]!

=a[i][j+1])

{

A[i][m++]=a[i][j];

}

}//分析计算回归赋值。

}

//向左。

voidright()

{

inta[4][4]={0},i,j,m;

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

for(j=3,m=3;j>=0;j--)

if(A[i][j]==0)continue;

elsea[i][m--]=A[i][j];//A[i][j]的有效值赋给a[i][j],所有有效值向右靠拢。

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

for(j=0;j<=3;j++)

A[i][j]=0;//对整个A数组赋0。

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

for(j=3,m=3;j>=0;j--)

{

if(j==0&&a[i][j]!

=0)A[i][m]=a[i][j];

elseif(a[i][j]==0)continue;

elseif(a[i][j]==a[i][j-1])

{

A[i][m--]=a[i][j]*2;

a[i][j-1]=0;

integral(a[i][j]*2);

}

elseif(a[i][j]!

=a[i][j-1])

{

A[i][m--]=a[i][j];

}

}//分析计算回归赋值。

}

//向右。

voidrandom()/*随机函数*/

{

srand(time(0));

inti,k,p,q;

i=rand()%10+1;

if(i<=7)

k=2;

elsek=4;

for(q=rand()%4+0,p=rand()%4+0;A[q][p]!

=0;)

{

q=rand()%4+0;

p=rand()%4+0;

}

A[q][p]=k;

}

voidintegral(intx)/*积分函数*/

{

C=C+x;

}

voidall_printf()/*输出图片*/

{

inti,j;

printf("■■■■■■■■■■■■■■■■■■■■■■■\n");

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

{

for(j=0;j<=3;j++)printf("■");

printf("■\n");//

for(j=0;j<=3;j++)

if(A[i][j]==0)printf("■");

elseprintf("■%5d",A[i][j]);

printf("■\n");//

for(j=0;j<=3;j++)printf("■");

printf("■\n");//

printf("■■■■■■■■■■■■■■■■■■■■■■■\n");

}

}

五、调试与运行结果

 

 

六、总结

通过本次课程设计,对C语言的应用有了更多的了解,不过我们也发现我们很多的不足之处,比如我们只用到了前七章的内容,像指针等工具没用到。

理论上有2048的胜利界面,但我们没有弄出来。

还有界面美化不够。

通过实践,使我们在很多方面的认识有所提高。

通过实践的学习,我们认识到学好计算机要重视实践操作,不仅仅是C语言,还是其他语言,都是重在实践。

所以在今后学习过程中,我们会更加注重实践操作,更好地学好计算机。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2