Qt大鱼吃小鱼游戏

98 篇文章 5 订阅

关于图片资源,可以自己找对应的图片替换
在这里插入图片描述

#include <QApplication>
#include <QObject>
#include <QString>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#pragma comment(lib,"Winmm.lib")

#define length 1000//游戏画面宽度
#define high 640//游戏画面高度

struct yu
{
    double position_x;//横坐标
    double position_y;//纵坐标
    double v_x;//水平速度
    double v_y;//竖直速度
};
yu player;//玩家
yu timer;//闹钟
yu zhadan;//炸弹
yu food1,f_food1;//1号鱼
yu food2,f_food2;//2号鱼
yu food3,f_food3;//3号鱼
yu food4,f_food4;//4号鱼
yu food5,f_food5;//5号鱼

IMAGE img_p1;//玩家图片
IMAGE img_p1bei;
IMAGE img_bk;//背景图片
IMAGE img_bk0;//进入界面图
IMAGE imgTEXTime;
IMAGE imgTEXTimebei;//闹钟图片
IMAGE img_zha;
IMAGE img_zhabei;//图片
IMAGE img_f1,img_f_f1;
IMAGE img_f1bei,img_f_f1bei;//1号鱼图片
IMAGE img_f2,img_f_f2;
IMAGE img_f2bei,img_f_f2bei;//2号鱼图片
IMAGE img_f3,img_f_f3;
IMAGE img_f3bei,img_f_f3bei;//3号鱼图片
IMAGE img_f4,img_f_f4;
IMAGE img_f4bei,img_f_f4bei;//4号鱼图片
IMAGE img_f5,img_f_f5;
IMAGE img_f5bei,img_f_f5bei;//5号鱼图片

char input;//定义变量便于使用

double  p1size;//定义一个变量来储存玩家鱼的尺寸
double  start_p1size;//定义一个变量来储存玩家的初始大小

int score_p1;//分数

int startTime;//计时
int endTime;//计时
double resttime;//剩余时间
int timelong=150;//时间限制

int yuhead=0; //判断鱼头朝向

static int shengming = 3;//玩家生命

int gameStatus=0; // 游戏状态,0为初始菜单界面,1为正常游戏,2为结束游戏状态,3为游戏暂停



void startMenu()
{
    putimage(0, 0, &img_bk0);//显示背景
    settextcolor(RGB(123,90,254));//设置文本颜色
    settextstyle(70,0, TEXT("华文琥珀"));
    outtextxy(length*0.36, high*0.19, TEXT("大鱼吃小鱼"));

    setbkmode(TRANSPARENT);//设置模式
    settextcolor(RGB(106,0,0));//设置文本颜色
    settextstyle(37,0, TEXT("幼圆"));
    outtextxy(length*0.35, high*0.36, TEXT("1 新游戏"));
    outtextxy(length*0.35, high*0.44, TEXT("2 退出游戏"));

    settextcolor(RGB(64,0,128));//设置文本颜色
    settextstyle(30,0, TEXT("微软雅黑"));
    outtextxy(length*0.36, high*0.55, TEXT("ESC键返回主菜单"));

    settextcolor(RGB(64,0,128));//设置文本颜色
    settextstyle(25,0, TEXT("微软雅黑"));
    outtextxy(length*0.36, high*0.65, TEXT("方向键控制移动吃掉小鱼"));
    outtextxy(length*0.36, high*0.7, TEXT("在限时内达到目标分"));
    outtextxy(length*0.36, high*0.75, TEXT("闹钟增加时间 炸弹减少时间"));
    outtextxy(length*0.36, high*0.8, TEXT("三条生命 撞大鱼失去一条"));

    FlushBatchDraw();
    Sleep(2);

    if(kbhit())  // 判断是否有输入
    {
        input = getch();  // 根据用户的不同输入来移动,不必输入回车
        if (input == '1')
            gameStatus = 1;
        else if (input == '2')
        {
            gameStatus = 2;
            exit(0);
        }
    }
}



void pauseMenu() // 游戏暂停后菜单界面,一般按ESC键后启动该界面
{
    putimage(0, 0, &img_bk0);//显示背景
    settextcolor(RGB(123,90,254));
    settextstyle(70,0, TEXT("华文琥珀"));
    outtextxy(length*0.36, high*0.19, TEXT("大鱼吃小鱼"));

    setbkmode(TRANSPARENT);
    settextcolor(RGB(106,0,0));
    settextstyle(37,0, TEXT("幼圆"));
    outtextxy(length*0.35, high*0.36, TEXT("1 新游戏"));
    outtextxy(length*0.35, high*0.44, TEXT("2 退出游戏"));

    settextcolor(RGB(64,0,128));
    settextstyle(30,0, TEXT("微软雅黑"));
    outtextxy(length*0.36, high*0.55, TEXT("ESC键返回主菜单"));

    settextcolor(RGB(64,0,128));
    settextstyle(25,0, TEXT("微软雅黑"));
    outtextxy(length*0.36, high*0.65, TEXT("方向键控制移动吃掉小鱼"));
    outtextxy(length*0.36, high*0.7, TEXT("在限时内达到目标分"));
    outtextxy(length*0.36, high*0.75, TEXT("闹钟增加时间 炸弹减少时间"));
    outtextxy(length*0.36, high*0.8, TEXT("三条生命 撞大鱼失去一条"));

    FlushBatchDraw();
    Sleep(2);

    if(kbhit())  // 判断是否有输入
    {
        input = getch();  // 根据用户的不同输入来移动,不必输入回车
        if (input == '1')
            gameStatus = 1;
        else if (input == '2')
        {
            gameStatus = 2;
            exit(0);
        }
    }
}

void startup()
{
    mciSendString(TEXT("open resource/music.mp3 alias bkmusic"), NULL, 0, NULL);//打开背景音乐
    mciSendString(TEXT("play bkmusic repeat"), NULL, 0, NULL);  // 循环播放

    initgraph(length,high);
    // 获取窗口句柄
    HWND hwnd = GetHWnd();
    // 设置窗口标题文字
    SetWindowText(hwnd, TEXT("大鱼吃小鱼"));

    score_p1=0;
    p1size=40;//玩家初始大小为40
    start_p1size=p1size;

    srand((unsigned) time(NULL));//随机数

    //是否调整 IMAGE 的大小以适应图片
    loadimage(&img_bk0, TEXT("resource/enter.jpg"),1000,640,true);//进入界面
    loadimage(&img_bk, TEXT("resource/background.jpg"),1000,640,true);//背景

    loadimage(&imgTEXTime, TEXT("resource/time.jpg"),35,35,true);
    loadimage(&imgTEXTimebei, TEXT("resource/timebei.jpg"),35,35,true);//闹钟

    loadimage(&img_zha, TEXT("resource/zhadan1.jpg"),40,40,true);
    loadimage(&img_zhabei, TEXT("resource/zhadan1bei.jpg"),40,40,true);//炸弹

    loadimage(&img_f1, TEXT("resource/food1.jpg"),40,30,true);
    loadimage(&img_f1bei, TEXT("resource/food1bei.jpg"),40,30,true);//1号鱼
    loadimage(&img_f_f1, TEXT("resource/f_food1.jpg"),40,30,true);
    loadimage(&img_f_f1bei, TEXT("resource/f_food1bei.jpg"),40,30,true);//1号鱼反向

    loadimage(&img_f2, TEXT("resource/food2.jpg"),65,40,true);
    loadimage(&img_f2bei, TEXT("resource/food2bei.jpg"),65,40,true);//2号鱼
    loadimage(&img_f_f2, TEXT("resource/f_food2.jpg"),65,40,true);
    loadimage(&img_f_f2bei, TEXT("resource/f_food2bei.jpg"),65,40,true);//2号鱼反向

    loadimage(&img_f3, TEXT("resource/food3.jpg"),80,80,true);
    loadimage(&img_f3bei, TEXT("resource/food3bei.jpg"),80,80,true);//3号鱼
    loadimage(&img_f_f3, TEXT("resource/f_food3.jpg"),80,80,true);
    loadimage(&img_f_f3bei, TEXT("resource/f_food3bei.jpg"),80,80,true);//3号鱼反向

    loadimage(&img_f4, TEXT("resource/food4.jpg"),120,110,true);
    loadimage(&img_f4bei, TEXT("resource/food4bei.jpg"),120,110,true);//4号鱼
    loadimage(&img_f_f4, TEXT("resource/f_food4.jpg"),120,110,true);
    loadimage(&img_f_f4bei, TEXT("resource/f_food4bei.jpg"),120,110,true);//4号鱼反向

    loadimage(&img_f5, TEXT("resource/food5.jpg"),250,125,true);
    loadimage(&img_f5bei, TEXT("resource/food5bei.jpg"),250,125,true);//5号鱼
    loadimage(&img_f_f5, TEXT("resource/f_food5.jpg"),250,125,true);
    loadimage(&img_f_f5bei, TEXT("resource/f_food5bei.jpg"),250,125,true);//5号鱼反向

    player.position_x=length/2.0;//玩家横坐标
    player.position_y=high/2.0;//玩家纵坐标
    player.v_x=0.4;//玩家水平速度
    player.v_y=0.4;//玩家竖直速度

    timer.position_x=-2000;//闹钟横坐标
    timer.position_y=rand()%500;//闹钟纵坐标随机设定
    timer.v_x=0.6;//闹钟速度

    zhadan.position_x=length+500;//横坐标
    zhadan.position_y=rand()%500;//纵坐标随机设定
    zhadan.v_x=0.6;//速度

    food1.position_x=0;//1号鱼横坐标
    food1.position_y=rand()%400;//1号鱼纵坐标随机设定
    food1.v_x=0.45;//1号鱼速度
    f_food1.position_x=length+(rand()%10)*100;//反向1号鱼横坐标
    f_food1.position_y=rand()%400;//反向1号鱼纵坐标随机设定
    f_food1.v_x=0.45;//反向1号鱼速度

    food2.position_x=-200;//2号鱼横坐标
    food2.position_y=rand()%400;//2号鱼纵坐标随机设定
    food2.v_x=0.45;//2号鱼速度
    f_food2.position_x=length+length+(rand()%15)*100;//反向2号鱼横坐标
    f_food2.position_y=rand()%400;//反向2号鱼纵坐标随机设定
    f_food2.v_x=0.45;//反向2号鱼速度

    food3.position_x=-500;//3号鱼横坐标
    food3.position_y=rand()%400;//3号鱼纵坐标随机设定
    food3.v_x=0.43;//3号鱼速度
    f_food3.position_x=length+length+(rand()%20)*100;//反向3号鱼横坐标
    f_food3.position_y=rand()%400;//反向3号鱼纵坐标随机设定
    f_food3.v_x=0.43;//反向3号鱼速度

    food4.position_x=-800;//4号鱼横坐标
    food4.position_y=rand()%400;//4号鱼纵坐标随机设定
    food4.v_x=0.42;//4号鱼速度
    f_food4.position_x=length+length+(rand()%20)*150;//反向4号鱼横坐标
    f_food4.position_y=rand()%400;//反向4号鱼纵坐标随机设定
    f_food4.v_x=0.42;//反向4号鱼速度

    food5.position_x=-10000;//5号鱼横坐标
    food5.position_y=rand()%400;//5号鱼纵坐标随机设定
    food5.v_x=0.4;//5号鱼速度
    f_food5.position_x=length+length+(rand()%10)*1000;//反向5号鱼横坐标
    f_food5.position_y=rand()%400;//反向5号鱼纵坐标随机设定
    f_food5.v_x=0.4;//反向5号鱼速度

    initgraph(length,high);//画面大小
    BeginBatchDraw();

    while (gameStatus==0)
        startMenu();//初始菜单界面

    startTime=clock();
}
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vqt5_qt6

你的鼓励是我们创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值