C++課程設計:五子棋_第1頁
C++課程設計:五子棋_第2頁
C++課程設計:五子棋_第3頁
C++課程設計:五子棋_第4頁
C++課程設計:五子棋_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.課 程 設 計 報 告 課程名稱:面向對象程序設計C+ 設計題目: 五子棋 專 業(yè): 計算機科學與技術 姓 名: 學 號: 指導教師: 李 曉 虹 2016 年 1 月 6 日1、系統(tǒng)需求分析 “五子棋”是一種歷史悠久,十分有趣,簡單實用的游戲。在中國,五子棋正越來越收人們的重視和歡迎,隨著網絡的日益普及,越來越多的人選擇網絡作為休閑娛樂的場所。因此,開發(fā)基于計算機的五子棋對弈符合人們的需求和休閑方式。 本程序設計為人與人之間的對弈,一方執(zhí)黑棋,一方執(zhí)白棋,每方都試圖在游戲結束前讓自己的五子相連,首先實現五子相連的一方獲勝。2、總體設計2.1 開發(fā)環(huán)境開發(fā)環(huán)境:visual c+ 6.0開發(fā)

2、語言:MFC+C/C+操作系統(tǒng):windows7/XP2.2 系統(tǒng)流程分析2.2.1 流程圖圖2-13、詳細設計實現該功能的代碼如下:/ 五子棋View.cpp : implementation of the CMyView class/#include "stdafx.h"#include "五子棋.h"#include "五子棋Doc.h"#include "五子棋View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_

3、FILE = _FILE_;#endif/struct qiziint x;int y; int ishei; /1表示存在,0表示不存在int isbai; /1表示存在,0表示不存在q1515;/ CMyViewIMPLEMENT_DYNCREATE(CMyView, CView)BEGIN_MESSAGE_MAP(CMyView, CView)/AFX_MSG_MAP(CMyView)ON_WM_ERASEBKGND()ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()/AFX_MSG_MAP/ Standard printing commandsON_COMMAN

4、D(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CMyView construction/destructionCMyView:CMyView()/ TODO: add construction code herem_p=1;for(int i=0;i<15;i+)for(int j=0;j<15;j+)q

5、ij.x=40+40*j;qij.y=40+40*i;qij.ishei=0;qij.isbai=0;CMyView:CMyView()BOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CMyView drawingvoid CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocum

6、ent();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCPen pen(PS_SOLID,5,RGB(0,0,0);CBrush Brush=RGB(0,0,0);CBrush *oldBrush=pDC->SelectObject(&Brush);CPen *oldpen=pDC->SelectObject(&pen);for(int i=0;i<15;i+) / 畫行線pDC->MoveTo(40,40+40*i);pDC->LineTo(600,40+40*i);

7、for(int j=0;j<15;j+) / 畫列線pDC->MoveTo(40+40*j,40);pDC->LineTo(40+40*j,600);pDC->Ellipse(q55.x-5,q55.y-5,q55.x+5,q55.y+5);pDC->Ellipse(q77.x-5,q77.y-5,q77.x+5,q77.y+5);pDC->Ellipse(q59.x-5,q59.y-5,q59.x+5,q59.y+5);pDC->Ellipse(q95.x-5,q95.y-5,q95.x+5,q95.y+5);pDC->Ellipse(q99.

8、x-5,q99.y-5,q99.x+5,q99.y+5);pDC->SelectObject(oldpen);pDC->SelectObject(oldBrush);CPen pen1(PS_SOLID,5,RGB(255,0,0);CPen *oldpen1=pDC->SelectObject(&pen1);pDC->SetBkColor(RGB(240,150,100); /設置字體背景色pDC->TextOut(270,10,"郝磊的五子棋");pDC->SelectObject(oldpen1);/ CMyView pri

9、ntingBOOL CMyView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CMyView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CMyView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add clean

10、up after printing/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCView:AssertValid();void CMyView:Dump(CDumpContext& dc) constCView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocum

11、ent;#endif /_DEBUG/ CMyView message handlersBOOL CMyView:OnEraseBkgnd(CDC* pDC) / TODO: Add your message handler code here and/or call defaultCBrush Brush=RGB(240,150,100); / 背景色CBrush *oldBrush=pDC->SelectObject(&Brush);CRect rc;pDC->GetClipBox(&rc);pDC->PatBlt(rc.top,rc.left,rc.Wi

12、dth(),rc.Height(),PATCOPY);pDC->SelectObject(oldBrush);AfxGetMainWnd()->SetWindowPos(NULL,300,0,660,720,NULL); /調整窗體大小mciSendString("open chongerfei.wav alias start",NULL,0,NULL); /循環(huán)播放音樂mciSendString("play start",NULL,0,NULL);return true;return CView:OnEraseBkgnd(pDC);void

13、 CMyView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultSetCapture();m_pos=point;paint(); / 畫棋子ifwin(); / 判斷輸贏CView:OnLButtonDown(nFlags, point);void CMyView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/

14、or call defaultReleaseCapture();CView:OnLButtonUp(nFlags, point);void CMyView:paint()CDC *pDC=GetDC();CPoint p=panduan();if(p.x=0&&p.y=0)return;if(m_p%2=1) /黑棋下CBrush Brush1=RGB(0,0,0);CBrush *oldBrush1=pDC->SelectObject(&Brush1);if(q(p.y-40)/40(p.x-40)/40.ishei=0&&q(p.y-40)/4

15、0(p.x-40)/40.isbai=0)sndPlaySound("q.wav",SND_ASYNC);pDC->Ellipse(p.x-15,p.y-15,p.x+15,p.y+15);q(p.y-40)/40(p.x-40)/40.ishei=1;m_p=m_p+1;pDC->SelectObject(oldBrush1);else /白棋下CBrush Brush2=RGB(255,255,255);CBrush *oldBrush2=pDC->SelectObject(&Brush2);pDC->SelectStockObject(

16、WHITE_PEN);if(q(p.y-40)/40(p.x-40)/40.ishei=0&&q(p.y-40)/40(p.x-40)/40.isbai=0)sndPlaySound("q.wav",SND_ASYNC);pDC->Ellipse(p.x-15,p.y-15,p.x+15,p.y+15);q(p.y-40)/40(p.x-40)/40.isbai=1;m_p=m_p+1;pDC->SelectStockObject(BLACK_PEN);pDC->SelectObject(oldBrush2);CPoint CMyView:

17、panduan()CPoint p(0,0);int i,j;for(i=0;i<15;i+)for(j=0;j<15;j+)if(qij.x-15<=m_pos.x)&&(m_pos.x<=qij.x+15)&&(qij.y-15<=m_pos.y)&&(m_pos.y<=qij.y+15)p.x=qij.x;p.y=qij.y;return p;void CMyView:ifwin()CDC *pDC=GetDC();int i,j;for(i=0;i<15;i+)for(j=0;j<15;j+

18、)if(qij.ishei=1) / 判斷黑棋是否贏CPen pen(PS_SOLID,10,RGB(0,0,0);CPen *oldpen=pDC->SelectObject(&pen);if(qij-2.ishei=1)&&(qij-1.ishei=1)&&(qij+1.ishei=1)&&(qij+2.ishei=1) /行pDC->MoveTo(qij-2.x,qij-2.y);pDC->LineTo(qij+2.x,qij+2.y);mciSendString("close start",N

19、ULL,0,NULL);AfxMessageBox("游戲結束!n黑方贏!");if(qi-2j.ishei=1)&&(qi-1j.ishei=1)&&(qi+1j.ishei=1)&&(qi+2j.ishei=1) /列pDC->MoveTo(qi-2j.x,qi-2j.y);pDC->LineTo(qi+2j.x,qi+2j.y);mciSendString("close start",NULL,0,NULL);AfxMessageBox("游戲結束!n黑方贏!");if

20、(qi-2j-2.ishei=1)&&(qi-1j-1.ishei=1)&&(qi+1j+1.ishei=1)&&(qi+2j+2.ishei=1) /主對角線pDC->MoveTo(qi-2j-2.x,qi-2j-2.y);pDC->LineTo(qi+2j+2.x,qi+2j+2.y);mciSendString("close start",NULL,0,NULL);AfxMessageBox("游戲結束!n黑方贏!");if(qi+2j-2.ishei=1)&&(qi+1j

21、-1.ishei=1)&&(qi-1j+1.ishei=1)&&(qi-2j+2.ishei=1) /副對角線pDC->MoveTo(qi+2j-2.x,qi+2j-2.y);pDC->LineTo(qi-2j+2.x,qi-2j+2.y);mciSendString("close start",NULL,0,NULL);AfxMessageBox("游戲結束!n黑方贏!");pDC->SelectObject(oldpen);if(qij.isbai=1) / 判斷白棋是否贏CPen pen(PS_SO

22、LID,10,RGB(255,255,255);CPen *oldpen=pDC->SelectObject(&pen);if(qij-2.isbai=1)&&(qij-1.isbai=1)&&(qij+1.isbai=1)&&(qij+2.isbai=1)pDC->MoveTo(qij-2.x,qij-2.y);pDC->LineTo(qij+2.x,qij+2.y);mciSendString("close start",NULL,0,NULL);AfxMessageBox("游戲結束!

23、n白方贏!");if(qi-2j.isbai=1)&&(qi-1j.isbai=1)&&(qi+1j.isbai=1)&&(qi+2j.isbai=1) /列pDC->MoveTo(qi-2j.x,qi-2j.y);pDC->LineTo(qi+2j.x,qi+2j.y);mciSendString("close start",NULL,0,NULL);AfxMessageBox("游戲結束!n白方贏!");if(qi-2j-2.isbai=1)&&(qi-1j-1.i

24、sbai=1)&&(qi+1j+1.isbai=1)&&(qi+2j+2.isbai=1) /主對角線pDC->MoveTo(qi-2j-2.x,qi-2j-2.y);pDC->LineTo(qi+2j+2.x,qi+2j+2.y);mciSendString("close start",NULL,0,NULL);AfxMessageBox("游戲結束!n白方贏!");if(qi+2j-2.isbai=1)&&(qi+1j-1.isbai=1)&&(qi-1j+1.isbai=1)&&(qi-2j+2.isbai=1) /副對角線pDC->MoveTo(qi+2j-2.x,qi+2j-2.y);pDC->LineTo(qi-2j+2.x,qi-2j+2.y);mciSendString("close start",NULL,0,NULL);AfxMessageBox("游戲結束!n白方贏!");pDC->SelectObject(oldpen);判斷輸贏的主要代碼

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論