Qt游戏开发-深海危机
2019-09-27 08:36:01 小生无名 阅读数 46更多
分类专栏: QT
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/cqltbe131421/article/details/101509539

#pragma execution_character_set("utf-8")
/*!
@file 重庆予乔
@author 陈强灵
@date 2018/9
@brief 软硬件定制开发
@https https://blog.youkuaiyun.com/cqltbe131421
@verbatim
<author> <time> <version> <desc> <QQ>
chen 2018/9 0.1.0 build this module 609162385
@endverbatim
*/
#ifndef COLORPOINT_H
#define COLORPOINT_H
#include <windows.h>
#include <QPointF>
#include <QRectF>
#include <QDebug>
#include <QColor>
#include <cmath>
#include <QPixmap>
class ColorPoint
{
private:
QPointF m_point;//位置
float radius; //半径
QColor m_color;
float speed;
bool is_bump;
int score;
QPixmap img;
QPointF dir;
int hp;
public:
QRectF m_bound;
ColorPoint();
ColorPoint(QPointF point,int r, int sc=1);
ColorPoint(QRectF bound);
float getRadius() const;
void setRadius(float value);
QPointF getPoint() const;
void setPoint(const QPointF &point);
QColor getColor() const;
void setColor(const QColor &color);
float getSpeed() const;
void setSpeed(float value);
int getScore() const;
void setScore(int value);
bool getIs_bump() const;
void setIs_bump(bool value);
QPixmap getImg() const;
void setImage(QString filename);
int getHp() const;
void setHp(int value);
void lossHp(int value);
QPointF getDir() const;
void setDir(const QPointF &value);
void setImg(const QPixmap &value);
};
#endif // COLORPOINT_H
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
#include "colorpoint.h"
float ColorPoint::getRadius() const
{
return radius;
}
void ColorPoint::setRadius(float value)
{
radius = value;
float left = m_point.x() - radius;
float top = m_point.y() - radius;
m_bound.setRect(left,top,radius*2,radius*2);
}
QPointF ColorPoint::getPoint() const
{
return m_point;
}
void ColorPoint::setPoint(const QPointF &point)
{
m_point = point;
float left = m_point.x() - radius;
float top = m_point.y() - radius;
m_bound.setRect(left,top,radius*2,radius*2);
}
QColor ColorPoint::getColor() const
{
return m_color;
}
void ColorPoint::setColor(const QColor &color)
{
m_color = color;
}
float ColorPoint::getSpeed() const
{
return speed;
}
void ColorPoint::setSpeed(float value)
{
speed = value;
}
int ColorPoint::getScore() const
{
return score;
}
void ColorPoint::setScore(int value)
{
score = value;
}
bool ColorPoint::getIs_bump() const
{
return is_bump;
}
void ColorPoint::setIs_bump(bool value)
{
is_bump = value;
}
QPixmap ColorPoint::getImg() const
{
return img;
}
void ColorPoint::setImage(QString filename)
{
img.load(filename);
}
int ColorPoint::getHp() const
{
return hp;
}
void ColorPoint::setHp(int value)
{
hp = value;
}
void ColorPoint::lossHp(int value)
{
hp-=value;
}
QPointF ColorPoint::getDir() const
{
return dir;
}
void ColorPoint::setDir(const QPointF &value)
{
dir = value;
}
void ColorPoint::setImg(const QPixmap &value)
{
img = value;
}
ColorPoint::ColorPoint()
{
}
ColorPoint::ColorPoint(QPointF point, int r, int sc)
{
m_point = point;
radius = r;
float left = m_point.x() - radius;
float top = m_point.y() - radius;
m_bound.setRect(left,top,radius*2,radius*2);
speed = 10;
score = sc;
is_bump = false;
m_color = QColor(0,0,0);
hp =100;
}
ColorPoint::ColorPoint(QRectF bound)
{
m_bound = bound;
radius = m_bound.width();
int radius2 = m_bound.height();
m_point = QPoint(m_bound.x()+radius,m_bound.y()+radius2);
speed = 10;
score = 1;
is_bump = false;
m_color = QColor(0,0,0);
hp = 100;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
#pragma execution_character_set("utf-8")
/*!
@file 重庆予乔
@author 陈强灵
@date 2018/9
@brief 软硬件定制开发
@https https://blog.youkuaiyun.com/cqltbe131421
@verbatim
<author> <time> <version> <desc> <QQ>
chen 2018/9 0.1.0 build this module 609162385
@endverbatim
*/
#ifndef INTRAWINDOW_H
#define INTRAWINDOW_H
#include <windows.h>
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QImage>
#include <QDesktopWidget>
namespace Ui {
class IntraWindow;
}
class IntraWindow : public QWidget
{
Q_OBJECT
public:
explicit IntraWindow(QWidget *parent = 0);
QImage backImage;
~IntraWindow();
void paintEvent(QPaintEvent*e);
private slots:
void on_pushButton_3_clicked();
private:
Ui::IntraWindow *ui;
};
#endif // INTRAWINDOW_H
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
#include "intrawindow.h"
#include "ui_intrawindow.h"
#include <QColor>
#include <QFile>
#include <QTextStream>
#include <qDebug>
IntraWindow::IntraWindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::IntraWindow)
{
ui->setupUi(this);
ui->textEdit->setTextColor(QColor(255,255,255));
QFile f(":/image/image/Intra.txt");
if(!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<<"Open failed.";
}
//获取设备屏幕大小
QDesktopWidget* desktopWidget = QApplication::desktop();
QRect screenRect = desktopWidget->screenGeometry();
int w = screenRect.width();
int h = screenRect.height();
this->setGeometry(w/3,h/3,w/3,h/3);
w = this->width();
h = this->height();
QTextStream txtInput(&f);
QString lineStr = "";
while(!txtInput.atEnd())
{
lineStr = lineStr+txtInput.readLine();
lineStr = lineStr+'\n';
//qDebug()<<lineStr;
}
this->setWindowFlags(Qt::FramelessWindowHint);
ui->textEdit->setText(lineStr);
backImage.load(":/image/image/b1.jpg");
ui->textEdit->setGeometry(w/10,h/10,w/10*8,h/10*7);
ui->pushButton_3->setGeometry(w/5*2,h/5*4+h/15,w/5,h/10);
ui->textEdit->setReadOnly(true);
ui->textEdit->setFontItalic(true);
// ui->textEdit->setTextColor(QColor(0,0,0));
}
IntraWindow::~IntraWindow()
{
delete ui;
}
void IntraWindow::paintEvent(QPaintEvent *e)
{
QPainter paint(this);
paint.drawImage(this->rect(),backImage);
}
void IntraWindow::on_pushButton_3_clicked()
{
this->close();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "widget.h"
#include <QMovie>
#include <qDebug>
#include <QTimer>
#include <QPropertyAnimation>
int MainWindow::n = 1;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// this->setGeometry(0,0,1000,1000);
this->setWindowFlags(Qt::FramelessWindowHint);
backImage.load(":/image/image/b1.jpg");
QDesktopWidget* desktopWidget = QApplication::desktop();
//获取设备屏幕大小
QRect screenRect = desktopWidget->screenGeometry();
int w = screenRect.width();
int h = screenRect.height();
this->setGeometry(w/3,h/3,w/3,h/3);
w = this->width();
h = this->height();
int bw = w/5;
int bh = h/15;
int dist = h/25;
ui->pushButton->setGeometry(w-bw-dist,h-(bh+dist)*3,bw,bh );
ui->pushButton_3->setGeometry(w-bw-dist,h-(bh+dist)*2,bw,bh );
ui->pushButton_2->setGeometry(w-bw-dist,h-(bh+dist)*1,bw,bh );
logo = QPixmap(QString(":/image/image/b2.png"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *e)
{
QPainter paint(this);
paint.drawImage(this->rect(),backImage);
paint.drawPixmap(QRect(0,this->height()/4,this->width(),this->height()/4*2),logo,logo.rect());
}
void MainWindow::btn()
{
if(MainWindow::n)
{
Widget *w = new Widget();
this->setCentralWidget(w);
QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity");
animation->setDuration(3000);
animation->setStartValue(0);
animation->setEndValue(1);
animation->start();
n-=1;
}
}
void MainWindow::on_pushButton_2_clicked()
{
this->close();
}
void MainWindow::on_pushButton_3_clicked()
{
Widget *m_widget = new Widget();
m_widget->show();
}
void MainWindow::on_pushButton_clicked()
{
IntraWindow *w = new IntraWindow();
w->show();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <windows.h>
#include <QMainWindow>
#include "widget.h"
#include "intrawindow.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QImage backImage;
void paintEvent(QPaintEvent*e);
QPixmap logo;
public slots:
void btn();
private slots:
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
static int n;
};
#endif // MAINWINDOW_H
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
#include "widget.h"
#include "ui_widget.h"
#include "quadtree.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle(QString("深海危机 1.0v"));
QDesktopWidget* desktopWidget = QApplication::desktop();
//获取设备屏幕大小
QRect screenRect = desktopWidget->screenGeometry();
int x = screenRect.width();
int y = screenRect.height();
this->setGeometry(100,100,x-200,y-200);
this->setFixedSize(x-200,y-200);
ui->depthbox->setGeometry(this->width()-150,this->height()/4,100,80);
ui->depthbox->hide();
ui->disbumpbtn->setGeometry(this->width()-180,this->height()-300,100,100);
ui->disbumpbtn->hide();
ui->background_label->setGeometry(0,0,this->width(),this->height());
//初始化条件
backImage.load(":/image/image/b1.jpg");
// backImage.load(":/image/image/海底阳光.gif");
for(int i =1;i<= 8; i++)
{
imglist.push_back(QPixmap(QString(":/image/image/%1.png").arg(i)));
}
for(int i =0;i< 34; i++)
{
backimglist.push_back(QPixmap(QString(":/image/back/back %1.png").arg(i)));
}
playerBack = new QMediaPlayer;
playlist = new QMediaPlaylist;
backMusicName = "./music/buildMusic.mp3";
beginBackMusic();
shootImage.load(":/image/image/shoot.png");
depth = 0;
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
this->setMouseTracking(true);
//计时器的使用
realtimer = new QTimer(this);
connect(realtimer,SIGNAL(timeout()),this,SLOT(realAct()));
connect(realtimer,SIGNAL(timeout()),this,SLOT(army_move()));
gentimer = new QTimer(this);
connect(gentimer,SIGNAL(timeout()),this,SLOT(generatePoints()));
gametimer = new QTimer(this);
connect(gametimer,SIGNAL(timeout()),this,SLOT(change_remaintime()));
pushtimer = new QTimer(this);
connect(pushtimer,SIGNAL(timeout()),this,SLOT(push_Animaltime()));
newBegin();
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *e)
{
QPainter paint(this);
QFont font ;
paint.setBrush(QColor(0,0,0));
// m_player->setColor(QColor(0,100,0));
paint.drawImage(this->rect(),backImage);
paint.setOpacity(0.2);
paint.drawPixmap(QRect(0,0,this->width(),this->height()),backimglist[backIndex],backimglist[backIndex].rect());
paint.setOpacity(1);
playerBump();
paint.setPen(QColor(0,0,255));
int test_count = 0;
int total_count = 0;
for( int i = 0; i< pointList.size(); i++){
paint.drawPixmap(pointList[i]->m_bound,pointList[i]->getImg(),pointList[i]->getImg().rect());
}
for( int i = 0; i< shootList.size(); i++){
paint.drawPixmap(shootList[i]->m_bound,shootImage,shootImage.rect());
}
//绘制玩家
paint.setBrush(m_player->getColor());
// paint.drawEllipse(m_player->m_bound);
paint.drawPixmap(m_player->m_bound,m_player->getImg(),m_player->getImg().rect());
font.setPointSize((int)m_player->getRadius()/2);
paint.setFont(font);
paint.setPen(QColor(255,255,255));
QPointF m_point = m_player->getPoint();
m_point.setX(m_point.x() -m_player->getRadius()/2);
m_point.setY(m_point.y() +m_player->getRadius()/2);
paint.setPen(QColor(0,0,255));
font.setPointSize(10);
font.setBold(true);
paint.setFont(font);
drawPushWidgt(paint,push_x);
// paint.drawRect((int)m_tree.getHeadBound().width()/2,0,1,(int)m_tree.getHeadBound().height());
// paint.drawRect(0,(int)m_tree.getHeadBound().height()/2,(int)m_tree.getHeadBound().width(),1);
font.setPointSize(15);
paint.setFont(font);
paint.setPen(QColor(0,0,0));
// paint.drawText(bx,700,QString("得分"));
// paint.drawText(bx,750,QString(" %1").arg(m_socre));
paint.drawText(this->width()/5*2,40,QString("当前耗时: "));
paint.setPen(QColor(255,0,0));
paint.drawText(this->width()/5*2,40,QString(" %1").arg(remaintime));
paint.setPen(QColor(0,0,0));
paint.drawText(this->width()/5*3,40,QString("得分:"));
paint.setPen(QColor(0,255,0));
paint.drawText(this->width()/5*3,40,QString(" %1").arg(m_socre));
if(m_player->getHp()==-10)
{
// realAct();
gameover();
// ui->progressBar->setValue(0);
QPixmap pushwidget(this->width(),this->height());
pushwidget.fill(Qt::black);
paint.setOpacity(0.5);
paint.drawPixmap(QRect(0,0,this->width(),this->height()),pushwidget,pushwidget.rect());
paint.setOpacity(1);
}
}
void Widget::quadTest()
{
int find_count = 0;
QuadNode *tp = m_tree.getHead();
QQueue<QuadNode*> node;
node.enqueue(tp);
while(node.size()!=0)
{
QuadNode* p = node.dequeue();
for( int k = 0; k< p->pointList.size();k++)
{
if(p->pointList[k]->getIs_bump() == true)
continue;
QList<ColorPoint*> found = pointList;
find_count +=found.size();
for( int i = 0; i< found.size(); i++)
{
if( found[i]->getPoint() != p->pointList[k]->getPoint())
//if(fabs(fx-px)> 0.1&& fabs(fy-py)>0.1 )
{
QPointF p1 = found[i]->getPoint();
QPointF p2 = p->pointList[k]->getPoint();
float l = found[i]->getRadius()+p->pointList[k]->getRadius();
float len =l*l; //半径和的平方
float dx = p1.x() - p2.x();
float dy = p1.y() - p2.y();
float dist = dx*dx + dy*dy;//圆心距
if(len >= dist)
{
//p->pointList[k]->setColor(QColor(200,0,0));
p->pointList[k]->setIs_bump(true);
found[i]->setIs_bump(true);
}
}
}
}
for( int i = 0; i< 4; i++)
{
if(p->child[i] != NULL)
{
node.enqueue(p->child[i]);
}
}
}
qDebug()<<"四叉检测次数"<<find_count;
}
void Widget::playerBump()
{
int num = 0;
QList<ColorPoint*> found = pointList;
for( int i = 0; i< found.size(); i++)
{
if( found[i]->getPoint() != m_player->getPoint())
{
QPointF p1 = found[i]->getPoint();
QPointF p2 = m_player->getPoint();
float l = found[i]->getRadius()+m_player->getRadius();
float len =l*l; //半径和的平方
float dx = p1.x() - p2.x();
float dy = p1.y() - p2.y();
float dist = dx*dx + dy*dy;//圆心距
if(len > dist)
{
m_player->setColor(found[i]->getColor());
// m_tree.remove(found[i]);
pointList.removeAt(i);
num++;
// m_socre+=found[i]->getScore();
}
}
}
if(num>0){
m_player->lossHp(10);
}
// m_player->setRadius(m_player->getRadius()+0.15*num);
// if(m_player->getSpeed() > 5)
// {
// m_player->setSpeed(m_player->getSpeed() - 0.01*num );
// }
//检测敌人碰撞
num = 0;
for( int j =0; j< shootList.size(); j++){
m_army = shootList[j];
found = pointList;
for( int i = 0; i< found.size(); i++)
{
if( found[i]->getPoint() != m_army->getPoint())
{
QPointF p1 = found[i]->getPoint();
QPointF p2 = m_army->getPoint();
float l = found[i]->getRadius()+m_army->getRadius();
float len =l*l; //半径和的平方
float dx = p1.x() - p2.x();
float dy = p1.y() - p2.y();
float dist = dx*dx + dy*dy;//圆心距
if(len >= dist+0.01)
{
// m_army->setColor(found[i]->getColor());
// m_tree.remove(found[i]);
num++;
pointList.removeAt(i);
shootList.removeAt(j);
i--;
break;
}
}
}
}
m_socre+= num*10;
// m_army->setRadius(m_army->getRadius()+0.15*num);
// if(m_army->getSpeed() > 5)
// {
// m_army->setSpeed(m_army->getSpeed() - 0.01*num );
// }
// //判断和敌人是否相撞
// QPointF p1 = m_player->getPoint();
// QPointF p2 = m_army->getPoint();
// float l = m_army->getRadius()+m_player->getRadius();
// float len =l*l; //半径和的平方
// float dx = p1.x() - p2.x();
// float dy = p1.y() - p2.y();
// float dist = dx*dx + dy*dy;//圆心距
// if(len >= dist)
// {
// if(m_army->getRadius() >= m_player->getRadius())
// {
// remaintime = 0;
// }else
// {
// m_player->setScore(m_player->getScore()+m_army->getScore());
// int x = qrand()%(int)(m_tree.getHeadBound().width() -40)+20+m_tree.getHeadBound().x();
// int y = qrand()%(int)(m_tree.getHeadBound().height()-40)+20+m_tree.getHeadBound().y();
// m_army = new ColorPoint(QPointF(x,y),35);
// armys.remove(i);
// armys.push_back(m_army);
// }
// }
// }
}
void Widget::gameover()
{
gametimer->stop();
realtimer->stop();
gentimer->stop();
// ui->disbumpbtn->setEnabled(false);
}
void Widget::newBegin()
{
shootList.clear();
pointList.clear();
gametimer->stop();
realtimer->stop();
gentimer->stop();
ui->pushButton->setGeometry(this->width()/4*3,this->height()/3,20,this->height()/3);
ui->beginButton->setGeometry(this->width()/16*13,this->height()/5*4,this->width()/16*2,this->height()/25);
ui->beginButton->hide();
ui->progressBar->setGeometry(50,20,this->width()/4,20);
is_move = false;
m_socre = 0;
backIndex = 0;
shootType = 0;
remaintime = 0;
m_count =0;
is_disbump = false;
is_push = true;
is_pushwin = true;
shootRadius =20;
push_x = this->width()/4-20;
// backImage.load(":/image/image/first.jpg");
m_tree.setHeadBound(QRectF(100,100,this->width()-300,this->height()-150));
m_player = new ColorPoint(QPointF(800,700),this->width()/50);
m_player->setImage(":/image/image/fish.png");
cur_pos.setX(m_player->getPoint().x());
cur_pos.setY(m_player->getPoint().y());
ui->progressBar->setValue(m_player->getHp());
ui->progressBar->setStyleSheet("QProgressBar::chunk {"
"background-color: #00FF00;"
"text-align: center;"
"width: 20px;}"
" QProgressBar {"
" border: 2px solid grey;"
" border-radius: 5px;"
" text-align: center;"
"}");
buildPoint(20);
update();
}
void Widget::initShoot(int num)
{
// m_army = new ColorPoint(QPointF(500,600),20);
// shootList.clear();
// for( int i = 0; i< num; i++)
// {
// int x = qrand()%(int)(m_tree.getHeadBound().width() -40)+20+m_tree.getHeadBound().x();
// int y = qrand()%(int)(m_tree.getHeadBound().height()-40)+20+m_tree.getHeadBound().y();
// ColorPoint* shoot = new ColorPoint(QPointF(x,y),20);
// armys.push_back(shoot);
// }
}
void Widget::drawPushWidgt(QPainter &paint, int w)
{
int h = this->height();
int rx = this->width()-w;
QPixmap pushwidget(w,this->height()/3);
pushwidget.fill(Qt::white);
paint.setOpacity(0.5);
paint.drawPixmap(QRect(rx,h/3,rx,h/3),pushwidget,pushwidget.rect());
paint.setOpacity(1);
int bx=rx+w/4;
int dist_h = h/3/8;
paint.setPen(QColor(0,0,0));
QFont font;
font.setBold(true);
font.setFamily("微软雅黑");
paint.drawText(bx,h/3+dist_h*1,QString("移动: 鼠标控制"));
paint.drawText(bx,h/3+dist_h*2,QString("切换攻击模式: T"));
paint.drawText(bx,h/3+dist_h*3,QString("加/减攻击范围: W/S"));
paint.drawText(bx,h/3+dist_h*4,QString("开始/暂停游戏: 右击"));
paint.drawText(bx,h/3+dist_h*5,QString("退出游戏:ESC"));
paint.drawText(bx,h/3+dist_h*6,QString("重置游戏: B"));
paint.setPen(QColor(255,0,0));
paint.drawText(bx,h/3+dist_h*7,QString("开始游戏请点击鼠标右键"));
}
void Widget::beginBackMusic()
{
playlist->addMedia(QUrl::fromLocalFile("./music/backMusic.mp3"));
playlist->setCurrentIndex(1);
playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
playerBack->setPlaylist(playlist);
playerBack->setVolume(20);
playerBack->play();
}
void Widget::buildPoint(int number)
{
// pointList.clear();
// qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
//qsrand(1);
for( int i = 0; i< number; i++){
int x = qrand()%(int)(m_tree.getHeadBound().width() -40)+20+m_tree.getHeadBound().x();
int y = qrand()%(int)(m_tree.getHeadBound().height()-40)+20+m_tree.getHeadBound().y();
int r = qrand()%255;
int g = qrand()%255;
int b = qrand()%255;
int d = this->width()/100;
float radius = qrand()%d+d;
ColorPoint *point = new ColorPoint(QPointF(x,y),radius);
point->setImg(imglist[qrand()%8]);
point->setColor(QColor(r,g,b));
pointList.push_back(point);
// m_tree.insert(point);
}
qDebug()<<"小球总数:"<< m_tree.size();
int find_count = 0;
// for( int i = 0; i< pointList.size(); i++)
// {
// for( int j = 0; j< pointList.size();j++)
// {
// QPointF p1 = pointList[i]->getPoint();
// QPointF p2 = pointList[j]->getPoint();
// if(p1!=p2){
// float l = pointList[i]->getRadius()+pointList[j]->getRadius();
// float len =l*l; //半径和的平方
// float dx = p1.x() - p2.x();
// float dy = p1.y() - p2.y();
// float dist = dx*dx + dy*dy;//圆心距
// if(len >= dist)
// {
// pointList[i]->setIs_bump(true);
// }
// }
// find_count++;
// }
// }
int bump = 0;
for( int i = 0; i< pointList.size(); i++)
if(pointList[i]->getIs_bump() == true)
bump++;
qDebug()<<"非四叉树检测次数"<<find_count;
qDebug()<<"碰撞个数"<<bump;
// m_tree.initBump();
// quadTest();
}
void Widget::on_depthbox_valueChanged(int arg1)
{
depth = arg1;
update();
}
void Widget::generatePoints()
{
//qsrand(1);
int x = qrand()%(int)(m_tree.getHeadBound().width() -40)+20+m_tree.getHeadBound().x();
int y = qrand()%(int)(m_tree.getHeadBound().height()-40)+20+m_tree.getHeadBound().y();
QPointF m_point = m_player->getPoint();
float mx = m_point.x();
float my = m_point.y();
float dx = mx-x;
float dy = my-y;
float dist = sqrt(dx*dx+dy*dy);
int d = this->width()/100;
float radius = qrand()%d+d;
if( dist< radius+m_player->getRadius())
return;
int r = qrand()%255;
int g = qrand()%255;
int b = qrand()%255;
ColorPoint *point = new ColorPoint(QPointF(x,y),radius);
point->setColor(QColor(r,g,b));
point->setImg(imglist[qrand()%8]);
// m_tree.insert(point);
// m_tree.initBump();
pointList.push_back(point);
// quadTest();
//update();
}
void Widget::resizeEvent(QResizeEvent *)
{
int w = this->width();
int h = this->height();
ui->pushButton->setGeometry(this->width()/4*3,this->height()/3,20,this->height()/3);
ui->beginButton->setGeometry(this->width()/16*13,this->height()/5*4,this->width()/16*2,this->height()/25);
ui->beginButton->hide();
ui->progressBar->setGeometry(50,20,this->width()/4,20);
update();
}
void Widget::realAct()
{
backIndex++;
backIndex = backIndex%backimglist.size();
if(m_player->getHp()==0){
ui->progressBar->setValue(0);
m_player->lossHp(10);
QString str ="游戏结束!\n";
is_pushwin = false;
str+= QString(QString("最终得分: %1 ").arg(m_socre)+"\n");
str+=QString("是否重新开始?\nyes继续游戏,No退出游戏");
QMessageBox message(QMessageBox::NoIcon, "游戏结束", str,QMessageBox::Yes | QMessageBox::No, NULL);
message.setIconPixmap(m_player->getImg().scaled(100,100));
if(message.exec() == QMessageBox::Yes)
{
newBegin();
// pushtimer->start(15);
}else {
this->close();
}
}
if( is_move == true)
{
for( int i =0; i< shootList.size(); i++)
{
shootList[i]->setPoint(shootList[i]->getDir()*50 +shootList[i]->getPoint());
}
float dist = m_player->getSpeed();
QPointF m_point = m_player->getPoint();
float dx = cur_pos.x() - m_point.x();
float dy = cur_pos.y() - m_point.y();
// if(fabs(dx)<m_player->getRadius() &&fabs(dy) <m_player->getRadius())
// {
// is_move == false;
// //update();
// return;
// }
if(fabs(dx) <= m_player->getRadius()*1 )
{
if(dy > 0)
m_point.setY(m_point.y()+dist);
else
m_point.setY(m_point.y()-dist);
if(m_point.y() - m_player->getRadius() <100 )
return;
m_player->setPoint(m_point);
if(dx<0)
m_player->setImage(":/image/image/fish.png");
else
m_player->setImage(":/image/image/fish_right.png");
ui->progressBar->setValue(m_player->getHp());
update();
return;
}
// if(dx == 0){
// return;
// }
float k = dy/(dx+0.00001);
int x;
float p_dist = sqrt(dx*dx+dy*dy);
int d = (int)p_dist/dist;
{
x = dx/d;
float fx = k*x;
m_point.setX(m_point.x()+x);
m_point.setY(m_point.y()+fx);
if(m_point.x() + m_player->getRadius() -100 > m_tree.getHeadBound().width() )
return;
if(m_point.y() - m_player->getRadius() <100 )
return;
if(dx<0)
m_player->setImage(":/image/image/fish.png");
else
m_player->setImage(":/image/image/fish_right.png");
m_player->setPoint(m_point);
}
}
// if(m_count%3==0){
// }
if(m_count%2==0&& shootType == 1)
{
ColorPoint *p = new ColorPoint(m_player->getPoint(),shootRadius);
QPointF m_point = m_player->getPoint();
float dx = cur_pos.x() - m_point.x();
float dy = cur_pos.y() - m_point.y();
p->setDir((cur_pos-m_player->getPoint())/sqrt(dx*dx+dy*dy)/2);
shootList.push_back(p);
}
if(m_count%10==0&& shootType == 0)
{
ColorPoint *p = new ColorPoint(m_player->getPoint(),shootRadius);
QPointF m_point = m_player->getPoint();
float dx = cur_pos.x() - m_point.x();
float dy = cur_pos.y() - m_point.y();
p->setDir((cur_pos-m_player->getPoint())/sqrt(dx*dx+dy*dy)/2);
shootList.push_back(p);
}
for( int i =0; i< shootList.size(); i++)
{
if(!m_tree.getHeadBound().contains(shootList[i]->getPoint()))
shootList.removeAt(i);
}
ui->progressBar->setValue(m_player->getHp());
m_count++;
update();
}
void Widget::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::RightButton && m_player->getHp()>0)
{
// m_player->setPoint(e->pos());
// is_move = false;
// update();
if(push_x <this->width()/4-20 && push_x>20)
return;
if(gametimer->isActive()){
gametimer->stop();
gentimer->stop();
realtimer->stop();
pushtimer->start(15);
}else {
is_move = true;
gametimer->start(1000);
gentimer->start(300);
realtimer->start(30);
pushtimer->start(15);
}
}
if(e->button() == Qt::LeftButton)
{
// cur_pos = e->pos();
// is_move = true;
// gametimer->start(1000);
// gentimer->start(1000);
// realtimer->start(100);
}
update();
}
void Widget::mouseMoveEvent(QMouseEvent *e)
{
cur_pos = e->pos();
}
void Widget::keyPressEvent(QKeyEvent *e)
{
if(e->key() == Qt::Key_Escape)
this->close();
if(e->key() == Qt::Key_B){
newBegin();
}
if(e->key() == Qt::Key_W){
for( int i = 0; i< shootList.size();i++)
{
shootRadius+=1;
if(shootRadius>50)
shootRadius =50;
}
}
if(e->key() == Qt::Key_S){
shootRadius-=1;
if(shootRadius<10)
shootRadius =10;
}
if(e->key() == Qt::Key_T)
{
if(shootType == 0)
shootType = 1;
else
shootType = 0;
qDebug()<<"change shootType";
}
}
void Widget::on_disbumpbtn_clicked()
{
is_disbump = !is_disbump;
if(is_disbump == true)
{
//quadTest();
ui->disbumpbtn->setText(QString("不检测"));
}else
ui->disbumpbtn->setText(QString("检测"));
update();
}
void Widget::change_remaintime()
{
remaintime++;
}
void Widget::army_move()
{
//敌人随机运动
// qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
for( int i = 0; i< pointList.size();i++){
QPointF dxy = pointList[i]->getPoint() - m_player->getPoint();
dxy/=150;
pointList[i]->setPoint( pointList[i]->getPoint()- dxy);
QRectF dBound(pointList[i]->m_bound.x()-dxy.x(),pointList[i]->m_bound.y()-dxy.y(),pointList[i]->m_bound.width(),pointList[i]->m_bound.height()) ;
pointList[i]->m_bound=dBound;
// pointList[i]->setRadius(pointList[i]->getRadius()+0.1);
}
update();
}
void Widget::on_pushButton_clicked()
{
// bool x = is_push;
// pushtimer->start(15);
// if(x == true){
// is_move = true;
// gametimer->start(1000);
// gentimer->start(1000);
// realtimer->start(100);
// }
if( m_player->getHp()>0)
{
// m_player->setPoint(e->pos());
// is_move = false;
// update();
// if(gametimer->isActive()){
// gametimer->stop();
// gentimer->stop();
// realtimer->stop();
// pushtimer->start(15);
// }else {
// is_move = true;
// gametimer->start(1000);
// gentimer->start(1000);
// realtimer->start(100);
// pushtimer->start(15);
// }
}
}
void Widget::push_Animaltime()
{
int h = this->height();
if(is_push == true)
{
push_x-=this->width()/150;
ui->pushButton->setGeometry(this->width()-20-push_x,h/3,20,h/3);
if(push_x<=0)
{
ui->pushButton->setText(QString("←"));
is_push = !is_push;
pushtimer->stop();
}
}else
{
push_x+=this->width()/150;
ui->pushButton->setGeometry(this->width()-20-push_x,h/3,20,h/3);
if(push_x>=this->width()/4-20)
{
ui->pushButton->setText(QString("→"));
is_push = !is_push;
pushtimer->stop();
}
}
update();
}
void Widget::on_progressBar_valueChanged(int value)
{
if(value<=30)
ui->progressBar->setStyleSheet("QProgressBar::chunk {"
"background-color: #FF0000;"
"width: 20px;}"
" QProgressBar {"
" border: 2px solid grey;"
" border-radius: 5px;"
" text-align: center;"
"}");
if(value>30&& value<70)
ui->progressBar->setStyleSheet("QProgressBar::chunk {"
"background-color: #FFFF00;"
"text-align: center;"
"width: 20px;}"
" QProgressBar {"
" border: 2px solid grey;"
" border-radius: 5px;"
" text-align: center;"
"}");
if(value>=70)
ui->progressBar->setStyleSheet("QProgressBar::chunk {"
"background-color: #00FF00;"
"text-align: center;"
"width: 20px;}"
" QProgressBar {"
" border: 2px solid grey;"
" border-radius: 5px;"
" text-align: center;"
"}");
}
void Widget::on_beginButton_clicked()
{
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
#ifndef WIDGET_H
#define WIDGET_H
#include <windows.h>
#include <QWidget>
#include <quadnode.h>
#include "quadtree.h"
#include <QVector>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
#include <QtGlobal>
#include <QTime>
#include <QMoveEvent>
#include <QKeyEvent>
#include <QTimer>
#include <QFont>
#include <QRadialGradient>
#include <QBrush>
#include <QList>
#include <QImage>
#include <QDesktopWidget>
#include <QMessageBox>
#include <QResizeEvent>
#include <cmath>
#include <QSplashScreen>
#include <QLabel>
#include <QMovie>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <synchapi.h>
#include <QPixmap>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
private:
QuadTree m_tree;
int depth;
QList<ColorPoint*> pointList;
QList<ColorPoint*> shootList;
ColorPoint *m_player,*m_army;
QList<ColorPoint* >armys;
int m_socre;
//float dir;
QPoint cur_pos; //鼠标当前位置
bool is_move; //球是否处于移动状态
bool is_disbump; //是否着重显示碰撞的小球
bool is_push; //判断是否拉开
int remaintime;
int m_count;
bool is_pushwin;
int shootType;
QTimer *realtimer; //控制球移动的计时器
QTimer *gentimer; //生成球的计时器
QTimer *gametimer; //游戏倒计时
QTimer *pushtimer; //状态栏动画
QImage backImage;
int push_x;
float shootRadius;
QVector<QPixmap> imglist;
QVector<QPixmap> backimglist;
int backIndex;
QPixmap shootImage;
void buildPoint(int number);
QMediaPlayer *playerBack;//背景音乐播放器对象
QString backMusicName;//背景音乐名称
QMediaPlaylist *playlist;
public:
explicit Widget(QWidget *parent = 0);
void paintEvent(QPaintEvent*e);
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void keyPressEvent(QKeyEvent*e);
void resizeEvent(QResizeEvent *);
void quadTest();
void playerBump();
void gameover();
void newBegin();
void initShoot(int num);
void drawPushWidgt(QPainter & paint,int w);
void beginBackMusic();
~Widget();
private slots:
void on_depthbox_valueChanged(int arg1);
void generatePoints();
void realAct();
void on_disbumpbtn_clicked();
void change_remaintime();
void army_move();
void on_pushButton_clicked();
void push_Animaltime();
void on_progressBar_valueChanged(int value);
void on_beginButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
681

被折叠的 条评论
为什么被折叠?



