<div id="content_views" class="htmledit_views">
<p id="main-toc"><strong>目录</strong></p>
一、概括
《真心话大冒险》是一款通过猜拳决定胜方与输方,并让输方选择真心话还是大冒险,然后给出相应惩罚的游戏。玩家点击开始游戏,倒计时3秒结束后,随机为正反方出石头剪刀布,若是平局则点击再来一局,直到游戏结束,输方选择真心话还是大冒险,随机为输方显示真心话或大冒险内容。
二、游戏流程
点击开始游戏按钮,开始倒计时。
输方选择真心话或者大冒险。
若是打成平局,则点击再来一局,直到游戏结束。
三、 ui界面设计
关于界面设计,用到了许多Label控件来显示文本信息,PushButton控件展示相应按钮,并使用Spacers调整界面的流畅度和整齐度。
四、代码设计
有许多Label和按钮控件是无需展示需要隐藏起来的,这时候需要用到控件的hide()函数来实现,语法格式为:ui->控件名->hide();例如ui->label->hide(); ui->pushbutton->hide();。
如果想将已经隐藏的控件重新展示出来,则需要使用setVisible()函数,语法格式为:ui->控件名->setVisible();例如ui->label->setVisible(true); ui->pushbutton->setVisible(true);
3秒倒计时需要使用到定时器。使用步骤为:
1.创建QTimer对象,语法格式为:QTimer *变量名 = new QTimer(); 例如QTimer *time=new QTimer();
2.将定时器的timeout信号与窗口的槽函数连接,语法格式为:connect(变量名,&QTimer::timeout,this,&当前窗口所属的类的类名::自定义槽函数名); 例如connect(time,&QTimer::timeout,this,&Widget::time_sub); 此处的time_sub是我自定义的槽函数名,作用是将定时器减减;
3.使用start()开启定时器,语法格式为:变量名->start(间隔时间单位毫秒); 例如time->start(1000); 1000的单位是毫秒,意义为每间隔1s执行一次time_sub函数的操作;
4.使用stop()开启定时器,语法格式为:变量名->stop();。
设置背景图片步骤:
1.引入QPixmap、QPainter头文件;
2.定义一个函数 void paintEvent(QPaintEvent *event); 在.cpp中添加定义;
3.在定义中创建一个QPainter对象,语法格式为:QPainter 对象名(this);
4.使用drawPixmap函数设置背景图片,语法格式为:对象名.drawPixmap(x,y,width(),height(),QPixmap("图片的路径")); 此处的x和y为起始坐标。
设置窗口图标:this->setWindowIcon(QIcon("图片的路径"));
设置窗口标题:this->setWindowTitle("标题");
widget.h
-
#ifndef WIDGET_H
-
#define WIDGET_H
-
-
#include <QWidget>
-
#include "QTimer"
-
#include "QString"
-
#include "QIcon"
-
#include "QPixmap"
-
#include <QPainter>
-
#include <iostream>
-
using
namespace std;
-
namespace Ui {
-
class
Widget;
-
}
-
-
class
Widget :
public QWidget
-
{
-
Q_OBJECT
-
-
public:
-
explicit Widget(QWidget *parent = 0);
-
~
Widget();
-
void paintEvent(QPaintEvent *event);
-
public slots:
-
void time_sub();
-
private slots:
-
void on_btn_start_clicked(bool checked);
-
-
void on_btn_restart_clicked(bool checked);
-
-
void on_btn_truth_clicked(bool checked);
-
-
void on_btn_dare_clicked(bool checked);
-
-
private:
-
Ui::Widget *ui;
-
QTimer *time;
-
};
-
-
#endif // WIDGET_H
widget.cpp
-
#include "widget.h"
-
#include "ui_widget.h"
-
-
Widget::
Widget(QWidget *parent) :
-
QWidget(parent),
-
ui(
new Ui::Widget)
-
{
-
ui->
setupUi(
this);
-
ui->btn_restart->
hide();
-
ui->label_zheng->
hide();
-
ui->label_fan->
hide();
-
ui->label_shu1->
hide();
-
ui->label_shu2->
hide();
-
ui->label_ping->
hide();
-
ui->label_over->
hide();
-
ui->btn_truth->
hide();
-
ui->btn_dare->
hide();
-
ui->label_task->
hide();
-
ui->label_question->
hide();
-
time=
new
QTimer();
-
connect(time,&QTimer::timeout,
this,&Widget::time_sub);
-
this->
setWindowIcon(
QIcon(
":/img/truthOrdare.png"));
-
this->
setWindowTitle(
"真心话大冒险");
-
this->
setFixedSize(
1200,
800);
-
ui->btn_start->
setStyleSheet(
"background-color: #EAEAAE;");
-
ui->btn_restart->
setStyleSheet(
"background-color: #EAEAAE;");
-
ui->btn_truth->
setStyleSheet(
"background-color: #EAEAAE;");
-
ui->btn_dare->
setStyleSheet(
"background-color: #EAEAAE;");
-
}
-
-
Widget::~
Widget()
-
{
-
delete ui;
-
}
-
-
void Widget::paintEvent(QPaintEvent *event)
-
{
-
QPainter painter(this);
-
painter.
drawPixmap(
0,
0,
width(),
height(),
QPixmap(
":/img/bg.webp"));
-
}
-
-
void Widget::time_sub()
-
{
-
int t=ui->label_time->
text().
toInt();
-
t--;
-
QString str=QString::
number(t);
-
ui->label_time->
setText(str);
-
if(str==
"0")
-
{
-
time->
stop();
-
ui->label_zheng->
setVisible(
true);
-
ui->label_fan->
setVisible(
true);
-
QString action[
3]={
"石头",
"剪刀",
"布"};
-
int index1=
rand()%
3;
-
int index2=
rand()%
3;
-
ui->label_zheng->
setText(action[index1]);
-
ui->label_fan->
setText(action[index2]);
-
QString zheng=ui->label_zheng->
text();
-
QString fan=ui->label_fan->
text();
-
ui->btn_restart->
setVisible(
true);
-
if((zheng==
"石头" && fan==
"布") || (zheng==
"剪刀" && fan==
"石头") || (zheng==
"布" && fan==
"剪刀"))
//正方输了
-
{
-
ui->label_shu1->
setVisible(
true);
-
ui->label_over->
setVisible(
true);
-
ui->btn_restart->
hide();
-
ui->btn_start->
setVisible(
true);
-
ui->btn_truth->
setVisible(
true);
-
ui->btn_dare->
setVisible(
true);
-
ui->label_task->
setVisible(
true);
-
ui->label_question->
setVisible(
true);
-
}
else
if ((zheng==
"石头" && fan==
"石头") || (zheng==
"剪刀" && fan==
"剪刀") || (zheng==
"布" && fan==
"布")) {
-
ui->label_ping->
setVisible(
true);
-
//平局则再来一局
-
}
else {
-
ui->label_shu2->
setVisible(
true);
-
ui->label_over->
setVisible(
true);
-
ui->btn_restart->
hide();
-
ui->btn_start->
setVisible(
true);
-
ui->btn_truth->
setVisible(
true);
-
ui->btn_dare->
setVisible(
true);
-
ui->label_task->
setVisible(
true);
-
ui->label_question->
setVisible(
true);
-
}
-
}
-
}
-
-
void Widget::on_btn_start_clicked(bool checked)
-
{
-
//倒计时3秒开始
-
ui->label_zheng->
hide();
-
ui->label_fan->
hide();
-
ui->label_shu1->
hide();
-
ui->label_shu2->
hide();
-
ui->label_ping->
hide();
-
ui->label_over->
hide();
-
ui->btn_truth->
hide();
-
ui->btn_dare->
hide();
-
ui->label_task->
hide();
-
ui->label_task->
setText(
"");
-
ui->label_question->
hide();
-
ui->label_time->
setText(
"4");
-
ui->btn_start->
hide();
-
time->
start(
1000);
-
time_sub();
-
//倒计时完时随机出石头剪刀布
-
//谁输就在谁下面显示 你输啦!
-
}
-
-
void Widget::on_btn_restart_clicked(bool checked)
-
{
-
//倒计时重置为3开始减
-
ui->label_time->
setText(
"4");
-
ui->label_zheng->
hide();
-
ui->label_fan->
hide();
-
ui->label_shu1->
hide();
-
ui->label_shu2->
hide();
-
ui->label_ping->
hide();
-
ui->btn_restart->
hide();
-
time->
start(
1000);
-
time_sub();
-
}
-
-
void Widget::on_btn_truth_clicked(bool checked)
-
{
-
ui->label_question->
hide();
-
ui->btn_truth->
hide();
-
ui->btn_dare->
hide();
-
QString task_truth[]={
-
"你有没有暗恋过某个人?",
-
"你最喜欢的歌是什么?",
-
"你最喜欢什么颜色?",
-
"你最后悔的一件事是什么?",
-
"你遇到过最令你感动的事是什么?",
-
"比较喜欢爸爸还是妈妈?",
-
"最近一次发自内心的笑是什么时候?",
-
"如果给你一次去任何地方旅游的机会你会去哪里?",
-
"你的理想型是什么样的?",
-
"你会选择你爱的人还是爱你的人?"
-
};
-
ui->label_task->
setVisible(
true);
-
int len_truth=
sizeof(task_truth)/
sizeof(task_truth[
0]);
-
cout << len_truth << endl;
-
int index=
rand()%len_truth;
-
ui->label_task->
setText(task_truth[index]);
-
-
}
-
-
void Widget::on_btn_dare_clicked(bool checked)
-
{
-
ui->label_question->
hide();
-
ui->btn_truth->
hide();
-
ui->btn_dare->
hide();
-
QString task_dare[]={
-
"做一个大家都满意的鬼脸",
-
"唱青藏高原最后一句",
-
"邀请一位异性与你合唱",
-
"做一个性感、妩媚的表情或动作",
-
"背一位异性绕场一周",
-
"抓着铁门喊“放我出去!”",
-
"走猫步",
-
"选一个男生锤他胸口并说“你好讨厌哦”"
-
};
-
ui->label_task->
setVisible(
true);
-
int len_dare=
sizeof(task_dare)/
sizeof(task_dare[
0]);
-
cout << len_dare << endl;
-
int index=
rand()%len_dare;
-
ui->label_task->
setText(task_dare[index]);
-
}