windows程式設計——飛機大戰筆記(資料庫記錄遊戲得分)

來源:互聯網
上載者:User

標籤:

//////////////////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程式設計——飛機大戰筆記(資料庫記錄遊戲得分)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.