我是靠谱客的博主 无私大树,最近开发中收集的这篇文章主要介绍C++编程项目:“奔跑吧,火柴人”今天给大家分享一个“奔跑吧,火柴人”的游戏项目,希望大家喜欢,谢谢大家的支持!!!,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天给大家分享一个“奔跑吧,火柴人”的游戏项目,希望大家喜欢,谢谢大家的支持!!!

    废话不多说,直接进代码

首先我们先要先进行一个全局变量

/******全局变量******/
#define STEPDISTANCE	6
// 一步的距离。数值越大,移动速度越快
#define JUMPSPEED
10
// 数值越小,跳得越远
#define ROLLDISTANCE	30
// 滚动的总步数。数值越大,滚得越远
/******全局变量******/
int s_v
= STEPDISTANCE;
//障碍物和人物移动速度
int p_v
= JUMPSPEED;
//人物跳跃速度
int score	= 0;
//分数
int	max_s	= 0;
char keydown;
//按键值

然后对障碍物进行设置

// 障碍物类型
void zhangai::style()
{
int a;
srand((unsigned int) time(NULL));
a = rand() % 5 + 1;
switch(a)
{
case 0:
case 1:
case 2:
case 3:
case 4:
top = 330;
bottom = 361;
break;
case 5:
top = 260;
bottom = 291;
break;
}
}
//障碍物初始化
void zhangai::draw(int l,int t,int ri,int b)
{
left=l;
top=t;
right=ri;
bottom=b;
solidrectangle(l, t, ri, b);
}

人物类以及初始化

/**************************************人物类***********************************/
class people
{
public:
int i;
// 控制人物移动帧数
int b;
// 控制人物滚动帧数
int b1;
// 控制人物滚动时间
int j;
// 人物跳跃上升的速度
int k;
// 人物下降的速度
int left;
int top;
int right;
int bottom;
private:
IMAGE img1[8];
// 人物图像
IMAGE img2[8];
// 滚动图像
IMAGE img3;
// 跳跃图像
public:
people();
// 构造函数
void jump();
// 人物跳跃
void move();
// 人物移动
void roll();
// 人物滚动
bool impact(zhangai *ps);
// 碰撞
} p;
// 构造函数
people::people()
{
// 加载跑动图像
loadimage(&img1[0], _T("rc\picture\move8_1.jpg"), 70, 100);
loadimage(&img1[1], _T("rc\picture\move8_2.jpg"), 70, 100);
loadimage(&img1[2], _T("rc\picture\move8_3.jpg"), 70, 100);
loadimage(&img1[3], _T("rc\picture\move8_4.jpg"), 70, 100);
loadimage(&img1[4], _T("rc\picture\move8_5.jpg"), 70, 100);
loadimage(&img1[5], _T("rc\picture\move8_6.jpg"), 70, 100);
loadimage(&img1[6], _T("rc\picture\move8_7.jpg"), 70, 100);
loadimage(&img1[7], _T("rc\picture\move8_8.jpg"), 70, 100);
// 加载滚动图像
loadimage(&img2[0], _T("rc\picture\gun8_1.jpg"), 50, 50);
loadimage(&img2[1], _T("rc\picture\gun8_2.jpg"), 50, 50);
loadimage(&img2[2], _T("rc\picture\gun8_3.jpg"), 50, 50);
loadimage(&img2[3], _T("rc\picture\gun8_4.jpg"), 50, 50);
loadimage(&img2[4], _T("rc\picture\gun8_5.jpg"), 50, 50);
loadimage(&img2[5], _T("rc\picture\gun8_6.jpg"), 50, 50);
loadimage(&img2[6], _T("rc\picture\gun8_7.jpg"), 50, 50);
loadimage(&img2[7], _T("rc\picture\gun8_8.jpg"), 50, 50);
// 加载跳跃图像
loadimage(&img3, _T("rc\picture\move8_5.jpg"), 70, 100);
}

//人物跳跃
void people::jump()
{
    if(j >= 70)            //上升
    {
        putimage(left,j, &img3);
        clearrectangle(40,j+100,120,j+120);
        p.top = j;
        p.bottom = p.top  + 120;
        j=j-p_v;
        k=j;
    }
    else if(k <= 240)        //下降
    {
        putimage(left,k+20, &img3);
        clearrectangle(40,70,120,k+20);
        p.top = k;
        p.bottom = p.top  + 120;
        k=k+p_v;
    }
}

//人物移动
void people::move()
{
    putimage(50, 260, &img1[p.i]);
    p.left    = 50;
    p.top    = 240;
    p.right    = p.left + 65;
    p.bottom= p.top  + 120;
    p.i++;                // 改变人物帧数
    if(p.i == 8)        // 人物循环移动
    {
        p.i = 0;
    }
}

//人物滚动
void people::roll()
{
    putimage(50, 300, &img2[p.b]);
    p.left=50;
    p.top =300;
    p.right = p.left + 50;
    p.bottom = p.top + 50;
    p.b1++;
    p.b++;                // 改变人物滚动帧数
    if(p.b==8)            // 人物循环滚动
    {
        p.b=0;
    }
}

分数以及碰撞检测

// 读取最高分
void max_score()
{
int value;
ifstream infile("score.txt", ios::in);
if(!infile)
{
cerr << "open error!" << endl;
exit(1);
}
infile>>value;
infile.close();
max_s = value;
}
// 改变最高分
void change_score()
{
int value;
ifstream infile("score.txt", ios::in);
if(!infile)
{
cerr << "open error!" << endl;
exit(1);
}
infile>>value;
infile.close();
if(score>value)
{
gave_score();
}
}
// 游戏结束
void game_over()
{
FlushMouseMsgBuffer();
//清空鼠标缓存区
change_score();
Sleep(1000);
p.i = 0;
cleardevice();
Login();
}
// 碰撞
void pengzhuang()
{
// 指向当前障碍的指针
zhangai *ps;
// 获取当前障碍
ps = &s1;
if (s2.left < ps->left)	ps = &s2;
if (s3.left < ps->left)	ps = &s3;
// 检测碰撞
if (p.impact(ps))
{
p_v = 0;
s_v = 0;
game_over();
}
}

人物的移动

// 移动
void move()
{
keydown=' ';
// 清空键盘缓存区
setfillstyle(BS_SOLID);
// 设置绘图样式
cleardevice();
solidrectangle(0, 360, 640, 400);
char s[10];
char max[10];
char ss[] = "分数:0";
char sss[] = "最高分:";
max_score();
// 最高分
settextcolor(BLUE);
sprintf(max, "%d", max_s);	// 数值格式化
outtextxy(490, 40, max);
// 输出最高分
outtextxy(58, 40, ss);
outtextxy(400, 40, sss);
p.i
= 0;
p.b
= 0;
p.b1 = 0;
p.j
= p.k = p.top = 240;
p.left = 50;
zhangai_rnd();
chushi();
IMAGE img1;
loadimage(&img1, _T("rc\picture\move8_1.jpg"),70,100);
putimage(50,260, &img1);
while(true)
{
keydown=getch();
while(!kbhit())
{
sprintf(s,"%d",score);
outtextxy(120,40,s);
show_zhangai();
if(keydown == 'w')
{
p.i = 0;
p.b1 = 0;
p.jump();
if(p.k > 240)
{
keydown = ' ';
p.j = 240;
}
}
else if(keydown == 's')
{
if(p.b1 == 0)
clearrectangle(50, 240, 120, 361);
if(p.k >= 240)
p.roll();
else
keydown='w';
}
else
{
if(p.k >= 240)
p.move();
else
keydown = 'w';
if(p.b1 == 0)
p.move();
else
keydown = 's';
}
if(p.b1 >= ROLLDISTANCE)
{
p.b1 = 0;
keydown = ' ';
p.b = 0;
}
Sleep(20);
pengzhuang();
delete_zhangai();
set_speed();
score++;
// 分数
xunhuan();
// 障碍物循环移动
}
}
}

登入界面

// 登录界面
void Login()
{
    setfillstyle(BS_SOLID);
    setbkcolor(LIGHTBLUE);
    char s[]    = "开始游戏";
    char ss[]    = "退出游戏";
    char sss[]    = "游戏说明: W 键 = 跳跃   S 键 = 滚动";
    
    MOUSEMSG m;
    solidrectangle(240, 100, 380, 150);
    solidrectangle(240, 160, 380, 210);
    settextcolor(BLUE);                    // 设置字体颜色
    
    outtextxy(260, 113, s);
    outtextxy(260, 173, ss);
    
    setbkcolor(WHITE);
    outtextxy(110, 250, sss);
    
    setfillcolor(LIGHTBLUE);
    
    solidrectangle(0, 360, 640, 400);
    
    while(true)
    {
        m = GetMouseMsg();                // 判断是否按下鼠标
        if(m.x >= 240 && m.x <= 380 && m.y >= 100 && m.y <= 150)
        {
            setlinecolor(RED);            // 选中框框线条颜色
            rectangle(235, 95, 385, 155);
            if(m.uMsg==WM_LBUTTONDOWN )
            {
                clearrectangle(240, 100, 380, 150);
                clearrectangle(240, 160, 380, 210);
                setbkcolor(WHITE);
                cleardevice();
                game_again();
            }
        }
        else if(m.x >= 240 && m.x <= 380 && m.y >= 160 && m.y <= 210)
        {
            setlinecolor(RED);            // 选中框框线条颜色
            rectangle(235, 155, 385, 215);
            if(m.uMsg==WM_LBUTTONDOWN)
            {
                exit(1);
            }
        }
        else
        {
            setlinecolor(WHITE);
            rectangle(235, 95,  385, 155);
            rectangle(235, 155, 385, 215);
        }
    }
}

这样一来一个简单的小游戏就做完了,大家有什么问题可以加群【1083227756】了解

UP在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~ 



  加群1083227756!!!

分享(源码、项目实战视频、项目笔记,基础入门教程)

最后

以上就是无私大树为你收集整理的C++编程项目:“奔跑吧,火柴人”今天给大家分享一个“奔跑吧,火柴人”的游戏项目,希望大家喜欢,谢谢大家的支持!!!的全部内容,希望文章能够帮你解决C++编程项目:“奔跑吧,火柴人”今天给大家分享一个“奔跑吧,火柴人”的游戏项目,希望大家喜欢,谢谢大家的支持!!!所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部