一、界面设计
打开Qt的工程如下
1.登录界面
2.注册界面
3.网络连接界面
4.贪吃蛇小游戏主界面
二、重点代码分析
1.登录
用数据库来存储所需要的数据
QString Currentname; //存储当前的账号
QString CurrentPasswd; //存储当前的密码
int score;//玩贪吃蛇所得分数
//数据库来存储用户信息
void sqlite_Init()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("user.db");
if(!db.open())
{
qDebug()<<"open error";
}
//create excle
QString createsql("create table user(username,password,score);");
QSqlQuery query;
if(!query.exec(createsql)){
qDebug()<<"table create error";
}
else{
qDebug()<<"table create success";
}
}
点了登录这个按钮后,回去判断输入的密码和账号是否正确
关键代码①:判断输入的数据是否正确--->
QString sql=QString("select * from user where username='%1' and password='%2';") .arg(username).arg(password);
关键代码②:登录失败后会弹出一个QMessageBox进行提示登陆失败
关键代码③: 登录成功后要把当前的数据保存起来,创建一个新的MyConnect网络连接,显示网络连接界面,登录界面关闭。
MyConnect *C = new MyConnect; C->show(); this->close();
void MyLoginDialog::on_pushButtonLogin_clicked()
{
sqlite_Init();
QString username = ui->lineEditLoginName->text();
QString password = ui->lineEditLoginPasswd->text();
QString sql=QString("select * from user where username='%1' and password='%2';")
.arg(username).arg(password);
//创建执行语句对象
QSqlQuery query(sql);
//判断执行结果
if(!query.next())
{
qDebug()<<"Login error";
QMessageBox::information(this,"登录认证","登录失败,账户或者密码错误");
}
else
{
qDebug()<<"Login success";
QMessageBox::information(this,"登录认证","登录成功");
Currentname = username;
CurrentPasswd = password;
MyConnect *C = new MyConnect;
C->show();
this->close();
}
}
点了注册按钮就会转向注册界面
void MyLoginDialog::on_pushButtonGoRegist_clicked()
{
this->close();
MyRegistDialog *r = new MyRegistDialog;
r->show();
}
2.注册
点了注册这个按钮就会判断是否注册成功
关键代码①:判断输入的注册是否成功--->
QString sql=QString("insert into user(username,password) values('%1','%2');") .arg(username).arg(password);
关键代码②:注册失败后会弹出一个QMessageBox进行提示注册失败
关键代码③: 注册成功后会返回登录界面
MyLoginDialog *l = new MyLoginDialog; l->show(); this->close();
void MyRegistDialog::on_pushButtonIsRegist_clicked()
{
sqlite_Init();
QString username = ui->lineEditRegistName->text();
QString password = ui->lineEditRegistPasswd->text();
QString surepass = ui->lineEditSurePasswd->text();
//判断密码是否一致
if(password == surepass)
{
QString sql=QString("insert into user(username,password) values('%1','%2');")
.arg(username).arg(password);
//创建执行语句对象
QSqlQuery query;
//判断执行结果
if(!query.exec(sql))
{
qDebug()<<"insert into error";
QMessageBox::information(this,"注册认证","插入失败!");
}
else
{
qDebug()<<"insert into success";
QMessageBox::information(this,"注册认证","插入成功!");
MyLoginDialog *l = new MyLoginDialog;
l->show();
this->close();
}
}else{
QMessageBox::information(this,"注册认证","两次密码输入不一致");
}
}
3.网络连接
当点击连接这个代码的时候,会进行连接网络,判断是否连接成功
关键代码①:将输入的ip和端口传到tcp中--->
tcpSocket->connectToHost(ui->lineEditSerIP->text(),ui->lineEditPort->text().toInt());
关键代码②:怎么判断tcp连接成功呢--->
tcpSocket->waitForConnected(2)
关键代码③: 连接成功后会返回主游戏界面,把当前的游戏玩家的名字,发送给linux的服务器
QByteArray dataName = Currentname.toLatin1(); tcpSocket->write(dataName+"玩家已经进入游戏"); this->close(); Widget *w = new Widget; w->show();
void MyConnect::on_pushButton_clicked()
{
newConnect();
}
void MyConnect::newConnect()
{
// 初始化数据大小信息为0
blockSize = 0;
tcpSocket->connectToHost(ui->lineEditSerIP->text(),
ui->lineEditPort->text().toInt());
if (tcpSocket->waitForConnected(2))
{
qDebug() << "connect successfuilly!\n";
QByteArray dataName = Currentname.toLatin1();
tcpSocket->write(dataName+"玩家已经进入游戏");
this->close();
Widget *w = new Widget;
w->show();
emit isConncted();//连接成功释放信号
}
else
{
qDebug() << "connect failed!\n";
QMessageBox::information(this,"网络连接","连接失败,请检查IP与Port信息");
}
}