软件工程课程设计:黄金点游戏(三)

在黄金点游戏的第三阶段开发中,增加了单机模式和历史记录查询功能。单机模式下,系统生成虚拟玩家与用户进行游戏。历史记录查询允许玩家查看各轮比赛的详细信息,通过tableWidget展示,内容包括玩家排名和分数。此外,代码实现了输入合法性检查和新一轮自动填充姓名。未来计划连接数据库,并开发多人游戏模式,让系统根据游戏结果智能调整数字生成。
摘要由CSDN通过智能技术生成

黄金点游戏(三)

本周在之前的游戏开发基础上,为游戏增加了单机模式和查询和查看游戏历史结果的功能。在单机模式中,除了用户控制的玩家之外,会由系统生成余下的虚拟玩家,系统控制这些虚拟玩家参与游戏,每一轮随机产生数字。

查询历史结果功能设计
在显示结果界面,玩家可以选择“查看历史记录”,在显示窗口可以选择要查看的轮数的游戏记录,系统会根据每一轮玩家分数的排名从高到低显示玩家信息。

历史记录查询窗口:
在这里插入图片描述
查询窗口的实现是通过使用tableWidget控件,将其附加在窗口上,并设置含有四列的表格用于显示信息。另外,对tableWidget控件设置了表头铺满,内容居中显示,表格内容只读等属性,使查询信息的展示更加简洁美观。

实现代码:

#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>

MainWindow5::MainWindow5(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow5)
{
    ui->setupUi(this);
    this->setWindowTitle("GoldPoint Game");
    tableWidget = new QTableWidget(this);
    tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//不允许修改表格内容
    tableWidget->verticalHeader()->setDefaultSectionSize(40); //设置行高
    tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//表头铺满
    tableWidget->verticalHeader()->setHidden(true);//隐藏默认行号
    tableWidget->setRowCount(PlayerNum);//设置行数
    tableWidget->setColumnCount(4);//设置列数

    tableWidget->resize(621,341);
    tableWidget->move(90,110);
    QStringList header;
    header<<"排名"<<"姓名"<<"分数"<<"本轮数字";
    tableWidget->setHorizontalHeaderLabels(header);//设置表头
    tableWidget->show();
}

MainWindow5::~MainWindow5()
{
    delete ui;
}


void MainWindow5::wd5Init(int round){
    this->show();
    ui->comboBox->clear();
    for(int i=1;i<=round;i++){
        ui->comboBox->addItem(tr("    ")+QString::number(i));
    }
    QFile file("D:/record.txt");
    file.open(QIODevice::ReadOnly);
    QTextStream fread(&file);
    QString data;
    //QString data=QString(file.readLine());
    for(int i=0;i<PlayerNum;i++){
        tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(i+1)));
        tableWidget->item(i,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        fread>>data;
        tableWidget->setItem(i,1,new QTableWidgetItem(data));
        tableWidget->item(i,1)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    }
    for(int i=0;i<PlayerNum;i++){
       fread>>data;
       tableWidget->setItem(i,2,new QTableWidgetItem(data));
       tableWidget->item(i,2)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    }
    for(int i=0;i<PlayerNum;i++){
       fread>>data;
       tableWidget->setItem(i,3,new QTableWidgetItem(data));
       tableWidget->item(i,3)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    }
    file.close();
}

单机模式功能设计
对于系统产生的虚拟玩家,玩家姓名初始化时设置为“玩家+编号”,数字每轮提交的数字为系统随机生成的1~100之间的随机数。

部分实现代码:

//新一轮游戏开始,根据模式选择进行初始化
void MainWindow2::wd2SingleShow(){
    system.ifSingle=true;
    playerCount=PlayerNum-1;      //游戏人数初始为0;
    system.gameInit(system.ifSingle);
    this->show();
}

void MainWindow2::wd2MulShow(){
    system.ifSingle=false;
    playerCount=0;
    system.gameInit(system.ifSingle);
    this->show();
}

//新一轮游戏开始时进行初始化
void Referee::gameInit(bool ifSingle) {
    Referee::round++;				//游戏轮数加1
    winner_subs.clear();
    loser_subs.clear();
    gold_point=0;
    if(ifSingle){
        for(int i=1;i<PlayerNum;i++){
            player[i].set_name("玩家"+QString::number(i,10));
            player[i].generateNum();
        }
    }
}

部分功能改进

1、增加了对输入内容合法性的判断,当输入姓名或数字为空,或者输入数字不在规定范围内时,弹出提醒窗口要求用户重新输入。
在这里插入图片描述
2、开始新一轮游戏后,自动帮玩家填入姓名

后续开发目标

  1. 连接数据库,通过数据库管理玩家信息和游戏结果。
  2. 多人游戏模式可选择玩家人数,不够的玩家部分由系统产生并控制。
  3. 系统不再随机生成数字,而是根据游戏结果自动进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值