没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
C 语言课程设计--坦克大战
一、游戏介绍
玩家坦克与敌方坦克在街道中进行巷战,玩家坦克被击中、玩家指挥部被击中或游戏
时间到,一局游戏结束。
二、实验目的
综合应用 C 语言知识和设计知识开发一款小游戏。
三、实验内容
初始界面如下图。
按下空格键后游戏开始,“空格开始”消失,载入地图,并把玩家坦克设置在指挥部左
侧。
游戏时间到,比如 30 秒,玩家坦克被敌方坦克摧毁,或者玩家指挥部被摧毁,一局
游戏结束,游戏回到初始界面,并显示上一局的分数。
游戏区域为下图中最内部的黑色区域,左上角坐标 [-26, -22],右下角坐标为[26,
22]。墙为正方形,边长为 4,坦克也是正方形,比墙略小一点。
玩家用 WASD 键控制坦克上、下、左、右运行,按 J 键开炮。玩家坦克碰到墙就停下
来,需要调转方向才能继续前进。玩家坦克开炮,一炮就能摧毁一块墙,或者一辆敌方坦
克。玩家没摧毁一辆敌方坦克,加 1 分。
玩家指挥部被坦克或者炮弹(不管玩家还是敌方)碰上,都会被摧毁。
每隔几秒钟,比如 3 秒,就会产生一辆敌方坦克。敌方坦克每隔一段时间,比如 1 秒,
就自动开炮。敌方坦克遇到墙就会停下来。停下来的坦克,前方的墙如果被摧毁了,又能
继续前进。每隔几秒钟,比如 2 秒,敌方坦克就会顺时针变换一个方向前进。
四、实验准备
本实验中可能用到的 C 语言标准库函数和 FunCode API
Stdio.h
函数原型 功能与返回值 参数说明与应用举例
int sprintf( char
*bu'er, const char
*format,
[ argument] … ) ;
把格式化的数组写入某个字
符串。
返回值:字符串长度
char szName[128];
int i=0;
sprintf(szName,
”feichong_%d”, i);
将字符串”feichong_0”写入到
szName 中
Math.h
函数原型 功能与返回值 参数说明与应用举例
double atan2( double
y, double x );
计算 y/x 的反正切值。
返回值:以弧度表示并介于
-pi 到 pi 之间( 不 包括 -
pi)。 如需使用角度,需
要转换。
9oat ftan = atan2( (y1-y0),
(x1-x0) );
计 算 通 过 点 (x1,y1) 到 点
(x0,y0)的连成的直线与 X 轴之
间的夹角。
String.h
函数原型 功能与返回值 参数说明与应用举例
extern char
*strstr(char *str1,
char *str2);
找出 str2 字符串在 str1 字
符 串 中 第 一 次 出 现 的 位 置
( 不 包 括 str2 的 串 结 束
符)。
strstr(szName,
“feichong”) != NULL
说 明 szName 中 包 含
feichong
返 回 值 : 返 回 该 位 置 的 指
针 , 如 找 不 到 , 返 回 空 指
针。
extern int
strcmp(const char
*s1,const char * s2);
比较字符串 s1 和 s2。
当 s1<s2 时,返回值<0
当 s1=s2 时,返回值=0
当 s1>s2 时,返回值>0
strcmp(szName,
“feichong_0”) == 0
说 明 szName 与 feichong_0
相等
FunCode API
函数原型 功能与返回值 参数说明与应用举例
9oat dGetScreenLeft();
获取屏幕左边界值
9oat dGetScreenRight();
获取屏幕右边界值
9oat dGetScreenTop();
获取屏幕上边界值
9oat
dGetScreenBottom();
获取屏幕下边界值
9oat
dGetSpritePositionX(const
char* szName);
获取精灵中心点的 X
坐标值
szName – 精 灵 名 称 。 所 有
API 均相同。
游 戏 中 的 精 灵 的 名 称 不 能 相
同。
9oat
dGetSpritePositionY(const
char* szName);
获取精灵中心点的 Y
坐标值
9oat
dSetSpritePositionX(const
char* szName);
设置精灵中心点的 X
坐标值
9oat
dSetSpritePositionY(const
char* szName);
设置精灵中心点的 Y
坐标值
void
dSetSpritePosition(const
char* szName, const 9oat
fPosX, const 9oat fPosY);
设置精灵中心点的 X
和 Y 坐标值,用来将
精灵放置在某个指定
位置。
dSetSpritePosition(“feicho
ng_0”, 0, 0);
将名称为”feichong_0”的精灵
的中心点设置在坐标(0, 0)上
void
dSetSpriteLinearVelocityX
(const char* szName,
const 9oat fVelX);
设置精灵 X 轴方向速
度
void
dSetSpriteLinearVelocityY
(const char* szName,
const 9oat fVelY);
设置精灵 Y 轴方向速
度
void
dSetSpriteLinearVelocity(
const char* szName,
设置精灵 X 轴和 Y 轴
方向速度
const 9oat fVelX, const
9oat fVelY);
9oat
dGetSpriteRotation(const
char* szName);
获取精灵的旋转角度
原图的角度
调整后的角度
获得的旋转角度即为两张图片的
角度差
9oat
dSetSpriteRotation(const
char* szName, 9oat fRot);
设置图片的旋转角度 fRot>0,图片顺时针旋转;
fRot<0,图片逆时针旋转。
void dSetTextValue(const
char* szName, int iVal);
设置文字精灵的整数
数值
dSetTextValue(“score”,
100);
名称为 score 的文字精灵显示
100
void
dSetSpriteVisible(const
char* szName, bool
bVisible);
设置精灵可见或不可
见
bVisible 为 true,可见;
为 false,不可见。
void dShowCursor(const
bool bShow);
设置鼠标可见或不可
见
bShow 为 true,可见;
为 false,不可见。
void dDeleteSprite(const
char* szName);
删除精灵
bool
dIsPointInSprite(const
char* szName, const 9oat
fPosX, const 9oat fPosY);
判 断 某 个 坐 标 点
(fPosX, fPosY) 是 否
在精灵内部
常用于判断一个物体是不是碰
到另外一个物体
bool dCloneSprite(const
char* szSrcName, const
char* szTarName);
复制一个精灵。
返回值:1 – 复制成
功;
0 – 复制失败。地图
中没有找到对应名称
的精灵用于复制。
做法:一般在地图上摆放一个
精灵作为模板,并设置好各种
属性。不仅复制图片,还复制
属性。
szSrcName – 作 为 模 板 的 精
灵
szTarName – 新的精灵名称
void
dSetSpriteWorldLimit(con
st char*szName, const
EWorldLimit Limit, const
9oat fLeft, const 9oat
fTop, const 9oat fRight,
const 9oat fBottom)
设 置 精 灵 的 世 界 边
界 , 精 灵 碰 到 边 界
时,会激发精灵与边
界 的 碰 撞 事 件 。 因
此 , 设 置 精 灵 位 置
时,考虑到精灵自身
大小,最好离开边界
一段距离。
fLeft - 左边界值
fTop - 上边界值
fRight - 右边界值
fBottom- 下边界值
Limit - 统一使用
WORLD_LIMIT_NULL
剩余16页未读,继续阅读
资源评论
- weixin_398409242020-04-28可以可以,很完整很清晰的,谢谢分享了
- weixin_387463872020-03-26文档写的很详细很完整,谢谢讲解
Thomas_Q
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功