欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      貪吃蛇游戲 實(shí)習(xí)報(bào)告

      時(shí)間:2019-05-13 17:36:55下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫小編為你整理了多篇相關(guān)的《貪吃蛇游戲 實(shí)習(xí)報(bào)告》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《貪吃蛇游戲 實(shí)習(xí)報(bào)告》。

      第一篇:貪吃蛇游戲 實(shí)習(xí)報(bào)告

      課程設(shè)計(jì)報(bào)告

      貪吃蛇游戲設(shè)計(jì)

      專業(yè) 電子信息工程 杜 運(yùn) 福 B電子062 0610620224 曹 妍 2008年8月30日 學(xué)生姓名 班學(xué)級(jí) 號(hào)

      指導(dǎo)教師 完成日期

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      貪吃蛇游戲設(shè)計(jì) 摘要:本設(shè)計(jì)主要圍繞貪吃蛇游戲展開。眾所周知,貪吃蛇游戲一直以來是比較流行的。傳統(tǒng)的貪吃蛇游戲功能比較少,對(duì)蛇的控制僅限于向左轉(zhuǎn)和向右轉(zhuǎn),而現(xiàn)在的貪吃蛇游戲已經(jīng)發(fā)展的相當(dāng)好;具有更多的功能和友好的界面。例如,最近流行的免費(fèi)的3D版的貪吃蛇游戲,界面相當(dāng)?shù)拿烙^,有很強(qiáng)的立體效果,真實(shí)感更強(qiáng),食物也為立體的且顏色絢麗。在3D版貪吃蛇游戲里面,墻壁是真實(shí)的墻壁,障礙物比較多,如樹、土丘等。此外,其功能更多更強(qiáng),可以選擇難度。不過,總而言之,3D版與傳統(tǒng)的貪吃蛇游戲有共性,即娛樂性與益智性。這些也是貪吃蛇游戲的優(yōu)點(diǎn)。本人因水平有限,只能設(shè)計(jì)簡(jiǎn)單的貪吃蛇游戲。不過,在功能上,比傳統(tǒng)貪吃蛇游戲更豐富。蛇可以反向運(yùn)動(dòng),操作起來,顯得更為靈活。界面的顏色選用綠色,不易使眼睛疲勞。關(guān)鍵詞:3D版;傳統(tǒng);靈活; 2

      貪吃蛇游戲設(shè)計(jì)

      目錄

      1、概述

      1.1、用TC設(shè)計(jì)程序的方法 1.2、簡(jiǎn)要說明

      2、設(shè)計(jì)要求

      3、系統(tǒng)分析與模塊設(shè)計(jì) 3.1、算法設(shè)計(jì) 3.2、數(shù)據(jù)結(jié)構(gòu) 3.3、模塊設(shè)計(jì) 3.4、模塊枝干圖

      4、程序流程圖 4.1、圖形驅(qū)動(dòng) 4.2、開始畫面 4.3、顯示食物 4.4、蛇向前移動(dòng) 4.5、判蛇死

      4.6、吃到食物后處理 4.7、判蛇反向移動(dòng) 4.8、游戲結(jié)束 4.9、圖形結(jié)束

      5、程序設(shè)計(jì)及關(guān)鍵源代碼

      6、運(yùn)行結(jié)果分析

      7、實(shí)習(xí)心得

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      貪吃蛇游戲的設(shè)計(jì) 1.概 述 1.1、用TC設(shè)計(jì)程序的方法

      首先應(yīng)了解設(shè)計(jì)要求,然后按照功能設(shè)計(jì)模塊,每個(gè)模塊完成特定的功能,要使模塊間的耦合性小,內(nèi)聚性高;設(shè)計(jì)模塊是相當(dāng)重要的一個(gè)環(huán)節(jié)。模塊的數(shù)量不宜太多,也不宜太少,要使每個(gè)模塊都能比較簡(jiǎn)單的轉(zhuǎn)換成流程圖。模塊設(shè)計(jì)完成后,就該給每個(gè)模塊繪制流程圖了。流程圖要簡(jiǎn)單,容易理解,多用中文。不宜寫過長(zhǎng)的代碼,增加理解難度。流程圖與模塊枝干圖均可用繪圖軟件繪制,可適當(dāng)加些背景色,用以區(qū)分。此外,流程圖應(yīng)容易轉(zhuǎn)換成代碼。繪制好了流程圖,就要編寫代碼了。直接在TC環(huán)境里輸入代碼,然后運(yùn)行測(cè)試,檢查錯(cuò)誤,最終,將設(shè)計(jì)出可行的程序。1.2、簡(jiǎn)要說明

      我設(shè)計(jì)的貪吃蛇游戲具有很多獨(dú)特性。例如,墻壁不用實(shí)體,而用中空的墻,顏色為綠色,顯得更美觀,且不易使眼疲勞。操作上,做了些簡(jiǎn)化,游戲開始時(shí)便可以自動(dòng)運(yùn)行,且速度較快,屬中等難度。玩游戲的過程相當(dāng)簡(jiǎn)單,只需按鍵盤上的上下左右方向鍵,便可改變蛇的行進(jìn)方向。食物隨機(jī)產(chǎn)生。貪吃蛇吃到一個(gè)食物后便得到10分。得分顯示在左上角。當(dāng)蛇撞到墻壁或自己時(shí),蛇死,游戲結(jié)束,輸出得分。

      2.設(shè)計(jì)要求

      外觀為矩形,食物隨機(jī)產(chǎn)生,添加注釋,統(tǒng)計(jì)得分、每吃到一個(gè)食物獲得10分。蛇碰到自己或墻壁,游戲均結(jié)束。游戲結(jié)束時(shí)輸出得分。畫出模塊枝干圖與每個(gè)模塊的程序流程圖。修改某些代碼,改變其外觀及功能。游戲操作應(yīng)盡量簡(jiǎn)單。

      界面美觀,讓人看了覺得舒服。

      3、系統(tǒng)分析與模塊設(shè)計(jì) 3.1、算法設(shè)計(jì)

      玩游戲過程采用遞歸算法,由WHILE(1)控制循環(huán)過程,可使游戲重復(fù)玩,在蛇死之前不停的玩。判斷蛇死的算法是通過判斷蛇有沒有碰到自己及墻壁。使蛇向前移動(dòng)采用遞歸算法,通過遞歸將蛇的每一節(jié)依次向前移動(dòng),橫坐標(biāo)與縱坐標(biāo)依次向前賦值,從而達(dá)到使蛇前移的目的。蛇的前進(jìn)方向通過IF結(jié)構(gòu)判斷。

      貪吃蛇游戲設(shè)計(jì)

      3.2、數(shù)據(jù)結(jié)構(gòu)

      蛇與食物信息分別用兩個(gè)結(jié)構(gòu)體存儲(chǔ)與表示。將食物的橫坐標(biāo)X、縱坐標(biāo)Y和判斷是否要出現(xiàn)食物的變量YES分別作為食物的結(jié)構(gòu)體的成員。蛇的橫坐標(biāo)數(shù)組X[N],縱坐標(biāo)數(shù)組Y[N],蛇的節(jié)數(shù)NODE,蛇的移動(dòng)方向DIRECTION、蛇的生命LIFE分別作為蛇的結(jié)構(gòu)體的成員。結(jié)構(gòu)體內(nèi)每個(gè)成員的存儲(chǔ)類型均為整型。3.3、模塊設(shè)計(jì)

      模塊應(yīng)具有高內(nèi)聚性,低耦合性。這樣,程序運(yùn)行才更穩(wěn)定,效率更高。據(jù)功能將貪吃蛇游戲劃分成四個(gè)大模塊,九個(gè)小模塊。每個(gè)模塊均具有自己的功能,而且,比較容易畫出各個(gè)模塊的流程圖。3.4、模塊枝干圖

      簡(jiǎn)要說明:圖形驅(qū)動(dòng)即完成初始化圖形系統(tǒng)功能;開始畫面模塊的主要作用是根據(jù)設(shè)置繪制出玩游戲區(qū)域四周的墻壁;玩游戲的過程是游戲此游戲程序的核心,又可細(xì)分為好多小的功能模塊;其中,顯示食物模塊僅完成顯示食物功能;蛇前移模塊即通過遞歸算法實(shí)現(xiàn)蛇的向某方向移動(dòng);判蛇死模塊的功能是通過判斷蛇是否碰到自己或墻壁來判斷蛇有沒有死亡。吃到食物后小模塊只有蛇吃到食物后才起作用。即當(dāng)蛇吃到食物后,蛇自身延長(zhǎng)一節(jié)并繪出蛇,同時(shí)加10分。通過鍵盤操控來玩游戲主要由判反向移動(dòng)模塊完成,即當(dāng)蛇不是反向移動(dòng)時(shí),按照鍵盤上方向鍵指示移動(dòng)。游戲結(jié)束模塊功能簡(jiǎn)單,僅完成輸出得分與提示語功能。最后圖形結(jié)束模塊完成關(guān)閉圖形功能。

      4、程序流程圖

      4.1、圖形驅(qū)動(dòng)

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      4.2、開始畫面

      貪吃蛇游戲設(shè)計(jì)

      4.3、顯示食物

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      4.、蛇向前移動(dòng)

      貪吃蛇游戲設(shè)計(jì)

      4.5、判蛇死

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      4.6

      、吃到食物后處理

      貪吃蛇游戲設(shè)計(jì)

      4.7、判蛇反向移動(dòng)

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      4.8、游戲結(jié)束

      貪吃蛇游戲設(shè)計(jì)

      4.9、圖形結(jié)束

      5、程序設(shè)計(jì)及關(guān)鍵源代碼

      定義上下左右控制方向:

      #define LEFT 0x4b00 #define RIGHT 0x4d00

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b

      設(shè)定游戲速度:

      int gamespeed=60000;

      用結(jié)構(gòu)體定義食物與蛇:

      struct Food { int x;/*食物的橫坐標(biāo)*/ int y;/*食物的縱坐標(biāo)*/ int yes;/*判斷是否要出現(xiàn)食物的變量*/ }food;/*食物的結(jié)構(gòu)體*/ struct Snake { int x[N];int y[N];int node;/*蛇的節(jié)數(shù)*/ int direction;/*蛇移動(dòng)方向*/ int life;/* 蛇的生命,0活著,1死亡*/ }snake;主函數(shù):

      void main(void){ Init();/*圖形驅(qū)動(dòng)*/ DrawK();/*開始畫面*/ GamePlay();/*玩游戲具體過程*/ Close();/*圖形結(jié)束*/ } 圖形驅(qū)動(dòng):

      貪吃蛇游戲設(shè)計(jì)

      void Init(void){ int gd=DETECT,gm;initgraph(&gd,&gm,“c: c”);cleardevice();}

      開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(620,460)的圍墻:

      void DrawK(void){ setcolor(10);/*綠色*/ setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/ for(i=50;i<=610;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(611,i,620,i+10);/*右邊*/ } }

      玩游戲具體過程:

      void GamePlay(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;

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      snake.node=2;/*節(jié)數(shù)*/ PrScore();/*輸出得分*/ while(1)/*可以重復(fù)玩游戲,壓ESC鍵結(jié)束*/ { while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動(dòng)身體*/ { if(food.yes==1)/*需要出現(xiàn)新食物*/ { food.x=rand()%400+60;food.y=rand()%350+60;while(food.x%10!=0)/*使食物在整格內(nèi)*/ food.x++;while(food.y%10!=0)food.y++;food.yes=0;/*畫面上有食物了*/ } if(food.yes==0)/*畫面上有食物了就要顯示*/ { setcolor(BROWN);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];} /*1,2,3,4表示右,左,上,下四個(gè)方向,通過這個(gè)判斷來移動(dòng)蛇頭*/ switch(snake.direction){ case 1:snake.x[0]+=10;break;case 2: snake.x[0]-=10;break;case 3: snake.y[0]-=10;break;case 4: snake.y[0]+=10;break;} for(i=3;i

      貪吃蛇游戲設(shè)計(jì)

      { 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();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;/*畫面上需要出現(xiàn)新的食物*/ score+=10;PrScore();/*輸出新得分*/ } setcolor(4);/*畫出蛇*/ for(i=0;i

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      } /*endwhile(!kbhit)*/ if(snake.life==1)/*如果蛇死就跳出循環(huán)*/ break;key=bioskey(0);/*接收按鍵*/ if(key==ESC)/*按ESC鍵退出*/ break;else if(key==UP&&snake.direction!=4)/*判斷是否往相反的方向移動(dòng)*/ snake.direction=3;else if(key==RIGHT&&snake.direction!=2)snake.direction=1;else if(key==LEFT&&snake.direction!=1)snake.direction=2;else if(key==DOWN&&snake.direction!=3)snake.direction=4;}/*endwhile(1)*/ }

      游戲結(jié)束:

      void GameOver(void){ cleardevice();PrScore();setcolor(GREEN);settextstyle(0,0,3);outtextxy(200,200,“ Game over!Try!”);getch();}

      輸出成績(jī):

      void PrScore(void){ char str[10];

      貪吃蛇游戲設(shè)計(jì)

      setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(5);settextstyle(0,0,2);sprintf(str,“score:%d”,score);outtextxy(55,20,str);}

      6、運(yùn)行結(jié)果分析

      通過運(yùn)行,我對(duì)自己的設(shè)計(jì)比較滿意。運(yùn)行結(jié)果正如我所料,此貪吃蛇游戲具有易操作性及充滿活力的外觀。

      截圖及描述:

      圖6-1 開始畫面

      此圖為開始畫面圖,蛇有三節(jié),墻壁顏色為綠色,顯得較有活力。

      鹽城工學(xué)院本科生課程設(shè)計(jì)報(bào)告(2008)

      圖6-2 蛇吃到兩個(gè)食物后

      蛇吃到食物后,得分為20分,蛇延長(zhǎng)兩節(jié)。

      圖6-3 游戲結(jié)束畫面

      貪吃蛇游戲設(shè)計(jì)

      7、實(shí)習(xí)心得

      在大一學(xué)習(xí)期間,我就知道在大二暑假期間,有程序設(shè)計(jì)實(shí)習(xí)。從那時(shí)起,我就期盼著這一天早點(diǎn)到來。只因我對(duì)編程有濃厚的興趣。我是我們班第一個(gè)通過江蘇省計(jì)算機(jī)VB二級(jí)考試的。我的VC++成績(jī)也還可以。

      轉(zhuǎn)眼間,程序設(shè)計(jì)實(shí)習(xí)就如期而至了。實(shí)習(xí)的第一天是充滿好奇與興趣,當(dāng)實(shí)習(xí)回來時(shí),就感覺得這次實(shí)習(xí)并非想象中的那樣。我本以為,程序設(shè)計(jì)實(shí)習(xí)應(yīng)該是開放性的,讓我們參照某些課題,自主、自由地設(shè)計(jì)程序。我想,那樣更能促進(jìn)我們學(xué)習(xí)和提高我們的動(dòng)手能力。

      這次實(shí)習(xí)中,我們都被給了程序的源碼,而且有詳細(xì)的功能說明。表面上看,我們幾乎不需什么努力就能完成,而實(shí)際上,并非如此。因?yàn)槟切┏绦虼蠖嗍腔?6位DOS執(zhí)行的,并且,里面包含許多DOS下圖形處理的函數(shù),我從未涉及過,所以,很難看懂代碼,即使有那樣詳細(xì)的注釋。

      通過堅(jiān)持上機(jī)實(shí)習(xí),我對(duì)代碼的認(rèn)識(shí)越來越多。我還上網(wǎng)找了些資料,如TC函數(shù)詳解等等。我更多的了解了各種TC函數(shù)的功能。我通過一步步的學(xué)習(xí),終于弄懂了整個(gè)程序,并且對(duì)程序做了些修改。如外觀、大小、輸出成績(jī)等。通過修改程序代碼增加游戲的功能,我也從中獲得了自信。

      通過使用Win-TC1.9設(shè)計(jì)程序,我更多的了解了TC函數(shù)的功能與用法,也了解了在TC環(huán)境下調(diào)用DOS繪圖及處理的常用方法。

      在上機(jī)實(shí)習(xí)的過程中,還繪制了模塊枝干圖與程序流程圖,我感覺到,畫模塊枝干圖并不是件容易的事。只有在弄懂程序后才能將整個(gè)程序劃分成數(shù)量適宜的模塊。劃分模塊確實(shí)挺重要的,原來我將玩游戲過程劃為一個(gè)模塊,后來發(fā)現(xiàn)太復(fù)雜,很難畫出流程圖。模塊的數(shù)量直接關(guān)系到繪制程序流程圖的難度。從中,我更深入了解了程序設(shè)計(jì)的整個(gè)過程,這也是我最受益的地方。

      在實(shí)習(xí)過程中,遇到不懂的問題,時(shí)而查閱以前學(xué)過的書籍,也等于我做了復(fù)習(xí)。這也能提高我將理論付諸實(shí)踐的能力。

      此外,實(shí)習(xí)期間,你將我們劃分成小組;這促進(jìn)了我們的相互合作與相互學(xué)習(xí)??傊?,通過這次實(shí)習(xí),我學(xué)到了好多書本以外的知識(shí)!我同樣很感謝老師,您!

      參考文獻(xiàn)

      [1] 張?jiān)佬隆禫isual C++程序設(shè)計(jì)》。

      [2] 張?jiān)佬隆禫isual C++程序設(shè)計(jì)基礎(chǔ)實(shí)驗(yàn)指導(dǎo)書》。[3]沈被娜 劉祖照 《計(jì)算機(jī)軟件技術(shù)基礎(chǔ)》

      第二篇:一場(chǎng)好玩的“貪吃蛇”游戲作文

      一場(chǎng)好玩的“貪吃蛇”游戲作文

      今天下午,我們?cè)诎偎继亻T口進(jìn)行了一個(gè)小比賽—貪吃蛇。

      人員到齊以后,老師按照?qǐng)?bào)數(shù)的順序分好了小組,單數(shù)為一組,雙數(shù)為二祖。老師說完比賽規(guī)則后,比賽開始了。兩名同學(xué)快步走到紙箱前,選好氣球,跑回下一個(gè)同學(xué)那里。接著第二個(gè)、第三個(gè)、第四個(gè)……直到全組都拿到氣球。激烈的比拼后,老師說:“第一名和第二名已知曉,二組獲得了第一,接下來,還有一個(gè)把氣球放回去的游戲?!?/p>

      放氣球游戲開始了,我們排成一條小蛇,把氣球慢慢地放回箱子。開始時(shí)我們放錯(cuò)了,看著二組一個(gè)有一個(gè)的將氣球放進(jìn)箱子里,我們著急地說:“快點(diǎn)!”排頭也著急的快步起來。

      到張博文了,他把球一放,那球好像在幫我們贏一樣,張博文放一下,它就被彈出來,連放了三次,都被彈出來了,最后他把氣球輕輕一放才放好,就在他剛放完,我們已經(jīng)反敗為勝了。

      比賽結(jié)束了,我們勝利了,我明白了一個(gè)道理,團(tuán)結(jié)的力量是無限強(qiáng)大的。

      [一場(chǎng)好玩的“貪吃蛇”游戲作文]相關(guān)文章:

      第三篇:貪吃蛇java課程設(shè)計(jì)

      import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Snake extends JFrame {

      private JPanel contentPane;//窗體內(nèi)容網(wǎng)格

      private JButton btnStart = new JButton(“開始”);//游戲開始按鈕

      private JButton btnPause = new JButton(“暫停”);//游戲暫停按鈕

      private JButton btnExit = new JButton(“退出”);//游戲退出按

      private JPanel pnlTop = new JPanel();//頂部按鈕和分?jǐn)?shù)面板

      private JPanel pnlLeft = new JPanel();//左側(cè)面板

      private JPanel playPanel = new JPanel();//游戲區(qū)面板

      private BorderLayout borderLayout1 = new BorderLayout();//容器布局管理器

      private BorderLayout borderLayout2 = new BorderLayout();

      private GridLayout rbtnLayout = new GridLayout(10, 1, 1, 1);

      private static final int UP = 1,LEFT = 2,DOWN = 3,RIGHT = 4;//蛇運(yùn)動(dòng)方向

      private static final int ROWS = 30;//游戲區(qū)行數(shù)

      private static final int COLS = 50;//游戲區(qū)列數(shù)

      private boolean isPause = false;//游戲暫停標(biāo)志

      private boolean isEnd;//游戲結(jié)束標(biāo)志

      private SnakeBody snake;//貪食蛇

      private int score = 0;//當(dāng)前得分

      SnakeThread thread = new SnakeThread();//游戲主線程

      private GridLayout grid1 = new GridLayout(ROWS,COLS,0,0);//游戲區(qū)布局

      private JButton[][] blocks;//游戲區(qū)的所有方塊

      JPanel jPanel2 = new JPanel();

      JLabel jLabel1 = new JLabel(“得分:”);

      JLabel lblScroe = new JLabel(“0”);

      ButtonGroup buttonGroup1 = new ButtonGroup();

      JRadioButton rbtnLow = new JRadioButton(“初級(jí)”, true);

      JRadioButton rbtnMid = new JRadioButton(“中級(jí)”);

      JRadioButton rbtnHigh = new JRadioButton(“高級(jí)”);

      public Snake(){

      super(“貪食蛇游戲”);

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      contentPane =(JPanel)this.getContentPane();

      contentPane.setLayout(borderLayout2);

      this.setResizable(false);

      this.setSize(new Dimension(512, 414));

      keyAction keyAct = new keyAction();

      this.addKeyListener(keyAct);

      btnStart.addKeyListener(keyAct);

      btnPause.addKeyListener(keyAct);

      btnExit.addKeyListener(keyAct);

      rbtnLow.addKeyListener(keyAct);

      rbtnMid.addKeyListener(keyAct);

      rbtnHigh.addKeyListener(keyAct);

      btnAction btnAct = new btnAction();

      btnStart.addActionListener(btnAct);

      btnPause.addActionListener(btnAct);

      btnExit.addActionListener(btnAct);

      rbtnLow.addActionListener(btnAct);

      rbtnMid.addActionListener(btnAct);

      rbtnHigh.addActionListener(btnAct);

      pnlLeft.setLayout(borderLayout1);

      playPanel.setLayout(grid1);

      playPanel.setBackground(Color.white);

      playPanel.setBorder(BorderFactory.createEtchedBorder());

      jPanel2.setLayout(rbtnLayout);

      buttonGroup1.add(rbtnLow);

      buttonGroup1.add(rbtnMid);

      buttonGroup1.add(rbtnHigh);

      rbtnLow.setSelected(true);

      pnlLeft.add(playPanel);

      pnlLeft.add(jPanel2, BorderLayout.WEST);

      jPanel2.add(“f1”, rbtnLow);

      jPanel2.add(“f2”, rbtnMid);

      jPanel2.add(“f3”, rbtnHigh);

      pnlTop.add(btnStart);

      pnlTop.add(btnPause);

      pnlTop.add(btnExit);

      pnlTop.add(jLabel1);

      pnlTop.add(lblScroe);

      contentPane.add(pnlTop, BorderLayout.NORTH);

      contentPane.add(pnlLeft, BorderLayout.CENTER);

      //創(chuàng)建并初始化游戲區(qū)方塊

      blocks = new JButton[ROWS][COLS];

      for(int i = 0;i < ROWS;i++){

      for(int j = 0;j < COLS;j++){

      blocks[i][j] = new JButton();

      blocks[i][j].setBackground(Color.lightGray);

      blocks[i][j].setVisible(false);

      playPanel.add(blocks[i][j]);

      }

      }

      }

      public static void main(String[] args){

      Snake app = new Snake();

      app.validate();

      app.setVisible(true);

      }

      public void start(){

      snake = new SnakeBody();//創(chuàng)建蛇身

      if(rbtnLow.isSelected())

      snake.setSpeed(300);

      if(rbtnMid.isSelected())

      snake.setSpeed(200);

      if(rbtnHigh.isSelected())

      snake.setSpeed(100);

      score = 0;

      isPause = false;

      isEnd = false;//

      btnPause.setText(“暫?!?;

      //初始化游戲區(qū)

      for(int i = 0;i < ROWS;i++){

      for(int j = 0;j < COLS;j++){

      blocks[i][j].setBackground(Color.lightGray);

      blocks[i][j].setVisible(false);

      }

      }

      //在游戲區(qū)內(nèi)隨機(jī)放置豆

      int x =(int)(Math.random()* ROWS);

      int y =(int)(Math.random()* COLS);

      while(blocks[x][y].isVisible()){

      x =(int)(Math.random()* ROWS);

      y =(int)(Math.random()* COLS);

      }

      blocks[x][y].setBackground(Color.yellow);

      blocks[x][y].setVisible(true);

      try {

      thread.start();

      }

      catch(IllegalThreadStateException illegalThreadStateException){}

      }

      class SnakeBody {

      public int row[];

      public int col[];

      public int len = 3, direction = RIGHT, lastdirection = RIGHT;

      public long speed = 300;

      public SnakeBody(){

      len = 3;

      direction = RIGHT;

      lastdirection = RIGHT;

      row = new int[ROWS];

      col = new int[COLS];

      for(int i = 0;i <= len;i++){

      row[i] = 1;

      col[i] = len1];

      col[i] = col[i-1];

      }

      //根據(jù)蛇身運(yùn)動(dòng)方向,決定蛇頭位置

      switch(direction){

      case UP: {

      if(lastdirection == DOWN)

      row[0] += 1;

      else {

      row[0]-= 1;

      lastdirection = UP;

      }

      break;

      }

      case LEFT: {

      if(lastdirection == RIGHT)

      col[0] += 1;

      else {

      col[0]-= 1;

      lastdirection = LEFT;

      }

      break;

      }

      case DOWN: {

      if(lastdirection == UP)

      row[0]-= 1;

      else {

      row[0] += 1;

      lastdirection = DOWN;

      }

      break;

      }

      case RIGHT: {

      if(lastdirection == LEFT)

      col[0]-= 1;

      else {

      col[0] += 1;

      lastdirection = RIGHT;

      }

      break;

      }

      }

      //當(dāng)蛇頭碰到墻時(shí),蛇頭碰到蛇身時(shí),游戲結(jié)束

      if(row[0] >= ROWS || row[0] < 0 || col[0] >= COLS || col[0] < 0 ||

      blocks[row[0]][col[0]].getBackground().equals(Color.green)){

      isEnd = true;

      JOptionPane.showMessageDialog(null, “游戲結(jié)束!”);

      }

      //吃豆

      if(blocks[row[0]][col[0]].getBackground().equals(Color.yellow)){

      score += 100;

      lblScroe.setText(Integer.toString(score));

      if(score % 2000 == 0 && speed > 100){

      JOptionPane.showMessageDialog(null, “恭喜你過關(guān)了,準(zhǔn)備進(jìn)入下一關(guān)”);

      speed-= 100;

      if(speed == 200)

      rbtnMid.setSelected(true);

      if(speed == 100)

      rbtnHigh.setSelected(true);

      }

      }

      //吃豆后,蛇身加長(zhǎng),并隨機(jī)顯示下一個(gè)豆

      if(blocks[row[0]][col[0]].getBackground().equals(Color.yellow)){

      len++;

      int x, y;

      x =(int)(Math.random()* ROWS);

      y =(int)(Math.random()* COLS);

      while(blocks[x][y].isVisible()){

      x =(int)(Math.random()* ROWS);

      y =(int)(Math.random()* COLS);

      }

      blocks[x][y].setBackground(Color.yellow);

      blocks[x][y].setVisible(true);

      }

      blocks[row[0]][col[0]].setBackground(Color.green);

      blocks[row[0]][col[0]].setVisible(true);//顯示蛇頭

      }

      }

      class SnakeThread extends Thread {

      public void run(){

      while(true){

      try {

      Thread.sleep(snake.speed);//控制移動(dòng)速度

      if(!isEnd &&!isPause){

      snake.move();//移動(dòng)蛇身

      }

      if(isEnd){ //游戲結(jié)束

      btnStart.setEnabled(true);

      }

      }

      catch(Exception ex){}

      }

      }

      }

      class keyAction extends KeyAdapter {

      public void keyPressed(KeyEvent e){

      if(!isEnd &&!isPause){

      //根據(jù)用戶按鍵,設(shè)置蛇運(yùn)動(dòng)方向

      if(e.getKeyCode()== KeyEvent.VK_UP){

      snake.direction = UP;

      }

      if(e.getKeyCode()== KeyEvent.VK_DOWN){

      snake.direction = DOWN;

      }

      if(e.getKeyCode()== KeyEvent.VK_LEFT){

      snake.direction = LEFT;

      }

      if(e.getKeyCode()== KeyEvent.VK_RIGHT){

      snake.direction = RIGHT;

      }

      }

      }

      }

      //按鈕監(jiān)聽響應(yīng)處理類

      private class btnAction implements ActionListener {

      public void actionPerformed(ActionEvent ae){

      Object source = ae.getSource();

      if(source.equals(btnStart)){

      btnStart.setEnabled(false);

      start();

      }

      if(source.equals(btnPause)){

      if(isPause == true){

      btnPause.setText(“暫?!?;

      }

      if(isPause == false){

      btnPause.setText(“繼續(xù)”);

      }

      isPause =!isPause;

      }

      if(source.equals(btnExit)){

      System.exit(0);

      }

      if(source.equals(rbtnLow)){

      snake.setSpeed(300);

      }

      if(source.equals(rbtnMid)){

      snake.setSpeed(200);

      }

      if(source.equals(rbtnHigh)){

      snake.setSpeed(100);

      }

      }

      } }

      第四篇:c語言程序貪吃蛇課程設(shè)計(jì)報(bào)告

      高級(jí)語言程序設(shè)計(jì) 課程設(shè)計(jì)報(bào)告

      Experiment Designing reporter 課程名稱:高級(jí)語言程序設(shè)計(jì)

      英文名稱

      : C Program Experiment Designing 專業(yè):自動(dòng)化 111 學(xué)號(hào): XXX 姓名: XXX 指導(dǎo)教師: XXX

      日期:

      2012 年 6月 17日至 2011 年6 月 20 日 山東工商學(xué)院信電學(xué)院 一:課程設(shè)計(jì)內(nèi)容 程序功能介紹

      貪吃蛇游戲是一個(gè)經(jīng)典小游戲,深受眾多玩家喜愛,其規(guī)則是:一條蛇在封閉圍墻里,圍墻里隨機(jī)出現(xiàn)一個(gè)食物,通過按鍵盤四個(gè)光標(biāo)鍵控制蛇向上下左右四個(gè)方向移動(dòng),蛇頭撞倒食物,則食物被吃掉,蛇身體長(zhǎng)一節(jié),同時(shí)記10分,接著又出現(xiàn)食物,等待蛇來吃,如果蛇在移動(dòng)中撞到墻或身體交叉蛇頭撞倒自己身體游戲結(jié)束。此游戲不僅能鍛煉人的思維敏捷性,而且還可以提高玩家的邏輯判斷能力。設(shè)計(jì)思路

      我們小組稱設(shè)計(jì)本次課題——貪吃蛇的思路為“貪快速上手貪吃蛇三步曲”: 第一步:

      尋找到一個(gè)真正可以運(yùn)行的已用C編好的貪吃蛇。因?yàn)槲覀儺吘箯奈纯吹竭^用C編游戲的程序,讓我們兩手一抹黑的開始編寫是有一定的困難的,如果我們自己找一個(gè)已經(jīng)設(shè)計(jì)好的程序,以此為跳板實(shí)現(xiàn)我們想要達(dá)到的效果,那么肯定是高效的。所以我們組統(tǒng)一決定,去尋找一個(gè)可以運(yùn)行的C編譯的貪吃蛇。第二步:

      運(yùn)行游戲并了解游戲程序。

      我們認(rèn)為,只有你運(yùn)行并了解一個(gè)游戲,才能知道游戲里需要什么樣的改進(jìn)和創(chuàng)新,如果你自己本身就沒玩過這個(gè)游戲,那么你就是再有技術(shù),你也永遠(yuǎn)改進(jìn)和改編不了一個(gè)游戲,因?yàn)槟愀静恢滥阍诟墒裁础?/p>

      同樣重要的是了解游戲程序。因?yàn)橹挥锌炊顺绦颍拍軐?shí)現(xiàn)對(duì)他的改編,才能游刃有余。第三步:

      尋找模塊并分類,而后進(jìn)行改編。

      尋找到你想要改變的游戲內(nèi)容的控制模塊,比如,我想要增加一堵墻,那么就應(yīng)該找到 void DrawK(void){

      setcolor(11);

      setlinestyle(SOLID_LINE,0,THICK_WIDTH);for(i=200;i<=500;i+=10)

      rectangle(i,200,i+10,209);} 然后要找到:改變蛇初始長(zhǎng)度、顏色、初始位置的模塊,改變蘋果出現(xiàn)位置的模塊,讓蛇見墻死的模塊,讓蛇吃蘋果加長(zhǎng)的模塊???.并且進(jìn)行分類,這樣下次再想實(shí)現(xiàn)某個(gè)目標(biāo)時(shí),可以一目了然的進(jìn)行改編。對(duì)于找到的模塊如何進(jìn)行改編呢?怎么才能知道某個(gè)數(shù)值或函數(shù)代表什么呢? 我們有兩個(gè)方法:

      1.)看名字,比如snakecolor(),很明顯他的意思是蛇的顏色。2.)控制變量猜想,比如設(shè)置墻的時(shí)候for(i=200;i<=500;i+=10);

      rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我們可以猜想:它很像是坐標(biāo)上的(x,y)的格式,是不是呢?可可以先讓其他數(shù)值不變,只讓309改變,改變后發(fā)現(xiàn)上面的墻變粗了,由此可見這個(gè)數(shù)字控制的是一堵墻的最下面一行的坐標(biāo)。

      關(guān)于該程序的相關(guān)分析思路答題模板:

      1.貪吃蛇程序流程圖如下:

      二.貪吃蛇程序的改編:

      經(jīng)過小組成員的認(rèn)真研究我們對(duì)其進(jìn)行了如下改編 第一步加墻 void DrawK(void){ /*setbkcolor(MAGENTA);*/

      setcolor(5);//

      可以改變顏色

      setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/ 橫向上的墻:

      for(i=100;i<=600;i+=10)// 本行代表行坐標(biāo)上:100代表墻的初始位置,i<=600代表墻的結(jié)尾。

      {

      rectangle(i,60,i+10,69);//本行代表縱坐標(biāo)上:60代表墻的最上面一行的位置,69代表墻最下面一行的位置。69-60=9,9代表墻塊的厚度 } 縱向上的墻:

      for(i=100;i<=400;i+=10)//本行代表縱坐標(biāo)上:100代表墻的初始位置,i<=400代表墻的結(jié)尾

      {

      rectangle(100,i,109,i+10);//本行代表縱坐標(biāo)上:100代表墻的最左邊面一行的位置,69代表墻最右面一行的位置。69-60=9,9代表墻塊的寬度

      } 我們認(rèn)為本模塊最重要的是for語句控制的坐標(biāo)代表的意思。只要明白了坐標(biāo)的意思,就可以實(shí)現(xiàn)對(duì)游戲的改編。

      第二步就是進(jìn)行對(duì)新加入的墻蛇是否撞上死亡

      讓蛇撞墻死

      if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&&

      snake.y[0]<=215)

      /*其中,對(duì)x,y范圍的控制,實(shí)際是對(duì)蛇撞擊的死亡區(qū)域的限制。*/

      {

      GameOver();/*本次游戲結(jié)束*/

      snake.life=1;/*蛇死*/

      } 相應(yīng)的新添加的墻。

      for(i=200;i<=500;i+=10)/*畫圍墻*/

      {

      rectangle(i,200,i+10,209);/*指定位置*/ 第三步食物的定點(diǎn)出現(xiàn)

      if(food.yes==1)/*需要出現(xiàn)新食物*/ 這里說明一下:rand()產(chǎn)生0-65535的數(shù),在limits.h里有定義%400后產(chǎn)生一個(gè)0-399的數(shù)+60 則為 60 –459,即:%400+60意思是在60~399之間隨機(jī)產(chǎn)生一個(gè)數(shù)。

      {

      food.x=rand()%400+60;

      food.y=rand()%350+60;

      while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/

      food.x++;

      while(food.y%10!=0)

      food.y++;

      food.yes=0;/*畫面上有食物了*/

      } 如果將food.x=(常數(shù)a)那么食物就會(huì)出現(xiàn)在x=a行的隨機(jī)列,對(duì)于food.y=(常數(shù)b)那么食物就出現(xiàn)在y=b列的隨機(jī)行。

      第四步對(duì)食物墻壁的顏色以及對(duì)蛇的運(yùn)動(dòng)速個(gè)性化調(diào)節(jié)

      setcolor(4);// 對(duì)顏色的調(diào)整 int gamespeed=50000;/*游戲速度自己調(diào)整*/

      通過改變變量的值,就可以個(gè)性化選擇自己喜歡的顏色,這將是一場(chǎng)別開生面的游戲界面。* 紅色代表解析淺藍(lán)代表提示 三.課程設(shè)計(jì)總結(jié) 有言曰:“實(shí)踐出真知”,在這幾天的課程設(shè)計(jì)實(shí)踐中,我們組三人真正的體會(huì)到了這句話的真諦。

      在經(jīng)歷了一學(xué)期的C語言學(xué)習(xí)后,我們從以往的“紙上談兵”直接過渡到“實(shí)際作戰(zhàn)”。我們實(shí)現(xiàn)了讓靜態(tài)的程序變成動(dòng)態(tài)的游戲效果,雖然我們只是改編了一下別人做好的程序,但我們同樣由此獲益匪淺,感觸頗深,當(dāng)然也發(fā)現(xiàn)了許多自己的不足。

      首先,在我們剛剛進(jìn)行第一步“尋找程序”的時(shí)候,就被擱淺了,因?yàn)槲覀儼l(fā)現(xiàn),在網(wǎng)上能找到一個(gè)真正符合我們使用標(biāo)準(zhǔn)的程序很難,就是找到了幾個(gè)也沒有能運(yùn)行它們的程序。我們花費(fèi)了前兩天的時(shí)間來尋找能夠使用的程序和軟件,但最后還是一無所獲,正當(dāng)我們一籌莫展的時(shí)候,我們的導(dǎo)師——楊老師給我們帶來了曙光,使得我們?cè)诤诎抵姓业搅讼M墓饷?,楊老師給我們傳來了一個(gè)上屆師哥做好的程序,并且把它的運(yùn)行軟件也給了我們,這對(duì)我們來說無疑是雪中送炭,得到這個(gè)程序后,我們?nèi)齻€(gè)人看到了C語言運(yùn)行一個(gè)游戲的流程和方法,我們腦中也大概有了一個(gè)思路。我們?nèi)齻€(gè)人以此程序?yàn)樘?,直接開始對(duì)程序模塊進(jìn)行挑選,因?yàn)槲覀円呀?jīng)浪費(fèi)了兩天,所以我們決定進(jìn)行分工作業(yè),分別去尋找:筑墻模塊,加蘋果模塊,撞墻死模塊。最后我們用了一下午時(shí)間完成了三大步中的前兩大步和第三步的第一部分,剩下的就是最重要而充滿挑戰(zhàn)的改編了,從以上的操作中,讓我們明白了找對(duì)一個(gè)平臺(tái)的重要性,這個(gè)平臺(tái)就是老師給我們的程序,就是我們的前進(jìn)方向。沒有了方向了的征程,一開始就是個(gè)錯(cuò)誤。在我們尋找程序模塊的時(shí)候,我們對(duì)于程序中的很多東西都是模模糊糊的概念,比如struck是什么,比如for語句的使用,以及for語句的循環(huán)體是什么,當(dāng)然我們也發(fā)現(xiàn)了定義字符在長(zhǎng)的程序中的方便與重要性。還有就是我們發(fā)現(xiàn)程序在編寫時(shí)的規(guī)范性很重要,比如同級(jí)別花括號(hào)的位置的對(duì)應(yīng),對(duì)應(yīng)好了,模塊就好找,對(duì)應(yīng)不好就很亂。還有定義函數(shù)及變量的時(shí)候,函數(shù)名字和變量名最好是見名知意,比如我們所看的程序中,gamespeed,snakecolour,food.....在最后的攻堅(jiān)階段,為了實(shí)現(xiàn)對(duì)程序的改編,我們使用控制變量猜想法是正確的選擇,比如設(shè)置墻的時(shí)候for(i=200;i<=500;i+=10);

      rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我們猜想:它很像是坐標(biāo)上的(x,y)的格式,是不是呢?我們先讓其他數(shù)值不變,只讓309改變,改變后發(fā)現(xiàn)上面的墻變粗了,由此我們知道這個(gè)數(shù)字控制的是一堵墻的最下面一行的坐標(biāo)。我們用這個(gè)方法知道了其他很多數(shù)值的用途。我們用這種方法先是知道了如何設(shè)置一堵墻,在我們欣喜設(shè)置一堵墻以后才發(fā)現(xiàn):蛇撞了墻后不死。在我們進(jìn)行了全局來看以后才知道,原來設(shè)計(jì)一堵墻,都要再設(shè)計(jì)一個(gè)if語句來使得蛇在這個(gè)范圍內(nèi)會(huì)死亡。并且我們發(fā)現(xiàn)在設(shè)計(jì)這個(gè)if語句的時(shí)候,不僅要計(jì)算好墻的坐標(biāo),而且還要用好邏輯語言(&&,||!)同時(shí)語句的運(yùn)算順序也很重要。剛一開始我們忽略的&&和關(guān)系運(yùn)算符級(jí)別的高低,使得我們?cè)O(shè)計(jì)的墻,總是撞不死蛇,為此我們很是惱火,著急的組員還在這里發(fā)生了點(diǎn)小摩擦,由此可見C語言的嚴(yán)謹(jǐn)性!

      最后我們又通過在網(wǎng)上查找信息,知道了隨機(jī)數(shù)發(fā)生器randomize()的用法:rand()=x%+d 意思是說在d~(x-1)之間隨機(jī)產(chǎn)生一個(gè)數(shù)字。我們很自然的聯(lián)想到,如果把food.x等于常數(shù)a;把food.y等于一個(gè);x%+d的隨機(jī)數(shù),那不就能固定只在某一行出現(xiàn)蘋果了嗎?所以我們覺得,充分利用手邊的資源也是很重要的,畢竟C語言很高深,課本上的東西總是有限的,要想知道更多的東西還需多練習(xí),多查閱資料。總之:革命尚未成功,通知還需努力?。∷膫€(gè)人感受: 湯X:

      就我個(gè)人而言,這次課程設(shè)計(jì),我覺得我最大的收獲就是:我明白了,我們其實(shí)真的沒那么厲害,我們真的還有很多東西不會(huì),我們真的連課本上的基本東西都沒掌握,課本上的東西,真的也只是C語言這個(gè)大海中的一滴水而已。而在我本人還沒有掌握好課本的知識(shí)點(diǎn)的情況下,做起這個(gè)程序自然很費(fèi)事,一個(gè)簡(jiǎn)單的課本P293講到的struct結(jié)構(gòu)體,我一開始竟然忘記它是什么意思,不知道它是什么,就更不用談怎么用它了。還有邏輯語言的使用。我想,現(xiàn)在肯定有很多同學(xué)還不知道邏輯運(yùn)算的優(yōu)先次序吧?這個(gè)問題我本人在使用邏輯語言的時(shí)候也不太會(huì),還查看了書。像這些小的知識(shí)點(diǎn),我個(gè)人認(rèn)為如果掌握不好的話,是不可能讓整個(gè)大程序運(yùn)行起來的。還有比如我在遇到程序顯示“else多余”的警告時(shí)候不不知所措,問了老師才知道是if()后面加了“;”而且if沒有用“{}”來固定范圍,這個(gè)錯(cuò)誤原因是分號(hào)使得if語句結(jié)束了,孤立的else當(dāng)然是多余的了。一個(gè)小小的分號(hào)使得程序無法運(yùn)行,由此可見在今后的編程中,一定要注意謹(jǐn)慎,仔細(xì)。同時(shí)要注意記住平時(shí)編程的時(shí)候,出現(xiàn)的錯(cuò)誤指示是什么意思。比如這次的“else多余”就是因?yàn)閕f后多了分號(hào)。還有在編程時(shí)候,書寫一定要規(guī)范,特別是if語句的花括號(hào)的位置要對(duì)應(yīng)起來,因?yàn)槲恢脹Q定范圍。注意定義變量和函數(shù)要使用規(guī)范的英文單詞,這樣才能見名知意,為以后修改找變量節(jié)省時(shí)間。對(duì)于這次課題中,“設(shè)計(jì)一個(gè)墻,就要對(duì)應(yīng)一個(gè)函數(shù)舍得蛇撞墻死”,讓我明白,C語言程序中各部分的聯(lián)系性,牽一發(fā)而動(dòng)全身,所以在編程時(shí)一定要注意全局的把握。我們最后還要說說在編程中,好好利用網(wǎng)絡(luò)資源,因?yàn)檎n本里的東西總是有限的,而C語言又那么高深,像隨機(jī)數(shù)發(fā)生器,還有顏色的定都是我第一次接觸,這些東西的用處可是頗大,以后一定好好學(xué)習(xí)。多看,多練,多總結(jié)。最后還要感謝指導(dǎo)老師,楊老師對(duì)我學(xué)習(xí)的幫助和指導(dǎo)。徐XXX: 剛開始拿到題目時(shí)候什么也不會(huì)一片茫然,從網(wǎng)上找了一個(gè)程序一看,太嚇人了,這么長(zhǎng)怎么看啊,而且還是錯(cuò)誤的。沒辦法只能硬著頭皮去改了,但是在改的過程中才發(fā)現(xiàn)其實(shí)c語言沒有想象的那么難而且還很有意思,只是自己平時(shí)沒有好好學(xué)所以在改的時(shí)候非常吃力,有很多簡(jiǎn)單的知識(shí)都不知道,沒有記住。沒辦法只能借助與課本了。但是幾天下來發(fā)現(xiàn)自己已經(jīng)不再像以前那樣是個(gè)菜鳥了,雖然很多知識(shí)還沒掌握。同時(shí)在編改程序的時(shí)候切記不能煩躁要靜心慢慢來,好幾次自己都因心燥出現(xiàn)了很多不該出現(xiàn)的錯(cuò)誤浪費(fèi)了很多時(shí)間。

      對(duì)鍵盤的熟悉在編程時(shí)也是很重要的,自己在寫的時(shí)候往往就是跟一指禪差不多眼睛盯著鍵盤打,打錯(cuò)了也不知道最后導(dǎo)致整個(gè)程序都是錯(cuò)誤的,就因?yàn)橐粋€(gè)打錯(cuò)了一個(gè)字母。

      總的來說這次課程設(shè)計(jì)收獲很多,也知道了自己的不足,在以后的學(xué)習(xí)中要多實(shí)踐,實(shí)踐很能提高自己的能力。劉XX:

      4天的C語言課程設(shè)計(jì)上機(jī)學(xué)習(xí)讓我感受頗多,每天都發(fā)現(xiàn)新的問題,又不得不絞盡腦汁解決問題,心情就像正弦函數(shù),隨著問題的出現(xiàn)和解決一起一伏。剛開始接觸貪吃蛇的C語言成尋時(shí),看著C-free上面出現(xiàn)的有十幾個(gè)錯(cuò)誤的程序,一片茫然不知所措。只能繼續(xù)在網(wǎng)上搜索錯(cuò)誤較少的程序,并結(jié)合書上的基礎(chǔ)知識(shí)查看錯(cuò)誤所在,最終發(fā)現(xiàn)是不能在C-free中運(yùn)行,只能在mytc5.6上運(yùn)行。

      作為小組中唯一的女生,明顯感覺有壓力,打字速度不如另外兩個(gè)男生,對(duì)游戲和程序的敏感也不如他們強(qiáng),有種小小的挫敗感。旁邊小組的同學(xué)也給我很大的壓力。他們自己編寫程序,我很佩服他們,越是這樣想。心里越著急,越不能解決問題,每當(dāng)感覺有壓力的時(shí)候,就提醒自己心靜,認(rèn)真的看程序。在學(xué)習(xí)過程中,深深的發(fā)現(xiàn)了自己的不足之處,對(duì)于C語言,只學(xué)了一點(diǎn)點(diǎn)皮毛東西,想要學(xué)好C語言,編好程序,還要付出很多的努力,還要用更多的時(shí)間來學(xué)習(xí)C語言這門深?yuàn)W的學(xué)科?,F(xiàn)在只能借用別人已經(jīng)寫好的程序,在別人的基礎(chǔ)上,一點(diǎn)點(diǎn)進(jìn)步和學(xué)習(xí),比如程序中筑墻,需要仿照已有的程序,結(jié)合邏輯運(yùn)算,關(guān)系運(yùn)算和數(shù)學(xué)知識(shí)才能讓蛇撞墻死。蘋果位置的出現(xiàn)也同樣需要進(jìn)一步的搜索,通過更改食物的橫縱坐標(biāo)以及出現(xiàn)的概率來確定食物的位置。編寫程序時(shí),也發(fā)現(xiàn)書上的東西對(duì)于程序的某些部分來說,沒有什么作用,顯得太淺顯,想要實(shí)現(xiàn)老師給出的一些要求,還需要實(shí)踐,通過上機(jī)學(xué)習(xí),自己摸索才能成功。一次次修改,一次次失敗,就像貪吃蛇想方設(shè)法吃蘋果會(huì)Game over,我們只有認(rèn)真學(xué)好基礎(chǔ)理論,并結(jié)合實(shí)踐經(jīng)驗(yàn)才會(huì)取得進(jìn)步。

      在這次學(xué)習(xí)過程中,我很感謝我的組員,雖然有時(shí)我們的意見出現(xiàn)分歧,但是通過大家的共同努力,我們收獲了很多,一起討論,一起研究怎樣解決問題,對(duì)老師提出的要求個(gè)個(gè)擊破,我們擰成一股繩共同應(yīng)對(duì)問題,讓我感受了團(tuán)隊(duì)的力量希望在以后的學(xué)習(xí)過程中,我們依然能夠互相幫助,共同進(jìn)步。

      五 課程設(shè)計(jì)修改后的程序.加墻

      for(i=200;i<=500;i+=10)/*畫圍墻*/

      {

      rectangle(i,200,i+10,209);/*指定位置1*/

      } for(i=120;i<=200;i+=10)/*畫圍墻*/

      {

      rectangle(100,i,109,i+10);/*指定位置2*/

      } 2.指定位置加蘋果

      if(food.yes==1)/*需要出現(xiàn)新食物*/

      {

      food.x=rand()60;

      food.y=rand()%200+60;

      while(food.x%10!=0)

      food.x++;

      while(food.y%10!=0)

      food.y++;

      food.yes=0;3.指定地方撞墻死

      if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&&

      snake.y[0]<=215)

      {

      GameOver();/*本次游戲結(jié)束*/

      snake.life=1;/*蛇死*/

      } if(snake.x[0]>90&&snake.x[0]<110&&snake.y[0]>=110&&snake.y[0]<=215)

      {

      GameOver();/*本次游戲結(jié)束*/

      snake.life=1;/*蛇死*/

      }

      }

      第五篇:貪吃蛇C語言課程設(shè)計(jì)報(bào)告

      貪吃蛇游戲程序設(shè)計(jì)報(bào)告

      貪吃蛇游戲設(shè)計(jì)

      姓名: 張力

      學(xué)號(hào): 1002032

      3完成日期: 月 日1

      貪吃蛇游戲程序設(shè)計(jì)報(bào)告

      一、設(shè)計(jì)目的

      貪吃蛇游戲程序功能的實(shí)現(xiàn)主要是建立在二維數(shù)組和圖形界面的應(yīng)用上,通過編寫游戲程序能夠熟悉掌握相關(guān)數(shù)組和圖形函數(shù)的運(yùn)用,提高編程水平,增加編程的興趣

      二、總體設(shè)計(jì)

      主函數(shù)

      圖形驅(qū)動(dòng)Init 畫界面DrawK 游戲具體過程GamePlay 圖形結(jié)束Close

      游戲結(jié)束GameOver 輸出成績(jī)PrScore

      三、詳細(xì)設(shè)計(jì)(項(xiàng)目成員及分工、模塊功能說明(如函數(shù)功能、入口及出口參數(shù)說明,函數(shù)調(diào)用關(guān)系描述等)

      ①主函數(shù)main():

      定義使用的常數(shù),全局變量及函數(shù)原型說明,并調(diào)用Init()函數(shù)初始化圖形系統(tǒng);然后調(diào)用DrawK()函數(shù)畫界面,調(diào)用GamePlay()函數(shù)實(shí)現(xiàn)游戲的具體過程,游戲結(jié)束后調(diào)用Close()函數(shù)關(guān)閉圖形系統(tǒng)結(jié)束程序。

      ②畫界面函數(shù)DrawK():

      主界面是一個(gè)密封的圍墻,用兩個(gè)循環(huán)語句分別在水平方向和垂直方向輸出連續(xù)的寬度和高度均為10個(gè)單位的矩形小方塊,設(shè)置成淡青色,背景顏色為黑色。

      ③游戲具體過程函數(shù)GamePlay():

      算法過程:

      a.設(shè)置初始值。為防止食物出現(xiàn)在一個(gè)位置上,要設(shè)置隨機(jī)數(shù)發(fā)生器,真正產(chǎn)生隨機(jī)數(shù)。初始時(shí),蛇只有蛇頭,設(shè)定一個(gè)開始方向;

      b.循環(huán)執(zhí)行,直到按Esc鍵退出; c.沒有按鍵的情況下,循環(huán)執(zhí)行。

      如果沒有食物,隨機(jī)出現(xiàn)食物;食物的隨機(jī)出現(xiàn)要確保它的位置在10的倍數(shù)位置上,因?yàn)樯叩淖鴺?biāo)都是以10為模的;如果有食物,則顯示食物,蛇

      貪吃蛇游戲程序設(shè)計(jì)報(bào)告

      移動(dòng)身體,根據(jù)蛇的方向改變坐標(biāo)值,并判斷蛇是否撞到了墻或自己吃到了自己,如果出現(xiàn)這兩種情況之一,則蛇死;調(diào)用游戲結(jié)束函數(shù)GamePlay(),結(jié)束本次游戲;

      判斷蛇吃到食物的方法是蛇頭的坐標(biāo)和食物的坐標(biāo)都相等;如果蛇吃到了食物,蛇身體長(zhǎng)一節(jié),數(shù)組元素增加一個(gè),身體節(jié)數(shù)、分?jǐn)?shù)都進(jìn)行相應(yīng)的改變。

      在新位置畫出蛇。采用的方法是每次移動(dòng)的時(shí)候從最后一節(jié)開始到倒數(shù)第二節(jié),將前一節(jié)的坐標(biāo)賦值給后一節(jié)的坐標(biāo),移動(dòng)后只要把最后一節(jié)用背景色去除即可。

      D.如果有按鍵,則識(shí)別按鍵值。如果按鍵為Esc鍵則結(jié)束游戲,程序運(yùn)行結(jié)束;如果所按鍵為方向鍵,則根據(jù)該鍵改變蛇方向的變量direction的值,相反方向鍵無效。

      ④游戲結(jié)束函數(shù)GameOver():

      游戲結(jié)束,清除屏幕,調(diào)用輸出分?jǐn)?shù)函數(shù)PrScore(),并顯示游戲結(jié)束。

      ⑤輸出分?jǐn)?shù)函數(shù)PrScore():

      在指定位置利用sprintf()將整數(shù)轉(zhuǎn)換為字符串,用outtextxy()輸出,、bar()函數(shù)的應(yīng)用是為了覆蓋原來的值。

      ⑥圖形結(jié)束函數(shù)Close():

      在顯示游戲結(jié)束信息的畫面時(shí),按任意鍵關(guān)閉圖形系統(tǒng),程序結(jié)束。

      四、調(diào)試與測(cè)試:調(diào)試方法,測(cè)試結(jié)果的分析與討論,測(cè)試過程中遇到的主要問題和采取的解決措施等;

      將源文件在TC3.0環(huán)境下調(diào)試運(yùn)行,前期發(fā)現(xiàn)錯(cuò)誤為游戲界面靜止。

      五、源程序清單及執(zhí)行結(jié)果:

      #include #include #include #include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000

      貪吃蛇游戲程序設(shè)計(jì)報(bào)告

      #define UP 0x4800 #define Esc 0x011b #define N 200 /*定義全局變量*/ int i,key;int score=0;/*得分*/ int gamespeed=50000;/*游戲速度可以自己調(diào)整*/ struct Food { int x;/*定義食物的橫坐標(biāo)*/ int y;/*定義食物的縱坐標(biāo)*/ int yes;/*判斷是否要出現(xiàn)食物的變量*/ }food;/*食物的結(jié)構(gòu)體*/ struct snake { int x[N];int y[N];int node;/*蛇的節(jié)數(shù)*/ int direction;/*蛇的移動(dòng)方向*/ int life;/*蛇的生命,0活著,1死亡*/ }snake;

      void Init(void);/*圖形驅(qū)動(dòng)*/ void Close(void);/*圖形結(jié)束*/ void DrawK(void);/*開始畫面*/ void GameOver(void);/*結(jié)束游戲*/ void GamePlay(void);/*玩游戲的具體過程*/ void PrScore(void);/*輸出成績(jī)*/

      /*圖形驅(qū)動(dòng)*/ void Init(void){ int gdriver=DETECT,gmode;

      initgraph(&gdriver,&gmode,“D:TC30LIB”);}

      /*開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻*/ void DrawK(void){ setbkcolor(LIGHTGREEN);setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/ for(i=50;i<=600;i+=10)/*畫圍墻*/ {

      貪吃蛇游戲程序設(shè)計(jì)報(bào)告

      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);/*右邊*/ } }

      /*玩游戲的具體過程*/ void GamePlay(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())/*在沒有按鍵的情況下,蛇自己移動(dòng)身體*/

      {

      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++;

      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è)節(jié)一個(gè)節(jié)地往前移*/

      {

      snake.x[i]=snake.x[i-1];

      貪吃蛇游戲程序設(shè)計(jì)報(bào)告

      snake.y[i]=snake.y[i-1];

      }

      /*1,2,3,4表示右左上下四個(gè)方向,通過判斷這個(gè)來移動(dòng)蛇頭*/

      switch(snake.direction)

      {

      case 1:snake.x[0]+=10;break;

      case 2:snake.x[0]-=10;break;

      case 3:snake.y[0]-=10;break;

      case 4:snake.y[0]+=10;break;

      }

      /*從蛇的第四節(jié)開始判斷蛇有沒有自己把自己吃掉*/

      for(i=3;i

      {

      if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

      {

      GameOver();/*顯示游戲結(jié)束*/

      snake.life=1;/*蛇死了T T!*/

      break;

      }

      }

      If(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)/*判斷蛇是否撞到墻*/

      {

      GameOver();/*游戲結(jié)束*/

      snake.life=1;/*蛇死了T T!*/

      }

      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;/*畫面上需要出現(xiàn)新的食物*/

      score+=10;/*加十分!*/

      PrScore();/*輸出新得分*/

      }

      setcolor(4);/*畫出蛇*/

      for(i=0;i

      貪吃蛇游戲程序設(shè)計(jì)報(bào)告

      rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);

      delay(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);}/*endwhile(!kbhit)*/ if(snake.life==1)/*如果蛇死了就跳出循環(huán)*/

      break;key=bioskey(0);/*接收按鍵*/ if(key==Esc)/*按Esc鍵退出*/

      break;else if(key==UP&&snake.direction!=4)/*判斷是否往相反方向移動(dòng)*/

      snake.direction=3;else if(key==RIGHT&&snake.direction!=2)

      snake.direction=1;else if(key==LEFT&&snake.direction!=1)

      snake.direction=2;else if(key==DOWN&&snake.direction!=3)

      snake.direction=4;}/*endwhile(1)*/

      /*游戲結(jié)束*/ void GameOver(void){ cleardevice();/*清除屏幕*/ PrScore();/*輸出得分*/ setcolor(RED);settextstyle(0, 0,4);outtextxy(200,200,“GAME OVER”);/*顯示游戲結(jié)束*/ getch();}

      void PrScore(void)/*輸出成績(jī)*/ { char str[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,“score:%d”,score);outtextxy(55,20,str);}

      貪吃蛇游戲程序設(shè)計(jì)報(bào)告

      void Close(void)/*圖形結(jié)束*/ { getch();closegraph();}

      void main(void)/*主函數(shù)*/ { Init();DrawK();GamePlay();Close();} 8

      下載貪吃蛇游戲 實(shí)習(xí)報(bào)告word格式文檔
      下載貪吃蛇游戲 實(shí)習(xí)報(bào)告.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        貪吃蛇課程設(shè)計(jì)總結(jié)報(bào)告書

        貪吃蛇課程設(shè)計(jì)總結(jié)報(bào)告書110200第7組組員:李軼萌 劉浩 趙鵬 一. 需求分析 (1)功能與數(shù)據(jù)需求:題目要求的功能(基本功能)與 擴(kuò)展功能 基本功能:貪吃蛇的蛇的移動(dòng)(上下左右)隨機(jī)出現(xiàn)......

        張瑞敏:創(chuàng)新“貪吃蛇”

        張瑞敏:創(chuàng)新"貪吃蛇"2011-09-06 08:57 來源:南方人物周刊 評(píng)論(0)T|T做企業(yè)像玩“貪吃蛇”,企業(yè)越大經(jīng)營越難。張瑞敏并不迷信自己過往的成功經(jīng)驗(yàn),而一直試圖用新的管理理念來找......

        C#開發(fā)機(jī)戰(zhàn)游戲?qū)嵙?xí)報(bào)告

        實(shí)習(xí)報(bào)告 5月28至6月20日,我們網(wǎng)絡(luò)工程專業(yè)分三個(gè)地點(diǎn)進(jìn)行生產(chǎn)實(shí)習(xí),包括主要講c#方向的足下,講java方向的NTT data還有C++和Andorid方向的達(dá)內(nèi)。我綜合分析自身三年的學(xué)習(xí),選擇......

        關(guān)于暑假編寫貪吃蛇的感想(含五篇)

        關(guān)于暑假編寫貪吃蛇的感想 今年暑假,我和 一起用c++語言編寫了一個(gè)小游戲——貪吃蛇,在編寫的過程中不僅體會(huì)到了編寫代碼的艱辛,也體會(huì)到了合作的樂趣和編寫完成后的快樂。在......

        游戲?qū)嵙?xí)專題總結(jié)

        游戲?qū)嵙?xí)專題總結(jié) ——談?wù)勎业牡谝淮斡螒?黃露37號(hào)10學(xué)前502班兩個(gè)星期的游戲?qū)嵙?xí)轉(zhuǎn)眼間就結(jié)束了,腦海里卻還浮現(xiàn)著剛?cè)胗變簣@的情景??偟膩碚f,在幼兒園的這兩周實(shí)習(xí)中,讓我......

        20114340123游戲美工生產(chǎn)實(shí)習(xí)報(bào)告(5篇)

        南華大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 課程設(shè)計(jì)項(xiàng)目開發(fā)文檔 ( 2013 ~2014學(xué)年度 第2學(xué)期 ) 課程名稱 生產(chǎn)實(shí)習(xí)報(bào)告 姓名學(xué)號(hào) 專業(yè) 數(shù)字媒體技術(shù) 班級(jí) 本11數(shù)媒01班 地點(diǎn) 長(zhǎng)沙飛思......

        游戲評(píng)測(cè)報(bào)告模版

        游戲評(píng)測(cè)模板正文 游戲評(píng)測(cè)模板正文 評(píng)測(cè)人: 評(píng)測(cè)日期: 1. 游戲基本信息 游戲名稱: 游戲風(fēng)格: 游戲容量: 游戲制作公司: 游戲背景: 游戲類型: 美術(shù)風(fēng)格: 游戲版本信息: 游戲網(wǎng)站:......

        游戲體驗(yàn)報(bào)告

        手游體驗(yàn)報(bào)告之《崩壞學(xué)園2》 編者:何健鋒 基本信息 游戲名稱:崩壞學(xué)園2(簡(jiǎn)稱:崩壞2) 游戲類型:橫版動(dòng)作ACG手游 游戲標(biāo)簽:橫版、射擊、Q萌、沒節(jié)操 游戲平臺(tái):安卓 游戲大小:179.31MB......