中国象棋QT登录注册以及悔棋功能
原文链接:https://blog.csdn.net/qq_39355828/article/details/116000375 (opens new window)
# 中国象棋QT登录注册以及悔棋功能
# 1.登录以及注册
使用Qt自带的数据库QSQLITE,进行数据库的创建
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("hello");
db.setDatabaseName("data.db");
db.setUserName("LH");
db.setPassword("123456");
1
2
3
4
5
6
2
3
4
5
6
数据库建立完成之后,使用创建表
query.exec("create table password(pwd varchar primary key)");
query.exec("insert into password values('123456')");
query.exec("create table user(name varchar primary key)");
query.exec("insert into user values('123456')");
1
2
3
4
2
3
4
当UI界面得到登录按键的响应之后,进行判定是否包含在数据库,包含则返回成功,进入象棋界面
void LoginDialog::on_loginBtn_clicked()
{ QString user;
QString pwd;
user=ui->name->text();
pwd=ui->pwdLineEdit->text();
if(ui->pwdLineEdit->text().isEmpty()){
QMessageBox::information(this,tr("请输入密码"),tr("请先输入密码再登录!"),QMessageBox::Ok);
ui->pwdLineEdit->setFocus();
}else{
QSqlQuery query;
QString S = QString("select * from password where pwd='%1'").arg(pwd);
//query.exec("select * from password where pwd=");
query.exec(S);
query.next();
QSqlQuery query1;
QString SS = QString("select * from user where name='%1'").arg(user);
//query1.exec("select name from user");
query1.exec(SS);
query1.next();
if(query.value(0).toString() == ui->pwdLineEdit->text()&&query1.value(0).toString() == ui->name->text())
{
QDialog::accept();
//pwdok=true;
}
else{
QMessageBox::warning(this,tr("账号或密码错误"),tr("请输入正确的密码再登录!"),QMessageBox::Ok);
ui->pwdLineEdit->clear();
ui->pwdLineEdit->setFocus();
}
}
}
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
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
注册类似登录,需要向数据库写入
void LoginDialog::on_pushButton_clicked()
{ QString user;
QString pwd;
user=ui->name->text();
pwd=ui->pwdLineEdit->text();
if(ui->pwdLineEdit->text().isEmpty()){
QMessageBox::information(this,tr("请输入密码"),tr("请先输入密码再注册!"),QMessageBox::Ok);
ui->pwdLineEdit->setFocus();
}
else{
QSqlDatabase::database().transaction();
QSqlQuery query;
//QString S = QString("insert into password valus(' name='%1' and pwd='%2'").arg(user).arg(pwd);
QString i =QString("insert into password values('%1');").arg(pwd);//插入一条信息到数据库的user_table表中
qDebug()<<i<<endl;
bool ok1=query.exec(i);
//query.next();
// QSqlQuery query1;
QString ii =QString("insert into user values('%1');").arg(user);//插入一条信息到数据库的user_table表中
bool ok2=query.exec(ii);
qDebug()<<ii<<endl;
if(ok1&&ok2){
QSqlDatabase::database().commit();
QMessageBox::information(this,tr("提示"),tr("注册成功!"),QMessageBox::Ok);
}
else{
QSqlDatabase::database().rollback();
}
QMessageBox::warning(this,tr("注册成功"),tr("请登录!"),QMessageBox::Ok);
}
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
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
# 2.主函数
QApplication app(argc, argv);
if(!createConnection())return 0;//
window w;
LoginDialog dlg;
if(dlg.exec()==QDialog::Accepted){
w.show();
return app.exec();
}else{
return 0;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
主函数主要进行了数据库的初始化,并且先进入了登录注册界面,当登录注册完成之后,才会显示主窗口
# 3.象棋对弈
使用alphabeta剪枝算法进行象棋最优走法的搜索。首先做好的就是对局面的评估,对局面评估,主要包括两个部分,棋子本身的价值,以及所在位置的价值,棋子的价值:
int pieceValue[] = {600,300,300,70,1000000,110,110};
1
所在位置的价值:
const int jPosition [10][9] = {
{14, 14, 12, 18, 16, 18, 12, 14, 14},
{16, 20, 18, 24, 26, 24, 18, 20, 16},
{12, 12, 12, 18, 18, 18, 12, 12, 12},
{12, 18, 16, 22, 22, 22, 16, 18, 12},
{12, 14, 12, 18, 18, 18, 12, 14, 12},
{12, 16, 14, 20, 20, 20, 14, 16, 12},
{6, 10, 8, 14, 14, 14, 8, 10, 6},
{4, 8, 6, 14, 12, 14, 6, 8, 4},
{8, 4, 8, 16, 8, 16, 8, 4, 8},
{-2, 10, 6, 14, 12, 14, 6, 10, -2},
};
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
这样以后就可以对当前的局面进行评估,得分,搜索出当下的最优值,进行博弈。


编辑 (opens new window)
上次更新: 2026/08/11, 13:36:18