windows程序设计——飞机大战笔记(数据库记录游戏得分)
来源:互联网 发布:动圈动铁圈铁 知乎 编辑:程序博客网 时间:2024/05/09 06:20
//////////////////2015/07/23////////////////
//////////////////by xbw//////////////////////
/////////////////环境 VS2013////////////
这个飞机大战呢,做了也有好几天了,我一半以上时间在鼓捣这个数据库,第一次弄,也学到了不少东西,在此记录一下,也分享一下经验;;
接着上次说吧,昨天呢,实现了多组数据的存储与调用,欣喜若狂,昨天就已经试验了这个对用户积分的储存,但是昨天不只失败了,而且把源程序毁了,还好再此贴了完整代码,很快恢复了,今天一想,如果有了账号的注册而没有得分的记录,那又有什么意义呢,于是又鼓捣起来;;终于好了;;
先说一下思路吧,,,,
这个得分要与账户匹配,就是把最终得分储存到当前的用户,这个呢,为了简单实现,我做了一个游戏结束储存记录的对话框,先看一下布局
这个得分呢,关闭了用户编辑的功能,游戏得分就是游戏得分嘛,不能乱改的,这个账号呢,就是当前玩家的账号,需要自行输入,只要输错了,就会把得分储存到其他用户中去了,唉,为了简单实现吧,暂时先不自动匹配了,一会在弄,就是这么个过程;
在实现过程中,还弄了好多囧事,谁让自己知识储备不够呢;
对于在不同cpp中的数据的相互传输让我大费周折,还建了好多类,不是重复定义就是这那的错误,鼓捣一上午还是不行,在查找资料时,发现了这个可以用全局变量解决,我的天,只用了一个extern int score;
extern ,唉,下边看主要代码吧;;;
为储存记录对话框新建的类jilu类,英语不好,没办法;
.cpp
// jilu.cpp : 实现文件//#pragma once#include "stdafx.h"#include "PlaneGame.h"#include "jilu.h"#include "afxdialogex.h"#include "afxdao.h"//#include "final.h"// jilu 对话框IMPLEMENT_DYNAMIC(jilu, CDialogEx)extern int score;jilu::jilu(CWnd* pParent /*=NULL*/): CDialogEx(jilu::IDD, pParent), m_score(0), zhongyu(_T("")){m_score = score;}jilu::~jilu(){}void jilu::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT2, m_score);DDX_Text(pDX, IDC_EDIT1, zhongyu);}BEGIN_MESSAGE_MAP(jilu, CDialogEx)ON_EN_CHANGE(IDC_EDIT2, &jilu::OnEnChangeEdit2)ON_BN_CLICKED(IDOK, &jilu::OnBnClickedOk)END_MESSAGE_MAP()// jilu 消息处理程序void jilu::OnEnChangeEdit2(){// TODO: 如果该控件是 RICHEDIT 控件,它将不// 发送此通知,除非重写 CDialogEx::OnInitDialog()// 函数并调用 CRichEditCtrl().SetEventMask(),// 同时将 ENM_CHANGE 标志“或”运算到掩码中。// TODO: 在此添加控件通知处理程序代码//CString str1;//CString str2;//CString str3;/*int a, b;GetDlgItemText(IDC_EDIT1, str1);GetDlgItemText(IDC_EDIT2, str2);a = _wtoi(str1);b = _wtoi(str2);for (int i = a; i <= b; i++){//UpdateData(true); if (i % 3 == 0){str3.Format(_T("%s %d"), str3, i);str3 += _T("\r\n");}//std::cout << std::endl;}*//*CString str3;int score = 100;str3;str3.Format(_T("%s %d"), str3,score);SetDlgItemText(IDC_EDIT2, str3);*/}void jilu::OnBnClickedOk(){CString Str;Str.Format(_T("%d"), score);UpdateData(true);//上一次视频里已经讲过,续及时更新数据CString Filepath = _T("Database.mdb");CDaoDatabase db;CDaoRecordset Dbset(&db);db.Open(Filepath);Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable"), 0);if (zhongyu.IsEmpty()){MessageBox(_T("信息不能为空!"), _T("温情提示"));}else{CString Sname;COleVariant var;// 字段类型var.ChangeType(VT_BSTR, NULL);int first = 1;while (!Dbset.IsEOF())// 有没有到表结尾{Dbset.GetFieldValue(_T("Name"), var);Sname = (LPCSTR)var.pbstrVal;if (Sname.Compare(zhongyu) == 0)//如果密码和账户与数据库一致{Dbset.Edit();Dbset.SetFieldValue(_T("Score"), _variant_t(Str));Dbset.Update();MessageBox(_T("纪录已储存"), _T("温情提示"));first = 0;break;}else{Dbset.MoveNext();}}if (first){MessageBox(_T("用户不存在"), _T("温情提示"));}}Dbset.Close();db.Close();// TODO: 在此添加控件通知处理程序代码}
.h
#pragma once// jilu 对话框//#include "final.h"class jilu : public CDialogEx{DECLARE_DYNAMIC(jilu)/*private:int fen;public:jilu(){};jilu(int a){ fen = a; }//int get(int a){ fen = a; }int get(){ return fen; }*/public:jilu(CWnd* pParent = NULL); // 标准构造函数virtual ~jilu();int mm_score=0;// 对话框数据enum { IDD = IDD_DIALOG3 };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持DECLARE_MESSAGE_MAP()public:int m_score;afx_msg void OnEnChangeEdit2();afx_msg void OnBnClickedOk();CString zhongyu;};
那个全局变量,放到我们该放的地方,,,就是游戏结束得分的地方,
int score = 0;int number = 0;int r_life = 10;void CPlaneGameView::UpdateFrame(CDC* pMemDC){//绘制天空/*pMemDC->FillSolidRect(0,0,GAME_WIDTH,GAME_HEIGHT,RGB(84, 142, 239));//绘制我方战机if(m_pMe!=NULL){m_pMe->Draw(m_pMemDC,FALSE);}else{ //Game OverCString str=_T("Game Over!");pMemDC->SetBkMode(TRANSPARENT);pMemDC->SetTextAlign(TA_CENTER);pMemDC->SetTextColor(RGB(255,0,0));pMemDC->TextOut(GAME_WIDTH/2,GAME_HEIGHT/2,str);}*///背景if (Back_y >= 0){CBitmap MemBitmap;MemBitmap.CreateCompatibleBitmap(m_pDC, GAME_WIDTH, 3072);m_pMemDC->SelectObject(&MemBitmap);image.Draw(*m_pMemDC, 0, 0, GAME_WIDTH, GAME_HEIGHT, 0, Back_y, GAME_WIDTH, GAME_HEIGHT);Back_y -= 1;}if (Back_y <= 0)Back_y = 2000;//绘制我方战机
就这个意思吧,放到该放的地方 就好了;;;;
这样呢,中间还有一些问题,再说一下,关于这个Access数据的,好几次给我弹出内存不足了,我想这是什么鬼,
经过实践发现了问题,这个变量类型必须要与储存的数据定义的变量要匹配,整数储存为字符就会内存不足,经验之谈,这个整型转字符型也找了一个函数,还不错,挺方便,
CString Str;
Str.Format(_T("%d"), score);
就这样了,经验之谈,分享给你们了,欢迎学习交流,提出指导性意见,谢谢啦!!!!
- windows程序设计——飞机大战笔记(数据库记录游戏得分)
- windows程序设计——飞机大战笔记(调用登陆数据库)
- windows程序设计——飞机大战笔记(Access数据库的使用)
- windows程序设计——飞机大战笔记(单文档文件登陆界面)
- windows程序设计——飞机大战笔记(解决输入混合密码账户,结局自动记录数据)
- Qt游戏编程——飞机大战
- 边做游戏边学android—2(飞机大战①创建飞机)
- 边做游戏边学android—3(飞机大战②飞机移动)
- Qt游戏编程——飞机大战——补充
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(1)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(2)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(3)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(4)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(5)
- 初学Android之飞机大战(一)——游戏菜单
- 飞机大战游戏(java实现)
- 线程游戏-飞机大战
- 飞机大战游戏
- Linux下完美卸载Oracle教程
- day08
- List之Union(),Intersect(),Except() 亦可以说是数学中的并集,交集,差集
- NSURL网络请求相关的错误
- ogre 天空与雾
- windows程序设计——飞机大战笔记(数据库记录游戏得分)
- UTC时间string转换成本地时间string
- 航迹推演(Odometry)
- [ASP.NET MVC 小牛之路]01 - 理解MVC模式
- 数据链路层和传输层可靠传输的超级困惑
- 在VMware虚拟机系统添加串口(使用物理串口)
- Pie
- 黑马程序员-迭代器
- 设计模式-装饰模式(Decorator Pattern)