项目展示:
第一关:
第一关通关:
第二关:
总共就设计了两关,第二关通关后:
最后,控制台的显示:
//数据库设计
create database box_man; #创建数据库box_man
use box_man;
create table users( #创建用户表
id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
username varchar(64) NOT NULL UNIQUE,
password varchar(32) NOT NULL ,
level_id int default 1
);
create table levels( #创建关卡表
id int NOT NULL PRIMARY KEY default 1,
name varchar(64) NOT NULL UNIQUE,
map_row int NOT NULL,
map_column int NOT NULL,
map_data varchar(4096) NOT NULL,
next_level_id int default 0
);
insert into users values(1000, 'martin', md5('123456qweQWE'), 1);
insert into levels values(1,'牛刀小试',9,12,'0,0,0,0,0,0,0,0,0,0,0,0|0,1,0,1,1,1,1,1,1,1,0,0|0,1,4,1,0,2,1,0,2,1,0,0|0,1,0,1,0,1,0,0,1,1,1,0|0,1,0,2,0,1,1,4,1,1,1,0|0,1,1,1,0,3,1,1,1,4,1,0|0,1,2,1,1,4,1,1,1,1,1,0|0,1,0,0,1,0,1,1,0,0,1,0|0,0,0,0,0,0,0,0,0,0,0,0',0);
insert into levels values(2,'你永远都无法过关的地图',3,3,'0,0,0|0,3,0|0,0,0',0);
update levels set next_level_id=2 where id =1;
select * from levels;
update users set level_id = 1;
select * from users;
代码设计:
//database.h头文件
#pragma once
#include <string>
using namespace std;
#define DB_NAME "box_man"
#define DB_HOST "127.0.0.1"
#define DB_PORT 3306
#define DB_USER "root"
#define DB_USER_PASSWD "123456"//这里写自己数据库的密码
#define LINE 48 //数组行
#define COLUMN 48 //数组列
//用户信息
typedef struct _userinfo {
int id; //用户id
string username; //用户名
string passwd; //密码
int level_id; //关卡id
}userinfo;
bool fetch_user_info(userinfo& user);
typedef struct _levelinfo {
int id; //关卡的id
string name; //关卡的名字
int map_row; //地图总行数
int map_column; //地图总列数
string map_data; //二维地图数据
int next_level; //下一关卡的id
}levelinfo;
bool fetch_level_info(levelinfo& level, int level_id);
bool transform_map_db2array(levelinfo& level, int map[LINE][COLUMN]);
bool update_user_level(userinfo& user, int next_level_id);
//database.cpp源文件
#include"database.h"
#include<mysql.h>
#include<stdio.h>
static int debug = 1;
bool connect_db(MYSQL& mysql);
bool fetch_level_info(levelinfo& level, int level_id);
bool update_user_level(userinfo& user, int next_level_id);
/***************************************************
* *功能:通过用户名和密码从数据库获取用户信息
*输入:
* user - 用户信息结构体
*
*返回值:
* 获取成功返回true, 失败false
***************************************************/
bool fetch_user_info(userinfo& user) {
MYSQL mysql;
MYSQL_RES* res; //查询结果集
MYSQL_ROW row; //记录结构体
char sql[256];
bool ret = false;
//1.连接到数据库
if (connect_db(mysql) == false) {
return false;
}
//2.根据用户名和密码获取用户信息(id, level_id)
snprintf(sql, 256, "select id, level_id from users where username='%s' and password=md5('%s');", user.username.c_str(), user.passwd.c_str());
ret = mysql_query(&mysql, sql); //成功返回0
if (ret) {
printf("数据库查询出错,%s 错误原因: %s\n", sql, mysql_error(&mysql));
mysql_close(&mysql);
return false;
}
//3.获取结果
res = mysql_store_result(&mysql);
row = mysql_fetch_row(res);
if (row == NULL) {
//没有查找到记录
mysql_free_result(res);
mysql_close(&mysql)