游戏c语言实验报告.docx

上传人:b****9 文档编号:116730 上传时间:2022-10-03 格式:DOCX 页数:17 大小:20.96KB
下载 相关 举报
游戏c语言实验报告.docx_第1页
第1页 / 共17页
游戏c语言实验报告.docx_第2页
第2页 / 共17页
游戏c语言实验报告.docx_第3页
第3页 / 共17页
游戏c语言实验报告.docx_第4页
第4页 / 共17页
游戏c语言实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

游戏c语言实验报告.docx

《游戏c语言实验报告.docx》由会员分享,可在线阅读,更多相关《游戏c语言实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

游戏c语言实验报告.docx

成绩评定

教师签名

评定日期

嘉应学院计算机学院

实验报告

课程名称:

C程序设计

开课学期:

2015—2016学年第1学期

班级:

计算机1505

指导老师:

陈广明

设计题目:

游戏2048

学生姓名(学号):

第3组:

钟瞻宇

目录

一、实验目的和要求 3

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

三、程序设计 3

四、源代码 3

五、调试与运行结果 4

六、总结 4

一、实验目的和要求

(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等编译软件

三、程序设计

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

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

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

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

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

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

开始

Y

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

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

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1