windows程序设计——飞机大战笔记(数据库记录游戏得分)

//////////////////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 Over
	CString 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);

就这样了,经验之谈,分享给你们了,欢迎学习交流,提出指导性意见,谢谢啦!!!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 22:22:02

windows程序设计——飞机大战笔记(数据库记录游戏得分)的相关文章

windows程序设计——飞机大战笔记(单文档文件登陆界面)

//////////////2015/07/21//////////////// /////////////by xbw/////////////////////// /////////////环境 VS 2013//////////// 飞机大战做的差不多了,闲来无事加点高大上的东西,关于单文档的登陆界面::: 界面有点丑,但是足够账号登陆了,,先试一把: 还不错吧,该有的都有了:: 下面说一下过程 ...... 首先,我们要在资源视图中创建一个Dialog对话框::: 先大体画一下这个对话框

windows程序设计——飞机大战笔记(Access数据库的使用)

//////////////////2015/07/22/////////////////// /////////////////by xbw ///////////////////////// ////////////////环境 VS2013///////////////// 为了登陆界面的注册用的数据库鼓捣的一天了,必须得写篇文章发泄一下了, 昨天发表的文章还是存在一点bug的,不足之处很容易就看出来了,这样的,今天有修改了一下,是大改哦 int first = 1; while (!Db

windows程序设计——飞机大战笔记(解决输入混合password账户,结局自己主动记录数据)

////////////////////2015/07/23/////////////////// ////////////////////by xbw/////////////////////////// ////////////////////环境 VS2013/////////////// 问题又攻克了,攻克了登陆仅仅能用数字登陆的问题.还有自己主动记录数据的问题.. 这个仅仅能用数字登陆是后来调试出来的bug,之前没想到.为了调试方便,仅仅用了账号为1.password为1来測试的,如今

windows程序设计——飞机大战笔记(解决输入混合密码账户,结局自动记录数据)

////////////////////2015/07/23/////////////////// ////////////////////by xbw/////////////////////////// ////////////////////环境 VS2013/////////////// 问题又解决了,解决了登陆只能用数字登陆的问题,还有自动记录数据的问题:: 这个只能用数字登陆是后来调试出来的bug,之前没想到,为了调试方便,只用了账号为1,密码为1来测试的,现在才发现问题,,,其实只

Java飞机大战源代码

刚学不久java,做了一个飞机大战的小小小小游戏,现在把这个思路总结以及代码分享出来.大佬别吐槽(emmmmmm .....开发环境:jdk1.7 开发工具:eclipese PlanelJPanel.java 1 package project02; 2 3 import java.awt.BasicStroke; 4 import java.awt.Color; 5 import java.awt.Cursor; 6 import java.awt.Font; 7 import java.a

[知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)

整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能进行基本操作了. 敌机对象的实现,并且初步完成了boos出现(30s自动出现).然后又引出了许多方法的处理,如英雄子弹击中敌机和boos,英雄与敌机相撞等等.并一一解决. 随后又设置了一些游戏的参数,如血量,关卡数,等级,积分,必杀,道具对象等等. 最后又完成了一些辅助功能,暂停游戏,继续游戏,退出

cocos2dx游戏开发&mdash;&mdash;微信打飞机学习笔记(三)&mdash;&mdash;WelcomeScene的搭建

一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何划分好游戏的场景,是开始动手做游戏的第一步. 3.一个场景会有很多层,用来处理场景不同的功能. 4.而精灵则是最小的单位,比如子弹,飞机,敌机都是一个个的精灵所组成的.   二.WelcomeScene的搭建: 1.场景和层的二种搭建方法: (1)一种就是跟HelloWorld示例一样的方法,以一个

cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备

一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x GitHub主页中克隆Develop分支:https://github.com/cocos2d/cocos2d-x •配置Python 2.7 环境:http://www.python.org/download/releases/ •建议IDE:Visual Studio 2013 •运行cocos2

微信飞机大战游戏开发

原文出自:方杰|http://fangjie.sinaapp.com/?p=366转载请注明出处 这学期上了一学期的Windows游戏开发课程,学期末的时候所以决定做一个微信飞机大战的小游戏. 不同于微信手机上的飞机大战,这是一个Win32平台下游戏.Win32项目,VS2008开发平台,利用我的老师写的TinyEngine微型游戏引擎开发. TinyEngine引擎的相关源码及介绍参见:https://github.com/JayFang1993/TinyEngine 飞机大战游戏的相关源码参