版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
貪吃蛇游戲程序設(shè)計(jì)一、課程設(shè)計(jì)任務(wù)設(shè)計(jì)二、設(shè)計(jì)要求 (3).上機(jī)調(diào)試,查錯(cuò),逐步分析不能正常運(yùn)行的原因,確保所設(shè)計(jì)的程序正確,并且能 (4).完成課程設(shè)計(jì)報(bào)告,并進(jìn)行答辯三、需求分析圍墻里,圍墻里隨機(jī)出現(xiàn)一個(gè)食物,通一個(gè)小矩形快表示蛇的一節(jié)身體,身體每動(dòng)時(shí)必須從蛇頭開始,所以蛇不能向相反移,但按下有效方向鍵后,蛇頭朝鍵后,先確定蛇頭的位置,而后蛇蛇多一節(jié)身體,所以將蛇的最后一塊和覆蓋矩形塊。為了便于理解,定義兩開始初始化界面和蛇身游戲者按鍵選擇放置食物蛇開始運(yùn)動(dòng)蛇吃到食?NY蛇長(zhǎng)大N蛇死亡?YYN退出界面 (1)函數(shù)定義yintscore=0;intgamespeed=250;//游戲速度可根據(jù)實(shí)際情況自行調(diào)整structFood{intx;//食物的橫坐標(biāo)inty;//食物的縱坐標(biāo)intyes;//判斷是否要出現(xiàn)食物的變量{intxM;intyMintnode;//蛇的節(jié)數(shù)intdirection//蛇的移動(dòng)方向voidInit();//圖形驅(qū)動(dòng)voidClose();//圖形結(jié)束voidDrawK();//開始畫面voidGamePlay();//玩游戲的具體過(guò)程voidGameOver();//游戲結(jié)束voidPrScore();//輸出成績(jī) (2)主函數(shù)main()全局變量及函數(shù)原型說(shuō)明,然后初始化圖形系統(tǒng),調(diào)用函數(shù)DrawK()畫出開始畫面,調(diào)用函數(shù)GamePlay(),即玩游戲的具體用Close()關(guān)閉圖形系統(tǒng),結(jié)束程序voidmain()//主函數(shù){DrawK始畫面layose}voidInit)//圖形驅(qū)動(dòng){intgdDETECTgminitgraph(&gd,&gm,"");/*此處為turboc的路徑,讀者可以根據(jù)自己的電腦而改*/cleardevice} (3)畫界面函數(shù)DrawK()在水平和垂直方向輸出連續(xù)的寬度和voidDrawK()//開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻{REENHTREDinestyleforiii墻{rectangleii,49);//上邊i}i{rectangleii+10);//左邊i}} (4)游戲具體過(guò)程函數(shù)GamePlay()節(jié)的坐標(biāo)賦給后一節(jié),用背景顏色將最后節(jié)voidGamePlay()//玩游戲的具體過(guò)程{rand生器ectionyrewhile(1)//可重復(fù)玩游戲,按ESC鍵結(jié)束{while(!kbhit())//在沒(méi)有按鍵的情況下,蛇自己移動(dòng)身體{if(food.yes==1)//需要出現(xiàn)新食物{whilefoody)odyes}if(food.yes==0)//畫面上有食物就要顯示{nglefoodxfoodyfoodxfoody}forisnakenodeii也就是貪吃蛇的關(guān)鍵算法{snakexisnakexisnakeyisnakeyi}switch(snake.direction)//1,2,3,4表示上下左右四個(gè)方向,通過(guò)這個(gè)判斷來(lái)移動(dòng)蛇頭{breakxbreakybreakbreak}for(i=3;i<snake.node;i++)//從蛇的第四節(jié)開始判斷是否撞到自己了,因?yàn)樯哳^{ifsnake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){versnake.life=1;k}}{eOverfe}if(snake.life==1)//以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始kif(snake.x[0]==food.x&&snake.y[0]==food.y)//吃到食物以后{foodxfoodysnakenodesnake.y[snake.node]=-20;//新的一節(jié)先放在看不見得位置,下次循環(huán)就取前nodePrScore出新的得分}ITEakeyimespeedsetcolor一節(jié)rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);}ifsnake.life==1)//如果蛇死就跳出循環(huán)kkeygetchar受案件if(key==Esc)//按ESC鍵退出kelseifkeyUPsnakedirection=4)onelseifkeyRIGHTsnakedirection!=2)ifkeyLEFTsnakedirectionifkeyDOWNsnakedirection} (5)游戲結(jié)束函數(shù)GameOver()voidGameOver()//游戲結(jié)束{outtextxy我會(huì)回來(lái)的!!!!!");}voidPrScore()//輸出成績(jī){trllstyleSOLIDFILLYELLOWbar(50,15,220,35);coredscorextxystr}voidClose()//圖形結(jié)束{}五、調(diào)試及解決方法圖書館或上網(wǎng)查閱一些資料或者是向老師請(qǐng)教也解決了對(duì)源程序一一修改直到運(yùn)行成功。六、測(cè)試結(jié)果七、設(shè)計(jì)心得體會(huì)3)在做程序的時(shí)候先列框架,將這個(gè)程序所要達(dá)到的目的(功能)分析出行5)學(xué)會(huì)了有關(guān)頭文件的使用方法,及系統(tǒng)調(diào)配問(wèn)題的解決方法等。6)了解到了注釋的重要性。#defineM200#include"graphics.h"#include<stdlib.h>#include<stdio.h>#include<string.h>#include<iostream.h>#include<dos.h>#include<conio.h>#include<windows.h>#defineLEFT97//A#defineRIGHT100//D#defineDOWN115//S#defineUP119//W#defineEsc0x011binti,key;intscore=0;intgamespeed=250;//游戲速度可根據(jù)實(shí)際情況自行調(diào)整structFood{intx;//食物的橫坐標(biāo)inty;//食物的縱坐標(biāo)intyes;//判斷是否要出現(xiàn)食物的變量}food;//食物的結(jié)構(gòu)體structSnake{intx[M];inty[M];intnode;//蛇的節(jié)數(shù)intdirection;//蛇的移動(dòng)方向voidInit();//圖形驅(qū)動(dòng)voidClose();//圖形結(jié)束voidDrawK();//開始畫面voidGamePlay();//玩游戲的具體過(guò)程voidGameOver();//游戲結(jié)束voidPrScore();//輸出成績(jī)voidmain()//主函數(shù){Init();//圖形驅(qū)動(dòng)DrawK();//開始畫面GamePlay();//玩游戲的具體過(guò)程Close();//圖形結(jié)束}voidInit()//圖形驅(qū)動(dòng){intgd=DETECT,gm;initgraph(&gd,&gm,"");/*此處為turboc的路徑,讀者可以根據(jù)自己的電腦而改*/cleardevice();}右下角坐標(biāo)為(610,460)的圍墻{setbkcolor(GREEN);setcolor(LIGHTRED);setlinestyle(0,0,5);//設(shè)置線型for(i=50;i<=600;i+=10)//畫圍墻{rectangle(i,40,i+10,49);//上邊rectangle(i,451,i+10,460);//下邊}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10);//左邊rectangle(601,i,610,i+10);//右邊}}voidGamePlay()//玩游戲的具體過(guò)程{rand();//隨機(jī)數(shù)發(fā)生器snake.life=0;//蛇活著snake.direction=1;//方向往右snake.x[0]=100;snake.y[0]=100;//舌頭坐標(biāo)snake.x[1]=110;snake.y[1]=100;snake.node=2;//蛇的節(jié)數(shù)PrScore();//輸出分?jǐn)?shù)while(1)//可重復(fù)玩游戲,按ESC鍵結(jié)束{{if(food.yes==1)//需要出現(xiàn)新食物{food.x=rand()%400+60;food.y=rand()%350+60;while(food.x%10!=0)//食物隨即出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才能讓蛇遲到food.x++;while(food.y%10!=0)food.y++;food.yes=0;//畫面上有食物了}if(food.yes==0)//畫面上有食物就要{setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);}for(i=snake.node-1;i>0;i--)//蛇的每個(gè)環(huán)節(jié)往前移動(dòng),也就是貪吃蛇的關(guān)鍵算法{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}switch(snake.direction)//1,2,3,4表示上下左右四個(gè)方向,通過(guò)這個(gè)判斷來(lái)移動(dòng)蛇頭{case1:snake.x[0]+=10;break;case2:snake.x[0]-=10;break;case3:snake.y[0]-=10;break;case4:snake.y[0]+=10;break;}for(i=3;i<snake.node;i++)//從蛇的第四節(jié)開始判斷是否撞到自己了,因?yàn)樯哳^為兩節(jié),第三節(jié)不可能拐過(guò)來(lái){if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[{GameOver();//顯示失敗snake.life=1;break;}}snakey否撞到墻壁{GameOver();//本次游戲結(jié)束snake.life=1;//蛇死}if(snake.life==1)//以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始break;if(snake.x[0]==food.x&&snake.y[0]==food.y)//吃到食物以后{setcolor(0);//把畫面上的食物去掉rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node]=-20;snake.y[snake.node]=-20;//新的一節(jié)先放在看不見得位置,下次循環(huán)就取前一節(jié)的位置snake.node++;//蛇的身體長(zhǎng)一節(jié)food.yes=1;score+=10;PrScore();//輸出新的得分}setcolor(WHITE);//畫出蛇for(i=0;i<snake.node;i++)rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);Sleep(gamespeed);setcolor(0);//用黑色去除蛇的最后一節(jié)rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);}if(snake.life==1)//如果蛇死就跳出循環(huán)break;key=getchar();//接受案件if(key==Esc)//按ESC鍵退出break;elseif(key==UP&&snake.direction!=4)snake.direction=3;elseif(key==RIGHT&&snake.direction!=2)snake.direction=1;elseif(key==LEFT&&snake.direction!=1)snake.direction=2;if(key==DOWN&&snake.direction!=3)snake.direction=4;}//endwhile(1)}voidGameOver()//游戲結(jié)束{cleardevice();PrScore();setcolor(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024芒果種植基地?zé)o人機(jī)噴灑農(nóng)藥服務(wù)合同3篇
- 儀器設(shè)備采購(gòu)合同5篇
- 經(jīng)濟(jì)法關(guān)于大學(xué)生就業(yè)維權(quán)方面
- 贊助合同模板(5篇)
- 山東特殊教育職業(yè)學(xué)院《醫(yī)學(xué)基本技能》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度政府投資項(xiàng)目財(cái)務(wù)監(jiān)管代理合同3篇
- 鐘山職業(yè)技術(shù)學(xué)院《商務(wù)英語(yǔ)視聽說(shuō)(4)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年礦山石料直供采購(gòu)協(xié)議綱要版B版
- 2025年度新疆棉花采摘機(jī)械化作業(yè)合同范本3篇
- 南京師范大學(xué)泰州學(xué)院《口腔臨床醫(yī)學(xué)概論(口腔修復(fù)學(xué))》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024-2025學(xué)年初中七年級(jí)上學(xué)期數(shù)學(xué)期末綜合卷(人教版)含答案
- 2024-2025學(xué)年北京市朝陽(yáng)區(qū)高三上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 四年級(jí)數(shù)學(xué)(除數(shù)是兩位數(shù))計(jì)算題專項(xiàng)練習(xí)及答案
- 辦理落戶新生兒委托書模板
- 四川省綿陽(yáng)市涪城區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期1月期末歷史試卷(含答案)
- 2025年山東水發(fā)集團(tuán)限公司社會(huì)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫(kù)(共380題含答案)
- 《湖南省房屋建筑和市政工程消防質(zhì)量控制技術(shù)標(biāo)準(zhǔn)》
- 施工現(xiàn)場(chǎng)環(huán)境因素識(shí)別、評(píng)價(jià)及環(huán)境因素清單、控制措施
- 2024年醫(yī)藥行業(yè)年終總結(jié).政策篇 易聯(lián)招采2024
- 《工業(yè)園區(qū)節(jié)水管理規(guī)范》
評(píng)論
0/150
提交評(píng)論