当前位置:文档之家› C语言大作业报告

C语言大作业报告

{
if(judgeDown()+judgeUp()+judgeLeft()+judgeRight()==0)//四个方向都不能移动,则输了
goto gend;
switch(direction)
{
case 'S':playdown();break;
case 'W':playup();break;
case 'D':playright();break;
一、设计题目
二、目标和需求分析
三、开发工具
四、应用平台
五、程序模块
1、游戏盒子
2、2048
3、扫雷
4、贪吃蛇
六、开发日志
七、程序调试及运行
八、程序开发总结
总结:虽然做出来的东西真的没什么技术水平,但是我们尽量把这个东西的每个方方面面做完整。
一个小的游戏盒子,可以用来启动其它游戏,当然,其它游戏也是我们大作业的编写内容,平时可以玩玩用来打发时间
{
fk[x][y]=fk[x][y+1];//向上移动
fk[x][y+1]=0;//原来的位置变为空
showFk(zbx[x],zby[y],fk[x][y]);//显示移动后的方块
showFk(zbx[x],zby[y+1],fk[x][y+1]);//显示原来的空方块
}
}//完成移动一步
return 0;
二,方块移动
1、如方块向又移动时要到最左边或者碰到方块才停止(过程中有动画模块)
int moveBlankUp()//移动方块
{
for(int i=0;i<4;i++)
for(int x=0;x<4;x++)
for(int y=0;y<3;y++)//从上到下扫描
{
if(fk[x][y]==0&&fk[x][y+1]!=0)//如果某个方块上面方向是空的
吃到食物,长度变化
撞墙判死
排行榜
数据结构:
用的文件存储,并将成绩进行排序,因为每次只增加一个数据,所以采用的是插入排序
void rank(void)
{
fp=fopen("score.txt","r");
int n,a[12],k=1;//最多存12个成绩
char b[12][12];
fscanf(fp,"%d\n",&n);
第一关:(没有障碍物)
有一个xp系统样式的进度条,和一个proess提示进度
进度条根据当时分数和通关所需分数进行换算而来:
吃了紫色的食物蛇变短,(前提是蛇不能太短)绿色的会变长
第二关:(有障碍物)
黄色小球会跟着小蛇移动,被它碰到分数减半
加上了墙壁
第三关
白色方块会在屏幕里一直反弹,蛇碰到即死,同时出现一个假入口
Sleep(100);
}
主界面
通知是用pthread增加的一个线程,独立,可以随时关闭通知,需要里再弹出
pthread_t id;
pthread_create(&id, NULL, GG1, NULL);//通知进入线程
选择里面是一个判断函数,双击不同的图片有不同的返回值,然后点确定根据返回值启动不同模块,取消按钮可以取消选定
for(int i=1;i<=n;i++)
{
fscanf(fp,"%s %d",&b[i],&a[i]);
if(a[i]>totalscore) k=i+1;
}
fclose(fp);
还原按钮用来清空数据
进入游戏先输入用户姓名
InputBox(name,20,"请输入姓名","玩家姓名","王尧",20,100);//输入用户
}EndBatchDraw();
for(int k=2;k<29;k++)cg(k,w/2-150,l/2);
Sleep(10);
}
void cg(int a,int x,int y)//开场动画
{
char s[20];
sprintf(s, "LOGO%03d",a);
Image("gif",s,x,y);//输出图片
核心算法大概分为两个方面:
一,方块出现
主要用到的是不重复随机数
for(i = 0; i<n; i++)x[i] = i;
for(i = 0; i<k; i++){
t = rand(i,n-1);
swap(x[i], x[t]);
out(x[i]);
}//《编程珠玑》的算法
把这个改了一下就可以用来随机生成方块
int direction;
int zbx[4]={60,130,200,270};//背景上的坐标
int zby[4]={60+60,130+60,200+60,270+60};
int fk[4][4];//方块的数字
void main(void)
{
reset();//初始化界面
while(fflush(stdin),direction=getch())
{
// 创建线程
pthread_t pid;
pthread_create(&pid, NULL, test, NULL);
showFk(x1[i]/10*30+50,x1[i]%10*30+100,11);
Sleep(400);
}
}
}
//printf("%d ",fko);
if(fko>=100-12)win=1;//win=1表示赢 fko是掀开方块个数 雷全部扫完,暂定12个地雷
算法:
1、生成地雷。先规定一个地雷数量,再用一个不重复随机数生成算法生成地雷
int i,t,tp;
for(i = 0; i < 100; i++)x1[i]= i;//给数组赋值
//把雷生成
for(i = 0; i < 12; i++)
{Байду номын сангаас
t = rand()%(100-i)+i;//产生i到100的随机数
tp=x1[i];
x1[i]=x1[t];
x1[t]=tp;//交换两个数
fk[x1[i]/10][x1[i]%10]=11;//11表示这是一个地雷
}《编程珠玑》里的随机数生成算法修改
2、扫描地雷。为其他方块赋值。遍历每一个方块,判断周围有几个地雷。Fk[0]=1;表示第一个方块周围只有一个地雷
for(i=0;i<12;i++)
VS2005
Easyx图形库
Pthread线程库
Hge
王尧
所有的文件处理,数据算法方面优化
王懿晨
合作2048模块
杨梓晗
图片资源加工,音乐裁剪,按钮制作
程维驰
合作扫雷模块
应用平台:windowsx64
程序功能模块:
一、安装包:(写入开始菜单快捷方式,桌面快捷方式,开机启动等)//pascal脚本编写
#define MyAppName "C大作业"
2048与扫雷的数据需要分块存储,与数组结构类似,于是使用了数组来存放相应位置的数据,
然后依次类推写出其它三个方向的,
加上一个判失败条件
所以主函数是这样的:
#include <graphics.h>
#include "function.h"//功能实现放在这里
#include <conio.h>
#include <time.h>
#include <stdio.h>
int x,y;
int zx,zy;//坐标
DisableProgramGroupPage=yes
(剩余代码未全部给出)
二、启动盒子:(用来启动各个模块的游戏)
1、游戏模块(目前三个游戏)
2048扫雷贪吃蛇
2、通知模块
暂时只有简单的实现
进入动画
void logo(void)
{
int w= GetSystemMetrics(SM_CXSCREEN);//1366
3、画出初始方块
4、写一个掀开方块函数
如果方块是地雷:掀开所有地雷,播放爆炸声音,扫雷失败
如果不是地雷
a:周围没有雷,把相邻的没有雷的全部掀开(用的是递归算法)
b:周围有雷,掀开这个,显示周围地雷数量
5、一个标记函数,
6、一个判断扫雷成功函数
核心代码:
int fkopen(int x,int y)//掀开方块{
#define MyAppVersion "2.0"
#define MyAppPublisher "五人小组"
#define MyAppExeName "1.exe"
[Setup]
AppId={{49DB1DB4-FAE9-4ACB-A4B9-E5C420C5F10B}
AppName={#MyAppName}
if(fk[x][y]==0)
{
for(int i=-1;i<=1;i++)
for(int j=-1;j<=1;j++)
相关主题