红黑夜法官 qt版本

5 篇文章 0 订阅
2 篇文章 2 订阅

emmmmm
我不会美化
我不会美化
我不会美化
++++++++++++++、
重要的事情说三遍
一美化就各种未知的bug
鉴于课设时间即将截止,所以不好意思的去匆匆结尾
等这阵子消停了,应该会回来在美化美化
+++++上 代码
gamerplayer.h

#ifndef GAMEPLAYER_H
#define GAMEPLAYER_H
#include <QString>

struct player01{
    //char name[20];
    int  ID;//0,1==red,black
    bool cunzhang;//1==yes
    double ticket_001;//被投的  cunzhang
    double ticket_002;//拥有的
    double ticket_003;//被投的
    bool life;//0,1==die ,alive
    //int number;//i
    QString words;
    int eye;//1==open ,0==closed
};

extern struct player01 player[10];
class gameplayer
{
public:
    gameplayer();
};

#endif // GAMEPLAYER_H

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
    void on_pushButton_4_clicked();
    void on_pushButton_5_clicked();
    void on_pushButton_6_clicked();
    void on_pushButton_7_clicked();
    void on_pushButton_8_clicked();
    void on_pushButton_9_clicked();

    void on_radioButton_clicked();
    void on_radioButton_2_clicked();
    void on_radioButton_3_clicked();
    void on_radioButton_4_clicked();
private:
    Ui::MainWindow *ui;
    int n,red,black,j,count,i;//参赛人数,红黑人数,村长序号,计数器
    int a4=0,b=0;//第一次发言所需
    int a0, temp1,temp2;//左右发言所需
    int a1=0,a2=0,a3=0;//天黑了请闭眼
    int day=3;//红黑夜
    int a5=0,a6;//投票杀人所需
};


#endif // MAINWINDOW_H

gameplayer.cpp

#include "gameplayer.h"

struct player01 player[10];
gameplayer::gameplayer()
{

}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMessageBox>
#include <QString>
#include "gameplayer.h"
#include "stdlib.h"
#include "time.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->stackedWidget->setCurrentWidget(ui->page);
    srand((unsigned)time(NULL));
    ui->groupBox->hide();
    ui->groupBox_4->hide();

}

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


//开始游戏
void MainWindow::on_pushButton_clicked(){
    n=ui->comboBox->currentText().toInt();//获取n
    ui->stackedWidget->setCurrentWidget(ui->page_2);//跳转到游戏界面
    qDebug()<<n;
}
//结束游戏
void MainWindow::on_pushButton_2_clicked(){
    this->close();
}
//初始化
void MainWindow::on_pushButton_3_clicked(){
    if(n%2==0)
        {
            red=n/2;
            black=n/2;
        }
        else{
            red=n/2+1;
            black=n/2;
        }//红黑身分数
    for(int i=0;i<n;i++)
        {
            player[i].life=1;
            player[i].cunzhang=0;
            player[i].ticket_001=0;
            player[i].ticket_002=1;
            player[i].ticket_003=0;
            if(red==0) player[i].ID=1;
              else if(black==0) player[i].ID=0;
              else {
                    player[i].ID=rand()%2;
                    if(player[i].ID==0) red--;
                    else black--;
                   }//ID

        }
    if(n%2==0)
        {
            red=n/2;
            black=n/2;
        }
        else{
            red=n/2+1;
            black=n/2;
        }//红黑身分数
    QMessageBox::information(this,"天","进入白昼");
    ui->stackedWidget->setCurrentWidget(ui->page_6);
    ui->label_15->setText(QString::number(a4));
}
//第一次发言
void MainWindow::on_pushButton_8_clicked(){
    player[a4].words=ui->lineEdit_2->text();
    ui->lineEdit_2->setText("");
    if(a4==n-1)
    {
        ui->stackedWidget->setCurrentWidget(ui->page_3);

    }
    a4++;
    ui->label_15->setText(QString::number(a4));
}
//村长的投票    ready
void MainWindow::on_pushButton_5_clicked()
{
    b++;
    QString str001;
    i=0;
    while(player[i++].life==0);
    i--;
    str001=QString::number(i);
    ui->label_5->setText(str001);
    ui->groupBox_2->hide();
    ui->groupBox->show();

}
//村长的投票
void MainWindow::on_pushButton_4_clicked(){
    int t;
    t=ui->comboBox_2->currentText().toInt();
    player[t].ticket_001+=1;
    if(i==n-1)
    {
        int temp;
            for(int k=0;k<n;k++)
            {
                if(k==0) {
                   temp=player[0].ticket_001;
                   j=0;
                }
                else if(player[k].ticket_001>temp) {
                    temp=player[k].ticket_001;
                    j=k;
                }
            }//找cunzhang
            //cout<<player[j].name<<"玩家为村长!"<<endl;
            QString m0=QString::number(j);
            QMessageBox::information(this,"tips:","村长是"+m0);
            player[j].cunzhang=1;
            if(day==0)
            {
                if(a2%2==0) player[j].ticket_002=1;
            }
            else if(day==1)
            {
                if(a3%2==0) player[j].ticket_002=1;
            }
            else if(n%2==0) player[j].ticket_002=1.5;
            else player[j].ticket_002=0.5;//cunzhang的初始化
            for(int  k=0;k<n;k++) player[k].ticket_001=0;//置零
            ui->stackedWidget->setCurrentWidget(ui->page_5);
            if(day=rand()%2==0)
            {
                QMessageBox::information(this,"day","进入红夜");
            }//red
            else
            {
                QMessageBox::information(this,"day","进入黑夜");
            }//black
            a0=0;
            while(player[a0].life==0) a0++;
            ui->label_12->setText(QString::number(a0));

    }
    else {
        while(player[i++].life==0);
        QString m1=QString::number(i);
        ui->label_5->setText(m1);
    }
}
//发言顺序
//左初始化
void MainWindow::on_radioButton_clicked(){

            temp1=n,temp2=j;

            while(temp2-->=0)
            {
                if(temp2==-1) temp2=n-1;
                if(player[temp2].life==1)
                {
                    break;
                }

            }
            ui->label_9->setText(QString::number(temp2));
            a0=0;
            count=0;
            ui->groupBox_3->hide();
            ui->groupBox_4->show();
}
//右初始化
void MainWindow::on_radioButton_2_clicked(){
            temp1=n,temp2=j;
            while(temp2++>=0)
            {
                if(temp2==n) temp2=0;
                if(player[temp2].life==1)
                {
                    break;
                }

            }
            ui->label_9->setText(QString::number(temp2));
            a0=1;
            count=0;
}
//按顺序发言
void MainWindow::on_pushButton_6_clicked(){
    if(a0==0)//left
    {
        while(count!=n)
        {
            if(player[temp2].life==1)

            {

                player[temp2].words=ui->lineEdit->text();
                ui->lineEdit->setText("");
                do{
                    count++;
                    temp2++;
                    if(temp2==n) temp2=0;
                }while(player[temp2].life==0);
                ui->label_9->setText(QString::number(temp2));
                break;

            }
            else
            {
                temp2++;
                if(temp2==n) temp2=0;
            }

        }
        a5=-1;
        do{
            a5++;
        }while(player[a5].life==0);
        ui->label_18->setText(QString::number(a5));


    }
    else//right
    {

        while(count!=n)
        {
            if(player[temp2].life==1)
            {

                player[temp2].words=ui->lineEdit->text();
                ui->lineEdit->setText("");
                do{
                    count++;
                    temp2--;
                    if(temp2==-1) temp2=n-1;
                }while(player[temp2].life==0);
                ui->label_9->setText(QString::number(temp2));
                break;

            }
            else
            {
                temp2--;
                if(temp2==-1) temp2=n-1;
            }

        }
    }
    if(count==n)
    {
        ui->stackedWidget->setCurrentWidget(ui->page_7);
        count=0;
        a5=-1;
        do{
            a5++;
        }while(player[a5].life==0);
        ui->label_18->setText(QString::number(a5));

    }
}
//夜来了,请闭眼
//open
void MainWindow::on_radioButton_3_clicked(){

    player[a0].eye=1;
    a2++;

}
//close
void MainWindow::on_radioButton_4_clicked(){
   player[a0].eye=0;
   a3++;
}
void MainWindow::on_pushButton_7_clicked(){
    do{
        a0++;
    }while (player[a0].life==0);
    if(a0>=n)
    {
        ui->stackedWidget->setCurrentWidget(ui->page_4);
        a0=0;
        QMessageBox::information(this,"day","进入白昼");
    }
    ui->label_12->setText(QString::number(a0));
}
//投票杀人
void MainWindow::on_pushButton_9_clicked(){
    do{
        a5++;
        if(a5==n) break;
    }while(player[a5].life==0);
    ui->label_18->setText(QString::number(a5));
    int t;
    t=ui->comboBox_3->currentText().toInt();
    player[t].ticket_003+=player[a5].ticket_002;
    if(a5==n)
    {
        int t1=0,tt;
        while(player[t1].life==0) t1++;
        tt=player[t1].ticket_003;
        for(int k=t1+1;k<n;k++)
        {
            if(tt<player[k].ticket_003)
            {
                tt=player[k].ticket_003;
                t1=k;
            }
        }
      for(int k=0;k<n;k++)
      {
          player[k].ticket_003=0;
      }//清零

        player[t1].life=0;
        if(player[t1].ID==0)//死者的后事处理***********************************************************
        {
            QMessageBox::information(this,"ID",QString::number(t1)+"号玩家死亡!身份是red");
            red--;
        }
        else
        {
            QMessageBox::information(this,"ID",QString::number(t1)+"号玩家死亡!身份是black");
            black--;
        }
        if(player[t1].cunzhang==1)
        {
            player[t1].cunzhang=0;
            QMessageBox::information(this,"村长","村长已死亡,请重新选举村长!");
            ui->stackedWidget->setCurrentWidget(ui->page_3);
        }//村长没了,选村长去
        else
        {
            if(day=rand()%2==0)
            {
                QMessageBox::information(this,"day","进入红夜");
            }//red
            else
            {
                QMessageBox::information(this,"day","进入黑夜");
            }//black
            ui->stackedWidget->setCurrentWidget(ui->page_5);//进入夜晚
            a0=0;
            while(player[a0].life==0) a0++;
            ui->label_12->setText(QString::number(a0));

        }
        if(red==0)
        {
            QMessageBox::information(this,"0.0","black胜利");
            ui->stackedWidget->setCurrentWidget(ui->page);
        }
        if(black==0)
        {
            QMessageBox::information(this,"0.0","red胜利");
            ui->stackedWidget->setCurrentWidget(ui->page);
        }
    }
}

UI是在一个widget上添加stackwidget
通过翻页来实现游戏界面的变化
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值