在b站刷到了rock老师的视频,于是就跟着做了,攒点经验,学点知识
视频链接:C语言手写天天酷跑_哔哩哔哩_bilibili
今天迟了,就把代码贴上来
明天开始认真写
先上一下到目前为止的效果(只是让窗口动起来了
然后是代码
/*
天天酷跑开发日志(BV1Ca411k7wU)
2022.3.1
1.创建项目
2.导入素材
实际的开发流程
对于初学者来说,从游戏用户界面入手
游戏基于“EasyX”图形库开发
2022.3.2
1.创建游戏窗口
2.设计游戏背景
1)三重背景不同速度移动
2)循环滚动的实现
3.实现游戏背景
1)加载背景资源
2)渲染(坐标:图片左上角相对窗口左上角的位置)
遇到问题:背景图片的png格式遇到黑色
解决方式:面向复制黏贴编程,面向百度编程,引入头文件与源文件tools
*/
/*
构思:
加入难度系统,不同难度速度与障碍物刷新率不同
尝试加入二段跳
*/
#include<stdio.h>
//EasyX图形化界面
#include<graphics.h>
//自己写的,引入的头文件,要用""
#include"tools.h"
//游戏窗口大小
#define WIN_WIDTH 1012
#define WIN_HEIGHT 396
//用数组储存三张背景图
//全局变量,大型项目少定义全局变量
IMAGE imgBgs[3];
//背景图片x坐标
int bgX[3];
//背景速度
int bgSpeed[3] = { 1,2,4 };
//初始化
void init() {
//创建游戏界面
initgraph(WIN_WIDTH, WIN_HEIGHT);
//加载背景资源
char name[64];
for (int i = 0; i < 3; i++) {
//"res/bg001.png""res/bg002.png""res/bg003.png"
//sprintf 主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串
//运行C4996错误,将项目属性 -> C/C++ -> sdl检查调为否
sprintf(name, "res/bg%03d.png",i+1);
//使用多字节字符集
loadimage(&imgBgs[i],name);
//位置
bgX[i] = 0;
}
}
//渲染游戏背景
void updateBg() {
putimagePNG2(bgX[0], 0, &imgBgs[0]);
putimagePNG2(bgX[1], 119, &imgBgs[1]);
putimagePNG2(bgX[2], 0, &imgBgs[2]);
}
//背景滚动
void bgRoll() {
for (int i = 0; i < 3; i++) {
bgX[i] -= bgSpeed[i];
if (bgX[i] < -WIN_WIDTH) {
bgX[i] += WIN_WIDTH;
}
}
}
int main() {
init();
while (1) {
//解决屏幕闪烁问题
//这个函数用于开始批量绘图。
//执行后,任何绘图操作都将暂时不输出到绘图窗口上。
BeginBatchDraw();
updateBg();
//直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出。
EndBatchDraw();
bgRoll();
Sleep(1);
}
system("pause");
return 0;
}
tools头文件可以去看Rock老师的视频,加他那个群
|