Qt实现一个简单的打字游戏

QT实现一个简单的打字游戏

1.使用容器来存放字符的坐标点

1.1 创建一个容器QList<QPoint> disPos;
1.2 在构造函数中初始化这些坐标点;
for(int i = 0;i<10;i++)
{
    dispPos << QPoint(qrand()%width(),
            qrand()%height()-height());
}

2.使用容器来存放字符

1.1 创建一个容器QList<char> letter; 存放所有字符,可在构造函数中将需要的字符放入其中;
//将大小写字母和数字放入容器
for(i = 0;i < 26 ;i++)
{
    letters << 'a' + i;
}
for(i = 0;i < 26 ;i++)
{
    letters << 'A' + i;
}
for(i = 0;i < 10 ;i++)
{
    letters << '0' + i;
}
1.2 创建一个容器QList<char> dispLetter;用来存放将要显示在窗口中的字符。可以和坐标点一起初始化。
for(int i = 0;i<10;i++)
{
    dispPos << QPoint(rand()%width(),
            rand()%height()-height());
    dispLetters << letters[(qrand()%letters.count())];
}

3.在窗口中显示这些字符

3.1 在paintEvent事件中使用drawText方法来显示。
QPainter p(this);
for(int i = 0;i<dispLetters.count();i++)
{
    //QString有构造函数可以将QChar转换为字符串QString((QChar)dispLetters[i])
    //或者QString("%1").arg(dispLetters[i]);
    p.drawText(dispPos[i],
        QString((QChar)dispLetters[i]));
}

4.通过在timerEvent中编程来使字符掉落

4.1 开启定时器startTimer(100);
4.2 每次调用事件使每个字符的y坐标增加一,在窗口上显示就是字符下落;
4.3 对于掉落到底部的字符,使其从顶部随机位置重新出现且更换字符。
4.4 增加分数机制,对于在掉落到底部之前没有按下的分数减10.
4.5 结束后不要忘了更新界面。
for(int i = 0;i<dispPos.count();i++)
{
    dispPos[i].setY(dispPos[i].y() + 1);
    if(dispPos[i].y() >= height())
    {
        dispPos[i].setY(0);
        dispPos[i].setX(qrand()%width());
        score -= 10;
        dispLetters[i] = letters[qrand()%letters.count()];
    }
}
update();

5.通过键盘按下相同的字符来消除字符

5.1 使用keyPressEvent(QKeyEvent *event)事件
5.2 使用event->text()来获取键盘输入的字符串
5.2 使用event->text().contains()来判断输入的字符串中是否包含窗口上正在掉落的字符。
5.3 如果存在,则将其"消除":本质是将其y坐标置0,字符重新随机。
5.4 同样有分数机制,每消失一个字符则分数加10.
for(int i = 0;i<dispLetters.count();i++)
{
    if(event->text().contains(dispLetters[i]))
    {
        dispPos[i].setY(0);
        dispPos[i].setX(qrand()%width());
        score += 10;
        dispLetters[i] = letters[qrand()%letters.count()];
    }
}

6.显示分数

6.1 在类中创建一个全局变量score
6.2 使用drawText在固定位置显示分数
p.drawText(20,40,QString("%1").arg(score));

6.可优化的地方

6.1 按下按键后只有y坐标最大的字符消失,其余就算和它相同的字符也不会受到影响。
6.2 按下的字符如果在屏幕上没有的话,分数会减少。
6.3 其余未想到的地方。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值