版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
18/18C++課程實訓系別:軟件學院班級:軟工一班姓名:趙波//貪吃蛇Dlg。cpp:implementationfile//#include"stdafx.h"#include”貪吃蛇.h"#include"貪吃蛇Dlg。h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstat(yī)iccharTHIS_FILE[]=__FILE__;#endif//定義全局變量的結構體structsnakeabout//其他相關參數(shù){ intx,y;//食物坐標 boolisabt;//食物是否顯示,1為不顯示食物,0為顯示食物?intspend;//等級記錄1為初級,2為中級,3為高級?intlen;//蛇的長度初始為3節(jié),最長為49節(jié) intstatus;//游戲狀態(tài)1為未開始,2為運行,3為暫停 intmode;//游戲類型記錄1為空地,2為方盒,3為格子?intclor;//顏色選擇1為灰色,2為白色,3為橙色 intdirection;//方向1為上,2為下,3為左,4為右}abt;structsnakes//蛇身體相關{ intx,y;//每節(jié)蛇的坐標}Snake[51];//最多51節(jié)///////////////////////////////////////////////////////////////////////////////CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialog{public: CAboutDlg();//DialogData //{{AFX_DATA(CAboutDlg)?enum{IDD=IDD_ABOUTBOX};?//}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides?//{{AFX_VIRTUAL(CAboutDlg)?protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport?//}}AFX_VIRTUAL//Implementationprotected:?//{{AFX_MSG(CAboutDlg) //}}AFX_MSG?DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){?//{{AFX_DATA_INIT(CAboutDlg)?//}}AFX_DATA_INIT}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog) //{{AFX_MSG_MAP(CAboutDlg) ?//Nomessagehandlers //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CMyDlgdialogCMyDlg::CMyDlg(CWnd*pParent/*=NULL*/) :CDialog(CMyDlg::IDD,pParent){ //{{AFX_DATA_INIT(CMyDlg)? //NOTE:theClassWizardwilladdmemberinitializationhere //}}AFX_DATA_INIT //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32?m_hIcon=AfxGetApp()—>LoadIcon(IDR_MAINFRAME);}voidCMyDlg::DoDataExchange(CDat(yī)aExchange*pDX){?CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDlg) //NOTE:theClassWizardwilladdDDXandDDVcallshere //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMyDlg,CDialog) //{{AFX_MSG_MAP(CMyDlg)?ON_WM_SYSCOMMAND() ON_WM_PAINT()?ON_WM_QUERYDRAGICON()?ON_WM_TIMER() ON_COMMAND(IDM_STARY,OnStary)?ON_COMMAND(IDM_PAUSE,OnPause) ON_COMMAND(IDM_CONTINUE,OnContinue)?ON_COMMAND(IDM_S1,OnS1) ON_COMMAND(IDM_S2,OnS2)?ON_COMMAND(IDM_S3,OnS3) ON_COMMAND(IDM_MAX,OnMax)?ON_COMMAND(IDM_EXIT,OnExit) ON_COMMAND(IDM_AREA,OnArea)?ON_COMMAND(IDM_BOX,OnBox) ON_COMMAND(IDM_ROOM,OnRoom) ON_COMMAND(IDM_WHITE,OnWhite) ON_COMMAND(IDM_GREY,OnGrey) ON_COMMAND(IDM_ORANGE,OnOrange)?ON_COMMAND(IDM_HELP,OnHelp)?ON_COMMAND(IDM_ABOUT,OnAbout)?//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CMyDlgmessagehandlersBOOLCMyDlg::OnInitDialog(){?CDialog::OnInitDialog();?//Add"About。。。"menuitemtosystemmenu。?//IDM_ABOUTBOXmustbeinthesystemcommandrange. ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);?ASSERT(IDM_ABOUTBOX<0xF000);?CMenu*pSysMenu=GetSystemMenu(FALSE);?if(pSysMenu!=NULL)?{ CStringstrAboutMenu; ?strAboutMenu。LoadString(IDS_ABOUTBOX);? if(!strAboutMenu。IsEmpty())??{ ?pSysMenu—>AppendMenu(MF_SEPARATOR);? ?pSysMenu-〉AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);? } }?//Settheiconforthisdialog。Theframeworkdoesthisautomat(yī)ically?//whentheapplicat(yī)ion'smainwindowisnotadialog SetIcon(m_hIcon,TRUE); //Setbigicon SetIcon(m_hIcon,F(xiàn)ALSE); //Setsmallicon? //初始默認值?CMenu*p=GetMenu();? //獲得菜單窗口 CMenu*pm=p—>GetSubMenu(0);//獲得第一級菜單下拉ID pm->EnableMenuItem(IDM_S1,MF_GRAYED);//設置暫停按鈕不可用 CMenu*pn=p-〉GetSubMenu(1);//獲得第一級菜單下拉ID pn->EnableMenuItem(IDM_AREA,MF_GRAYED);//設置空地按鈕不可用 CMenu*ps=p—〉GetSubMenu(2);//獲得第二級菜單下拉ID ps-〉EnableMenuItem(IDM_WHITE,MF_GRAYED);//設置白色按鈕不可用?abt.spend=1;//等級為初級 abt.mode=1;//類型為空地 abt。clor=1;//顏色為灰色?abt.direction=3;//設置游戲開始時,蛇向左移動?//TODO:Addextrainitializationhere returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCMyDlg::OnSysCommand(UINTnID,LPARAMlParam){?if((nID&0xFFF0)==IDM_ABOUTBOX)?{??CAboutDlgdlgAbout; ?dlgAbout.DoModal();?}?else?{ CDialog::OnSysCommand(nID,lParam); }}//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,//thisisautomaticallydoneforyoubytheframework.voidCMyDlg::OnPaint(){?if(IsIconic())?{ ?CPaintDCdc(this);//devicecontextforpainting? SendMessage(WM_ICONERASEBKGND,(WPARAM)dc。GetSafeHdc(),0);??//Centericoninclientrectangle ?intcxIcon=GetSystemMetrics(SM_CXICON);??intcyIcon=GetSystemMetrics(SM_CYICON);??CRectrect; GetClientRect(&rect); intx=(rect.Width()-cxIcon+1)/2; inty=(rect.Height()-cyIcon+1)/2; //Drawtheicon dc。DrawIcon(x,y,m_hIcon); }?else { CMenu*p=GetMenu(); ?//獲得菜單? CMenu*pm=p->GetSubMenu(0);//獲得第一級菜單下拉ID? pm—>EnableMenuItem(IDM_PAUSE,MF_GRAYED);//設置暫停按鈕不可用??pm->EnableMenuItem(IDM_CONTINUE,MF_GRAYED);//設置繼續(xù)按鈕不可用? pm-〉ModifyMenu(0,MF_BYPOSITION,IDM_STARY,”開始游戲");//修改菜單《重新開始》文字,變成《開始游戲》文字? GetDlgItem(IDC_STATIC)—〉SetWindowText("貪吃蛇”);//回復靜態(tài)文本文字顯示 ???Snake[0].x=7;//初始蛇頭x坐標? Snake[0]。y=7;//初始蛇頭y坐標 ?Snake[1]。x=8;//初始蛇身x坐標??Snake[1].y=7;//初始蛇身y坐標 Snake[2]。x=9;//初始蛇尾x坐標 ?Snake[2].y=7;//初始蛇尾y坐標 ?abt.status=1;//初始化游戲狀態(tài)(為未開始狀態(tài))??abt.len=3;//初始化蛇的長度 abt。isabt=1;//初始化為無食物? if(abt。clor==1)OnWhite();//背景為白色 elseif(abt。clor==2)OnGrey();//背景為灰色? elseOnOrange();//背景為橙色 if(abt.mode==1)OnArea();//空地類型 elseif(abt.mode==2)OnBox();//方盒模式? elseOnRoom();//格子模式 CDialog::OnPaint();?}}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theminimizedwindow.HCURSORCMyDlg::OnQueryDragIcon(){ return(HCURSOR)m_hIcon;}voidCMyDlg::OnTimer(UINTnIDEvent)//時間軸{ if(abt.spend==1)SetTimer(1,280,NULL);//選擇初級時的速度設置 if(abt。spend==2)SetTimer(1,180,NULL);//選擇中級時的速度設置?if(abt.spend==3)SetTimer(1,90,NULL);//選擇高級時的速度設置 OnAway();//調用移動行走函數(shù) OnFood();//食物判斷函數(shù) OnDelet();//判斷結束函數(shù) ?////////////////////////////////////////////////設置模式顯示?CStringxs; CStringms,jb,gk,clo; if(abt.spend==1)jb=”初級"; elseif(abt.spend==2)jb=”中級"; elsejb="高級”; if(abt.mode==1)gk="自由模式:空地";?elseif(abt.mode==2)gk=”自由模式:方盒”; elseif(abt。mode==3)gk=”自由模式:格子"; elsegk="<戰(zhàn)役模式>";?if(abt.clor==1)clo="白色"; elseif(abt.clor==2)clo=”灰色"; elseclo=”橙色"; xs。Format("游戲狀態(tài):%s%s%s%s",ms,jb,gk,clo);?GetDlgItem(IDC_STATIC)-〉SetWindowText(xs);//為防止蛇經過時把靜態(tài)文本線覆蓋所增加的設置靜態(tài)文本框文字刷新,已達到刷新靜態(tài)文本 ////////////////////////////////////////////////設置模式顯示 ?CDialog::OnTimer(nIDEvent);}BOOLCMyDlg::PreTranslateMessage(MSG*pMsg)//鍵盤控制{ if(pMsg-〉message==WM_KEYDOWN)//獲取鍵盤 ?switch(pMsg-〉wParam)//鍵盤按鍵 { ??caseVK_UP:if(abt.direction!=2)abt.direction=1;break;//按上? caseVK_DOWN:if(abt。direction!=1)abt。direction=2;break;//按下 ?caseVK_LEFT:if(abt。direction!=4)abt。direction=3;break;//按左? ?caseVK_RIGHT:if(abt.direction!=3)abt。direction=4;break;//按右?? caseVK_SPACE:if(abt.status==1)OnStary();elseif(abt.status==2)OnPause();elseOnContinue();break;//按空格 ? caseVK_NUMPAD1:if(abt.spend!=1)OnS1();break;//按小鍵盤數(shù)字1,可以設置為初級 ??caseVK_NUMPAD2:if(abt.spend!=2)OnS2();break;//按小鍵盤數(shù)字2,可以設置為中級 ??caseVK_NUMPAD3:if(abt。spend!=3)OnS3();break;//按小鍵盤數(shù)字3,可以設置為高級???caseVK_NUMPAD4:if(abt.spend!=3)OnArea();break;//按小鍵盤數(shù)字4,可以設置為空地???caseVK_NUMPAD5:if(abt.spend!=3)OnBox();break;//按小鍵盤數(shù)字5,可以設置為方盒?? caseVK_NUMPAD6:if(abt。spend!=3)OnRoom();break;//按小鍵盤數(shù)字6,可以設置為格子?? caseVK_NUMPAD7:if(abt。clor!=1)OnWhite();break;//按小鍵盤數(shù)字7,可以設置為白色???caseVK_NUMPAD8:if(abt。clor!=2)OnGrey();break;//按小鍵盤數(shù)字8,可以設置為灰色? ?caseVK_NUMPAD9:if(abt.clor!=3)OnOrange();break;//按小鍵盤數(shù)字9,可以設置為橙色 }?returnCDialog::PreTranslat(yī)eMessage(pMsg);}voidCMyDlg::OnStary()//開始按鈕{ CMenu*p=GetMenu();//獲取菜單ID?CMenu*pm=p->GetSubMenu(0);//獲取菜單第一級ID if(abt。status==1)//判斷是否是為未開始狀態(tài) {? SetTimer(1,200,NULL);//設置游戲等待0.2秒開始 GetDlgItem(IDC_STATIC)—>SetWindowText("0.2秒后游戲開始”);//修改提示? GetMenu()—>GetSubMenu(0)-〉ModifyMenu(0,MF_BYPOSITION,IDM_STARY,"重新開始");//修改菜單《開始游戲》文字,變成《重新開始》文字 ?pm->EnableMenuItem(IDM_PAUSE,MF_ENABLED);//由于游戲開始,則讓暫停鍵可用? abt.status=2;//設置游戲狀態(tài)為開始后未暫停狀態(tài)?}?else?{? KillTimer(1);//停止程序時間跳動 pm->EnableMenuItem(IDM_PAUSE,MF_GRAYED);//由于重新開始,則設置暫停鍵不可用??pm->EnableMenuItem(IDM_CONTINUE,MF_GRAYED);//由于重新開始,則設置繼續(xù)鍵不可使用 ?OnPaint();//游戲重新進入 }}voidCMyDlg::OnPause()//暫停按鈕{ CMenu*p=GetMenu();//獲取菜單ID CMenu*pm=p-〉GetSubMenu(0);//獲取菜單第一級ID?if(abt.status==2)//判斷是否是為開始狀態(tài)?{ KillTimer(1);//停止程序時間跳動 GetDlgItem(IDC_STATIC)-〉SetWindowText(”暫停游戲");//修改提示 pm—〉EnableMenuItem(IDM_PAUSE,MF_GRAYED);//由于使用完暫停,則設置暫停鍵不可用 pm—>EnableMenuItem(IDM_CONTINUE,MF_ENABLED);//由于使用暫停,則設置繼續(xù)鍵可使用??abt。stat(yī)us=3;//設置當前狀態(tài)為開始后暫停未繼續(xù)狀態(tài)?} }voidCMyDlg::OnContinue()//繼續(xù)按鈕{?CMenu*p=GetMenu();//獲取菜單ID CMenu*pm=p-〉GetSubMenu(0);//獲取菜單第一級ID if(abt.status==3)//判斷是否是為暫停狀態(tài) { ?SetTimer(1,200,NULL);//開始程序時間跳動??GetDlgItem(IDC_STATIC)—>SetWindowText("0。2秒后游戲繼續(xù)”);//修改提示??pm->EnableMenuItem(IDM_CONTINUE,MF_GRAYED);//由于使用完繼續(xù),則設置繼續(xù)鍵不可用 ?pm—〉EnableMenuItem(IDM_PAUSE,MF_ENABLED);//由于使用完繼續(xù),則設置暫停鍵可用??abt.status=2;//設置游戲狀態(tài)為開始未暫停狀態(tài)?}?}voidCMyDlg::OnS1()//初級{?CMenu*p=GetMenu(); //獲得菜單窗口 CMenu*pm=p-〉GetSubMenu(0);//獲得第一級菜單下拉ID pm—>EnableMenuItem(IDM_S1,MF_GRAYED);//設置初級按鈕不可用 pm—>EnableMenuItem(IDM_S2,MF_ENABLED);//設置中級按鈕可用 pm->EnableMenuItem(IDM_S3,MF_ENABLED);//設置高級按鈕可用?KillTimer(1);//暫停游戲 abt.spend=1;//改為初級值?OnPaint();//回到初始狀態(tài)}voidCMyDlg::OnS2()//中級{ CMenu*p=GetMenu(); ?//獲得菜單窗口 CMenu*pm=p->GetSubMenu(0);//獲得第一級菜單下拉ID pm->EnableMenuItem(IDM_S1,MF_ENABLED);//設置初級按鈕可用 pm->EnableMenuItem(IDM_S2,MF_GRAYED);//設置中級按鈕不可用?pm->EnableMenuItem(IDM_S3,MF_ENABLED);//設置高級按鈕可用?KillTimer(1);//暫停游戲 abt.spend=2;//改為中級?OnPaint();//回到初始狀態(tài)}voidCMyDlg::OnS3()//高級{ CMenu*p=GetMenu();??//獲得菜單窗口 CMenu*pm=p->GetSubMenu(0);//獲得第一級菜單下拉ID?pm-〉EnableMenuItem(IDM_S1,MF_ENABLED);//設置初級按鈕可用 pm-〉EnableMenuItem(IDM_S2,MF_ENABLED);//設置中級按鈕可用?pm->EnableMenuItem(IDM_S3,MF_GRAYED);//設置高級按鈕不可用 KillTimer(1);//暫停游戲? abt。spend=3;//改為高級 OnPaint();//回到初始狀態(tài)}voidCMyDlg::OnMax()//最大值{?KillTimer(1);//暫停游戲 GetDlgItem(IDC_STATIC)—>SetWindowText("暫停游戲");//修改提示?FILE*fp;//由于使用C++文件找不到直接讀取整數(shù)的方法,所以改為用C語言操作文件 if(!(fp=fopen("max","rb”)))//若沒有文件記錄高分則設置彈出都為空 {? MessageBox(”初級:0\n中級:0\n高級:0");?}?else {??CStringmax;//定義提示框提示所用的字符串? intm1,m2,m3;//接受文件提供的三個級別最高分數(shù) fscanf(fp,"%d,%d,%d",&m1,&m2,&m3);//獲取文件三個整數(shù) max。Format("初級:%d\n中級:%d\n高級:%d\n”,m1,m2,m3);//設置彈出框內容 ?MessageBox(max,”英雄榜”);//彈出框提示三個級別不同的最高分??fclose(fp);//關閉文件 } }voidCMyDlg::OnExit()//結束{exit(1);?}voidCMyDlg::OnArea()//空地{ CMenu*p=GetMenu();? //獲得菜單窗口 CMenu*pm=p->GetSubMenu(1);//獲得第一級菜單下拉ID?pm->EnableMenuItem(IDM_AREA,MF_GRAYED);//設置暫停按鈕不可用 pm—>EnableMenuItem(IDM_BOX,MF_ENABLED);//設置暫停按鈕可用 pm->EnableMenuItem(IDM_ROOM,MF_ENABLED);//設置暫停按鈕可用 abt.mode=1;//修改類型 refurbich();//刷新}voidCMyDlg::OnBox(){ CMenu*p=GetMenu();??//獲得菜單窗口?CMenu*pm=p—>GetSubMenu(1);//獲得第一級菜單下拉ID?pm—>EnableMenuItem(IDM_AREA,MF_ENABLED);//設置暫停按鈕可用?pm->EnableMenuItem(IDM_BOX,MF_GRAYED);//設置暫停按鈕不可用?pm-〉EnableMenuItem(IDM_ROOM,MF_ENABLED);//設置暫停按鈕可用 abt.mode=2;//修改類型?refurbich();//刷新?CDC*pDC=GetDC();//獲取窗口對象 CBrushmode1=(RGB(0,0,0)); //設置方盒的顏色?CBrush*mode11=pDC—>SelectObject(&mode1);//替換當前樣式 for(intmd1=1;md1〈=18;md1++)//繪制方盒 {??pDC-〉Rectangle(md1*20,1*20,(md1+1)*20,2*20); pDC->Rectangle(md1*20,13*20,(md1+1)*20,14*20);?} for(intmd11=1;md11<=13;md11++)?{? pDC->Rectangle(0*20,md11*20,1*20,(md11+1)*20);? pDC—>Rectangle(18*20,md11*20,19*20,(md11+1)*20);?}?pDC-〉SelectObject(mode1);}voidCMyDlg::OnRoom(){?CMenu*p=GetMenu(); ?//獲得菜單窗口?CMenu*pm=p->GetSubMenu(1);//獲得第一級菜單下拉ID pm—>EnableMenuItem(IDM_AREA,MF_ENABLED);//設置暫停按鈕可用 pm—〉EnableMenuItem(IDM_BOX,MF_ENABLED);//設置暫停按鈕可用?pm-〉EnableMenuItem(IDM_ROOM,MF_GRAYED);//設置暫停按鈕不可用 abt.mode=3;//修改類型?refurbich();//刷新?CDC*pDC=GetDC();//獲取窗口對象 CBrushmode1=(RGB(0,0,0));?//設置顏色(黑)?CBrush*mode11=pDC->SelectObject(&mode1);?for(intmd1=0;md1<=18;md1++)//繪制格子 { ?if(md1<7)pDC—〉Rectangle(md1*20,12*20,(md1+1)*20,13*20);? if(md1>10)pDC->Rectangle(md1*20,2*20,(md1+1)*20,3*20); }?for(intmd11=1;md11〈=14;md11++) {? if(md11<7)pDC—>Rectangle(6*20,md11*20,7*20,(md11+1)*20);??if(md11〉7)pDC-〉Rectangle(11*20,md11*20,12*20,(md11+1)*20); }?pDC->SelectObject(mode1);}voidCMyDlg::OnWhite(){?CMenu*p=GetMenu();? //獲得菜單窗口?CMenu*pm=p->GetSubMenu(2);//獲得第一級菜單下拉ID pm->EnableMenuItem(IDM_WHITE,MF_GRAYED);//設置白色按鈕不可用 pm->EnableMenuItem(IDM_GREY,MF_ENABLED);//設置灰色按鈕可用 pm—〉EnableMenuItem(IDM_ORANGE,MF_ENABLED);//設置橙色按鈕可用?abt.clor=1;//修改顏色值 refurbich();//刷新}voidCMyDlg::OnGrey(){ CMenu*p=GetMenu(); ?//獲得菜單窗口 CMenu*pm=p->GetSubMenu(2);//獲得第一級菜單下拉ID?pm->EnableMenuItem(IDM_WHITE,MF_ENABLED);//設置暫停按鈕可用 pm—>EnableMenuItem(IDM_GREY,MF_GRAYED);//設置暫停按鈕不可用 pm-〉EnableMenuItem(IDM_ORANGE,MF_ENABLED);//設置暫停按鈕可用 abt。clor=2;//修改顏色值 refurbich();//刷新?OnSnake();//繪制蛇}voidCMyDlg::OnOrange()//橙色{ CMenu*p=GetMenu(); ?//獲得菜單窗口 CMenu*pm=p->GetSubMenu(2);//獲得第一級菜單下拉ID?pm->EnableMenuItem(IDM_WHITE,MF_ENABLED);//設置暫停按鈕可用?pm->EnableMenuItem(IDM_GREY,MF_ENABLED);//設置暫停按鈕可用?pm-〉EnableMenuItem(IDM_ORANGE,MF_GRAYED);//設置暫停按鈕不可用 abt.clor=3;//修改顏色值 refurbich();//刷新 OnSnake();//繪制蛇}voidCMyDlg::OnHelp()//幫助{?MessageBox(”按上,下,左,右控制蛇前進方向\n按空格控制蛇開始,暫停與繼續(xù)\n吃掉食物,同時避開障礙物。”,"貪食蛇操作說明”);}voidCMyDlg::OnAbout()//關于{?MessageBox(”嘿嘿","關于貪吃蛇");?}voidCMyDlg::OnFood(){ CDC*pDC=GetDC();//獲取對話框 ? if(Snake[0].x*20==abt.x*20&&Snake[0].y*20==abt。y*20)//判斷吃豆的條件,撞到就吃 {?? abt.isabt=1;//食物被吃 ??abt.len++;//蛇身+1? ?Snake[abt.len—1].x=Snake[abt.len—2]。x;//增加一節(jié)蛇身跟隨蛇尾坐標x???Snake[abt。len—1]。y=Snake[abt.len—2].y;//增加一節(jié)蛇身跟隨蛇尾坐標y }?? if(abt.isabt==1) //如果食物被吃了就生成新食物? {? ??abt。isabt=0;//改為有食物狀態(tài) ??srand((unsigned)time(NULL));//食物隨時間變化隨機出現(xiàn)的種子? ms://重新設置食物出現(xiàn)的位置,防止食物出現(xiàn)在蛇身上 abt。x=rand()%17;//隨機出現(xiàn)食物x坐標,防止食物出現(xiàn)在邊界x+1 abt.y=1+rand()%13;//隨機出現(xiàn)食物y坐標,防止食物出現(xiàn)在邊界y+1 ? ?for(intisfo=abt.len—1;isfo>=0;isfo-—)//遍歷蛇 ? ?if(Snake[isfo]。x==abt.x&&Snake[isfo]。y==abt.y)//判斷食物是否在蛇身上 ?? ?gotoms;//重新設置食物???if(abt.mode==2)//類型為2,方盒模式,食物不應出現(xiàn)在盒子上? ?{? ? for(intmd1=0;md1<=18;md1++)? { ???if(abt.x==md1&&abt。y==1) ?????gotoms;? ???if(abt.x==md1&&abt.y==13) ? gotoms;????} ?? for(intmd11=2;md11<14;md11++)? ??{ ?? if(abt.x==0&&abt。y==md11)? ? ?gotoms;? ??if(abt。x==18&&abt.y==md11)? ?? ??gotoms; ?} ? ????} ??if(abt。mode==3)//類型為3,食物不能顯示到格子模式的格子上?? {?? for(intmd1=0;md1<=18;md1++)? ?{ ? ?if(md1〈7)?? if(abt。x==md1&&abt.y==12) ? ?gotoms;??? ?if(md1>10) ?????if(abt。x==md1&&abt.y==2) ??? gotoms; ? }????for(intmd11=1;md11〈=14;md11++) ? ?{? ?if(md11<7) ? if(abt。x==6&&abt。y==md11)?? ? ? gotoms;? ? ?if(md11>10)?? ?if(abt.x==11&&abt.y==md11)????? gotoms; ? ?} ? } } ?CBrushDrawBrush=(RGB(255,0,0));//設置食物的顏色 ?CBrush*Drawbrush=pDC->SelectObject(&DrawBrush);//繪制方框 ?pDC-〉Rectangle(abt.x*20,abt.y*20,(abt.x+1)*20,(abt.y+1)*20);//食物顯示?}voidCMyDlg::OnFile(){ FILE*fp;//定義C語言文件 if(!(fp=fopen(”max”,"rb")))//若無文件記錄最高分?{ fp=fopen(”max",”wb”);//新建以max為名稱的最高分記錄文件 ?fprintf(fp,”0,0,0");//初始化三個級別的最高分問為0 ?fclose(fp);//關閉文件??fp=fopen(”max",”rb");//以讀的方式打開新建的max文件 } ? intm1,m2,m3,s=(abt。len—3)*100;//定義三個變量接受文件存儲的三個級別分數(shù)及一個變量定義當次游戲的分數(shù)? fscanf(fp,”%d,%d,%d",&m1,&m2,&m3);//接受三個級別記錄的整數(shù) ?fclose(fp);//關閉文件??if(abt。spend==1)if(s>m1)m1=s;//當游戲級別為初級時.判斷當次分數(shù)以歷史初級最高,保存比較后最大的數(shù) if(abt.spend==2)if(s>m2)m2=s;//當游戲級別為高級時。判斷當次分數(shù)以歷史初級最高,保存比較后最大的數(shù) ?if(abt.spend==3)if(s>m3)m3=s;//當游戲級別為高級時。判斷當次分數(shù)以歷史初級最高,保存比較后最大的數(shù) ?fp=fopen(”max”,”wb”);//以寫的方式打開max文件??fprintf(fp,"%d,%d,%d",m1,m2,m3);//刪除以往記錄,保存目前記錄的分數(shù) ?fclose(fp);//關閉文件}voidCMyDlg::OnAway()//行走{?for(inti=abt.len-1;i〉0;i--)//使蛇身跟著蛇頭走 { Snake[i].x=Snake[i-1]。x;//傳遞x坐標??Snake[i]。y=Snake[i—1]。y;//傳遞y坐標 }? if(abt。direction==1)Snake[0].y--;//判斷蛇頭的方向(向上)?if(abt.direction==2)Snake[0]。y++;//判斷蛇頭的方向(向下)?if(abt.direction==3)Snake[0]。x-—;//判斷蛇頭的方向(向左) if(abt。direction==4)Snake[0].x++;//判斷蛇頭的方向(向右)? if(Snake[0]。x==-1)Snake[0]。x=18;//設置左穿墻?if(Snake[0].x==19)Snake[0].x=0;//設置右穿墻 if(Snake[0]。y==0)Snake[0]。y=13;//設置上穿墻 if(Snake[0]。y==14)Snake[0].y=1;//設置下穿墻?refurbich();//刷新 if(abt。mode==1)OnArea();//繪制空地模式 elseif(abt.mode==2)OnBox();//繪制方盒模式 elseOnRoom();//繪制格子模式 OnDelet();//調用判定是否結束函數(shù)?}voidCMyDlg::OnSnake()//繪制蛇{?CDC*pDC=GetDC();//初始顏色繪制 CBrushDrawBrush=(RGB(100,100,100));?//設置蛇的顏色?CBrush*Drawbrush=pDC->SelectObject(&DrawBrush);//替換當前樣式?for(inti=0;i<=abt。len-1;i++)? pDC—〉Rectangle(Snake[i]。x*20,Snake[i].y*20,(Snake[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (新教材)2026年滬科版八年級下冊數(shù)學 18.1 勾股定理 課件
- 崇義中學高一下學期第一次月考數(shù)學試題
- DB5107-T 137.1-2023 國家食品安全示范城市細胞工程建設規(guī)范 第1部分:食品生產行業(yè)典范企業(yè)
- 2025年辦公樓宇屋面防水協(xié)議
- 切割設備維護保養(yǎng)規(guī)范
- 基因編輯抗性機制
- 2025年AI心理咨詢的情感分析工具開發(fā) 共情對話技術支撐
- 2025年容錯糾錯機制建設研究
- 2025年高考化學有機推斷題真題深度剖析
- 專題03智慧養(yǎng)老-沖刺2025年高考地理熱點梳理情境對點練
- 2025年黨員黨的基本理論應知應會知識100題及答案
- 《汽車發(fā)動機構造(雙語課程)》習題(按項目列出)
- 婚慶公司發(fā)布會策劃方案
- 松陵一中分班試卷及答案
- 《小米廣告宣傳冊》課件
- 勞務派遣公司工作方案
- 物理趣味題目試題及答案
- 華師大版數(shù)學七年級上冊《4.3 立體圖形的表面展開圖》聽評課記錄
- 2023-2024學年四川省成都市高二上學期期末調研考試地理試題(解析版)
- 陜西單招數(shù)學試題及答案
- 應收賬款債權轉讓協(xié)議
評論
0/150
提交評論