版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
江西科技師范大學(xué)實(shí)驗報告課程系別班級學(xué)號姓名報
告
規(guī)
格一、實(shí)驗?zāi)康亩?、?shí)驗原理三、實(shí)驗儀器
四、實(shí)驗方法及步驟五、實(shí)驗記錄及數(shù)據(jù)處理六、誤差分析及問題討論1.實(shí)訓(xùn)一貪吃蛇游戲2.實(shí)訓(xùn)二學(xué)生成績管理系統(tǒng)3.4.5.6.7.8.9.10.11.12.13.14.15.
目
錄每次實(shí)驗課必須帶上此本子,以便教師檢查預(yù)習(xí)情況和記錄實(shí)驗原始數(shù)據(jù)。實(shí)驗時必須遵守實(shí)驗規(guī)則。用正確的理論指導(dǎo)實(shí)踐袁必須人人親自動手實(shí)驗,但反對盲目亂動,更不能無故損壞儀器設(shè)備。指導(dǎo)老師:第頁這是一份重要的不可多得的自我學(xué)習(xí)資料袁它將記錄著你在大學(xué)生涯中的學(xué)習(xí)和學(xué)習(xí)成果。請你保留下來,若干年后再翻閱仍將感到十分新鮮,記憶猶新。它將推動你在人生奮斗的道路上永往直前!江西科技師范大學(xué)實(shí)驗報告年級班號姓名同組姓名實(shí)驗日期年月日成績實(shí)訓(xùn)一貪吃蛇游戲一、實(shí)訓(xùn)目的和要求根據(jù)老師布置的任務(wù),對項目進(jìn)行需求分析;確定數(shù)據(jù)結(jié)構(gòu)和算法;畫流程圖或N-S圖并形成相關(guān)文檔。根據(jù)算法編寫程序并且調(diào)試程序直到程序通過。本程序?qū)崿F(xiàn)的主要技巧在二維數(shù)組的應(yīng)用上。目的是通過游戲程序增加編程的興趣,提高編程水平。二、主要儀器設(shè)備安裝了Windows操作系統(tǒng)、TurboC或VisualC++的計算機(jī)。三、實(shí)訓(xùn)內(nèi)容和原理
貪吃蛇游戲是一個深受人們喜愛的游戲,一條蛇在密閉的圍墻內(nèi),在圍墻內(nèi)隨機(jī)出現(xiàn)一個食物,通過按鍵盤上的四個光標(biāo)鍵控制蛇向上下左右四個方向移動,蛇頭撞到食物,則表示食物被吃掉,這時蛇的身體長一節(jié),同時計10分,接著又出現(xiàn)食物,等待被蛇吃掉,如果蛇在移動過程中,撞到墻壁或身體交叉蛇頭撞到自己的身體游戲結(jié)束。四、實(shí)訓(xùn)小結(jié)1、功能描述圖1貪吃蛇功能模塊圖貪吃蛇游戲貪吃蛇游戲圖形驅(qū)動開始畫面玩游戲過程結(jié)束游戲輸出得分圖形結(jié)束2、總體設(shè)計(1)功能模塊設(shè)計①圖形驅(qū)動功能模塊:initgraph(&gd,&gm,"c:\\tc")initgraph(&gd,&gm,"c:\\tc")cleardevice()圖2圖形驅(qū)動功能模塊流程圖②圖形結(jié)束功能模塊:getch()getch()closegraph()圖3圖形結(jié)束功能模塊流程圖③開始畫面功能模塊:NYNY圖4開始畫面功能模塊流程圖i=50i<=60i=50i<=60000rectangle(i,40,i+10,49)rectangle(i,451,i+10,460)i+=10i=40i<=450rectangle(50,i,59,i+10)rectangle(601,i,610,i+10)i+=10setlinestyle(SOLID_LINE,0,THICK_WIDTH)Setcolor(11)④輸出成績功能模塊:setfillstyle(SOLID_FILL,YELLOW)setfillstyle(SOLID_FILL,YELLOW)bar(50,15,220,35)setcolor(6)settextstyle(0,0,2)sprintf(str,"score:%d",score)outtextxy(55,20,str)startend圖5輸出成績功能模塊流程圖⑤游戲結(jié)束功能模塊:cleardevice()cleardevice()PrScore()setcolor(RED)settextstyle(0,0,4)outtextxy(200,200,"GAMEOVER")getch()圖6游戲結(jié)束功能模塊流程圖⑥玩游戲過程功能模塊:⑥Y⑦①randomize()randomize()1!kbhit()food.yes==1food.x=rand()%400+60food.y=rand()%350+60food.x%10!=0)food.x++food.y%10!=0food.y++food.yes=0food.yes=1;snake.life=0;snake.direction=1;snake.x[0]=100;snake.y[0]=100snake.x[1]=110;snake.y[1]=100;snake.node=2;PrScore()初始化蛇的狀態(tài)⑤①YYNNNNYYY①NYNY②food.yes==0food.yes==0Setcolor(Green)rectangle(food.x,food.y,food.x+10,food.y-10)i=snake.node-1i>0snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];i--畫出食物的矩形框②NNYNY③snake.directionsnake.directionsnake.x[0]+=10snake.x[0]-=10snake.y[0]-=10snake.y[0]-=10snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]Gameover()snake.life=1i=3i<snake.nodei++1234snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455NYGameOver();GameOver();snake.life=1;snake.life==1Ysnake.life==1⑦Nsnake.x[0]==food.x&&snake.y[0]==food.ysnake.x[0]==food.x&&snake.y[0]==food.yNYsetcolor(0)setcolor(0)rectangle(food.x,food.y,food.x+10,food.y-10)snake.x[snake.node]=20;snake.y[snake.node]=-20snake.x[snake.node]=20;snake.y[snake.node]=-20;snake.node++④④④food.yes=1;score+=10;PrScore()④setcolor(4)setcolor(4)i=0i=0i<snake.nodei<snake.nodeNrectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10)Yrectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10)i++i++delay(gamespeed);delay(gamespeed);setcolor(0);rectangle(snake.x[snake.node-1],snake.y[snake.node-1]snake.x[snake.nodesnake.x[snake.node1]+10,snake.y[snake.node-1]-10)⑤⑤YNYNYNYNYNY⑥圖6游戲過程功能模塊流程圖key=bioskey(0)key=bioskey(0)snake.life==1key==ESCkey==UP&&snake.direction!=4snake.direction=3key==RIGHT&&snake.direction!=2key==LEFT&&snake.direction!=1key==DOWN&&snake.direction!=3snake.direction=1snake.direction=2snake.direction=4end(2)數(shù)據(jù)結(jié)構(gòu)設(shè)計①食物的結(jié)構(gòu):structFood{intx;inty;intyes;}food;結(jié)構(gòu)體food用于存儲食物信息。各字段的值意義如下:x:存放食物的橫坐標(biāo)y:存放食物的縱坐標(biāo)yes:判斷是否要出現(xiàn)食物的變量,yes=0表示,畫面中有食物,不需要出現(xiàn)新食物,yes=1表示需要出現(xiàn)新食物②蛇的結(jié)構(gòu):structSnake{intx[N];inty[N];intnode;intdirection;intlife;}snake;結(jié)構(gòu)體Snake用于存儲蛇的基本信息。各字段的值意義如下:x[N]:保存蛇的每一節(jié)橫坐標(biāo)y[N]:保存蛇的每一節(jié)縱坐標(biāo)node:存放蛇的節(jié)數(shù)direction:保存蛇移動的方向life:存放蛇的生命,life=0表示蛇活著,life=1表示蛇死亡(3)函數(shù)功能描述①Init()函數(shù)原型:voidInit(void)Init()函數(shù)為圖形驅(qū)動,把圖形適配器設(shè)置為一種圖形模式,在默認(rèn)路徑下設(shè)置。②Close()函數(shù)原型:voidClose(void)Close()函數(shù)為圖形結(jié)束,關(guān)閉圖形驅(qū)動。③DrawK()函數(shù)原型:voidDrawK(void)DrawK()函數(shù)用于畫開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻。④GameOver()函數(shù)原型:voidGameOver(void)GameOver()函數(shù)用在結(jié)束游戲,出現(xiàn)GAMEOVER提示⑤GamePlay()函數(shù)原型:voidGamePlay(void)GamePlay()函數(shù)用于玩游戲具體過程,使用上下左右方向鍵控制蛇吃食物。⑥PrScore()函數(shù)原型:voidPrScore(void)PrScore()函數(shù)用于輸出成績,顯示得分。3、程序?qū)崿F(xiàn)(1)源碼分析#defineN200#include<graphics.h>#include<stdlib.h>#include<dos.h>#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011binti,key;intscore=0;/*得分*/intgamespeed=50000;/*游戲速度自己調(diào)整*/structFood{intx;/*食物的橫坐標(biāo)*/inty;/*食物的縱坐標(biāo)*/intyes;/*判斷是否要出現(xiàn)食物的變量*/}food;/*食物的結(jié)構(gòu)體*/structSnake{intx[N];inty[N];intnode;/*蛇的節(jié)數(shù)*/intdirection;/*蛇移動方向*/intlife;/*蛇的生命,0活著,1死亡*/}snake;voidInit(void);/*圖形驅(qū)動*/voidClose(void);/*圖形結(jié)束*/voidDrawK(void);/*開始畫面*/voidGameOver(void);/*結(jié)束游戲*/voidGamePlay(void);/*玩游戲具體過程*/voidPrScore(void);/*輸出成績*//*主函數(shù)*/voidmain(void){Init();/*圖形驅(qū)動*/DrawK();/*開始畫面*/GamePlay();/*玩游戲具體過程*/Close();/*圖形結(jié)束*/}/*圖形驅(qū)動*/voidInit(void){intgd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");cleardevice();}/*開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻*/voidDrawK(void){/*setbkcolor(LIGHTGREEN);*/setcolor(11);/*設(shè)置圍墻顏色為淡青色*/setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(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(void){randomize();/*隨機(jī)數(shù)發(fā)生器*/food.yes=1;/*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/snake.life=0;/*活著*/snake.direction=1;/*方向往右*/snake.x[0]=100;snake.y[0]=100;/*蛇頭*/snake.x[1]=110;snake.y[1]=100;snake.node=2;/*初始蛇的節(jié)數(shù)為2*/PrScore();/*輸出得分*/while(1)/*可以重復(fù)玩游戲,壓ESC鍵結(jié)束*/{while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/{if(food.yes==1)/*需要出現(xiàn)新食物*/{food.x=rand()%400+60;food.y=rand()%350+60;while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/food.x++;/*食物的橫坐標(biāo)*/while(food.y%10!=0)food.y++;/*食物的縱坐標(biāo)*/food.yes=0;/*畫面上有食物了*/}if(food.yes==0)/*畫面上有食物了就要顯示*/{setcolor(GREEN);/*設(shè)置食物的顏色為綠色*/rectangle(food.x,food.y,food.x+10,food.y-10);/*畫出食物的矩形框*/}for(i=snake.node-1;i>0;i--)/*蛇的每個環(huán)節(jié)往前移動,也就是貪吃蛇的關(guān)鍵算法*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}/*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/switch(snake.direction){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é)開始判斷是否撞到自己了,因為蛇頭為兩節(jié),第三節(jié)不可能拐過來*/{if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){GameOver();/*顯示失敗*/snake.life=1;/*蛇死亡*/break;}}if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)/*蛇是否撞到墻壁*/{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++;/*蛇的身體長一節(jié)*/food.yes=1;/*畫面上需要出現(xiàn)新的食物*/score+=10;PrScore();/*輸出新得分*/}setcolor(4);/*畫出蛇(紅色)*/for(i=0;i<snake.node;i++)rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);delay(gamespeed);/*讓當(dāng)前進(jìn)程等待gamaspeed毫秒*/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);}/*endwhile(!kbhit)*/if(snake.life==1)/*如果蛇死就跳出循環(huán)*/break;key=bioskey(0);/*接收按鍵*/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;elseif(key==DOWN&&snake.direction!=3)snake.direction=4;}/*endwhile(1)*/}/*游戲結(jié)束*/voidGameOver(void){cleardevice();/*清除圖形屏幕*/PrScore();/*輸出結(jié)果*/setcolor(RED);settextstyle(0,0,4);/*s設(shè)置當(dāng)前的文本屬性*/outtextxy(200,200,"GAMEOVER");/*在坐標(biāo)為(200,200)的位置輸出GAMEOVER*/getch();}/*輸出成績*/voidPrScore(void){charstr[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 購銷合同貸款申請技巧分享
- 二年級品德與生活上冊 愛護(hù)我們的生活環(huán)境教案3 北師大版
- 八年級歷史上冊 第六單元 中華民族的抗日戰(zhàn)爭第18課 從九一八事變到西安事變教案 新人教版
- 2024-2025學(xué)年高中物理 第一章 機(jī)械振動 2 單擺教案 教科版選修3-4
- 2023四年級數(shù)學(xué)上冊 1 大數(shù)的認(rèn)識第5課時 將整萬數(shù)改寫成用“萬”作單位的數(shù)教案 新人教版
- 北京中南紅星足球?qū)W校九年級化學(xué)上冊 第三單元 課題1 分子和原子教學(xué)設(shè)計 (新版)新人教版
- 坐班合同協(xié)議書范本(2篇)
- 租的民房租房合同(2篇)
- 裝修管理費(fèi)合同(2篇)
- 浮選 課件 演示
- DLT 1051-2019電力技術(shù)監(jiān)督導(dǎo)則
- 十月革命概要課件
- 文控管理體系標(biāo)準(zhǔn)培訓(xùn)
- 抗狂犬病血清項目評估報告
- 氣壓治療與護(hù)理
- 左側(cè)偏癱患者的護(hù)理課件
- 教案程式與意蘊(yùn)-中國傳統(tǒng)繪畫(人物畫)《步輦圖》教學(xué)設(shè)計-高中美術(shù)人美版(2019)美術(shù)鑒賞
- 交通事故案例分析與教訓(xùn)總結(jié)
- 視神經(jīng)炎演示課件
- 《重癥肺炎診治進(jìn)展》課件
- 幼兒園繪本故事家長會
評論
0/150
提交評論