c/c++写推箱子游戏_并连接mysql数据库

项目展示:
在这里插入图片描述第一关:
在这里插入图片描述第一关通关:
在这里插入图片描述第二关:
在这里插入图片描述总共就设计了两关,第二关通关后:

在这里插入图片描述最后,控制台的显示:
在这里插入图片描述

//数据库设计
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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏过山河,踏过海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值